Pending changes in the mainline
===============================


Version 1.5.6 (2019-03-01)
==========================

Orthanc Explorer
----------------

* If performing a Query/Retrieve operation, the default value for the
  tags is set to an empty string instead of '*', which allows to match
  even if the tag is not present. This allows malformed DICOM files to
  be matched, even though they lack required tags such as "PatientSex"

Maintenance
-----------

* Enlarge the support of JSON-to-XML conversion in the REST API
* Fix missing DB transactions in some write operations
* Fix performance issue in DICOM protocol by disabling Nagle's algorithm


Version 1.5.5 (2019-02-25)
==========================

General
-------

* Support of the following multi-byte specific character sets:
  - Japanese Kanji (ISO 2022 IR 87)
  - Korean (ISO 2022 IR 149)
  - Simplified Chinese (ISO 2022 IR 58)
* Basic support for character sets with code extensions (ISO 2022 escape sequences)

REST API
--------

* API version has been upgraded to 2
* "DicomMoveScu" jobs provide the associated C-FIND answer in their "Query" public field

Plugins
-------

* Separation of ideographic and phonetic characters in DICOMweb JSON and XML

Maintenance
-----------

* Accept SOP classes: BreastProjectionXRayImageStorageForProcessing/Presentation
* More tolerance wrt. missing DICOM tags that must be returned by Orthanc C-FIND SCP
* Orthanc now interprets the "DCMDICTPATH" environment variable the same way as DCMTK
* New CMake option: "-DMSVC_MULTIPLE_PROCESSES=ON" for parallel build with Visual Studio
* Fix issue #126 (Orthanc and DCMDICTPATH)
* Fix issue #131 (C-MOVE failure due to duplicate StudyInstanceUID in the database)
* Fix issue #134 (/patient/modify gives 500, should really be 400)
* Upgraded dependencies for static builds (notably on Windows):
  - boost 1.69.0
  - curl 1.64.0
  - dcmtk 3.6.4
  - e2fsprogs 1.44.5 (libuuid)
  - googletest 1.8.1
  - libjpeg 9c
  - libpng 1.6.36
  - openssl 1.0.2p
  - pugixml 1.9
  - sqlite amalgamation 3.27.1


Version 1.5.4 (2019-02-08)
==========================

General
-------

* New configuration options:
  - "MetricsEnabled" to enable the tracking of the metrics of Orthanc
  - "HttpThreadsCount" to set the number of threads in the embedded HTTP server
  - "TemporaryDirectory" to set the folder containing the temporary files

REST API
--------

* API version has been upgraded to 1.4
* URI "/instances/.../file" can return DICOMweb JSON or XML, depending
  on the content of the "Accept" HTTP header
* New URI "/tools/metrics" to dynamically enable/disable the collection of metrics
* New URI "/tools/metrics-prometheus" to retrieve metrics using Prometheus text format
* URI "/peers?expand" provides more information about the peers

Plugins
-------

* New functions in the SDK:
  - OrthancPluginSetMetricsValue() to set the value of a metrics
  - OrthancPluginRegisterRefreshMetricsCallback() to ask to refresh metrics
  - OrthancPluginEncodeDicomWebJson() to convert DICOM to "application/dicom+json"
  - OrthancPluginEncodeDicomWebXml() to convert DICOM to "application/dicom+xml"
* New extensions in the database SDK: LookupResourceAndParent and GetAllMetadata

Maintenance
-----------

* Fix regression if calling "/tools/find" with the tag "ModalitiesInStudy"
* Fix build with unpatched versions of Civetweb (missing "mg_disable_keep_alive()")
* Fix issue #130 (Orthanc failed to start when /tmp partition was full)


Version 1.5.3 (2019-01-25)
==========================

General
-------

* New configuration option: "SaveJobs" to specify whether jobs are stored in the database

Maintenance
-----------

* Don't return tags whose group is below 0x0008 in C-FIND SCP answers
* Fix compatibility with DICOMweb plugin (allow multipart answers over HTTP Keep-Alive)
* Fix issue #73 (/modalities/{modalityId}/store raises 500 errors instead of 404)
* Fix issue #90 (C-Find shall match missing tags to null/empty string)
* Fix issue #119 (/patients/.../archive returns a 500 when JobsHistorySize is 0)
* Fix issue #128 (Asynchronous C-MOVE: invalid number of remaining sub-operations)


Version 1.5.2 (2019-01-18)
==========================

General
-------

* CivetWeb is now the default embedded HTTP server (instead of Mongoose)
* New configuration option: "TcpNoDelay" to disable Nagle's algorithm in HTTP server

REST API
--------

* API version has been upgraded to 1.3
* More consistent handling of the "Last" field returned by the "/changes" URI

Plugins
-------

* New primitives to speed up databases (custom index plugins)

Maintenance
-----------

* Ignore tags whose group is below 0x0008 in C-FIND SCP requests
* Compatibility with DCMTK 3.6.4
* Fix issue #21 (DICOM files missing after uploading with Firefox)
* Fix issue #32 (HTTP keep-alive is now enabled by default)
* Fix issue #58 (Patient recycling order should be defined by their received last instance)
* Fix issue #118 (Wording in Configuration.json regarding SynchronousCMove)
* Fix issue #124 (GET /studies/ID/media fails for certain dicom file)
* Fix issue #125 (Mongoose: /instances/{id} returns 500 on invalid HTTP Method)
* Fixed Orthanc Explorer on IE and Firefox: Explorer always show "too many results"
  and it's therefore impossible to browse the content
* Upgraded dependencies for static and Windows builds:
  - civetweb 1.11


Version 1.5.1 (2018-12-20)
==========================

General
-------

* Optimization: On C-FIND, avoid accessing the storage area whenever possible
* New configuration option:
  - "StorageAccessOnFind" to rule the access to the storage area during C-FIND

Maintenance
-----------

* Removal of the "AllowFindSopClassesInStudy" old configuration option
* "/tools/create-dicom" is more tolerant wrt. invalid specific character set


Version 1.5.0 (2018-12-10)
==========================

General
-------

* Possibility to restrict the allowed DICOM commands for each modality
* The Orthanc configuration file can use environment variables
* New configuration options:
  - "DicomModalitiesInDatabase" to store the definitions of modalities in the database
  - "OrthancPeersInDatabase" to store the definitions of Orthanc peers in the database

Orthanc Explorer
----------------

* The first screen of Orthanc Explorer is now a form to do studies lookups
* Support of large databases, by limiting the results to 100 patients or studies

REST API
--------

* API version has been upgraded to 1.2
* Asynchronous generation of ZIP archives and DICOM medias
* New URI: "/studies/.../merge" to merge a study
* New URI: "/studies/.../split" to split a study
* POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
* GET "/modalities/?expand" now returns a JSON object instead of a JSON array
* New "Details" field in HTTP answers on error (cf. "HttpDescribeErrors" option)
* New options to URI "/queries/.../answers": "?expand" and "?simplify"
* New URIs to launch new C-FIND to explore the hierarchy of a C-FIND answer:
  - "/queries/.../answers/.../query-instances" to C-FIND child instances
  - "/queries/.../answers/.../query-series" to C-FIND child series
  - "/queries/.../answers/.../query-studies" to C-FIND child studies
* New "DicomDiskSize" and "DicomUncompressedSize" fields in statistics about resources

Plugins
-------

* New functions in the SDK:
  - "OrthancPluginSetHttpErrorDetails()"
  - "OrthancPluginAutodetectMimeType()"

Maintenance
-----------

* "SynchronousCMove" is now "true" by default
* New modality manufacturer: "GE" for GE Healthcare EA and AW
* Executing a query/retrieve from the REST API now creates a job
* Fix: Closing DICOM associations after running query/retrieve from REST API
* Fix: Allow creation of MONOCHROME1 grayscale images in tools/create-dicom
* Remove invalid characters from badly-encoded UTF-8 strings (impacts PostgreSQL)
* Orthanc starts even if jobs from a previous execution cannot be unserialized
* New CMake option "ENABLE_DCMTK_LOG" to disable logging internal to DCMTK
* Fix issue 114 (Boost 1.68 doesn't support SHA-1 anymore)
* Support of "JobsHistorySize" set to zero
* Upgraded dependencies for static and Windows builds:
  - boost 1.68.0
  - lua 5.3.5


Version 1.4.2 (2018-09-20)
==========================

General
-------

* "OrthancPeers" configuration option now allows to specify HTTP headers
* New main DICOM tag: "ImageOrientationPatient" at the instance level
* New configuration options:
  - "HttpVerbose" to debug outgoing HTTP connections
  - "OverwriteInstances" to choose how duplicate SOPInstanceUID are handled

Orthanc Explorer
----------------

* Query/retrieve: Added button for "DX" modality

REST API
--------

* "/tools/reconstruct" to reconstruct the main DICOM tags, the JSON summary and
  the metadata of all the instances stored in Orthanc. This is a slow operation!

Plugins
-------

* New primitives to access Orthanc peers from plugins
* New events in change callbacks: "UpdatedPeers" and "UpdatedModalities"
* New primitives to handle jobs from plugins: "OrthancPluginSubmitJob()"
  and "OrthancPluginRegisterJobsUnserializer()"

Lua
---

* IncomingWorklistRequestFilter() to filter incoming C-FIND worklist queries

Maintenance
-----------

* Fix "/series/.../ordered-slices" in the presence of non-parallel slices
* Fix incoming DICOM C-Store filtering for JPEG-LS transfer syntaxes
* Fix OrthancPluginHttpClient() to return the HTTP status on errors
* Fix HTTPS requests to sites using a certificate encrypted with ECDSA
* Fix handling of incoming C-FIND queries containing Generic Group Length (*, 0x0000)
* Fix issue 54 (quoting multipart answers), for OsiriX compatibility through DICOMweb
* Fix issue 98 (DCMTK configuration fails with GCC 6.4.0 on Alpine)
* Fix issue 99 (PamWriter test segfaults on alpine linux with gcc 6.4.0)


Version 1.4.1 (2018-07-17)
==========================

* Fix deadlock in Lua scripting
* Simplification to the "DatabaseWrapper" class


Version 1.4.0 (2018-07-13)
==========================

General
-------

* New advanced job engine
* New configuration options:
  - "ConcurrentJobs": Max number of jobs that are simultaneously running
  - "SynchronousCMove": Whether to run DICOM C-Move operations synchronously
  - "JobsHistorySize": Max number of completed jobs that are kept in memory
* New metadata automatically computed at the instance level: 
  "RemoteIp", "CalledAet" and "HttpUsername"

Orthanc Explorer
----------------

* New screen listing all the available studies

REST API
--------

* "/jobs/..." to manage the jobs from the REST API
* New option "?short" to list DICOM tags using their hexadecimal ID in:
  - "/instances/.../tags?short"
  - "/instances/.../header?short"
  - "/{patients|studies|series}/.../instances-tags?short"
  - "/{patients|studies|series}/.../shared-tags?short"
  - "/{patients|studies|series|instances}/.../module?short"
  - "/studies/.../module-patient?short"
* "/instances/.../tags" URI was returning only the first value of
  DicomTags containing multiple numerical value.  It now returns all
  values in a string separated by \\ (i.e.: "1\\2\\3").  Note that,
  for data already in Orthanc, you'll need to reconstruct the data by
  sending a POST request to the ".../reconstruct" URI.  This change
  triggered an update of ORTHANC_API_VERSION from 1.0 to 1.1
* "/instances/.../frame/../image-uint8 and friends now accepts a 
  "image/pam" MIME type to retrieve images in PAM format
  (https://en.wikipedia.org/wiki/Netpbm#PAM_graphics_format)
* New option "?expand" to "/instances/.../metadata"

Plugins
-------

* New primitive in database SDK: "lookupIdentifierRange" to speed up range searches
* New function in the SDK: "OrthancPluginCheckVersionAdvanced()"

Maintenance
-----------

* Configuration option "LogExportedResources" is now "false" by default
* Header "OrthancCppDatabasePlugin.h" is now part of the "orthanc-databases" project
* Fix generation of DICOMDIR if PatientID is empty
* Fix issue 25 (Deadlock with Lua scripts): The event queue is now implemented for Lua
* Fix issue 94 (Instance modification should not modify FrameOfReferenceUID)
* Fix issue 77 (Lua access to REST-API is null terminated)
* Fix memory leak introduced by changeset #99116ed6f38c in Orthanc 1.3.2
* Upgraded dependencies for static and Windows builds:
  - boost 1.67.0
  - openssl 1.0.2o


Version 1.3.2 (2018-04-18)
==========================

REST API
--------

* "/system" URI returns the version of the Orthanc REST API
* "/tools/now" returns the current UTC (universal) time
* "/tools/now-local" returns the curent local time.
  This was the behavior of "/tools/now" until release 1.3.1.
* Added "?expand" GET argument to "/peers" and "/modalities" routes
* New URI: "/tools/create-media-extended" to generate a DICOMDIR
  archive from several resources, including additional type-3 tags
* Preservation of UID relationships while anonymizing

Lua
---

* New CMake option: "-DENABLE_LUA_MODULES=ON" to enable support for
  loading external Lua modules if the Lua engine is statically linked

Plugins
-------

* New error code: DatabaseUnavailable

Maintenance
-----------

* Orthanc now uses UTC (universal time) instead of local time in its database
* Fix to allow creating DICOM instances with empty Specific Character Set (0008,0005)
* Support of Linux Standard Base
* Static linking against libuuid (from e2fsprogs)
* Fix static build on CentOS 6
* Possibility of using JsonCpp 0.10.6 if the compiler does not support C++11
  with the "-DUSE_LEGACY_JSONCPP=ON" CMake option
* Upgraded dependencies for static and Windows builds:
  - boost 1.66.0
  - curl 7.57.0
  - jsoncpp 1.8.4
  - zlib 1.2.11


Version 1.3.1 (2017-11-29)
==========================

General
-------

* Built-in decoding of palette images

REST API
--------

* New URI: "/instances/.../frames/.../raw.gz" to compress raw frames using gzip
* New argument "ignore-length" to force the inclusion of too long tags in JSON
* New argument "/.../media?extended" to include additional type-3 tags in DICOMDIR

Plugins
-------

* New pixel formats exposed in SDK: BGRA32, Float32, Grayscale32, RGB48

Maintenance
-----------

* Creation of ./Resources/CMake/OrthancFramework*.cmake to reuse the Orthanc
  C++ framework in other projects
* New security-related options: "DicomAlwaysAllowEcho"
* Use "GBK" (frequently used in China) as an alias for "GB18030"
* Experimental support of actively maintained Civetweb to replace Mongoose 3.8
* Fix issue 31 for good (create new modality types for Philips ADW, GE Xeleris, GE AWServer)
* Fix issue 64 (OpenBSD support)
* Fix static compilation of DCMTK 3.6.2 on Fedora
* Upgrade to Boost 1.65.1 in static builds
* Upgrade to SQLite amalgamation 3.21.0 in static builds


Version 1.3.0 (2017-07-19)
==========================

General
-------

* Orthanc now anonymizes according to Basic Profile of PS 3.15-2017c Table E.1-1
* In the "DicomModalities" configuration:
  - Manufacturer type MedInria is now obsolete
  - Manufacturer types AgfaImpax and SyngoVia are obsolete too
    (use GenericNoWildcardInDates instead)
  - Obsolete manufacturers are still accepted but might disappear in the future
  - Added new manufacturer: GenericNoUniversalWildcard to replace all '*' by '' in
    outgoing C-Find requests
* New security-related options: "DicomAlwaysAllowStore" and "DicomCheckModalityHost"

REST API
--------

* Argument "Since" in URI "/tools/find" (related to issue 53)
* Argument "DicomVersion" in URIs "/{...}/{...}/anonymization"

Plugins
-------

* New function: "OrthancPluginRegisterIncomingHttpRequestFilter2()"

Lua
---

* Added HTTP headers support for Lua HttpPost/HttpGet/HttpPut/HttpDelete

Orthanc Explorer
----------------

* Query/retrieve: Added button for "DR" modality

Maintenance
-----------

* Ability to retrieve raw frames encoded as unsigned 32-bits integers
* Fix issue 29 (more consistent handling of the "--upgrade" argument)
* Fix issue 31 (create new modality types for Philips ADW, GE Xeleris, GE AWServer)
* Fix issue 35 (AET name is not transferred to Orthanc using DCMTK 3.6.0)
* Fix issue 44 (bad interpretation of photometric interpretation MONOCHROME1)
* Fix issue 45 (crash when providing a folder to "--config" command-line option)
* Fix issue 46 (PHI remaining after anonymization)
* Fix issue 49 (worklists: accentuated characters are removed from C-Find responses)
* Fix issue 52 (DICOM level security association problems)
* Fix issue 55 (modification/anonymization of tags that might break the database
  model now requires the "Force" parameter to be set to "true" in the query)
* Fix issue 56 (case-insensitive matching over accents)
* Fix Debian #865606 (orthanc FTBFS with libdcmtk-dev 3.6.1~20170228-2)
* Fix XSS inside DICOM in Orthanc Explorer (as reported by Victor Pasnkel, Morphus Labs)
* Upgrade to DCMTK 3.6.2 in static builds (released on 2017-07-17)
* Upgrade to Boost 1.64.0 in static builds
* New advanced "Locale" configuration option
* Removed configuration option "USE_DCMTK_361_PRIVATE_DIC"


Version 1.2.0 (2016/12/13)
==========================

General
-------

* Handling of private tags/creators in the "Dictionary" configuration option
* New configuration options: "LoadPrivateDictionary", "DicomScuTimeout" and "DicomScpTimeout"
* New metadata automatically computed at the instance level: "TransferSyntax" and "SopClassUid"

REST API
--------

* "/tools/invalidate-tags" to invalidate the JSON summary of all the DICOM files
  (useful if private tags are registered, or if changing the default encoding)
* "Permissive" flag for URI "/modalities/{...}/store" to ignore C-STORE transfer errors
* "Asynchronous" flag for URIs "/modalities/{...}/store" and "/peers/{...}/store"
  to avoid waiting for the completion of image transfers
* Possibility to DELETE "dicom-as-json" attachments to reconstruct the JSON summaries
  (useful if "Dictionary" has changed)
* "Keep" option for modifications to keep original DICOM identifiers (advanced feature)
* "/tools/default-encoding" to get or temporarily change the default encoding
* "/{resource}/{id}/reconstruct" to reconstruct the main DICOM tags, the JSON summary and
  the metadata of a resource (useful to compute new metadata, or if using "Keep" above)

Plugins
-------

* New function: "OrthancPluginRegisterPrivateDictionaryTag()" to register private tags
* More control over client cache in the ServeFolders plugin
* New C++ help wrappers in "Plugins/Samples/Common/" to read DICOM datasets from REST API
* New data structure: "OrthancPluginFindMatcher" to match DICOM against C-FIND queries

Maintenance
-----------

* Fix handling of encodings in C-FIND requests (including for worklists)
* Use of DCMTK 3.6.1 dictionary of private tags in standalone builds
* Avoid hard crash if not enough memory (handling of std::bad_alloc)
* Improved robustness of Orthanc Explorer wrt. query/retrieve (maybe fix issue 24)
* Fix serious performance issue with C-FIND
* Fix extraction of the symbolic name of the private tags
* Performance warning if runtime debug assertions are turned on
* Improved robustness against files with no PatientID
* Upgrade to curl 7.50.3 for static and Windows builds
* Content-Type for JSON documents is now "application/json; charset=utf-8"
* Ignore "Group Length" tags in C-FIND queries
* Fix handling of worklist SCP with ReferencedStudySequence and ReferencedPatientSequence
* Fix handling of Move Originator AET and ID in C-MOVE SCP
* Fix vulnerability ZSL-2016-5379 "Unquoted Service Path Privilege Escalation" in the
  Windows service
* Fix vulnerability ZSL-2016-5380 "Remote Memory Corruption Vulnerability" in DCMTK 3.6.0


Version 1.1.0 (2016/06/27)
==========================

General
-------

* HTTPS client certificates can be associated with Orthanc peers to enhance security over Internet
* Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
* New command-line option "--logfile" to output the Orthanc log to the given file
* Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)

REST API
--------

* New URI: "/instances/.../frames/.../raw" to access the raw frames (bypass image decoding)
* New URI "/modalities/.../move" to issue C-MOVE SCU requests
* "MoveOriginatorID" can be specified for "/modalities/.../store"

Dicom protocol
--------------

* Support of optional tags for counting resources in C-FIND:
  0008-0061, 0008-0062, 0020-1200, 0020-1202, 0020-1204, 0020-1206, 0020-1208, 0020-1209
* Support of Move Originator Message ID (0000,1031) in C-STORE responses driven by C-MOVE

Plugins
-------

* Speedup in plugins by removing unnecessary locks
* New callback to filter incoming HTTP requests: OrthancPluginRegisterIncomingHttpRequestFilter()
* New callback to handle non-worklists C-FIND requests: OrthancPluginRegisterFindCallback()
* New callback to handle C-MOVE requests: OrthancPluginRegisterMoveCallback()
* New function: "OrthancPluginHttpClient()" to do HTTP requests with full control
* New function: "OrthancPluginGenerateUuid()" to generate a UUID
* More than one custom image decoder can be installed (e.g. to handle different transfer syntaxes)

Lua
---

* Possibility to dynamically fix outgoing C-FIND requests using "OutgoingFindRequestFilter()"
* Access to the HTTP headers in the "IncomingHttpRequestFilter()" callback

Image decoding
--------------

* Huge speedup if decoding the family of JPEG transfer syntaxes
* Refactoring leading to speedups with custom image decoders (including Web viewer plugin)
* Support decoding of RLE Lossless transfer syntax
* Support of signed 16bpp images in ParsedDicomFile

Maintenance
-----------

* New logo of Orthanc
* Fix issue 11 (is_regular_file() fails for FILE_ATTRIBUTE_REPARSE_POINT)
* Fix issue 16 ("Limit" parameter error in REST API /tools/find method)
* Fix of Debian bug #818512 ("FTBFS: Please install libdcmtk*-dev")
* Fix of Debian bug #823139 ("orthanc: Please provide RecoverCompressedFile.cpp")
* Replaced "localhost" by "127.0.0.1", as it might impact performance on Windows
* Compatibility with CMake >= 3.5.0
* Possibility to use forthcoming DCMTK 3.6.1 in static builds (instead of 3.6.0)
* Upgrade to Boost 1.60.0 for static builds
* Use of HTTP status 403 Forbidden (instead of 401) if access to a REST resource is disallowed
* Option "HttpsVerifyPeers" can be used to connect against self-signed HTTPS certificates
* New configuration option "AllowFindSopClassesInStudy"
* Macro "__linux" (now obsolete) replaced by macro "__linux__" (maybe solves Debian bug #821011)
* Modification of instances can now replace PixelData (resp. EncapsulatedDocument) with 
  provided a PNG/JPEG image (resp. PDF file) if it is encoded using Data URI Scheme
* Dropped support of Google Log


Version 1.0.0 (2015/12/15)
==========================

* Lua: "IncomingFindRequestFilter()" to apply filters to incoming C-FIND requests
* New function in plugin SDK: "OrthancPluginSendMultipartItem2()"
* Fix of DICOMDIR generation with DCMTK 3.6.1, support of encodings
* Fix range search if the lower or upper limit is absent
* Fix modality worklists lookups if tags with UN (unknown) VR are present
* Warn about badly formatted modality/peer definitions in configuration file at startup


Version 0.9.6 (2015/12/08)
==========================

* Promiscuous mode (accept unknown SOP class UID) is now turned off by default
* Fix serialization of DICOM buffers that might contain garbage trailing
* Fix modality worklists server if some fields are null
* More tolerant "/series/.../ordered-slices" with broken series
* Improved logging information if upgrade fails
* Fix formatting of multipart HTTP answers (bis)


Version 0.9.5 (2015/12/02)
==========================

Major
-----

* Experimental support of DICOM C-FIND SCP for modality worklists through plugins
* Support of DICOM C-FIND SCU for modality worklists ("/modalities/{dicom}/find-worklist")

REST API
--------

* New URIs:
  - "/series/.../ordered-slices" to order the slices of a 2D+t or 3D series
  - "/tools/shutdown" to stop Orthanc from the REST API
  - ".../compress", ".../uncompress" and ".../is-compressed" for attachments
  - "/tools/create-archive" to create ZIP from a set of resources
  - "/tools/create-media" to create ZIP+DICOMDIR from a set of resources
  - "/instances/.../header" to get the meta information (header) of the DICOM instance
* "/tools/create-dicom":
  - Support of binary tags encoded using data URI scheme
  - Support of hierarchical structures (creation of sequences)
  - Create tags with unknown VR
* "/modify" can insert/modify sequences
* ".../preview" and ".../image-uint8" can return JPEG images if the HTTP Accept Header asks so
* "Origin" metadata for the instances

Minor
-----

* New configuration options:
  - "UnknownSopClassAccepted" to disable promiscuous mode (accept unknown SOP class UID)
  - New configuration option: "Dictionary" to declare custom DICOM tags
* Add ".dcm" suffix to files in ZIP archives (cf. URI ".../archive")
* MIME content type can be associated to custom attachments (cf. "UserContentType")

Plugins
-------

* New functions:
  - "OrthancPluginRegisterDecodeImageCallback()" to replace the built-in image decoder
  - "OrthancPluginDicomInstanceToJson()" to convert DICOM to JSON
  - "OrthancPluginDicomBufferToJson()" to convert DICOM to JSON
  - "OrthancPluginRegisterErrorCode()" to declare custom error codes
  - "OrthancPluginRegisterDictionaryTag()" to declare custom DICOM tags
  - "OrthancPluginLookupDictionary()" to get information about some DICOM tag
  - "OrthancPluginRestApiGet2()" to provide HTTP headers when calling Orthanc API
  - "OrthancPluginGetInstanceOrigin()" to know through which mechanism an instance was received
  - "OrthancPluginCreateImage()" and "OrthancPluginCreateImageAccessor()" to create images
  - "OrthancPluginDecodeDicomImage()" to decode DICOM images
  - "OrthancPluginComputeMd5()" and "OrthancPluginComputeSha1()" to compute MD5/SHA-1 hash
* New events in change callbacks:
  - "OrthancStarted"
  - "OrthancStopped"
  - "UpdatedAttachment" 
  - "UpdatedMetadata"
* "/system" URI gives information about the plugins used for storage area and DB back-end
* Plugin callbacks must now return explicit "OrthancPluginErrorCode" (instead of integers)

Lua
---

* Optional argument "keepStrings" in "DumpJson()"

Maintenance
-----------

* Full indexation of the patient/study tags to speed up searches and C-FIND
* Many refactorings, notably of the searching features and of the image decoding
* C-MOVE SCP for studies using AccessionNumber tag
* Fix issue 4 (C-STORE Association not renegotiated on Specific-to-specific transfer syntax change)
* Fix formatting of multipart HTTP answers
* "--logdir" flag creates a single log file instead of 3 separate files for errors/warnings/infos
* "--errors" flag lists the error codes that could be returned by Orthanc
* Under Windows, the exit status of Orthanc corresponds to the encountered error code
* New "AgfaImpax", "EFilm2" and "Vitrea" modality manufacturers
* C-FIND SCP will return tags with sequence value representation
* Upgrade to Boost 1.59.0 for static builds


Version 0.9.4 (2015/09/16)
==========================

* Preview of PDF files encapsulated in DICOM from Orthanc Explorer
* Creation of DICOM files with encapsulated PDF through "/tools/create-dicom"
* "limit" and "since" arguments while retrieving DICOM resources in the REST API
* Support of "deflate" and "gzip" content-types in HTTP requests
* Options to validate peers against CA certificates in HTTPS requests
* New configuration option: "HttpTimeout" to set the default timeout for HTTP requests

Lua
---

* More information about the origin request in the "OnStoredInstance()" and
  "ReceivedInstanceFilter()" callbacks. WARNING: This can result in
  incompatibilities wrt. previous versions of Orthanc.
* New function "GetOrthancConfiguration()" to get the Orthanc configuration

Plugins
-------

* New functions to compress/uncompress images using PNG and JPEG
* New functions to issue HTTP requests from plugins
* New function "OrthancPluginBufferCompression()" to (un)compress memory buffers
* New function "OrthancPluginReadFile()" to read files from the filesystem
* New function "OrthancPluginWriteFile()" to write files to the filesystem
* New function "OrthancPluginGetErrorDescription()" to convert error codes to strings
* New function "OrthancPluginSendHttpStatus()" to send HTTP status with a body
* New function "OrthancPluginRegisterRestCallbackNoLock()" for high-performance plugins
* Plugins have access to explicit error codes 
* Improvements to the sample "ServeFolders" plugin
* Primitives to upgrade the database version in plugins

Maintenance
-----------

* Many code refactorings
* Improved error codes (no more custom descriptions in exceptions)
* If error while calling the REST API, the answer body contains description of the error
  (this feature can be disabled with the "HttpDescribeErrors" option)
* Upgrade to curl 7.44.0 for static and Windows builds
* Upgrade to openssl 1.0.2d for static and Windows builds
* Depends on libjpeg 9a
* Bypass zlib uncompression if "StorageCompression" is enabled and HTTP client supports deflate


Version 0.9.3 (2015/08/07)
==========================

* C-Echo testing can be triggered from Orthanc Explorer (in the query/retrieve page)
* Removal of the dependency upon Google Log, Orthanc now uses its internal logger 
  (use -DENABLE_GOOGLE_LOG=ON to re-enable Google Log)
* Upgrade to JsonCpp 0.10.5 for static and Windows builds


Version 0.9.2 (2015/08/02)
==========================

* Upgrade to Boost 1.58.0 for static and Windows builds
* Source code repository moved from Google Code to BitBucket
* Inject version information into Windows binaries
* Fix access to binary data in HTTP/REST requests by Lua scripts
* Fix potential deadlock in the callbacks of plugins


Version 0.9.1 (2015/07/02)
==========================

General
-------

* The configuration can be splitted into several files stored inside the same folder
* Custom setting of the local AET during C-STORE SCU (both in Lua and in the REST API)
* Many code refactorings

Lua
---

* Access to the REST API of Orthanc (RestApiGet, RestApiPost, RestApiPut, RestApiDelete)
* Functions to convert between Lua values and JSON strings: "ParseJson" and "DumpJson"
* New events: "OnStablePatient", "OnStableStudy", "OnStableSeries", "Initialize", "Finalize"

Plugins
-------

* Plugins can retrieve the configuration file directly as a JSON string
* Plugins can send answers as multipart messages

Fixes
-----

* Fix compatibility issues for C-FIND SCU to Siemens Syngo.Via modalities SCP
* Fix issue 15 (Lua scripts making HTTP requests)
* Fix issue 35 (Characters in PatientID string are not protected for C-FIND)
* Fix issue 37 (Hyphens trigger range query even if datatype does not support ranges)


Version 0.9.0 (2015/06/03)
==========================

Major
-----

* DICOM Query/Retrieve available from Orthanc Explorer
* C-MOVE SCU and C-FIND SCU are accessible through the REST API
* "?expand" flag for URIs "/patients", "/studies" and "/series"
* "/tools/find" URI to search for DICOM resources from REST
* Support of FreeBSD
* The "Orthanc Client" SDK is now a separate project

Minor
-----

* Speed-up in Orthanc Explorer for large amount of images
* Speed-up of the C-FIND SCP server of Orthanc
* Allow replacing PatientID/StudyInstanceUID/SeriesInstanceUID from Lua scripts
* Option "CaseSensitivePN" to enable case-insensitive C-FIND SCP

Fixes
-----

* Prevent freeze on C-FIND if no DICOM tag is to be returned
* Fix slow C-STORE SCP on recent versions of GNU/Linux, if
  USE_SYSTEM_DCMTK is set to OFF (http://forum.dcmtk.org/viewtopic.php?f=1&t=4009)
* Fix issue 30 (QR response missing "Query/Retrieve Level" (008,0052))
* Fix issue 32 (Cyrillic symbols): Introduction of the "Windows1251" encoding
* Plugins now receive duplicated GET arguments in their REST callbacks


Version 0.8.6 (2015/02/12)
==========================

Major
-----

* URIs to get all the parents of a given resource in a single REST call
* Instances without PatientID are now allowed
* Support of HTTP proxy to access Orthanc peers

Minor
-----

* Support of Tudor DICOM in Query/Retrieve
* More flexible "/modify" and "/anonymize" for single instance
* Access to called AET and remote AET from Lua scripts ("OnStoredInstance")
* Option "DicomAssociationCloseDelay" to set delay before closing DICOM association
* ZIP archives now display the accession number of the studies

Plugins
-------

* Introspection of plugins (cf. the "/plugins" URI)
* Plugins can access the command-line arguments used to launch Orthanc
* Plugins can extend Orthanc Explorer with custom JavaScript
* Plugins can get/set global properties to save their configuration
* Plugins can do REST calls to other plugins (cf. "xxxAfterPlugins()")
* Scan of folders for plugins

Fixes
-----

* Code refactorings
* Fix issue 25 (AET with underscore not allowed)
* Fix replacement and insertion of private DICOM tags
* Fix anonymization generating non-portable DICOM files


Version 0.8.5 (2014/11/04)
==========================

General
-------

* Major speed-up thanks to a new database schema
* Plugins can monitor changes through callbacks
* Download ZIP + DICOMDIR from Orthanc Explorer
* Sample plugin framework to serve static resources (./Plugins/Samples/WebSkeleton/)

Fixes
-----

* Fix issue 19 (YBR_FULL are decoded incorrectly)
* Fix issue 21 (Microsoft Visual Studio precompiled headers)
* Fix issue 22 (Error decoding multi-frame instances)
* Fix issue 24 (Build fails on OSX when directory has .DS_Store files)
* Fix crash when bad HTTP credentials are provided


Version 0.8.4 (2014/09/19)
==========================

* "/instances-tags" to get the tags of all the child instances of a
  patient/study/series with a single REST call (bulk tags retrieval)
* Configuration/Lua to select the accepted C-STORE SCP transfer syntaxes
* Fix reporting of errors in Orthanc Explorer when sending images to peers/modalities
* Installation of plugin SDK in CMake


Version 0.8.3 (2014/09/11)
==========================

Major
-----

* Creation of ZIP archives for media storage, with DICOMDIR
* URIs to get all the children of a given resource in a single REST call
* "/tools/lookup" URI to map DICOM UIDs to Orthanc identifiers
* Support of index-only mode (using the "StoreDicom" option)
* Plugins can implement a custom storage area

Minor
-----

* Configuration option to enable HTTP Keep-Alive
* Configuration option to disable the logging of exported resources in "/exports"
* Plugins can retrieve the path to Orthanc and to its configuration file
* "/tools/create-dicom" now accepts the "PatientID" DICOM tag (+ updated sample)
* Possibility to set HTTP headers from plugins
* "LastUpdate" metadata is now always returned for patients, studies and series

Maintenance
-----------

* Refactoring of HttpOutput ("Content-Length" header is now always sent)
* Upgrade to Mongoose 3.8
* Fixes for Visual Studio 2013 and Windows 64bit
* Fix issue 16: Handling of "AT" value representations in JSON
* Fix issue 17


Version 0.8.2 (2014/08/07)
==========================

* Support of the standard text encodings
* Hot restart of Orthanc by posting to "/tools/reset"
* More fault-tolerant commands in Lua scripts
* Parameter to set the default encoding for DICOM files without SpecificCharacterSet
* Fix of issue #14 (support of XCode 5.1)
* Upgrade to Google Test 1.7.0


Version 0.8.1 (2014/07/29)
==========================

General
-------

* Access patient module at the study level to cope with PatientID collisions
* On-the-fly conversion of JSON to XML according to the HTTP Accept header
* C-Echo SCU in the REST API
* DICOM conformance statement available at URI "/tools/dicom-conformance"

Lua scripts
-----------

* Lua scripts can do HTTP requests, and thus can call Web services
* Lua scripts can invoke system commands, with CallSystem()

Plugins
-------

* Lookup for DICOM UIDs in the plugin SDK
* Plugins have access to the HTTP headers and can answer with HTTP status codes
* Callback to react to the incoming of DICOM instances

Fixes
-----

* Fix build of Google Log with Visual Studio >= 11.0
* Fix automated generation of the list of resource children in the REST API


Version 0.8.0 (2014/07/10)
==========================

Major changes
-------------

* Routing images with Lua scripts
* Introduction of the Orthanc Plugin SDK
* Official support of OS X (Darwin) 10.8

Minor changes
-------------

* Extraction of tags for the patient/study/series/instance DICOM modules
* Extraction of the tags shared by all the instances of a patient/study/series
* Options to limit the number of results for an incoming C-FIND query
* Support of kFreeBSD
* Several code refactorings
* Fix OrthancCppClient::GetVoxelSizeZ()


Version 0.7.6 (2014/06/11)
==========================

* Support of JPEG and JPEG-LS decompression
* Download DICOM images as Matlab/Octave arrays
* Precompiled headers for Microsoft Visual Studio


Version 0.7.5 (2014/05/08)
==========================

* Dynamic negotiation of SOP classes for C-STORE SCU
* Creation of DICOM instances using the REST API
* Embedding of images within DICOM instances
* Adding/removal/modification of remote modalities/peers through REST
* Reuse of the previous SCU connection to avoid unnecessary handshakes
* Fix problems with anonymization and modification
* Fix missing licensing terms about reuse of some code from DCMTK
* Various code refactorings


Version 0.7.4 (2014/04/16)
==========================

* Switch to openssl-1.0.1g in static builds (cf. Heartbleed exploit)
* Switch to boost 1.55.0 in static builds (to solve compiling errors)
* Better logging about nonexistent tags
* Dcm4Chee manufacturer
* Automatic discovering of the path to the DICOM dictionaries
* In the "DicomModalities" config, the port number can be a string


Version 0.7.3 (2014/02/14)
==========================

Major changes
-------------

* Fixes in the implementation of the C-FIND handler for Query/Retrieve
* Custom attachment of files to patients, studies, series or instances
* Access to lowlevel info about the attached files through the REST API
* Recover pixel data for more transfer syntaxes (notably JPEG)

Minor changes
-------------

* AET comparison is now case-insensitive by default
* Possibility to disable the HTTP server or the DICOM server
* Automatic computation of MD5 hashes for the stored DICOM files
* Maintenance tool to recover DICOM files compressed by Orthanc
* The newline characters in the configuration file are fixed for GNU/Linux
* Capture of the SIGTERM signal in GNU/Linux


Version 0.7.2 (2013/11/08)
==========================

* Support of Query/Retrieve from medInria
* Accept more transfer syntaxes for C-STORE SCP and SCU (notably JPEG)
* Create the meta-header when receiving files through C-STORE SCP
* Fixes and improvements thanks to the static analyzer cppcheck


Version 0.7.1 (2013/10/30)
==========================

* Use ZIP64 only when required to improve compatibility (cf. issue #7)
* Refactoring of the CMake options
* Fix for big-endian architectures (RedHat bug #985748)
* Use filenames with 8 characters in ZIP files for maximum compatibility
* Possibility to build Orthanc inplace (in the source directory)


Version 0.7.0 (2013/10/25)
==========================

Major changes
-------------

* DICOM Query/Retrieve is supported

Minor changes
-------------

* Possibility to keep the PatientID during an anonymization
* Check whether "unzip", "tar" and/or "7-zip" are installed from CMake


Version 0.6.2 (2013/10/04)
==========================

* Build of the C++ client as a shared library
* Improvements and documentation of the C++ client API
* Fix of Debian bug #724947 (licensing issue with the SHA-1 library)
* Switch to Boost 1.54.0 (cf. issue #9)
* "make uninstall" is now possible


Version 0.6.1 (2013/09/16)
==========================

* Detection of stable patients/studies/series
* C-FIND SCU at the instance level
* Link from modified to original resource in Orthanc Explorer
* Fix of issue #8
* Anonymization of the medical alerts tag (0010,2000)


Version 0.6.0 (2013/07/16)
==========================

Major changes
-------------

* Introduction of the C++ client
* Send DICOM resources to other Orthanc instances through HTTP
* Access to signed images (instances/.../image-int16)
  (Closes: Debian #716958)

Minor changes
-------------

* Export of DICOM files to the host filesystem (instances/.../export)
* Statistics about patients, studies, series and instances
* Link from anonymized to original resource in Orthanc Explorer
* Fixes for Red Hat and Debian packaging
* Fixes for history in Orthanc Explorer
* Fixes for boost::thread, as reported by Cyril Paulus
* Fix licensing (Closes: Debian #712038)

Metadata
--------

* Access to the metadata through the REST API (.../metadata)
* Support of user-defined metadata
* "LastUpdate" metadata for patients, studies and series
* "/tools/now" to be used in combination with "LastUpdate"
* Improved support of series with temporal positions


Version 0.5.2 (2013/05/07)
==========================

* "Bulk" Store-SCU (send several DICOM instances with the same
  DICOM connection)
* Store-SCU for patients and studies in Orthanc Explorer
* Filtering of incoming DICOM instances (through Lua scripting)
* Filtering of incoming HTTP requests (through Lua scripting)
* Clearing of "/exports" and "/changes"
* Check MD5 of third party downloads
* Faking of the HTTP methods PUT and DELETE


Version 0.5.1 (2013/04/17)
==========================

* Support of RGB images
* Fix of store SCU in release builds
* Possibility to store the SQLite index at another place than the
  DICOM instances (for performance)


Version 0.5.0 (2013/01/31)
==========================

Major changes
-------------

* Download of modified or anonymized DICOM instances
* Inplace modification and anonymization of DICOM series, studies and patients

Minor changes
-------------

* Support of private tags
* Implementation of the PMSCT_RLE1 image decoding for Philips modalities
* Generation of random DICOM UID through the REST API (/tools/generate-uid)


Version 0.4.0 (2012/12/14)
==========================

Major changes
-------------

* Recycling of disk space
* Raw access to the value of the DICOM tags in the REST API

Minor changes
-------------

* Protection of patients against recycling (also in Orthanc Explorer)
* The DICOM dictionaries are embedded in Windows builds


Version 0.3.1 (2012/12/05)
==========================

* Download archives of patients, studies and series as ZIP files
* Orthanc now checks the version of its database schema before starting


Version 0.3.0 (2012/11/30)
==========================

Major changes
-------------

* Transparent compression of the DICOM instances on the disk
* The patient/study/series/instances are now indexed by SHA-1 digests
  of their DICOM Instance IDs (and not by UUIDs anymore): The same
  DICOM objects are thus always identified by the same Orthanc IDs
* Log of exported instances through DICOM C-STORE SCU ("/exported" URI)
* Full refactoring of the DB schema and of the REST API
* Introduction of generic classes for REST APIs (in Core/RestApi)

Minor changes
-------------

* "/statistics" URI
* "last" flag to retrieve the last change from the "/changes" URI
* Generate a sample configuration file from command line
* "CompletedSeries" event in the changes API
* Thread to continuously flush DB to disk (SQLite checkpoints for
  improved robustness)


Version 0.2.3 (2012/10/26)
==========================

* Use HTTP Content-Disposition to set a filename when downloading JSON/DCM
* URI "/system" for general information about Orthanc
* Versioning info and help on the command line
* Improved logging
* Possibility of dynamic linking against jsoncpp, sqlite, boost and dmctk
  for Debian packaging
* Fix some bugs
* Switch to default 8042 port for HTTP


Version 0.2.2 (2012/10/04)
==========================

* Switch to Google Log
* Fixes to Debian packaging


Version 0.2.1 (2012/09/28)
==========================

* Status of series
* Continuous Integration Server is up and running
* Ready for Debian packaging


Version 0.2.0 (2012/09/16)
==========================

Major changes
-------------

* Renaming to "Orthanc"
* Focus on security: Support of SSL, HTTP Basic Authentication and
  interdiction of remote access
* Access to multi-frame images (for nuclear medicine)
* Access to the raw PNG images (in 8bpp and 16bpp)

Minor changes
-------------

* Change of the licensing of the "Core/SQLite" folder to BSD (to
  reflect the original licensing terms of Chromium, from which the
  code derives)
* Standalone build for cross-compilation


Version 0.1.1 (2012/07/20)
==========================

* Fix Windows version
* Native Windows build with Microsoft Visual Studio 2005
* Add path to storage in Configuration.json


Version 0.1.0 (2012/07/19)
==========================

* Initial release
