dcmnet: ネットワークライブラリとユーティリティアプリ群
このモジュールには、DICOM のネットワーク通信を実装する関数群が含まれます。具体的には、DICOM Upper Layer の有限状態機械(FSM)、Association Control Service Element(ACSE)、および DICOM Message Service Element(DIMSE)です。
主要なインターフェイスは、assoc.h と dimse.h で宣言されている構造体と関数です。
また、DICOM Service Class User と Provider を実装するための、試験的なクラスが 2 つ用意されています。
次のクラスは上記の試験的クラスから派生し、特定の DICOM サービスを提供します。
ツール
このモジュールには次のコマンドラインツールが含まれます。
- 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
ファイル
次のファイルに、さらに詳しい解説があります。
例
次の例は、ごく単純な Echo SCU(Verification Service Class SCU)を示します。簡潔さのため、エラー処理のコードはほとんど省いてあります。また、Win32 における WinSock の初期化のような OS 固有のコードも示していません。
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