-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathNEWS
2690 lines (2069 loc) · 100 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Pending changes in the mainline
===============================
General
-------
* Database:
- Introduced the database optimization "ExtendedFind" to replace many small SQL queries
by a single, large SQL query. This can greatly reduce the cost related to latency
when working with large databases (e.g., if using PostgreSQL).
Furthermore, "ExtendedFind" brings new sorting and filtering features to the
REST API, mainly in "/tools/find".
- Introduced the new database primitive "ExtendedChanges" to allow filtering on "/changes".
- Reduced the number of SQL queries when ingesting DICOM files.
* Introduced a new configuration "ReadOnly" to forbid an Orthanc instance to perform
any modification to the index database or to the storage area.
REST API
--------
* API version upgraded to 26
* Support HTTP "Range" request header on "{...}/attachments/{...}/data" and
"{...}/attachments/{...}/compressed-data"
* Improved parsing of multiple numerical values in DICOM tags
https://discourse.orthanc-server.org/t/qido-includefield-with-sequences/4746/6
* In "/system", added a new field "Capabilities" with new values:
- "HasExtendedChanges" if the index database provides this optimization
- "HasExtendedFind" if the index database provides this primitive
* If the index database provides the "HasExtendedChanges" primitive, "/changes"
supports two additional arguments:
- "type" to filter the changes returned by the query
- "to" to possibly cycle through changes in reverse order
Example: "/changes?type=StableStudy&to=7584&limit=100"
* If the index database provides the "HasExtendedFind" primitive, "/tools/find"
supports new options:
- "OrderBy" to order by DICOM tag or metadata value
- "ParentPatient", "ParentStudy", and "ParentSeries" to retrieve only descendants of a
given DICOM resource
- "MetadataQuery" to filter results based on metadata values
- "ResponseContent" to define what shall be included in the response for each returned
resource (e.g: Metadata, Children,...)
* In "/tools/find", the "Limit" and "Since" arguments are not allowed anymore if the
query requests filtering on DICOM tags that are not stored in the index database
* The new "/tools/count-resources" API route is similar to "tools/find" but only
returns the number of resources matching the criteria
* "/studies?since=x&limit=0" and similar routes for patients, series, and instances:
"limit=0" now means "no limit" instead of "no results" as in previous versions of Orthanc
* In DICOMweb JSON, the "DS - Decimal String" values were previously represented as float
numbers, but are now represented as strings to avoid introduction of long float representation
(e.g 0.1429999999999 vs "0.143") and to be compliant with the DICOMweb standard:
https://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.3.html
This has no impact on the Stone Web viewer and OHIF:
https://discourse.orthanc-server.org/t/dicomwebplugin-does-not-return-series-metadata-properly/5195
Maintenance
-----------
* DICOM TLS: "DicomTlsTrustedCertificates" is not required anymore when issuing
an outgoing SCU connection if "DicomTlsRemoteCertificateRequired" is set to "false"
* Fix C-Find queries not returning computed tags such as ModalitiesInStudy,
NumberOfStudyRelatedSeries,... in very specific use cases
* Fix C-Find queries not returning private tags in the modality worklist plugin
* Fix an extremely rare error when 2 threads are trying to create the same folder
in the File Storage at the same time
* Fix crashes if handling very large images
* Fix deadlock when parsing specific invalid DICOM files
* Loading plugins: Orthanc will now fail to start when provided with a plugin path
that can not be found
* Metrics:
- Fix a few metrics that were not published
- Added 2 metrics: "orthanc_storage_cache_miss_count" and "orthanc_storage_cache_hit_count"
* Added a new fallback when trying to decode a frame: transcode the file using the plugin
before decoding the frame. This solves some issues with JP2K Lossy compression:
https://discourse.orthanc-server.org/t/decoding-displaying-jpeg2000-lossy-images/5117
* Added new warnings that can be disabled in the configuration:
- W003_DecoderFailure
- W004_NoMainDicomTagsSignature
- W005_RequestingTagFromLowerResourceLevel
- W006_RequestingTagFromMetaHeader
- W007_MissingRequestedTagsNotReadFromDisk
* New default MainDicomTags are now stored in the DB:
- At Study Level:
- TimezoneOffsetFromUTC (used in QIDO-RS default queries)
- At Series Level:
- TimezoneOffsetFromUTC (used in QIDO-RS default queries)
- PerformedProcedureStepStartDate (used in QIDO-RS default queries)
- PerformedProcedureStepStartTime (used in QIDO-RS default queries)
- RequestAttributesSequence (used in QIDO-RS default queries)
- Note that, in order to access these values for resources that were ingested in Orthanc
before this release, you will have to run the Housekeeper plugin or to call
"/reconstruct" on every resource
* Upgraded dependencies for static builds:
- boost 1.86.0
- curl 8.9.0
- SQLite 3.46
Version 1.12.4 (2024-06-05)
===========================
REST API
--------
* API version upgraded to 24
* Added "MaximumPatientCount" in /system
* Added a new "LimitToThisLevelMainDicomTags" field in the payload of
/patients|studies|series/instances/../reconstruct to speed up the reconstruction
in case you just want to update the MainDicomTags of that resource level only
(e.g., after you have updated the "ExtraMainDicomTags" for this level)
* The "requestedTags" GET argument is deprecated in favor of "requested-tags"
* Added "?whole" option to "/instances/{id}/tags" to access tags stored after pixel data
Plugins
-------
* Multitenant DICOM plugin: added support for locales.
* Housekeeper plugin:
- Added an option "LimitMainDicomTagsReconstructLevel"
(allowed values: "Patient", "Study", "Series", "Instance"). This can greatly speed
up the housekeeper process, e.g. if you have only updated the Study level ExtraMainDicomTags.
- Fixed broken /instances/../tags route after running the Housekeeper
after having changed the "IngestTranscoding".
* SDK: added OrthancPluginLogMessage() as a new primitive for plugins
to log messages. This new primitive will display the plugin name,
the plugin file name, and the plugin line number in the logs. If
they are not using the LOG() facilities provided by the
OrthancFramework, plugins should now use ORTHANC_PLUGINS_LOG_INFO(),
ORTHANC_PLUGINS_LOG_WARNING(), and ORTHANC_PLUGINS_LOG_ERROR().
Maintenance
-----------
* C-Find queries:
- In C-Find queries including "GenericGroupLength" tags, Orthanc was still
extracting these tags from the storage although they were already ignored
and not returned in the response.
They are now removed from the query earlier to avoid this disk access that
could slow down the response time. Note that this seems to happen mainly
when the query originates from some GE devices (AWS).
- "TimezoneOffsetFromUTC" is now ignored for matching.
* The 0x0111 DIMSE Status is now considered as a warning instead of an error
when received as a response to a C-Store.
See https://discourse.orthanc-server.org/t/ignore-dimse-status-0x0111-when-sending-partial-duplicate-studies/4555/3
* Removed potential PHI from the logs when Orthanc encounters an error while
creating a ZIP archive.
* Monitoring of stable resources now also takes into consideration the
resource type, not only the resource identifier identifier.
* DICOM TLS:
- In prior versions, when "DicomTlsRemoteCertificateRequired" was set to false, Orthanc
was still sending a client certificate request during the TLS handshake but was not
triggering and error if the client certificate was not trusted (equivalent to the
"--verify-peer-cert" DCMTK option). Starting with Orthanc 1.12.4, if this option is
set to "false", Orthanc will not send a client certificate request during the TLS
handshake anymore (equivalent to the "--ignore-peer-cert" DCMTK option).
- When working with "DicomTlsEnabled": true and "DicomTlsRemoteCertificateRequired": false,
Orthanc was refusing to start if no "DicomTlsTrustedCertificates" was provided.
- New configuration options:
- "DicomTlsMinimumProtocolVersion" to select the minimum TLS protocol version
- "DicomTlsCiphersAccepted" to fine tune the list of accepted ciphers
* Fixed broken /instances/../tags route after calling of
/studies/../reconstruct after having changed the "IngestTranscoding".
* Upgraded dependencies for static builds:
- boost 1.85.0
Version 1.12.3 (2024-01-31)
===========================
General
-------
* Performance of databases:
- At startup, if using a database plugin, displays the latency to access the DB.
- Added support for new DB primitives to enable the "READ COMMITTED"
transaction mode in the PostgreSQL plugin.
REST API
--------
* API version upgraded to 23
* Added a 'KeepLabels' option in /modify routes (default = false)
Maintenance
-----------
* Upgraded dependencies for static builds:
- boost 1.84.0
- curl 8.5.0
- dcmtk 3.6.8
- jsoncpp 1.9.5
- libjpeg 9f
- libpng 1.6.40
- openssl 3.1.4
- pugixml 1.14
- zlib 1.3.1
Version 1.12.2 (2023-12-19)
===========================
General
-------
* Performance:
- Allow multiple plugins to use the plugin SDK at the same time. In previous versions,
functions like instance transcoding or instance reading where mutually exclusive.
This can bring some significant improvements, especially in viewers.
- Optimized the StorageCache to prevent loading the same file multiple times if
multiple users request the same file at the same time.
- The StorageCache is now also storing transcoded instances that have been requested by /file?transcode=...
that is now used by the DICOMweb plugin. This speeds up retrieval of transcoded frames through WADO-RS.
- Now displaying timings when reading from/writing to disk in the verbose logs.
* HTTP compression:
- The default value of the "HttpCompressionEnabled" is now false by default. This reduces
the Orthanc overall CPU usage and latency. This is suitable for setups with large
bandwidth network like LAN.
- When "HttpCompressionEnabled" is true, only the content that is clearly identified as
compressible is compressed (JSON, XML, HTML, text, ...). DICOM files are never
compressed over HTTP. In prior versions, all content types were compressed.
This notably greatly improves loading time of large DICOM
files through WADO-RS e.g in StoneViewer when working on large bandwidth networks.
- When "HttpCompressionEnabled" is true, content < 2KB are never compressed.
* Logs:
- Each line of log now contains the name of the thread that is logging the message.
A new "--logs-no-thread" command line option can be used to get back to the previous behavior to
keep backward compatibility.
REST API
--------
* API version upgraded to 22
* Added a route to delete completed jobs from history: DELETE /jobs/{id}
* Added a "transcode" option to the /file route:
e.g: /instances/../file?transcode=1.2.840.10008.1.2.4.80
* now accepting GET requests on these 3 routes to create archive/media:
/tools/create-archive?resources=..,..2&transcode=1.2.840.10008.1.2.4.80
/tools/create-media?resources=..,..2&transcode=1.2.840.10008.1.2.4.80
/tools/create-media-extended?resources=..,..2&transcode=1.2.840.10008.1.2.4.80
* All "expand" GET arguments now accepts "expand=true" and "expand=false" values.
The /studies/../instances and sibling routes are the only whose expand is true if not specified.
These routes now accepts "expand=false" to simply list the child resources ids.
* In /tools/metrics-prometheus:
- "orthanc_dicom_cache_size" renamed as "orthanc_dicom_cache_size_mb"
- added "orthanc_storage_cache_count" and "orthanc_storage_cache_size_mb"
Plugins
-------
* Housekeeper plugin:
- Update to rebuild the cache of the DICOMweb plugin when updating to DICOMweb 1.15.
- New trigger configuration: "DicomWebCacheChange"
- Fixed reading the triggers configuration.
- Introduced a "sleep" to lower CPU usage when idle.
* Plugins are now allowed to modify/delete private metadata/attachments
(i.e. whose identifiers are < 1024)
* Added "OrthancPluginSetCurrentThreadName()" in the plugin SDK.
Maintenance
-----------
* Fix unit test PngWriter.Color16Pattern on big-endian architectures,
as suggested by Etienne Mollier: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1041813
* Prevent the leak of the full path of the source files in the binaries
* Fix loading of DCMTK dictionary in the MultitenantDicom plugin when built dynamically:
https://discourse.orthanc-server.org/t/dimse-failure-using-multitenant-plugin/3665
* Support multiple values in SpecificCharacterSet in C-Find answers:
https://discourse.orthanc-server.org/t/c-find-fails-on-unknown-specific-character-set-iso-2022-ir-6-iso-2022-ir-100/3947
* When exporting a study archive, make sure to use the PatientName from the study and not from the patient
in case of PatientID collision.
* DICOM C-Store:
- Avoid some unnecessary renegotiation of DICOM association.
- Force renegotiation in case no presentation context were accepted in previous association (we have
observed PACS that were not consistent in the accepted presentation contexts)
- Improved logging
* Solved a deadlock related to the Job Engine events and plugins. Job events are now pushed
into a queue to be handled asynchronously by plugins.
* ZIP of studies whose PatientName and PatientID did not contain any ASCII character are now valid.
* Upgraded minizip library to stay away from CVE-2023-45853 although Orthanc is likely not affected since ZIP
filenames are based on DICOM Tag values whose length is limited in size.
Great thanks to James Addison for notifying us about the vulnerability and patch to apply !
* Fix XSS in Orthanc error reporting (as reported by Sébastien Doria, Vumetric Cybersecurity) by:
- always including a "Content-Type" header in HTTP responses with a body.
- always including "X-Content-Type-Options: nosniff"
* Upgraded dependencies for static builds:
- boost 1.83.0
Version 1.12.1 (2023-07-04)
===========================
General
-------
* Orthanc now anonymizes according to Basic Profile of PS 3.15-2023b Table E.1-1
* Added metrics:
- "orthanc_storage_read_bytes"
- "orthanc_storage_written_bytes"
- "orthanc_memory_trimming_duration_ms"
REST API
--------
* API version upgraded to 21
* "/tools/create-dicom" can now be used to create Encapsulated 3D
Manufacturing Model IODs (MTL, OBJ, or STL)
* Added a route to delete the output of an asynchronous job (right now
only for archive jobs): e.g. DELETE /jobs/../archive
Plugins
-------
* Added "OrthancPluginLoadDicomInstance()" to load DICOM instances from the database
* Added "OrthancPluginSetMetricsIntegerValue()" to track metrics with integer values
Maintenance
-----------
* Fix decoding of YBR_FULL RLE images for which the "Planar Configuration"
tag (0028,0006) equals 1
* Made Orthanc more resilient to common spelling errors in SpecificCharacterSet
* Modality worklists plugin: Allow searching on private tags (exact match only)
* Fix orphan files remaining in storage when working with MaximumStorageSize
(https://discourse.orthanc-server.org/t/issue-with-deleting-incoming-dicoms-when-maximumstoragesize-is-reached/3510)
* When deleting a resource, the "LastUpdate" metadata of its parents are now updated
* Reduced the memory usage when downloading archives when "ZipLoaderThreads" > 0
* Metrics can be stored either as floating-point numbers, or as integers
* Reduce the frequency of memory trimming from 100ms to 30s to avoid high idle
CPU load (https://discourse.orthanc-server.org/t/onchange-callbacks-and-cpu-loads/3534).
* Upgraded dependencies for static builds:
- boost 1.82.0
Version 1.12.0 (2023-04-14)
===========================
General
-------
* Support for labels associated with patients, studies, series, and instances
* Added a sample plugin bringing multitenant DICOM support through labels
REST API
--------
* API version upgraded to 20
* New URIs "/.../{id}/labels/{label}" to test/set/remove labels
* "/patients/{id}", "/studies/{id}", "/series/{id}" and "/instances/{id}"
contain the "Labels" field
* "/tools/find" now accepts the "Labels" and "LabelsConstraint" arguments
* "/tools/labels" lists all the labels that are associated with any resource
* "/system": added "UserMetadata" and "HasLabels"
* Added option "?numeric" if listing metadata
Plugins
-------
* Added "OrthancPluginRegisterDatabaseBackendV4()" to communicate using Google
Protocol Buffers between the Orthanc core and database plugins
Orthanc Explorer
----------------
* Added support for labels
* Added buttons to copy the URL of ZIP archives and DICOM files to the clipboard
Maintenance
-----------
* Enforce the existence of the patient/study/instance while creating its archive
* Security: New configuration option "RestApiWriteToFileSystemEnabled"
to allow "/instances/../export" (the latter is now disabled by default)
* Fix issue 214: VOILUTSequence is not returned in Wado-RS
* Fix /tools/reset crashing when ExtraMainDicomTags were defined
* Fix Housekeeper plugin infinite loop if Orthanc is empty.
* Fix a crash in /tools/reconstruct triggered by the Housekeeper plugin
when only changing the StorageCompression.
* Avoid the use of "externalproject_add()" to build the sample plugins
* Upgraded dependencies for static builds:
- openssl 3.1.0
Version 1.11.3 (2023-02-03)
===========================
General
-------
* C-Store SCU now gives priority to the preferred TransferSyntax
proposed by the receiving SCP instead of Orthanc own
AcceptedTransferSyntaxes.
* Made the default SQLite DB more robust wrt future updates like
adding new columns in DB.
* Made the HTTP Client errors more verbose by including the URL in the logs.
* Optimization: now using multiple threads to transcode files for
asynchronous download of studies archive.
* New configuration "KeepAliveTimeout" with a default value of 1 second.
* ResourceModification jobs (/modify + /anonymize) can now use multiple threads to speed up processing
- New configuration "JobsEngineThreadsCount.ResourceModification" to configure the number of threads.
* For systems using glibc > 2.8 (most of Linux systems except LSB
binaries): Introduced a new thread for to trim memory in Orthanc (different
from the Housekeeper sample plugin). This thread regularly try to
give back memory that Orthanc no longer uses to the system. This
reduces the overall memory consumption. More information in
OrthancServer/Resources/ImplementationNotes/memory_consumption.txt.
REST API
--------
* API version upgraded to 19
* Loosen the sanity checks for DICOM modifications, if "Force" option is given:
- allow modification of PatientID at study level
- allow modification of PatientID, StudyInstanceUID at series level
- allow modification of PatientID, StudyInstanceUID, SeriesInstanceUID at instance level
- allow modification of a patient without changing her PatientID
Added sanity checks for modifications to make sure the user preserves the DICOM model when modifying high level tags.
E.g. if you modify the PatientID at study level, also make sure to modify all other Patient related
tags (PatientName, PatientBirthDate, ...)
* Automatically reconstruct the modified resources at the end of the DICOM modifications job to ensure
improved consistency of the DICOM model.
* If specifying 'Transcode' option to /modify or /anonymize, this value will take over the 'IngestTranscoding'
global configuration
* Allow the HTTP server to return responses > 2GB (fixes asynchronous download of zip studies > 2GB)
* /modalities/.../store now accepts "CalledAet", "Host", "Port" to override the modality configuration
from the configuration file for a specific operation.
* /tools/metrics-prometheus: added orthanc_last_change and orthanc_up_time_s
* Tolerance for "image/jpg" MIME type instead of "image/jpeg" in /tools/create-dicom
* /system: added MaximumStorageMode and MaximumStorageSize
Plugins
-------
* Added a "header" argument to all OrthancPeers::DoPost, DoPut, ... in the "OrthancPluginCppWrapper"
* Added "OrthancPluginCreateJob2()" in the plugin SDK to avoid
possible crashes when "OrthancPluginJobGetContent()" or
"OrthancPluginJobGetSerialized()" get called
Maintenance
-----------
* Fix decoding of RLE images for which the "Planar Configuration" tag (0028,0006) equals 1
* Fix issue #212 (Anonymization process transcodes data and loses resource link).
Version 1.11.2 (2022-08-30)
===========================
General
-------
* Added support for RGBA64 images in tools/create-dicom and /preview
* New configuration "MaximumStorageMode" to choose between recyling of
old patients (default behavior) and rejection of new incoming data when
the MaximumStorageSize has been reached.
Bug Fixes
---------
* Fix the "Never" option of the "StorageAccessOnFind" that was sill accessing
files (bug introduced in 1.11.0).
* Fix the Storage Cache for compressed files (bug introduced in 1.11.1).
Maintenance
-----------
* DelayedDeletion plugin: Fix leaking of symbols
* SQLite now closes and deletes WAL and SHM files on exit. This should improve
handling of SQLite DB over network drives.
* Fix static compilation of boost 1.69 on Ubuntu 22.04
* Upgraded dependencies for static builds:
- boost 1.80.0
- dcmtk 3.6.7 (fixes CVE-2022-2119 and CVE-2022-2120)
- openssl 3.0.5
Version 1.11.1 (2022-06-30)
===========================
General
-------
* New sample plugin: "DelayedDeletion" that will delete files from disk
asynchronously to speed up deletion of large studies.
* Lua: new "SetHttpTimeout" function
* Lua: new "OnHeartBeat" callback called at regular interval provided that
you have configured "LuaHeartBeatPeriod" > 0.
* "ExtraMainDicomTags" configuration now accepts Dicom Sequences. Sequences are
stored in a dedicated new metadata "MainDicomSequences". This should improve
DicomWeb QIDO-RS and avoid warnings like "Accessing Dicom tags from storage when
accessing series : 0040,0275".
Main dicom sequences can now be returned in "MainDicomTags" and in "RequestedTags".
Bug Fixes
---------
* Fix the storage cache that was not used by the Plugin SDK. This fixes the
DicomWeb plugin "/rendered" route performance issues.
Maintenance
-----------
* Housekeeper plugin: Fix resume of previous processing
* Added missing MOVEPatientRootQueryRetrieveInformationModel in
DicomControlUserConnection::SetupPresentationContexts()
* Improved HttpClient error logging (add method + URL)
REST API
--------
* API version upgraded to 18
* /system is now reporting "DatabaseServerIdentifier"
* Added an Asynchronous mode to /modalities/../move.
* "RequestedTags" option can now include DICOM sequences.
Plugins
-------
* New function in the SDK: "OrthancPluginGetDatabaseServerIdentifier"
OrthancFramework (C++)
----------------------
* DicomMap::ParseMainDicomTags has been deprecated -> retrieve "full" tags
and use DicomMap::FromDicomAsJson instead
Version 1.11.0 (2022-05-09)
===========================
General
-------
* New configuration "ExtraMainDicomTags" to store more tags in the Index DB
to speed up, e.g, building C-Find, dicom-web or tools/find answers
* New sample plugin: "Housekeeper" that will re-construct the DB/Storage
when it detects there is room for improvements, e.g:
- if files were stored with a version of Orthanc prior to 1.9.1,
the storage might still contain dicom-as-json files that are not needed
anymore -> it will remove them
- if "ExtraMainDicomTags" has changed.
- if "StorageCompression" or "IngestTranscoding" has chagned.
* New configuration "Warnings" to enable/disable individual warnings that can
be identified by a W0XX prefix in the logs.
These warnings have been added:
- W001_TagsBeingReadFromStorage
- W002_InconsistentDicomTagsInDb
* C-Find and QIDO-RS can now return the InstanceAvailability tag. Value is
always "ONLINE"
* Improved decoding of US Images with Implicit VR.
* Speed-up handling of DicomModalitiesInStudy in C-Find and tools/find queries.
REST API
--------
* API version upgraded to 17
* new options in tools/find:
- "RequestedTags" (to use together with "Expand": true) contains a list of tags
that you'll receive in the "RequestedTags" field in the answers. These tags
may be tags from the MainDicomTags in DB, from the DICOM file or 'computed'
like ModalitiesInStudy. Check the new configuration "ExtraMainDicomTags" and
"Warnings" to optimize your queries.
* new query argument "requestedTags" in all API routes listing resources:
- /patients, /patients/../studies, /patients/../series, /patients/../instances
- /studies, /studies/../series, /studies/../instances
- /series, /series/../instances
- /instances
ex:
- /studies/c27857df-4078c84c-1a79ea78-ac357bb2-9dadc119?requestedTags=ModalitiesInStudy
- /studies?expand&since=0&limit=10&requestedTags=ModalitiesInStudy
* /reconstruct routes:
- new options "ReconstructFiles" (false by default to keep backward compatibility) to
potentialy compress/uncompress the files or transcode them if "StorageCompression"
or "IngestTranscoding" has changed since the file has been ingested.
POSSIBLE BREAKING-CHANGES:
- the /reconstruct routes now preserve all metadata
- the /reconstruct routes now skip the IncomingInstanceFilter
- the /reconstruct routes won't generate new events like NewStudy, StableStudy, ...
therefore, the corresponding callbacks won't be called anymore
- the /reconstruct routes won't affect the patient recycling anymore
* new fields reported in the /system route:
- "MainDicomTags" to list the tags that are saved in DB
- "StorageCompression", "OverwriteInstances", "IngestTranscoding" reported from the
configuration file
* New option "filename" in "/.../{id}/archive" and "/.../{id}/media" to
manually set the filename in the "Content-Disposition" HTTP header
Version 1.10.1 (2022-03-23)
===========================
General
-------
* Improved DICOM authorization checks when multiple modalities are
declared with the same AET.
Plugins
-------
* New function in the SDK: "OrthancPluginRegisterWebDavCollection()"
to map a WebDAV virtual filesystem into the REST API of Orthanc.
Documentation
-------------
* Removed the "LimitJobs" configuration that is not used anymore since
the new JobEngine has been introduced (in Orthanc 1.4.0). The
pending list of jobs is unlimited.
Version 1.10.0 (2022-02-23)
===========================
General
-------
* New configuration "DicomAlwaysAllowFindWorklist" to complement the existing
"DicomAlwaysAllowFind" configuration. "DicomAlwaysAllowFind" applies now
only to C-Find for Patients/Studies/Series/Instances while C-Find for worklists are
covered by "DicomAlwaysAllowFindWorklist". The same changes applies to new
configurations in "DicomModalities": "AllowFind" is now complemented by
"AllowFindWorklist".
This new option allows improved security management. E.g: a modality might have
only "AllowStore" and "AllowFindWorklist" enabled but might have "AllowFind"
disabled to prevent listing past patient studies.
Possible BREAKING-CHANGE: if you relied on "DicomAlwaysAllowFind" or "AllowFind"
to specifically authorize C-Find for worklist, you now need to explicitly enable
"DicomAlwaysAllowFindWorklist" and/or "AllowFindWorklist"
* Added a storage cache in RAM to avoid reading the same files multiple times from
the storage. This greatly improves, among other things, the performance of WADO-RS
retrieval of individual frames of multiframe instances.
* New configuration option "MaximumStorageCacheSize" to configure the size of
the new storage cache.
* New experimental configuration option "ZipLoaderThreads" to configure the number of
threads used to read instances from storage when creating a Zip archive/media.
* Support decoding of black-and-white images (with 1 bit per pixel), notably DICOM SEG
* Added links to download attachments from the Orthanc Explorer
* Fix XSS inside DICOM in Orthanc Explorer (as reported by Stuart Kurutac, NCC Group).
XSS Issues were re-introduced in Orthanc 1.9.4.
REST API
--------
* API version upgraded to 16
* If an image can not be decoded, "../preview" and "../rendered" routes
are now returning "unsupported.png" only if the
"?returnUnsupportedImage" option is specified; otherwise, it raises
a 415 HTTP error code.
* Archive jobs response now contains a header Content-Disposition:filename='archive.zip'
* "/instances/{...}/frames/{...}/numpy": Download the frame as a Python numpy array
* "/instances/{...}/numpy": Download the instance as a Python numpy array
* "/series/{...}/numpy": Download the series as a Python numpy array
* Added a "?full" option to "/patients|studies|series|instances/{...}/attachments" route
to show the mapping alias<->numerical id.
* Added "/patients|studies|series|instances/{...}/attachments/{...}/info" route to retrieve
the full information about an attachment (size, type, MD5 and UUID)
Lua
---
* New "ReceivedCStoreInstanceFilter" Lua callback to filter instances received
through C-Store and return a specific C-Store status code.
Plugins
-------
* New functions in the SDK:
- OrthancPluginRegisterIncomingCStoreInstanceFilter()
- OrthancPluginRegisterReceivedInstanceCallback()
Maintenance
-----------
* Removed the OpenSSL license exception, as binary versions of Orthanc are now
designed to use OpenSSL 3.x, that was re-licensed under Apache 2.0, making
it compatible with the GPL/AGPL licenses used by the Orthanc project:
https://en.wikipedia.org/wiki/OpenSSL#Licensing
https://people.gnome.org/~markmc/openssl-and-the-gpl.html
* Fix handling of option "DeidentifyLogs", notably for tags (0010,0010) and (0010,0020)
* New configuration options:
- "DicomThreadsCount" to set the number of threads in the embedded DICOM server
* Fix instances accumulating in DB while their attachments were not stored because of
MaximumStorageSize limit reached with a single patient in DB.
* Dropped support for static compilation of OpenSSL 1.0.2
* Upgraded dependencies for static builds (notably on Windows and LSB):
- openssl 3.0.1
Version 1.9.7 (2021-08-31)
==========================
General
-------
* New configuration option "DicomAlwaysAllowMove" to disable verification of
the remote modality in C-MOVE SCP
REST API
--------
* API version upgraded to 15
* Added "Level" option to POST /tools/bulk-modify
* Added missing OpenAPI documentation of "KeepSource" in ".../modify" and ".../anonymize"
Maintenance
-----------
* Added file CITATION.cff
* Linux Standard Base (LSB) builds of Orthanc can load non-LSB builds of plugins
* Fix upload of ZIP archives containing a DICOMDIR file
* Fix computation of the estimated time of arrival in jobs
* Support detection of windowing and rescale in Philips multiframe images
Version 1.9.6 (2021-07-21)
==========================
Orthanc Explorer
----------------
* In lookup and query/retrieve, possibility to provide a specific study date
* Clicking on "Send to remote modality" displays the job information to monitor progress
Maintenance
-----------
* Fix orphaned attachments if bad revision number is provided
Version 1.9.5 (2021-07-08)
==========================
General
-------
* Anonymization is applied recursively to nested tags
REST API
--------
* API version upgraded to 14
* Added "Short", "Simplify" and/or "Full" options to control the format of DICOM tags in:
- POST /modalities/{id}/find-worklist
- POST /queries/{id}/answers/{index}/retrieve
- POST /queries/{id}/retrieve
Maintenance
-----------
* Fix broken "Do lookup" button in Orthanc Explorer
* Error code and description of jobs are now saved into the Orthanc database
Version 1.9.4 (2021-06-24)
==========================
General
-------
* Orthanc now anonymizes according to Basic Profile of PS 3.15-2021b Table E.1-1
* New configuration options:
- "ExternalDictionaries" to load external DICOM dictionaries (useful for DICONDE)
- "SynchronousZipStream" to disable streaming of ZIP
Orthanc Explorer
----------------
* Orthanc Explorer supports the DICONDE dictionary
REST API
--------
* API version upgraded to 13
* New routes to handle groups of multiple, unrelated DICOM resources at once:
- "/tools/bulk-anonymize" to anonymize a set of resources
- "/tools/bulk-content" to get the content of a set of resources
- "/tools/bulk-delete" to delete a set of resources
- "/tools/bulk-modify" to modify a set of resources
* ZIP archive/media generated in synchronous mode are now streamed by default
* "Replace" tags in "/modify" and "/anonymize" now supports value representation AT
* "/jobs/..." has new field "ErrorDetails" to help identify the cause of an error
* "Replace", "Keep" and "Remove" in "/modify" and "/anonymize" accept paths to subsequences
using the syntax of the dcmodify command-line tool (wildcards are supported as well)
* Added "short", "simplify" and/or "full" options to control the format of DICOM tags in:
- GET /patients, GET /studies, GET /series, GET /instances (together with "&expand")
- GET /patients/{id}, GET /studies/{id}, GET /series/{id}, GET /instances/{id}
- GET /patients/{id}/studies, GET /patients/{id}/series, GET /patients/{id}/instances
- GET /studies/{id}/patient, GET /studies/{id}/series, GET /studies/{id}/instances
- GET /series/{id}/patient, GET /series/{id}/study, GET /series/{id}/instances
- GET /instances/{id}/patient, GET /instances/{id}/study, GET /instances/{id}/series
- GET /patients/{id}/instances-tags, GET /patients/{id}/shared-tags
- GET /studies/{id}/instances-tags, GET /series/{id}/shared-tags
- GET /series/{id}/instances-tags, GET /studies/{id}/shared-tags
- GET /patients/{id}/module, GET /patients/{id}/patient-module
- GET /series/{id}/module, GET /studies/{id}/module, GET /instances/{id}/module
- GET /queries/{id}/answers&expand, GET /queries/{id}/answers/{index}/content
- POST /tools/find
* "/studies/{id}/split" accepts "Instances" parameter to split instances instead of series
* "/studies/{id}/merge" accepts instances inside its "Resources" parameter
Maintenance
-----------
* Full support of hierarchical relationships in tags whose VR is UI during anonymization
* C-MOVE SCP: added possible DIMSE status "Sub-operations Complete - One or more Failures"
* Fix issue #146 (Update Anonyization to 2019c) - was actually updated to 2021b
* Upgraded dependencies for static builds (notably on Windows):
- curl 7.77.0
Version 1.9.3 (2021-05-07)
==========================
General
-------
* New configuration option: "DicomTlsRemoteCertificateRequired" to allow secure DICOM TLS
connections without certificate
REST API
--------
* "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Maintenance
-----------
* New CMake option: "ORTHANC_LUA_VERSION" to use a specific version of system-wide Lua
* Fix the lifetime of temporary files associated with jobs that create ZIP archive/media:
- In synchronous mode, their number could grow up to "JobsHistorySize" in Orthanc <= 1.9.2
- In asynchronous mode, the temporary files are removed as soon as their job gets canceled
* Fix regression in the handling of "DicomCheckModalityHost" configuration option
introduced by changeset 4182 in Orthanc 1.7.4
* Reduced memory consumption of "OrthancPluginHttpClient()", "OrthancPluginHttpClient2()" and
"OrthancPluginCallPeerApi()" on POST/PUT if chunked transfer is disabled
* Fix issue #195 (No need for BulkDataURI when Data Element is empty)
Version 1.9.2 (2021-04-22)
==========================
General
-------
* New configuration options related to multiple readers/writers:
- "DatabaseServerIdentifier" identifies the server in the DB among a pool of Orthanc servers
- "CheckRevisions" to protect against concurrent modifications of metadata and attachments
REST API
--------
* API version upgraded to 12
* "/system" reports the value of the "CheckRevisions" global option
* "/.../{id}/metadata/{name}" and "/.../{id}/attachments/{name}/..." URIs handle the
HTTP headers "If-Match", "If-None-Match" and "ETag" to cope with revisions
Plugins
-------
* New function in the SDK: OrthancPluginCallRestApi()
* Full refactoring of the database plugin SDK to handle multiple readers/writers,
which notably implies the handling of retries in the case of collisions
Maintenance
-----------
* Use the local timezone for query/retrieve in the Orthanc Explorer interface (was UTC before)
* Fix "OrthancServer/Resources/Samples/Python/Replicate.py" for Python 3.x
* Fix issue #83 (ServerIndex shall implement retries for DB temporary errors)
* Upgraded dependencies for static builds (notably on Windows and LSB):
- civetweb 1.14
- openssl 1.1.1k
Version 1.9.1 (2021-02-25)
==========================
General
-------
* The "dicom-as-json" attachments are not explicitly stored anymore to improve performance
* If the storage area doesn't support range reading, or if "StorageCompression"
is enabled, a new type of attachment "dicom-until-pixel-data" is generated
* New metadata automatically computed at the instance level: "PixelDataOffset"
* New configuration option related to networking:
- "Timeout" in "DicomModalities" to set DICOM SCU timeout on a per-modality basis
- "Timeout" in "OrthancPeers" to set HTTP client timeout on a per-peer basis
REST API
--------
* API version upgraded to 11
* BREAKING CHANGES:
- External applications should not call "/instances/.../attachments/dicom-as-json" anymore,
and should use "/instances/.../tags" instead
- "/instances/.../tags" route does not report the tags after "Pixel Data" (7fe0,0010) anymore
* "/peers/{id}/store-straight": Synchronously send the DICOM instance in POST body to the peer
* New arguments in the REST API:
- "Timeout" in "/modalities/.../query"
- "Timeout" in "/modalities/.../storage-commitment"
- "Timeout" in "/queries/.../answers/.../query-{studies|series|instances}"
Plugins
-------
* New value in enumeration: OrthancPluginDicomToJsonFlags_StopAfterPixelData
* New value in enumeration: OrthancPluginDicomToJsonFlags_SkipGroupLengths
Maintenance
-----------
* Improved precision of floating-point numbers in DICOM-as-JSON and DICOM summary
* Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
* Fix build on big-endian architectures
* Handle public tags with "UN" value representation and containing a string (cf. DICOM CP 246)
* The numbering of sequences in Orthanc Explorer now uses the DICOM convention (starts at 1)
* Possibility to generate a static library containing the Orthanc Framework
Version 1.9.0 (2021-01-29)
==========================
General
-------
* Support of DICOM TLS
* New configuration options related to DICOM networking:
- "DicomTlsEnabled" to enable DICOM TLS in Orthanc SCP
- "DicomTlsCertificate" to provide the TLS certificate to be used in both Orthanc SCU and SCP
- "DicomTlsPrivateKey" to provide the private key of the TLS certificate
- "DicomTlsTrustedCertificates" to provide the list of TLS certificates to be trusted by Orthanc
- "UseDicomTls" in "DicomModalities" to enable DICOM TLS in outgoing SCU on a per-modality basis
- "MaximumPduLength" to tune the maximum PDU length (Protocol Data Unit)
- "LocalAet" in "DicomModalities" to overwrite global "DicomAet" for SCU on a per-modality basis
- "AcceptedTransferSyntaxes" to set the transfer syntax UIDs accepted by Orthanc C-STORE SCP
- "H265TransferSyntaxAccepted" to enable/disable all the transfer syntaxes related to H.265
- "DicomAlwaysAllowFind" to disable verification of the remote modality in C-FIND SCP
- "DicomAlwaysAllowGet" to disable verification of the remote modality in C-GET SCP
* New configuration option: "DicomScuPreferredTransferSyntax" to control transcoding in C-STORE SCU
* New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
* New metadata automatically computed at the series level: "RemoteAET"
Orthanc Explorer
----------------
* The DICOM meta-header and the transfer syntax are displayed at the "Instance" level
REST API
--------
* API version upgraded to 10
* "/tools/accepted-transfer-syntaxes": Get/set transfer syntaxes accepted by Orthanc C-STORE SCP
* "/tools/unknown-sop-class-accepted": Get/set whether C-STORE SCP accepts unknown SOP class UID
* "/modalities/{...}/query": New string argument "LocalAet"
* "/tools/create-dicom": New flag "Force" to bypass consistency checks for the DICOM tags
Lua
---
* BREAKING CHANGE: All the Lua callbacks "IsXXXTransferSyntaxAccepted()" and
"IsUnknownSopClassAccepted()" have been removed
Plugins
-------
* New functions in the SDK:
- OrthancPluginCreateMemoryBuffer64()
- OrthancPluginRegisterStorageArea2()
- OrthancPluginCreateDicom2()
Maintenance
-----------
* Refactoring and improvements to the cache of DICOM files (it can now hold many files)
* New Prometheus metrics "orthanc_dicom_cache_count" and "orthanc_dicom_cache_size"
* Fix upload of multiple DICOM files using one single POST call to "multipart/form-data"
Could be the final resolution of issue #21 (DICOM files missing after uploading with Firefox)
* Partial fix of issue #48 (Windows service not stopped properly), cf. comments 4 and 5
* Explicitly use little-endian to encode uncompressed file size with zlib compression
* Upgraded dependencies for static builds (notably on Windows):
- dcmtk 3.6.6
- jsoncpp 1.9.4
Version 1.8.2 (2020-12-18)
==========================
General
-------
* ZIP archives containing DICOM files can be uploaded using WebDAV
* New config option "MallocArenaMax" to control memory usage on GNU/Linux
* Explicit error log if trying to load a 32bit (resp. 64bit) plugin into
a 64bit (resp. 32bit) version of Orthanc
* New configuration options contributed by Varian Medical Systems:
- "DeidentifyLogs" to remove patient identification from the logs (C-GET, C-MOVE, C-FIND)
- "DeidentifyLogsDicomVersion" to specify the deidentification rules for the logs
- "OrthancExplorerEnabled" to enable/disable the Orthanc Explorer Web user interface