Mercurial > hg > orthanc
view NEWS @ 3818:4f78da5613a1 c-get
Add C-GET SCP support
author | Stacy Loesch <stacy.loesch@varian.com> |
---|---|
date | Fri, 27 Mar 2020 10:06:58 -0400 |
parents | 7f083dfae62b |
children | ab9a0d1e0cc1 |
line wrap: on
line source
Pending changes in the mainline =============================== REST API -------- * API version has been upgraded to 6 * Added: - "/modalities/{id}/store-straight": Synchronously send the DICOM instance in POST body to another modality (alternative to command-line tools such as "storescu") Maintenance ----------- * Source code repository moved from BitBucket to self-hosted server * Fix OpenSSL initialization on Linux Standard Base * Fix lookup form in Orthanc Explorer (wildcards not allowed in StudyDate) * Fix signature of "OrthancPluginRegisterStorageCommitmentScpCallback()" in plugins SDK * Error reporting on failure while initializing SSL * Upgraded dependencies for static builds (notably on Windows): - civetweb 1.12 - openssl 1.1.1f Version 1.6.0 (2020-03-18) ========================== General ------- * Support of DICOM storage commitment REST API -------- * API version has been upgraded to 5 * Added: - "/peers/{id}/system": Test the connectivity with a remote peer (and also retrieve its version number) - "/tools/log-level": Access and/or change the log level without restarting Orthanc - "/instances/{id}/frames/{frame}/rendered" and "/instances/{id}/rendered": Render frames, taking windowing and resizing into account - "/modalities/{...}/storage-commitment": Trigger storage commitment SCU - "/storage-commitment/{...}": Access storage commitment reports - "/storage-commitment/{...}/remove": Remove instances from storage commitment reports * Improved: - "/changes": Allow the "limit" argument to be greater than 100 - "/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files - ".../modify" and "/tools/create-dicom": New option "PrivateCreator" for private tags - "/modalities/{...}/store": New Boolean argument "StorageCommitment" Plugins ------- * New sample plugin: "ConnectivityChecks" * New primitives to handle storage commitment SCP by plugins Lua --- * New events: - "OnDeletedPatient", "OnDeletedStudy", "OnDeletedSeries", "OnDeletedInstance": triggered when a resource is deleted - "OnUpdatedPatient", "OnUpdatedStudy", "OnUpdatedSeries", "OnUpdatedInstance": triggered when an attachment or a metadata is updated Maintenance ----------- * New configuration options: "DefaultPrivateCreator" and "StorageCommitmentReportsSize" * Support of MPEG4 transfer syntaxes in C-Store SCP * C-FIND SCU at Instance level now sets the 0008,0052 tag to IMAGE per default (was INSTANCE). Therefore, the "ClearCanvas" and "Dcm4Chee" modality manufacturer have now been deprecated. * More strict C-FIND SCP wrt. the DICOM standard: Forbid wildcard matching on some VRs, ignore main tags below the queried level * Fix issue #65 (Logging improvements) * Fix issue #103 ("queries/.../retrieve" API returns HTTP code 200 even on server errors) * Fix issue #140 (Modifying private tags with REST API changes VR from LO to UN) * Fix issue #154 (Matching against list of UID-s by C-MOVE) * Fix issue #156 (Chunked Dicom-web transfer uses 100% CPU) * Fix issue #165 (Boundary parameter in multipart Content-Type is too long) * Fix issue #166 (CMake find_boost version is now broken with newer boost/cmake) * Fix issue #167 (Job can't be cancelled - Handling of timeouts after established association) * Fix issue #168 (Plugins can't read private tags from the configuration file) * Upgraded dependencies for static builds (notably on Windows): - dcmtk 3.6.5 - openssl 1.1.1d - jsoncpp 0.10.7 for pre-C++11 compilers Version 1.5.8 (2019-10-16) ========================== REST API -------- * API version has been upgraded to 4 * In /ordered-slices route, ignore instances without position/normal/seriesIndex, unless there are only such instances in the series Maintenance ----------- * Security: If remote access is enabled, HTTP authentication is also enabled by default. This modification was done to mitigate security risks reported by independant security researcher Amitay Dan. * Security: New configuration option "ExecuteLuaEnabled" to allow "/tools/execute-script" * New configuration option: "HttpRequestTimeout" * Log an explicit error if uploading an empty DICOM file using REST API * Name of temporary files now include the process ID to ease design of scripts cleaning /tmp * Fix compatibility of LSB binaries with Ubuntu >= 18.04 * Fix generation of "SOP Instance UID" on split and merge * Orthanc Explorer: include the URL search params into HTTP headers to the REST API to ease usage of the Authorization plugin. Note that only the 'token', 'auth-token' & 'authorization' search params are transmitted into HTTP headers. * Fix lost relationships between CT and RT-STRUCT during anonymization Version 1.5.7 (2019-06-25) ========================== REST API -------- * API version has been upgraded to 3 * "/modalities/{id}/query": New argument "Normalize" can be set to "false" to bypass the automated correction of outgoing C-FIND queries * Reporting of "ParentResources" in "DicomModalityStore" and "DicomModalityStore" jobs Plugins ------- * New functions in the SDK: - OrthancPluginHttpClientChunkedBody(): HTTP client for POST/PUT with a chunked body - OrthancPluginRegisterMultipartRestCallback(): HTTP server for POST/PUT with multipart body - OrthancPluginGetTagName(): Retrieve the name of a DICOM tag from its group and element Maintenance ----------- * Orthanc now accepts "-H 'Transfer-Encoding: chunked'" option from curl * Size of the Orthanc static binaries are reduced by compressing ICU data * Anonymization: Preserve hierarchical relationships in (0008,1115) [] (0020,000e) * Allow the serialization of signed 16bpp images in PAM format * HTTP header "Accept-Encoding" is honored for streams without built-in support for compression * The default HTTP timeout is now 60 seconds (instead of 10 seconds in previous versions) * Allow anonymizing/modifying instances without the PatientID tag * Fix issue #106 (Unable to export preview as jpeg from Lua script) * Fix issue #136 (C-FIND request fails when found DICOM file does not have certain tags) * Fix issue #137 (C-STORE fails for unknown SOP Class although server is configured to accept any) * Fix issue #138 (POST to modalities/{name} accepts invalid characters) * Fix issue #141 (/tools/create-dicom removes non-ASCII characters from study description) 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