dcmrecv: SCP de stockage DICOM simple (récepteur)
SYNOPSIS
dcmrecv [options] port
DESCRIPTION
dcmrecv est une application qui implémente un fournisseur de classe de service (SCP) pour la classe de service de stockage. Contrairement à l'utilitaire bien connu storescp, dcmrecv propose moins d'options et peut donc s'avérer plus simple à utiliser, ce qui explique d'ailleurs le terme "simple" dans le titre. L'objectif principal de cette application est de recevoir un grand nombre de jeux de données DICOM envoyés par un utilisateur de classe de service de stockage (SCU) et de les enregistrer selon une structure de répertoires et de fichiers configurable.
PARAMÈTRES
port tcp/ip port number to listen on
OPTIONS
options générales
-h --help- affiche cette aide et quitte
--version- affiche les informations de version et quitte
--arguments- affiche les arguments de ligne de commande développés
-q --quiet- mode silencieux, n'affiche ni avertissements ni erreurs
-v --verbose- mode détaillé, affiche les détails du traitement
-d --debug- mode débogage, affiche les informations de débogage
-ll --log-level [l]evel: string constant- (fatal, error, warn, info, debug, trace) utilise le niveau l pour la journalisation
-lc --log-config [f]ilename: string- utilise le fichier de configuration f pour la journalisation
+v --verbose-pc- affiche les contextes de présentation en mode détaillé
options réseau
-i4 --ipv4- utilise IPv4 uniquement (par défaut)
-i6 --ipv6- utilise IPv6 uniquement
-i0 --ip-auto- utilise le profil de négociation d'association à double pile IPv6/IPv4 depuis le fichier de configuration :
-xf --config-file [f]ilename, [p]rofile: string- utilise le profil p du fichier de configuration f. titre d'entité d'application :
-uca --use-called-aetitle- répond toujours avec l'AE title appelé (par défaut)
-aet --aetitle [a]etitle: string- définit mon AE title et vérifie l'AE title appelé. autres options réseau :
-ta --acse-timeout [s]econds: integer (default: 30)- délai d'expiration pour les messages ACSE
-td --dimse-timeout [s]econds: integer (default: unlimited)- délai d'expiration pour les messages DIMSE
-pdu --max-pdu [n]umber of bytes: integer (4096..131072)- définit la pdu maximale reçue à n octets (par défaut : 16384)
-dhl --disable-host-lookup disable hostname lookup
options de sécurité de la couche transport (TLS)
-tls --disable-tls- utilise une connexion TCP/IP normale (par défaut)
+tls --enable-tls [p]rivate key file, [c]ertificate file: string- utilise une connexion TLS sécurisée authentifiée. mot de passe de la clé privée (uniquement avec --enable-tls) :
+ps --std-passwd- invite l'utilisateur à saisir le mot de passe sur l'entrée standard (par défaut)
+pw --use-passwd [p]assword: string- utilise le mot de passe indiqué
-pw --null-passwd- utilise une chaîne vide comme mot de passe. format du fichier de clé et de certificat :
-pem --pem-keys- lit les clés et certificats comme fichier PEM (par défaut)
-der --der-keys- lit les clés et certificats comme fichier DER. autorité de certification :
+cf --add-cert-file [f]ilename: string- ajoute le fichier de certificat à la liste des certificats
+cd --add-cert-dir [d]irectory: string- ajoute les certificats de d à la liste des certificats
+crl --add-crl-file [f]ilename: string- ajoute un fichier de liste de révocation de certificats (implique --enable-crl-vfy)
+crv --enable-crl-vfy- active la vérification CRL du certificat feuille
+cra --enable-crl-all- active la vérification CRL de la chaîne complète. profil de sécurité :
+ph --list-profiles- affiche la liste des profils TLS pris en charge et quitte
+pg --profile-8996- Profil TLS BCP 195 RFC 8996 (par défaut)
+pm --profile-8996-mod- Profil TLS BCP 195 RFC 8996 modifié # only available if underlying TLS library supports # all TLS features required for this profile
+py --profile-bcp195-nd- Profil TLS BCP 195 sans rétrogradation (obsolète)
+px --profile-bcp195- Profil TLS BCP 195 (obsolète)
+pz --profile-bcp195-ex- Profil TLS BCP 195 étendu (obsolète)
+pb --profile-basic- Profil de connexion de transport sécurisée TLS de base (obsolète) # only available if underlying TLS library supports 3DES
+pa --profile-aes- Profil de connexion de transport sécurisée TLS AES (obsolète)
+pn --profile-null- Communication non chiffrée authentifiée (obsolète, utilisée auparavant dans IHE ATNA). suite de chiffrement :
+cc --list-ciphers- affiche la liste des suites de chiffrement TLS prises en charge et quitte
+cs --cipher [c]iphersuite name: string- ajoute la suite de chiffrement à la liste des suites négociées
+dp --dhparam [f]ilename: string- lit les paramètres DH pour les suites de chiffrement DH/DSS. indication du nom de serveur :
--no-sni- n'utilise pas SNI (par défaut)
--expect-sni [s]erver name: string- attend des requêtes pour le nom de serveur s. générateur pseudo-aléatoire :
+rs --seed [f]ilename: string- initialise le générateur aléatoire avec le contenu de f
+ws --write-seed- réécrit la graine modifiée (uniquement avec --seed)
+wf --write-seed-file [f]ilename: string (only with --seed)- écrit la graine modifiée dans le fichier f. authentification du pair :
-rc --require-peer-cert- vérifie le certificat du pair, échoue s'il est absent (par défaut)
-vc --verify-peer-cert- vérifie le certificat du pair s'il est présent
-ic --ignore-peer-cert- ne vérifie pas le certificat du pair
options de sortie
-od --output-directory [d]irectory: string (default: ".")- écrit les objets reçus dans le répertoire existant d. génération de sous-répertoires :
-s --no-subdir- ne génère aucun sous-répertoire (par défaut)
+ssd --series-date-subdir- génère des sous-répertoires à partir de la date de série. génération du nom de fichier :
+fd --default-filenames- génère le nom de fichier à partir de l'UID d'instance (par défaut)
+fu --unique-filenames- génère un nom de fichier unique basé sur un nouvel UID
+fsu --short-unique-names- génère un nom de fichier unique court et pseudo-aléatoire
+fst --system-time-names- génère le nom de fichier à partir de l'heure système actuelle
-fe --filename-extension [e]xtension: string (default: none)- ajoute e à tous les noms de fichiers générés. mode de stockage :
-B --normal- autorise les conversions de format implicites (par défaut)
+B --bit-preserving- écrit le jeu de données exactement tel qu'il a été reçu
--ignore- ignore le jeu de données, le reçoit mais ne l'enregistre pas
NOTES
Utilisation typique
Un cas d'usage typique de dcmrecv consiste à recevoir des instances SOP envoyées par un SCU de stockage et à les enregistrer sous forme de fichiers DICOM. La commande suivante fait exactement cela :
dcmrecv --verbose <port> --config-file storescp.cfg default
Si vous préférez une structure de sous-répertoires créée automatiquement, des noms de fichiers plus courts et l'extension ".dcm" pour tous les fichiers DICOM, utilisez la commande suivante :
dcmrecv -v -xf storescp.cfg default <port> --series-date-subdir
--short-unique-names
--filename-extension .dcm
Dans le cas d'instances SOP très volumineuses, ou si le jeu de données doit être écrit exactement tel qu'il a été reçu (par exemple à des fins de débogage), le "mode bit preserving" peut être utilisé :
dcmrecv -v -xf storescp.cfg default <port> --bit-preserving
Les jeux de données reçus sont toujours enregistrés sous forme de fichiers DICOM avec la même syntaxe de transfert que celle utilisée pour la transmission réseau.
Conformité DICOM
En principe, l'application dcmrecv prend en charge toutes les classes SOP de stockage en tant que SCP, y compris les classes privées. Cela nécessite toutefois qu'un profil de négociation d'association correspondant soit chargé depuis un fichier de configuration. Le format et la sémantique de ce fichier de configuration sont documentés dans asconfig.txt.
Par défaut, c'est-à-dire si aucun profil de négociation d'association n'est chargé, dcmrecv ne prend en charge que la classe SOP Verification en tant que SCP (avec la syntaxe de transfert par défaut, c'est-à-dire Implicit VR Little Endian).
À l'avenir, il pourrait y avoir des options supplémentaires permettant de spécifier directement la liste des contextes de présentation pris en charge (c'est-à-dire la combinaison d'une classe SOP et d'une syntaxe de transfert), c'est-à-dire sans charger de fichier de configuration.
Génération de sous-répertoires
L'option –series-date-subdir permet de générer des sous-répertoires (sous le répertoire de sortie indiqué) en fonction de la valeur de l'élément de données Series Date (0008,0021) du jeu de données DICOM reçu. Si cette valeur peut être extraite du jeu de données et est valide (c'est-à-dire qu'elle constitue un champ de date DICOM valide), la structure de sous-répertoires est la suivante :
<output-directory>/data/<year>/<month>/<day>/<filename>
Si la Series Date (0008,0021) ne peut pas être extraite ou n'est pas valide, la date système actuelle est utilisée pour la structure de sous-répertoires suivante :
<output-directory>/undef/<year><month><day>/<filename>
Dans les deux cas,
Génération des noms de fichiers
Par défaut, les noms de fichiers utilisés pour enregistrer les jeux de données DICOM reçus sont générés selon le schéma suivant :
<short-modality-prefix>.<sop-instance-uid><filename-extension>
Si la même instance SOP est reçue deux fois, un message d'avertissement est signalé et le fichier existant est écrasé.
L'option –unique-filenames garantit que chaque jeu de données DICOM reçu est enregistré comme un fichier distinct, c'est-à-dire qu'aucun fichier ne devrait jamais être écrasé. Cela est réalisé en utilisant un identifiant unique (UID) nouvellement créé pour chaque nom de fichier généré (avec l'infixe ".X" afin d'éviter les conflits avec les valeurs réelles de SOP Instance UID). Le schéma de nommage de cette option est le suivant :
<short-modality-prefix>.X.<unique-identifier><filename-extension>
Lorsque l'option –short-unique-names est utilisée, les noms de fichiers sont générés par un générateur de noms pseudo-aléatoire, qui garantit également l'absence de conflits (c'est-à-dire que les fichiers existants ne sont pas écrasés). Voici le schéma de nommage :
<short-modality-prefix>_<pseudo-random-name><filename-extension>
Enfin, l'option –system-time-names permet de générer des noms de fichiers basés sur l'heure système actuelle :
<date><time>.<short-modality-prefix><filename-extension>
Limitations
Notez que l'option –bit-preserving ne peut pas être utilisée conjointement avec l'option –series-date-subdir, car le jeu de données reçu est enregistré directement dans un fichier et la valeur de la Series Date (0008,0021) n'est donc pas disponible avant la création du fichier.
JOURNALISATION
Le niveau de détail de la journalisation des différents outils en ligne de commande et des bibliothèques sous-jacentes peut être spécifié par l'utilisateur. Par défaut, seules les erreurs et les avertissements sont écrits dans le flux d'erreur standard. L'option –verbose permet également de signaler des messages d'information tels que les détails du traitement. L'option –debug permet d'obtenir plus de détails sur l'activité interne, par exemple à des fins de débogage. L'option –log-level permet de sélectionner d'autres niveaux de journalisation. En mode –quiet, seules les erreurs fatales sont signalées. Dans de tels cas d'erreur très graves, l'application se termine généralement. Pour plus de détails sur les différents niveaux de journalisation, consultez la documentation du module "oflog".
Si la sortie de la journalisation doit être écrite dans un fichier (éventuellement avec rotation des fichiers journaux), vers syslog (Unix) ou le journal des événements (Windows), l'option –log-config peut être utilisée. Ce fichier de configuration permet également de diriger uniquement certains messages vers un flux de sortie particulier et de filtrer certains messages en fonction du module ou de l'application qui les génère. Un exemple de fichier de configuration est fourni dans < etcdir>/logger.cfg.
LIGNE DE COMMANDE
Tous les outils en ligne de commande utilisent la notation suivante pour les paramètres : les crochets entourent les valeurs facultatives (0-1), trois points de suspension à la fin indiquent que plusieurs valeurs sont autorisées (1-n), et la combinaison des deux signifie de 0 à n valeurs.
Les options de la ligne de commande se distinguent des paramètres par un signe '+' ou '-' en tête. En général, l'ordre et la position des options de la ligne de commande sont arbitraires (c'est-à-dire qu'elles peuvent apparaître n'importe où). Toutefois, si des options s'excluent mutuellement, c'est la dernière occurrence, la plus à droite, qui est utilisée. Ce comportement est conforme aux règles d'évaluation standard des shells Unix courants.
De plus, un ou plusieurs fichiers de commandes peuvent être spécifiés en utilisant un signe '@' comme préfixe du nom de fichier (par exemple @command.txt). Un tel argument de commande est remplacé par le contenu du fichier texte correspondant (les espaces multiples sont traités comme un séparateur unique, sauf s'ils apparaissent entre deux guillemets) avant toute évaluation ultérieure. Notez qu'un fichier de commandes ne peut pas contenir un autre fichier de commandes. Cette approche simple mais efficace permet de regrouper des combinaisons courantes d'options/paramètres et évite des lignes de commande longues et peu lisibles (un exemple est fourni dans le fichier < datadir>/dumppat.txt).
CODES DE SORTIE
L'utilitaire dcmrecv utilise les codes de sortie suivants lorsqu'il se termine. Cela permet à l'utilisateur de vérifier la raison pour laquelle l'application s'est terminée.
général
EXITCODE_NO_ERROR 0
EXITCODE_COMMANDLINE_SYNTAX_ERROR 1
erreurs de fichier d'entrée
EXITCODE_CANNOT_READ_INPUT_FILE 20 (*)
erreurs de fichier de sortie
EXITCODE_CANNOT_WRITE_OUTPUT_FILE 40 (*)
EXITCODE_INVALID_OUTPUT_DIRECTORY 45
erreurs réseau
EXITCODE_CANNOT_INITIALIZE_NETWORK 60 (*)
EXITCODE_CANNOT_START_SCP_AND_LISTEN 64
EXITCODE_INVALID_ASSOCIATION_CONFIG 66
EXITCODE_CANNOT_CREATE_TRANSPORT_LAYER 71
() En réalité, ces codes ne sont actuellement pas utilisés par dcmrecv*, mais ils servent d'espace réservé pour le groupe de codes de sortie correspondant.
ENVIRONNEMENT
L'utilitaire dcmrecv tente de charger les dictionnaires de données DICOM spécifiés dans la variable d'environnement DCMDICTPATH. Par défaut, c'est-à-dire si la variable d'environnement DCMDICTPATH n'est pas définie, le fichier < datadir>/dicom.dic est chargé, sauf si le dictionnaire est intégré à l'application (par défaut sous Windows).
Il est préférable de conserver le comportement par défaut et de n'utiliser la variable d'environnement DCMDICTPATH que lorsque des dictionnaires de données alternatifs sont nécessaires. La variable d'environnement DCMDICTPATH a le même format que la variable PATH des shells Unix, en ce sens que les deux-points (":") séparent les entrées. Sur les systèmes Windows, le point-virgule (";") est utilisé comme séparateur. Le code du dictionnaire de données tente de charger chaque fichier spécifié dans la variable d'environnement DCMDICTPATH. C'est une erreur si aucun dictionnaire de données ne peut être chargé.
FICHIERS
< docdir>/asconfig.txt - documentation du fichier de configuration
< etcdir>/storescp.cfg - exemple de profil de négociation d'association
VOIR AUSSI
dcmsend(1), storescu(1), storescp(1)
COPYRIGHT
Copyright (C) 2013-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.