dcmnet: bibliothèque réseau et applications utilitaires
Ce module contient un ensemble de fonctions qui implémentent la communication réseau DICOM, à savoir la machine à états finis de la couche supérieure DICOM (FSM), l'Association Control Service Element (ACSE) et le DICOM Message Service Element (DIMSE).
Les interfaces principales sont les structures et fonctions déclarées dans le fichier assoc.h et dans dimse.h.
Il existe également deux classes expérimentales pour implémenter un DICOM Service Class User et Provider :
Les classes suivantes dérivent des classes expérimentales ci-dessus et fournissent un service DICOM particulier :
Outils
Ce module contient les outils en ligne de commande suivants :
- dcmrecv: Simple DICOM storage SCP (receiver)
- dcmsend: Simple DICOM storage SCU (sender)
- echoscu: DICOM verification (C-ECHO) SCU
- findscu: DICOM query (C-FIND) SCU
- getscu: DICOM retrieve (C-GET) SCU
- movescu: DICOM retrieve (C-MOVE) SCU
- storescp: DICOM storage (C-STORE) SCP
- storescu: DICOM storage (C-STORE) SCU
- termscu: DICOM termination SCU
Fichiers
Les fichiers suivants fournissent une documentation complémentaire :
Exemples
L'exemple suivant montre un Echo SCU (Verification Service Class SCU) très simple. La majeure partie du code de gestion des erreurs a été omise par souci de concision, et le code spécifique à l'OS, comme l'initialisation de WinSock sous Win32, n'est pas non plus présenté.
T_ASC_Network *net; // network struct, contains DICOM upper layer FSM etc.
ASC_initializeNetwork(NET_REQUESTOR, 0, 1000 /* timeout */, &net);
T_ASC_Parameters *params; // parameters of association request
ASC_createAssociationParameters(¶ms, ASC_DEFAULTMAXPDU);
// set calling and called AE titles
ASC_setAPTitles(params, "ECHOSCU", "ANY-SCP", NULL);
// the DICOM server accepts connections at server.nowhere.com port 104
ASC_setPresentationAddresses(params, "localhost", "server.nowhere.com:104");
// list of transfer syntaxes, only a single entry here
const char* ts[] = { UID_LittleEndianImplicitTransferSyntax };
// add presentation context to association request
ASC_addPresentationContext(params, 1, UID_VerificationSOPClass, ts, 1);
// request DICOM association
T_ASC_Association *assoc;
if (ASC_requestAssociation(net, params, &assoc).good())
{
if (ASC_countAcceptedPresentationContexts(params) == 1)
{
// the remote SCP has accepted the Verification Service Class
DIC_US id = assoc->nextMsgID++; // generate next message ID
DIC_US status; // DIMSE status of C-ECHO-RSP will be stored here
DcmDataset *sd = NULL; // status detail will be stored here
// send C-ECHO-RQ and handle response
DIMSE_echoUser(assoc, id, DIMSE_BLOCKING, 0, &status, &sd);
delete sd; // we don't care about status detail
}
}
ASC_releaseAssociation(assoc); // release association
ASC_destroyAssociation(&assoc); // delete assoc structure
ASC_dropNetwork(&net); // delete net structure