dcmrecv: SCP de armazenamento DICOM simples (receptor)
SINOPSE
dcmrecv [options] port
DESCRIÇÃO
O aplicativo dcmrecv implementa um Provedor de Classe de Serviço (SCP) para a Classe de Serviço de Armazenamento. Ao contrário do conhecido utilitário storescp, o dcmrecv tem menos opções e, por isso, pode ser mais fácil de usar - o que também explica o termo "simples" no título. O objetivo principal deste aplicativo é receber um grande número de conjuntos de dados DICOM de um Usuário de Classe de Serviço de Armazenamento (SCU) e armazená-los em uma estrutura configurável de diretórios e arquivos.
PARÂMETROS
port tcp/ip port number to listen on
OPÇÕES
opções gerais
-h --help- exibe este texto de ajuda e sai
--version- exibe as informações de versão e sai
--arguments- exibe os argumentos de linha de comando expandidos
-q --quiet- modo silencioso, não exibe avisos nem erros
-v --verbose- modo detalhado, exibe os detalhes do processamento
-d --debug- modo de depuração, exibe informações de depuração
-ll --log-level [l]evel: string constant- (fatal, error, warn, info, debug, trace) usa o nível l para o logger
-lc --log-config [f]ilename: string- usa o arquivo de configuração f para o logger
+v --verbose-pc- exibe os contextos de apresentação no modo detalhado
opções de rede
-i4 --ipv4- usa somente IPv4 (padrão)
-i6 --ipv6- usa somente IPv6
-i0 --ip-auto- usa o perfil de negociação de associação de pilha dupla IPv6/IPv4 a partir do arquivo de configuração:
-xf --config-file [f]ilename, [p]rofile: string- usa o perfil p do arquivo de configuração f. título de entidade de aplicação:
-uca --use-called-aetitle- sempre responde com o AE title chamado (padrão)
-aet --aetitle [a]etitle: string- define meu AE title e verifica o AE title chamado. outras opções de rede:
-ta --acse-timeout [s]econds: integer (default: 30)- tempo limite para mensagens ACSE
-td --dimse-timeout [s]econds: integer (default: unlimited)- tempo limite para mensagens DIMSE
-pdu --max-pdu [n]umber of bytes: integer (4096..131072)- define a pdu máxima recebida em n bytes (padrão: 16384)
-dhl --disable-host-lookup disable hostname lookup
opções de segurança da camada de transporte (TLS)
-tls --disable-tls- usa uma conexão TCP/IP normal (padrão)
+tls --enable-tls [p]rivate key file, [c]ertificate file: string- usa uma conexão TLS segura autenticada. senha da chave privada (somente com --enable-tls):
+ps --std-passwd- solicita que o usuário digite a senha na entrada padrão (padrão)
+pw --use-passwd [p]assword: string- usa a senha especificada
-pw --null-passwd- usa uma string vazia como senha. formato do arquivo de chave e certificado:
-pem --pem-keys- lê chaves e certificados como arquivo PEM (padrão)
-der --der-keys- lê chaves e certificados como arquivo DER. autoridade de certificação:
+cf --add-cert-file [f]ilename: string- adiciona um arquivo de certificado à lista de certificados
+cd --add-cert-dir [d]irectory: string- adiciona os certificados de d à lista de certificados
+crl --add-crl-file [f]ilename: string- adiciona um arquivo de lista de revogação de certificados (implica --enable-crl-vfy)
+crv --enable-crl-vfy- ativa a verificação de CRL do certificado folha
+cra --enable-crl-all- habilita a verificação de CRL de toda a cadeia perfil de segurança:
+ph --list-profiles- lista os perfis TLS com suporte e sai
+pg --profile-8996- Perfil TLS BCP 195 RFC 8996 (padrão)
+pm --profile-8996-mod- Perfil TLS BCP 195 RFC 8996 modificado # only available if underlying TLS library supports # all TLS features required for this profile
+py --profile-bcp195-nd- Perfil TLS BCP 195 sem downgrade (obsoleto)
+px --profile-bcp195- Perfil TLS BCP 195 (obsoleto)
+pz --profile-bcp195-ex- Perfil TLS BCP 195 estendido (obsoleto)
+pb --profile-basic- perfil básico de conexão de transporte seguro TLS (obsoleto) # disponível apenas se a biblioteca TLS subjacente oferecer suporte a 3DES
+pa --profile-aes- AES TLS Secure Transport Connection Profile (obsoleto)
+pn --profile-null- Comunicação autenticada não criptografada (retirada, era usada no IHE ATNA) conjunto de cifras:
+cc --list-ciphers- lista os conjuntos de cifras TLS com suporte e sai
+cs --cipher [c]iphersuite name: string- adiciona um conjunto de cifras à lista de conjuntos negociados
+dp --dhparam [f]ilename: string- lê os parâmetros DH para os conjuntos de cifras DH/DSS indicação de nome de servidor:
--no-sni- não usa SNI (padrão)
--expect-sni [s]erver name: string- espera requisições para o nome de servidor s. gerador pseudoaleatório:
+rs --seed [f]ilename: string- inicializa o gerador aleatório com o conteúdo de f
+ws --write-seed- grava novamente a semente modificada (somente com --seed)
+wf --write-seed-file [f]ilename: string (only with --seed)- grava a semente modificada no arquivo f. autenticação do par:
-rc --require-peer-cert- verifica o certificado do par, falha se ausente (padrão)
-vc --verify-peer-cert- verifica o certificado do par se presente
-ic --ignore-peer-cert- não verifica o certificado do par
opções de saída
-od --output-directory [d]irectory: string (default: ".")- grava os objetos recebidos no diretório existente d. geração de subdiretórios:
-s --no-subdir- não gera nenhum subdiretório (padrão)
+ssd --series-date-subdir- gera subdiretórios a partir da data da série. geração de nome de arquivo:
+fd --default-filenames- gera o nome de arquivo a partir do UID da instância (padrão)
+fu --unique-filenames- gera um nome de arquivo único baseado em um novo UID
+fsu --short-unique-names- gera um nome de arquivo único curto e pseudoaleatório
+fst --system-time-names- gera o nome de arquivo a partir da hora atual do sistema
-fe --filename-extension [e]xtension: string (default: none)- acrescenta e a todos os nomes de arquivo gerados. modo de armazenamento:
-B --normal- permite conversões implícitas de formato (padrão)
+B --bit-preserving- grava o conjunto de dados exatamente como recebido
--ignore- ignora o conjunto de dados, recebe mas não o armazena
NOTAS
Uso típico
Um caso de uso típico do dcmrecv é receber instâncias SOP enviadas por um SCU de armazenamento e salvá-las como arquivos DICOM. O comando a seguir faz exatamente isso:
dcmrecv --verbose <port> --config-file storescp.cfg default
Se preferir uma estrutura de subdiretórios criada automaticamente, nomes de arquivo mais curtos e a extensão ".dcm" para todos os arquivos DICOM, use o comando a seguir:
dcmrecv -v -xf storescp.cfg default <port> --series-date-subdir
--short-unique-names
--filename-extension .dcm
No caso de instâncias SOP muito grandes, ou se o conjunto de dados precisar ser gravado exatamente como recebido (por exemplo, para fins de depuração), o "modo bit preserving" pode ser usado:
dcmrecv -v -xf storescp.cfg default <port> --bit-preserving
Os conjuntos de dados recebidos são sempre armazenados como arquivos DICOM com a mesma sintaxe de transferência usada na transmissão pela rede.
Conformidade DICOM
Basicamente, o aplicativo dcmrecv oferece suporte a todas as classes SOP de armazenamento como SCP, incluindo as privadas. Isso exige, porém, que um perfil de negociação de associação correspondente seja carregado a partir de um arquivo de configuração. O formato e a semântica desse arquivo de configuração estão documentados em asconfig.txt.
Por padrão, ou seja, se nenhum perfil de negociação de associação for carregado, o dcmrecv oferece suporte apenas à classe SOP Verification como SCP (com a sintaxe de transferência padrão, ou seja, Implicit VR Little Endian).
No futuro, poderá haver opções adicionais que permitam especificar diretamente a lista de contextos de apresentação com suporte (ou seja, a combinação de classe SOP e sintaxes de transferência), ou seja, sem carregar um arquivo de configuração.
Geração de subdiretórios
A opção –series-date-subdir permite gerar subdiretórios (abaixo do diretório de saída especificado) com base no valor do elemento de dados Series Date (0008,0021) do conjunto de dados DICOM recebido. Se esse valor puder ser obtido do conjunto de dados e for válido (ou seja, consistir em um campo de data DICOM válido), a estrutura de subdiretórios será a seguinte:
<output-directory>/data/<year>/<month>/<day>/<filename>
Se a Series Date (0008,0021) não puder ser obtida ou for inválida, a data atual do sistema é usada para a seguinte estrutura de subdiretórios:
<output-directory>/undef/<year><month><day>/<filename>
Em ambos os casos,
Geração de nomes de arquivo
Por padrão, os nomes de arquivo para armazenar os conjuntos de dados DICOM recebidos são gerados de acordo com o seguinte esquema:
<short-modality-prefix>.<sop-instance-uid><filename-extension>
Se a mesma instância SOP for recebida duas vezes, uma mensagem de aviso é relatada e o arquivo existente é sobrescrito.
A opção –unique-filenames garante que cada conjunto de dados DICOM recebido seja armazenado como um arquivo separado, ou seja, nenhum arquivo deve ser sobrescrito. Isso é feito usando um identificador único (UID) recém-criado para cada nome de arquivo gerado (e o infixo ".X" para evitar conflitos com os valores reais de SOP Instance UID). O esquema de nomenclatura dessa opção é o seguinte:
<short-modality-prefix>.X.<unique-identifier><filename-extension>
Quando a opção –short-unique-names é usada, os nomes de arquivo são gerados por um gerador de nomes pseudoaleatório, que também garante que não haja conflitos (ou seja, os arquivos existentes não são sobrescritos). Este é o esquema de nomenclatura:
<short-modality-prefix>_<pseudo-random-name><filename-extension>
Com
Por fim, a opção –system-time-names permite gerar nomes de arquivo com base na hora atual do sistema:
<date><time>.<short-modality-prefix><filename-extension>
Com
Limitações
Observe que a opção –bit-preserving não pode ser usada em conjunto com a opção –series-date-subdir, pois o conjunto de dados recebido é armazenado diretamente em arquivo e, portanto, o valor da Series Date (0008,0021) não está disponível antes da criação do arquivo.
REGISTRO DE LOG
O nível de detalhamento do log das diversas ferramentas de linha de comando e das bibliotecas subjacentes pode ser especificado pelo usuário. Por padrão, apenas erros e avisos são gravados no fluxo de erro padrão. Ao usar a opção –verbose, mensagens informativas, como detalhes do processamento, também são relatadas. A opção –debug pode ser usada para obter mais detalhes sobre a atividade interna, por exemplo, para fins de depuração. Outros níveis de log podem ser selecionados com a opção –log-level. No modo –quiet, apenas erros fatais são relatados. Nesses casos de erro muito graves, o aplicativo normalmente é encerrado. Para mais detalhes sobre os diferentes níveis de log, consulte a documentação do módulo "oflog".
Caso a saída do log deva ser gravada em arquivo (opcionalmente com rotação de arquivo de log), no syslog (Unix) ou no log de eventos (Windows), pode-se usar a opção –log-config. Esse arquivo de configuração também permite direcionar apenas determinadas mensagens para um fluxo de saída específico e filtrar certas mensagens com base no módulo ou aplicativo em que são geradas. Um arquivo de configuração de exemplo é fornecido em < etcdir>/logger.cfg.
LINHA DE COMANDO
Todas as ferramentas de linha de comando usam a seguinte notação para os parâmetros: colchetes delimitam valores opcionais (0-1), reticências no final indicam que múltiplos valores são permitidos (1-n), e a combinação dos dois significa de 0 a n valores.
As opções de linha de comando se distinguem dos parâmetros por um sinal '+' ou '-' à frente. Normalmente, a ordem e a posição das opções de linha de comando são arbitrárias (ou seja, podem aparecer em qualquer lugar). No entanto, se as opções forem mutuamente exclusivas, é usada a ocorrência mais à direita. Esse comportamento está em conformidade com as regras de avaliação padrão dos shells Unix comuns.
Além disso, um ou mais arquivos de comando podem ser especificados usando um sinal '@' como prefixo do nome do arquivo (por exemplo, @command.txt). Esse argumento de comando é substituído pelo conteúdo do arquivo de texto correspondente (múltiplos espaços em branco são tratados como um único separador, a menos que apareçam entre duas aspas) antes de qualquer avaliação posterior. Observe que um arquivo de comando não pode conter outro arquivo de comando. Essa abordagem simples, mas eficaz, permite agrupar combinações comuns de opções/parâmetros e evita linhas de comando longas e confusas (um exemplo é fornecido no arquivo < datadir>/dumppat.txt).
CÓDIGOS DE SAÍDA
O utilitário dcmrecv usa os seguintes códigos de saída ao ser encerrado. Isso permite que o usuário verifique o motivo pelo qual o aplicativo foi encerrado.
geral
EXITCODE_NO_ERROR 0
EXITCODE_COMMANDLINE_SYNTAX_ERROR 1
erros de arquivo de entrada
EXITCODE_CANNOT_READ_INPUT_FILE 20 (*)
erros de arquivo de saída
EXITCODE_CANNOT_WRITE_OUTPUT_FILE 40 (*)
EXITCODE_INVALID_OUTPUT_DIRECTORY 45
erros de rede
EXITCODE_CANNOT_INITIALIZE_NETWORK 60 (*)
EXITCODE_CANNOT_START_SCP_AND_LISTEN 64
EXITCODE_INVALID_ASSOCIATION_CONFIG 66
EXITCODE_CANNOT_CREATE_TRANSPORT_LAYER 71
() Na verdade, esses códigos não são usados atualmente pelo dcmrecv*, mas servem como um espaço reservado para o grupo de códigos de saída correspondente.
AMBIENTE
O utilitário dcmrecv tentará carregar os dicionários de dados DICOM especificados na variável de ambiente DCMDICTPATH. Por padrão, ou seja, se a variável de ambiente DCMDICTPATH não estiver definida, o arquivo < datadir>/dicom.dic será carregado, a menos que o dicionário esteja embutido no aplicativo (padrão no Windows).
É preferível manter o comportamento padrão e usar a variável de ambiente DCMDICTPATH apenas quando dicionários de dados alternativos forem necessários. A variável de ambiente DCMDICTPATH tem o mesmo formato da variável PATH dos shells Unix, em que dois-pontos (":") separam as entradas. Em sistemas Windows, um ponto e vírgula (";") é usado como separador. O código do dicionário de dados tenta carregar cada arquivo especificado na variável de ambiente DCMDICTPATH. Ocorre um erro se nenhum dicionário de dados puder ser carregado.
ARQUIVOS
< docdir>/asconfig.txt - documentação do arquivo de configuração
< etcdir>/storescp.cfg - exemplo de perfil de negociação de associação
VEJA TAMBÉM
dcmsend(1), storescu(1), storescp(1)
COPYRIGHT
Copyright (C) 2013-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.