# HG changeset patch # User Sebastien Jodogne # Date 1589987232 -7200 # Node ID b8b9b108a69757c23c225b308cbd892658b9c924 # Parent 24b1c64002b888bb7ce4c44915dda9bf23c3b29c# Parent e0b4b88446a8bce47e541a47ddbb11562b0d6d5f integration c-get->mainline diff -r 24b1c64002b8 -r b8b9b108a697 Sphinx/source/dicom-guide.rst --- a/Sphinx/source/dicom-guide.rst Wed May 20 07:06:07 2020 +0200 +++ b/Sphinx/source/dicom-guide.rst Wed May 20 17:07:12 2020 +0200 @@ -289,7 +289,8 @@ 2. **Send images** from the local imaging device to a remote device (:ref:`C-Store `). 3. **Search the content** of a remote device (:ref:`C-Find `). -4. **Retrieve images** from a remote device (:ref:`C-Move `). +4. **Retrieve images** from a remote device (:ref:`C-Move + ` or :ref:`C-Get `). Here is a picture that summarizes some key concepts: @@ -569,11 +570,9 @@ *Note 1:* Even if C-Move may seem counter-intuitive, this is the most popular and widespread way to initiate a query/retrieve against a PACS -server. The DICOM standard features an `alternative mechanism called -C-Get -`_. -As of Orthanc 1.4.1, C-Get is not supported yet (but work is in -progress). +server. The DICOM standard features an alternative mechanism called +:ref:`DICOM C-Get ` that has been introduced in Orthanc +1.7.0 (see below). *Note 2:* As :ref:`written above `, the Orthanc engine is quite generic and is compatible with virtually any image @@ -591,6 +590,57 @@ ` (by default, all the transfer syntaxes are enabled). +.. _dicom-get: + +C-Get: Retrieve with one single SCP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Orthanc 1.7.0 introduces support for `DICOM C-Get SCP +`__. +C-Get provides a simpler alternative to C-Move, in the case where the +*issuer* and the *target* (as depicted in the section about +:ref:`C-Move `) correspond to the same modality. + +In the case of C-Get, contrarily to C-Move, the *target* modality +doesn't need to act as a C-Store SCP. This has advantage of +simplifying the design of the SCU (only one DICOM server is needed in +the *source* modality), and to ease the network configuration (instead +of being bidirectional as in query/retrieve through C-Move, C-Get is +unidirectional from *issuer* to *source*, which simplifies firewall +rules). Nevertheless, C-Get is less generic than C-Move and is rarely +encountered in clinical PACS workflow. It is more often used by DICOM +viewers. Also note that :ref:`DICOMweb WADO-RS ` is designed +for the same kind of use cases than C-Get. + +To retrieve DICOM instances using C-Get, you must provide one ore more +of the unique key attributes (``PatientID``, ``StudyInstanceUID``, +``SeriesInstanceUID`` or ``SOPInstanceUID``). This information can for +instance be retrieved through a :ref:`C-Find request `. + +.. highlight:: json + +As an example, let us consider the following minimalist :ref:`Orthanc +configuration `:: + + { + "DicomModalities" : { + "getscu" : [ "GETSCU", "localhost", 2000 ] + } + } + +.. highlight:: text + +Given this configuration, here is a sample command-line to call the +C-Get SCP of Orthanc using the `DCMTK +`__ toolkit, given some +known ``StudyInstanceUID``:: + + $ getscu -v localhost 4242 -aec ORTHANC -k "0008,0052=STUDY" -k "0020,000d=1.2.840.113543.6.6.4.7.64067529866380271256212683512383713111129" + +*Note:* As of Orthanc 1.7.0, Orthanc implements C-Get as a service +provider (SCP) but not as a service user (SCU). + + Using HTTP instead of the DICOM protocol ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff -r 24b1c64002b8 -r b8b9b108a697 Sphinx/source/faq/security.rst --- a/Sphinx/source/faq/security.rst Wed May 20 07:06:07 2020 +0200 +++ b/Sphinx/source/faq/security.rst Wed May 20 17:07:12 2020 +0200 @@ -154,7 +154,7 @@ * For each modality that is defined in ``DicomModalities``, selectively specify what DICOM commands are allowed to be issued by the SCU of this modality by setting the suboptions ``AllowEcho``, - ``AllowFind``, ``AllowMove`` and ``AllowStore``. For instance, a + ``AllowFind``, ``AllowMove``, ``AllowStore`` and ``AllowGet``. For instance, a modality could be allowed to C-STORE images, but be disallowed to C-FIND the content of Orthanc. Here is a sample configuration to define a single modality that is only allowed to send DICOM @@ -169,6 +169,7 @@ "AllowEcho" : false, "AllowFind" : false, "AllowMove" : false, + "AllowGet" : false, "AllowStore" : true } } diff -r 24b1c64002b8 -r b8b9b108a697 Sphinx/source/users/docker-osimis.rst --- a/Sphinx/source/users/docker-osimis.rst Wed May 20 07:06:07 2020 +0200 +++ b/Sphinx/source/users/docker-osimis.rst Wed May 20 17:07:12 2020 +0200 @@ -236,7 +236,8 @@ in their JSON section or as soon as you define to ``true`` their specific environment variable. -Below is a list of all plugins, their environment variable and their default configuration: +Below is a list of all plugins, their environment variable and their default configuration +(only when their default configuration is different from the plugin defaults): .. below table is obtained by running orthanc-builder/docker/orthanc/generatePluginDoc.py @@ -244,75 +245,90 @@ +--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ | Plugin | Environment variable | Default configuration | -+==================================================+==================================================+====================================================================================================+ -| **Authorization** | ``AUTHORIZATION_PLUGIN_ENABLED`` | | ++==================================================+==================================================+====================================================================================================+ +| **Authorization** | ``AUTHORIZATION_PLUGIN_ENABLED`` | | +--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **ConnectivityChecks** | ``CONNECTIVITY_CHECKS_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **DicomWeb** | ``DICOM_WEB_PLUGIN_ENABLED`` | .. code-block:: json | -| | | | -| | | { | +| **ConnectivityChecks** | ``CONNECTIVITY_CHECKS_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **DicomWeb** | ``DICOM_WEB_PLUGIN_ENABLED`` | .. code-block:: json | +| | | | +| | | { | | | | "DicomWeb": { | | | | "Enable": true | -| | | } | +| | | } | | | | } | +--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **GoogleCloudPlatform** | ``GOOGLE_CLOUD_PLATFORM_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **GoogleCloudPlatform** | ``GOOGLE_CLOUD_PLATFORM_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **Gdcm** | ``GDCM_PLUGIN_ENABLED`` | .. code-block:: json | +| | Note: enabled by default | | +| | | { | +| | | "Gdcm": { | +| | | "Throttling": 4, | +| | | "RestrictTransferSyntaxes": [ | +| | | "1.2.840.10008.1.2.4.90", | +| | | "1.2.840.10008.1.2.4.91", | +| | | "1.2.840.10008.1.2.4.92", | +| | | "1.2.840.10008.1.2.4.93" | +| | | ] | +| | | } | +| | | } | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ | **OrthancWebViewer** | ``ORTHANC_WEB_VIEWER_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **OsimisWebViewerBasic** | ``OSIMIS_WEB_VIEWER1_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **OsimisWebViewerBasicAlpha** | ``OSIMIS_WEB_VIEWER1_ALPHA_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **PostgreSQL** | ``POSTGRESQL_PLUGIN_ENABLED`` | .. code-block:: json | -| | | | -| | | { | -| | | "PostgreSQL": { | -| | | "EnableIndex": true, | -| | | "EnableStorage": false, | -| | | "Port": 5432, | -| | | "Host": "HOST MUST BE DEFINED", | -| | | "Database": "postgres", | -| | | "Username": "postgres", | -| | | "Password": "postgres", | -| | | "EnableSsl": false, | -| | | "Lock": false | -| | | } | -| | | } | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **MySQL** | ``MYSQL_PLUGIN_ENABLED`` | .. code-block:: json | -| | | | -| | | { | -| | | "MySQL": { | -| | | "EnableIndex": true, | -| | | "EnableStorage": false, | -| | | "Port": 3306, | -| | | "Host": "HOST MUST BE DEFINED", | -| | | "Database": "mysql", | -| | | "Username": "root", | -| | | "Password": "mysql", | -| | | "Lock": false | -| | | } | -| | | } | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **Python** | ``PYTHON_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **ServeFolders** | ``SERVE_FOLDERS_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **Transfers** | ``TRANSFERS_PLUGIN_ENABLED`` | | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **Worklists** | ``WORKLISTS_PLUGIN_ENABLED`` | .. code-block:: json | -| | | | -| | | { | -| | | "Worklists": { | -| | | "Enable": true, | -| | | "Database": "/var/lib/orthanc/worklists" | -| | | } | -| | | } | -+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ -| **Wsi** | ``WSI_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **OsimisWebViewerBasic** | ``OSIMIS_WEB_VIEWER1_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **OsimisWebViewerBasicAlpha** | ``OSIMIS_WEB_VIEWER1_ALPHA_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **PostgreSQL** | ``POSTGRESQL_PLUGIN_ENABLED`` | .. code-block:: json | +| | | | +| | | { | +| | | "PostgreSQL": { | +| | | "EnableIndex": true, | +| | | "EnableStorage": false, | +| | | "Port": 5432, | +| | | "Host": "HOST MUST BE DEFINED", | +| | | "Database": "postgres", | +| | | "Username": "postgres", | +| | | "Password": "postgres", | +| | | "EnableSsl": false, | +| | | "Lock": false | +| | | } | +| | | } | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **MySQL** | ``MYSQL_PLUGIN_ENABLED`` | .. code-block:: json | +| | | | +| | | { | +| | | "MySQL": { | +| | | "EnableIndex": true, | +| | | "EnableStorage": false, | +| | | "Port": 3306, | +| | | "Host": "HOST MUST BE DEFINED", | +| | | "Database": "mysql", | +| | | "Username": "root", | +| | | "Password": "mysql", | +| | | "Lock": false | +| | | } | +| | | } | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **Python** | ``PYTHON_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **ServeFolders** | ``SERVE_FOLDERS_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **Transfers** | ``TRANSFERS_PLUGIN_ENABLED`` | | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **Worklists** | ``WORKLISTS_PLUGIN_ENABLED`` | .. code-block:: json | +| | | | +| | | { | +| | | "Worklists": { | +| | | "Enable": true, | +| | | "Database": "/var/lib/orthanc/worklists" | +| | | } | +| | | } | ++--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| **Wsi** | ``WSI_PLUGIN_ENABLED`` | | +--------------------------------------------------+--------------------------------------------------+----------------------------------------------------------------------------------------------------+ + Under the hood --------------