DYT/Tool/3rdParty_x64/include/dcmtk/dcmnet/dimse.h

1103 lines
46 KiB
C
Raw Normal View History

2024-11-22 15:19:31 +00:00
/*
*
* Copyright (C) 1994-2014, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were partly developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
* For further copyrights, see the following paragraphs.
*
*/
/*
** Copyright (C) 1993/1994, OFFIS, Oldenburg University and CERIUM
**
** This software and supporting documentation were
** developed by
**
** Institut OFFIS
** Bereich Kommunikationssysteme
** Westerstr. 10-12
** 26121 Oldenburg, Germany
**
** Fachbereich Informatik
** Abteilung Prozessinformatik
** Carl von Ossietzky Universitaet Oldenburg
** Ammerlaender Heerstr. 114-118
** 26111 Oldenburg, Germany
**
** CERIUM
** Laboratoire SIM
** Faculte de Medecine
** 2 Avenue du Pr. Leon Bernard
** 35043 Rennes Cedex, France
**
** for CEN/TC251/WG4 as a contribution to the Radiological
** Society of North America (RSNA) 1993 Digital Imaging and
** Communications in Medicine (DICOM) Demonstration.
**
** THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND NEITHER OFFIS,
** OLDENBURG UNIVERSITY NOR CERIUM MAKE ANY WARRANTY REGARDING
** THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR
** FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER
** DISEASES OR ITS CONFORMITY TO ANY SPECIFICATION. THE
** ENTIRE RISK AS TO QUALITY AND PERFORMANCE OF THE SOFTWARE
** IS WITH THE USER.
**
** Copyright of the software and supporting documentation
** is, unless otherwise stated, jointly owned by OFFIS,
** Oldenburg University and CERIUM and free access is hereby
** granted as a license to use this software, copy this
** software and prepare derivative works based upon this
** software. However, any distribution of this software
** source code or supporting documentation or derivative
** works (source code and supporting documentation) must
** include the three paragraphs of this copyright notice.
**
*/
/*
**
** Author: Andrew Hewett Created: 03-06-93
**
** Module: dimse
**
** Purpose:
** This file contains the routines which provide dimse layer services
** for DICOM applications.
**
** Module Prefix: DIMSE_
**
*/
#ifndef DIMSE_H
#define DIMSE_H
/*
* Required Include Files
*/
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmnet/dicom.h"
#include "dcmtk/dcmnet/lst.h"
#include "dcmtk/dcmnet/cond.h"
#include "dcmtk/dcmnet/dul.h"
#include "dcmtk/dcmnet/assoc.h"
#include "dcmtk/dcmdata/dcdatset.h"
#include "dcmtk/ofstd/ofglobal.h"
class DcmOutputFileStream;
/** Global flag to enable/disable workaround code for some buggy Store SCUs
* in DIMSE_storeProvider(). If enabled, an illegal space-padding in the
* Affected SOP Instance UID field of the C-STORE-RQ message is retained
* in the corresponding C-STORE-RSP message.
* To enable the workaround, this flag must be set to OFTrue and
* dcmEnableAutomaticInputDataCorrection must be set to OFFalse.
* (see declaration in dcmdata/include/dcobject.h)
*/
extern DCMTK_DCMNET_EXPORT OFGlobal<OFBool> dcmPeerRequiresExactUIDCopy; /* default OFFalse */
/** global flag allowing to restrict the maximum size of outgoing
* P-DATA PDUs to a value less than the maximum supported by the
* remote application entity or this library. May be useful
* if there is an interaction between PDU size and other network
* layers, e. g. TLS, IP or below.
*/
extern DCMTK_DCMNET_EXPORT OFGlobal<Uint32> dcmMaxOutgoingPDUSize; /* default 2^32-1 */
/*
* General Status Codes
*/
#define STATUS_Success 0x0000
#define STATUS_Pending 0xff00
#define DICOM_PENDING_STATUS(status) (((status) & 0xff00) == 0xff00)
#define DICOM_WARNING_STATUS(status) ((((status) & 0xf000) == 0xb000) || ((status) == 0x0107) || ((status) == 0x0116))
/*
* Service Class Specific Status Codes
* NOTE: some codes are only significant in the high byte
* or high nibble (4 bits).
*/
/* Storage Specific Codes*/
#define STATUS_STORE_Refused_OutOfResources /* high byte */ 0xa700
#define STATUS_STORE_Refused_SOPClassNotSupported /* high byte */ 0xa800
#define STATUS_STORE_Error_DataSetDoesNotMatchSOPClass /* high byte */ 0xa900
#define STATUS_STORE_Error_CannotUnderstand /* high nibble */ 0xc000
#define STATUS_STORE_Warning_CoercionOfDataElements 0xb000
#define STATUS_STORE_Warning_CoersionOfDataElements 0xb000 // WARNING: This constant will be removed from DCMTK in the future, instead use STATUS_STORE_Warning_CoercionOfDataElements
#define STATUS_STORE_Warning_DataSetDoesNotMatchSOPClass 0xb007
#define STATUS_STORE_Warning_ElementsDiscarded 0xb006
/* Find Specific Codes */
#define STATUS_FIND_Refused_OutOfResources 0xa700
#define STATUS_FIND_Refused_SOPClassNotSupported 0xa800
#define STATUS_FIND_Failed_IdentifierDoesNotMatchSOPClass 0xa900
#define STATUS_FIND_Failed_UnableToProcess /* high nibble */ 0xc000
#define STATUS_FIND_Cancel_MatchingTerminatedDueToCancelRequest 0xfe00
#define STATUS_FIND_Pending_WarningUnsupportedOptionalKeys 0xff01
/* Move Specific Codes */
#define STATUS_MOVE_Refused_OutOfResourcesNumberOfMatches 0xa701
#define STATUS_MOVE_Refused_OutOfResourcesSubOperations 0xa702
#define STATUS_MOVE_Failed_SOPClassNotSupported 0xa800
#define STATUS_MOVE_Failed_MoveDestinationUnknown 0xa801
#define STATUS_MOVE_Failed_IdentifierDoesNotMatchSOPClass 0xa900
#define STATUS_MOVE_Failed_UnableToProcess /* high nibble */ 0xc000
#define STATUS_MOVE_Cancel_SubOperationsTerminatedDueToCancelIndication 0xfe00
#define STATUS_MOVE_Warning_SubOperationsCompleteOneOrMoreFailures 0xb000
/* Get Specific Codes */
#define STATUS_GET_Refused_OutOfResourcesNumberOfMatches 0xa701
#define STATUS_GET_Refused_OutOfResourcesSubOperations 0xa702
#define STATUS_GET_Failed_SOPClassNotSupported 0xa800
#define STATUS_GET_Failed_IdentifierDoesNotMatchSOPClass 0xa900
#define STATUS_GET_Failed_UnableToProcess /* high nibble */ 0xc000
#define STATUS_GET_Cancel_SubOperationsTerminatedDueToCancelIndication 0xfe00
#define STATUS_GET_Warning_SubOperationsCompleteOneOrMoreFailures 0xb000
/* DIMSE-N Specific Codes */
#define STATUS_N_Cancel 0xfe00
#define STATUS_N_AttributeListError 0x0107
#define STATUS_N_SOPClassNotSupported 0x0122
#define STATUS_N_ClassInstanceConflict 0x0119
#define STATUS_N_DuplicateSOPInstance 0x0111
#define STATUS_N_DuplicateInvocation 0x0210
#define STATUS_N_InvalidArgumentValue 0x0115
#define STATUS_N_InvalidAttributeValue 0x0106
#define STATUS_N_AttributeValueOutOfRange 0x0116
#define STATUS_N_InvalidObjectInstance 0x0117
#define STATUS_N_MissingAttribute 0x0120
#define STATUS_N_MissingAttributeValue 0x0121
#define STATUS_N_MistypedArgument 0x0212
#define STATUS_N_NoSuchArgument 0x0114
#define STATUS_N_NoSuchAttribute 0x0105
#define STATUS_N_NoSuchEventType 0x0113
#define STATUS_N_NoSuchObjectInstance 0x0112
#define STATUS_N_NoSuchSOPClass 0x0118
#define STATUS_N_ProcessingFailure 0x0110
#define STATUS_N_ResourceLimitation 0x0213
#define STATUS_N_UnrecognizedOperation 0x0211
#define STATUS_N_NoSuchAction 0x0123
/* Print Management Service Class Specific Codes */
#define STATUS_N_PRINT_BFS_Warn_MemoryAllocation 0xb600
#define STATUS_N_PRINT_BFS_Warn_NoSessionPrinting 0xb601
#define STATUS_N_PRINT_BFS_Warn_EmptyPage 0xb602
#define STATUS_N_PRINT_BFB_Warn_EmptyPage 0xb603
#define STATUS_N_PRINT_BFS_Fail_NoFilmBox 0xc600
#define STATUS_N_PRINT_BFS_Fail_PrintQueueFull 0xc601
#define STATUS_N_PRINT_BSB_Fail_PrintQueueFull 0xc602
#define STATUS_N_PRINT_BFS_BFB_Fail_ImageSize 0xc603
#define STATUS_N_PRINT_BFS_BFB_Fail_PositionCollision 0xc604
#define STATUS_N_PRINT_IB_Fail_InsufficientMemory 0xc605
#define STATUS_N_PRINT_IB_Fail_MoreThanOneVOILUT 0xc606
/*
* Type Definitions
*/
/*
* DIMSE Command Codes (Request and Response)
*/
typedef enum { /* DIC_US */
DIMSE_NOTHING = 0x0000, /* none of the rest !! */
DIMSE_C_STORE_RQ = 0x0001, /* also known as C_SEND_RQ */
DIMSE_C_STORE_RSP = 0x8001, /* also known as C_SEND_RSP */
DIMSE_C_GET_RQ = 0x0010,
DIMSE_C_GET_RSP = 0x8010,
DIMSE_C_FIND_RQ = 0x0020,
DIMSE_C_FIND_RSP = 0x8020,
DIMSE_C_MOVE_RQ = 0x0021,
DIMSE_C_MOVE_RSP = 0x8021,
DIMSE_C_ECHO_RQ = 0x0030,
DIMSE_C_ECHO_RSP = 0x8030,
DIMSE_C_CANCEL_RQ = 0x0fff,
/* there is no DIMSE_C_CANCEL_RSP */
DIMSE_N_EVENT_REPORT_RQ = 0x0100,
DIMSE_N_EVENT_REPORT_RSP = 0x8100,
DIMSE_N_GET_RQ = 0x0110,
DIMSE_N_GET_RSP = 0x8110,
DIMSE_N_SET_RQ = 0x0120,
DIMSE_N_SET_RSP = 0x8120,
DIMSE_N_ACTION_RQ = 0x0130,
DIMSE_N_ACTION_RSP = 0x8130,
DIMSE_N_CREATE_RQ = 0x0140,
DIMSE_N_CREATE_RSP = 0x8140,
DIMSE_N_DELETE_RQ = 0x0150,
DIMSE_N_DELETE_RSP = 0x8150
} T_DIMSE_Command;
/*
* DIMSE Data Set Type Codes
*/
typedef enum { /* DIC_US */
DIMSE_DATASET_PRESENT = 0x0001, /* anything other than 0x0101 */
DIMSE_DATASET_NULL = 0x0101
} T_DIMSE_DataSetType;
/*
* DIMSE Priority Codes
*/
typedef enum { /* DIC_US */
DIMSE_PRIORITY_LOW = 0x0002,
DIMSE_PRIORITY_MEDIUM = 0x0000,
DIMSE_PRIORITY_HIGH = 0x0001
} T_DIMSE_Priority;
/*
* DIMSE Blocking Modes (reading)
*/
typedef enum {
DIMSE_BLOCKING,
DIMSE_NONBLOCKING
} T_DIMSE_BlockingMode;
/*
* DIMSE Messages
*
*/
/* C-STORE */
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_StoreRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
T_DIMSE_Priority Priority; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_UI AffectedSOPInstanceUID; /* M */
DIC_AE MoveOriginatorApplicationEntityTitle; /* U */
DIC_US MoveOriginatorID; /* U */
/* DataSet provided as argument to DIMSE functions */ /* M */
unsigned int opts; /* which optional items are set */
#define O_STORE_MOVEORIGINATORAETITLE 0x0001
#define O_STORE_MOVEORIGINATORID 0x0002
/* the following flag is set on incoming C-STORE requests if
* the SOP instance UID is (incorrectly) padded with a space
* character. Will only be detected if the dcmdata flag
* dcmEnableAutomaticInputDataCorrection is false.
*/
#define O_STORE_RQ_BLANK_PADDING 0x0008
};
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_StoreRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* U(=) */
unsigned int opts; /* which optional items are set */
#define O_STORE_AFFECTEDSOPCLASSUID 0x0001
#define O_STORE_AFFECTEDSOPINSTANCEUID 0x0002
/* peer requires an exact copy of the SOP instance UID
* as it was sent in the C-STORE-RQ,
* including any illegal trailing space padding.
*/
#define O_STORE_PEER_REQUIRES_EXACT_UID_COPY 0x0004
/* SOP instance UID in C-STORE-RQ was space padded. */
#define O_STORE_RSP_BLANK_PADDING 0x0008
} ;
/* C-ECHO */
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_EchoRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_EchoRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US DimseStatus; /* M */
unsigned int opts; /* which optional items are set */
#define O_ECHO_AFFECTEDSOPCLASSUID 0x0001
} ;
/* C-FIND */
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_FindRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
T_DIMSE_Priority Priority; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
/* Identifier provided as argument to DIMSE functions *//* M */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_FindRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US DimseStatus; /* M */
/* Identifier provided as argument to DIMSE functions *//* C */
unsigned int opts; /* which optional items are set */
#define O_FIND_AFFECTEDSOPCLASSUID 0x0001
} ;
/* C-GET */
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_GetRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
T_DIMSE_Priority Priority; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
/* Identifier provided as argument to DIMSE functions *//* M */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_GetRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US DimseStatus; /* M */
DIC_US NumberOfRemainingSubOperations; /* C */
DIC_US NumberOfCompletedSubOperations; /* C */
DIC_US NumberOfFailedSubOperations; /* C */
DIC_US NumberOfWarningSubOperations; /* C */
unsigned int opts; /* which optional items are set */
#define O_GET_AFFECTEDSOPCLASSUID 0x0001
#define O_GET_NUMBEROFREMAININGSUBOPERATIONS 0x0002
#define O_GET_NUMBEROFCOMPLETEDSUBOPERATIONS 0x0004
#define O_GET_NUMBEROFFAILEDSUBOPERATIONS 0x0008
#define O_GET_NUMBEROFWARNINGSUBOPERATIONS 0x0010
} ;
/* C-MOVE */
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_MoveRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
T_DIMSE_Priority Priority; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_AE MoveDestination; /* M */
/* Identifier provided as argument to DIMSE functions *//* M */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_MoveRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US DimseStatus; /* M */
DIC_US NumberOfRemainingSubOperations; /* C */
DIC_US NumberOfCompletedSubOperations; /* C */
DIC_US NumberOfFailedSubOperations; /* C */
DIC_US NumberOfWarningSubOperations; /* C */
unsigned int opts; /* which optional items are set */
#define O_MOVE_AFFECTEDSOPCLASSUID 0x0001
#define O_MOVE_NUMBEROFREMAININGSUBOPERATIONS 0x0002
#define O_MOVE_NUMBEROFCOMPLETEDSUBOPERATIONS 0x0004
#define O_MOVE_NUMBEROFFAILEDSUBOPERATIONS 0x0008
#define O_MOVE_NUMBEROFWARNINGSUBOPERATIONS 0x0010
} ;
/* C-CANCEL */
struct DCMTK_DCMNET_EXPORT T_DIMSE_C_CancelRQ {
DIC_US MessageIDBeingRespondedTo; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
} ;
/* N-EVENT-REPORT */
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_EventReportRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
DIC_UI AffectedSOPInstanceUID; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US EventTypeID; /* M */
/* EventInformation provided as argument to DIMSE functions *//* U */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_EventReportRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* U(=) */
T_DIMSE_DataSetType DataSetType; /* M */
DIC_US EventTypeID; /* C(=) */
/* EventReply provided as argument to DIMSE functions *//* C */
unsigned int opts; /* which optional items are set */
#define O_NEVENTREPORT_AFFECTEDSOPCLASSUID 0x0001
#define O_NEVENTREPORT_AFFECTEDSOPINSTANCEUID 0x0002
#define O_NEVENTREPORT_EVENTTYPEID 0x0004
} ;
/* N-GET */
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_GetRQ {
DIC_US MessageID; /* M */
DIC_UI RequestedSOPClassUID; /* M */
DIC_UI RequestedSOPInstanceUID; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
/*
* In the following array, the attributes to get should be coded
* in pairs along the array (e.g. {g,e,g,e,g,e,...}). The ListCount
* variable should contain the number of 'DIC_US' values in the
* array (not the number of pairs).
*/
int ListCount;
DIC_US *AttributeIdentifierList; /* U */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_GetRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* U */
T_DIMSE_DataSetType DataSetType; /* M */
/* AttributeList provided as argument to DIMSE functions *//* C */
unsigned int opts; /* which optional items are set */
#define O_NGET_AFFECTEDSOPCLASSUID 0x0001
#define O_NGET_AFFECTEDSOPINSTANCEUID 0x0002
} ;
/* N-SET */
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_SetRQ {
DIC_US MessageID; /* M */
DIC_UI RequestedSOPClassUID; /* M */
DIC_UI RequestedSOPInstanceUID; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
/* ModificationList provided as argument to DIMSE functions *//* M */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_SetRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* U */
T_DIMSE_DataSetType DataSetType; /* M */
/* AttributeList provided as argument to DIMSE functions *//* U */
unsigned int opts; /* which optional items are set */
#define O_NSET_AFFECTEDSOPCLASSUID 0x0001
#define O_NSET_AFFECTEDSOPINSTANCEUID 0x0002
} ;
/* N-ACTION */
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_ActionRQ {
DIC_US MessageID; /* M */
DIC_UI RequestedSOPClassUID; /* M */
DIC_UI RequestedSOPInstanceUID; /* M */
DIC_US ActionTypeID; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
/* ActionInformation provided as argument to DIMSE functions *//* U */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_ActionRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* U */
DIC_US ActionTypeID; /* C(=) */
T_DIMSE_DataSetType DataSetType; /* M */
/* ActionReply provided as argument to DIMSE functions *//* C */
unsigned int opts; /* which optional items are set */
#define O_NACTION_AFFECTEDSOPCLASSUID 0x0001
#define O_NACTION_AFFECTEDSOPINSTANCEUID 0x0002
#define O_NACTION_ACTIONTYPEID 0x0004
} ;
/* N-CREATE */
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_CreateRQ {
DIC_US MessageID; /* M */
DIC_UI AffectedSOPClassUID; /* M */
DIC_UI AffectedSOPInstanceUID; /* U */
T_DIMSE_DataSetType DataSetType; /* M */
/* AttributeList provided as argument to DIMSE functions *//* M */
unsigned int opts; /* which optional items are set */
#define O_NCREATE_AFFECTEDSOPINSTANCEUID 0x0002
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_CreateRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U(=) */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* C */
T_DIMSE_DataSetType DataSetType; /* M */
/* AttributeList provided as argument to DIMSE functions *//* U */
unsigned int opts; /* which optional items are set */
#define O_NCREATE_AFFECTEDSOPCLASSUID 0x0001
#define O_NCREATE_AFFECTEDSOPINSTANCEUID 0x0002
} ;
/* N-DELETE */
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_DeleteRQ {
DIC_US MessageID; /* M */
DIC_UI RequestedSOPClassUID; /* M */
DIC_UI RequestedSOPInstanceUID; /* M */
T_DIMSE_DataSetType DataSetType; /* M */
} ;
struct DCMTK_DCMNET_EXPORT T_DIMSE_N_DeleteRSP {
DIC_US MessageIDBeingRespondedTo; /* M */
DIC_UI AffectedSOPClassUID; /* U */
DIC_US DimseStatus; /* M */
DIC_UI AffectedSOPInstanceUID; /* U */
T_DIMSE_DataSetType DataSetType; /* M */
unsigned int opts; /* which optional items are set */
#define O_NDELETE_AFFECTEDSOPCLASSUID 0x0001
#define O_NDELETE_AFFECTEDSOPINSTANCEUID 0x0002
} ;
/*
* Composite DIMSE Message
*/
struct DCMTK_DCMNET_EXPORT T_DIMSE_Message {
T_DIMSE_Command CommandField; /* M */
union {
/* requests */
T_DIMSE_C_StoreRQ CStoreRQ;
T_DIMSE_C_EchoRQ CEchoRQ;
T_DIMSE_C_FindRQ CFindRQ;
T_DIMSE_C_GetRQ CGetRQ;
T_DIMSE_C_MoveRQ CMoveRQ;
T_DIMSE_C_CancelRQ CCancelRQ;
T_DIMSE_N_EventReportRQ NEventReportRQ;
T_DIMSE_N_GetRQ NGetRQ;
T_DIMSE_N_SetRQ NSetRQ;
T_DIMSE_N_ActionRQ NActionRQ;
T_DIMSE_N_CreateRQ NCreateRQ;
T_DIMSE_N_DeleteRQ NDeleteRQ;
/* responses */
T_DIMSE_C_StoreRSP CStoreRSP;
T_DIMSE_C_EchoRSP CEchoRSP;
T_DIMSE_C_FindRSP CFindRSP;
T_DIMSE_C_GetRSP CGetRSP;
T_DIMSE_C_MoveRSP CMoveRSP;
T_DIMSE_N_EventReportRSP NEventReportRSP;
T_DIMSE_N_GetRSP NGetRSP;
T_DIMSE_N_SetRSP NSetRSP;
T_DIMSE_N_ActionRSP NActionRSP;
T_DIMSE_N_CreateRSP NCreateRSP;
T_DIMSE_N_DeleteRSP NDeleteRSP;
} msg;
};
/*
* Global Variables
*/
/*
* Define global defaults for data encoding when sending out data-sets.
* These can be adjusted to allow variants to be tested.
*/
extern DCMTK_DCMNET_EXPORT E_GrpLenEncoding g_dimse_send_groupLength_encoding; /* default: EGL_recalcGL */
extern DCMTK_DCMNET_EXPORT E_EncodingType g_dimse_send_sequenceType_encoding; /* default: EET_ExplicitLength */
/*
* If this global flag is set to OFTrue, all DIMSE messages sent or received
* are stored in files with the name
* "dimse-TTT-DDD-XXXX.dcm" or "dimse-TTT-DDD-XXXX-YY.dcm", where
* TTT is "cmd" for a command set, or "dat" for a data set
* DDD is "snd" for data sent, or "rcv" for data received
* XXXX is a counter, starting at 1 (global for all associations)
* YY is an additional counter used if multiple datasets follow a single command set
* The files are in implicit VR little endian encoding, without meta-header.
*/
extern DCMTK_DCMNET_EXPORT OFBool g_dimse_save_dimse_data; /* default: OFFalse */
/*
* Public Function Prototypes
*/
/*
* High Level DIMSE Messaging.
*/
/*
* General Information.
*
* Many of the DIMSE routines take parameters for a blocking mode
* and a timeout. In all cases, these parameters are only used
* when receiving commands or data sets (reading). There are no blocking
* and timeout options for send operations.
* When receiving commands or data sets:
* If the parameter blockMode is DIMSE_BLOCKING, the DIMSE routine
* will wait until a response arrives before returning.
* If the parameter blockMode is DIMSE_NONBLOCKING then the DIMSE routine
* will wait at most timeout seconds for a response and if no response arrives
* will return DIMSE_NODATAAVAILABLE. In both cases waiting will be
* interrupted by association release, and abort messages, or network
* disruption.
*/
/*
* Verification Service Class
*/
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_echoUser(
/* in */
T_ASC_Association *assoc, DIC_US msgId,
/* blocking info for response */
T_DIMSE_BlockingMode blockMode, int timeout,
/* out */
DIC_US *status, DcmDataset **statusDetail);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendEchoResponse(T_ASC_Association * assoc,
T_ASC_PresentationContextID presID,
const T_DIMSE_C_EchoRQ *request, DIC_US status, DcmDataset *statusDetail);
/*
* Storage Service Class
*/
typedef enum {
DIMSE_StoreBegin, /* before data set */
DIMSE_StoreProgressing, /* during data set */
DIMSE_StoreEnd /* after data set */
} T_DIMSE_StoreProgressState;
struct DCMTK_DCMNET_EXPORT T_DIMSE_StoreProgress { /* progress structure for store callback routines */
T_DIMSE_StoreProgressState state; /* current state */
long callbackCount; /* callback execution count */
long progressBytes; /* sent/received so far */
long totalBytes; /* total/estimated total to send/receive */
} ;
typedef void (*DIMSE_StoreUserCallback)(
void *callbackData,
T_DIMSE_StoreProgress *progress,
T_DIMSE_C_StoreRQ *request /* original store request */
);
struct DCMTK_DCMNET_EXPORT T_DIMSE_DetectedCancelParameters {
OFBool cancelEncountered;
T_ASC_PresentationContextID presId;
T_DIMSE_C_CancelRQ req;
} ;
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_storeUser(
/* in */
T_ASC_Association *assoc, T_ASC_PresentationContextID presId,
T_DIMSE_C_StoreRQ *request,
const char *imageFileName, DcmDataset *imageDataSet,
DIMSE_StoreUserCallback callback, void *callbackData,
/* blocking info for response */
T_DIMSE_BlockingMode blockMode, int timeout,
/* out */
T_DIMSE_C_StoreRSP *response,
DcmDataset **statusDetail,
T_DIMSE_DetectedCancelParameters *checkForCancelParams = NULL,
/* in */
long imageFileTotalBytes=0);
typedef void (*DIMSE_StoreProviderCallback)(
/* in */
void *callbackData,
T_DIMSE_StoreProgress *progress, /* progress state */
T_DIMSE_C_StoreRQ *request, /* original store request */
char *imageFileName, DcmDataset **imageDataSet, /* being received into */
/* in/out */
T_DIMSE_C_StoreRSP *response, /* final store response */
/* out */
DcmDataset **statusDetail);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_storeProvider(/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presIdCmd,
T_DIMSE_C_StoreRQ *request,
const char* imageFileName, int writeMetaheader,
DcmDataset **imageDataSet,
DIMSE_StoreProviderCallback callback, void *callbackData,
/* blocking info for data set */
T_DIMSE_BlockingMode blockMode, int timeout);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendStoreResponse(T_ASC_Association * assoc,
T_ASC_PresentationContextID presID,
const T_DIMSE_C_StoreRQ *request, /* send response to this request */
T_DIMSE_C_StoreRSP *response, /* response structure */
DcmDataset *statusDetail);
/*
* Query/Retrieve Service Class (FIND)
*/
typedef void (*DIMSE_FindUserCallback)(
/* in */
void *callbackData,
T_DIMSE_C_FindRQ *request, /* original find request */
int responseCount,
T_DIMSE_C_FindRSP *response, /* pending response received */
DcmDataset *responseIdentifiers /* pending response identifiers */
);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_findUser(
/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presID,
T_DIMSE_C_FindRQ *request, DcmDataset *requestIdentifiers,
DIMSE_FindUserCallback callback, void *callbackData,
/* blocking info for response */
T_DIMSE_BlockingMode blockMode, int timeout,
/* out */
T_DIMSE_C_FindRSP *response, DcmDataset **statusDetail);
typedef void (*DIMSE_FindProviderCallback)(
/* in */
void *callbackData,
OFBool cancelled, T_DIMSE_C_FindRQ *request,
DcmDataset *requestIdentifiers, int responseCount,
/* out */
T_DIMSE_C_FindRSP *response,
DcmDataset **responseIdentifiers,
DcmDataset **statusDetail);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_findProvider(
/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presIdCmd,
T_DIMSE_C_FindRQ *request,
DIMSE_FindProviderCallback callback, void *callbackData,
/* blocking info for data set */
T_DIMSE_BlockingMode blockMode, int timeout);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendFindResponse(T_ASC_Association * assoc,
T_ASC_PresentationContextID presID,
const T_DIMSE_C_FindRQ *request,
T_DIMSE_C_FindRSP *response, DcmDataset *responseIdentifiers,
DcmDataset *statusDetail);
/*
* Query/Retrieve Service Class (MOVE)
*/
typedef void (*DIMSE_MoveUserCallback)(
/* in */
void *callbackData,
T_DIMSE_C_MoveRQ *request,
int responseCount, T_DIMSE_C_MoveRSP *response);
typedef void (*DIMSE_SubOpProviderCallback)(void *subOpCallbackData,
T_ASC_Network *net, T_ASC_Association **subOpAssoc);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_moveUser(
/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presID,
T_DIMSE_C_MoveRQ *request,
DcmDataset *requestIdentifiers,
DIMSE_MoveUserCallback callback, void *callbackData,
/* blocking info for response */
T_DIMSE_BlockingMode blockMode, int timeout,
/* sub-operation provider callback */
T_ASC_Network *net,
DIMSE_SubOpProviderCallback subOpCallback, void *subOpCallbackData,
/* out */
T_DIMSE_C_MoveRSP *response, DcmDataset **statusDetail,
DcmDataset **responseIdentifers,
OFBool ignorePendingDatasets = OFFalse);
typedef void (*DIMSE_MoveProviderCallback)(
/* in */
void *callbackData,
OFBool cancelled, T_DIMSE_C_MoveRQ *request,
DcmDataset *requestIdentifiers, int responseCount,
/* out */
T_DIMSE_C_MoveRSP *response, DcmDataset **statusDetail,
DcmDataset **responseIdentifiers);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_moveProvider(
/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presIdCmd,
T_DIMSE_C_MoveRQ *request,
DIMSE_MoveProviderCallback callback, void *callbackData,
/* blocking info for data set */
T_DIMSE_BlockingMode blockMode, int timeout);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendMoveResponse(T_ASC_Association * assoc,
T_ASC_PresentationContextID presID, const T_DIMSE_C_MoveRQ *request,
T_DIMSE_C_MoveRSP *response, DcmDataset *rspIds,
DcmDataset *statusDetail);
/*
* Query/Retrieve Service Class (GET)
*/
typedef void (*DIMSE_GetUserCallback)(
/* in */
void *callbackData,
T_DIMSE_C_GetRQ *request,
int responseCount, T_DIMSE_C_GetRSP *response);
typedef void (*DIMSE_SubOpProviderCallback)(void *subOpCallbackData,
T_ASC_Network *net, T_ASC_Association **subOpAssoc);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_getUser(
/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presID,
T_DIMSE_C_GetRQ *request,
DcmDataset *requestIdentifiers,
DIMSE_GetUserCallback callback, void *callbackData,
/* blocking info for response */
T_DIMSE_BlockingMode blockMode, int timeout,
/* sub-operation provider callback */
T_ASC_Network *net,
DIMSE_SubOpProviderCallback subOpCallback, void *subOpCallbackData,
/* out */
T_DIMSE_C_GetRSP *response, DcmDataset **statusDetail,
DcmDataset **responseIdentifers);
typedef void (*DIMSE_GetProviderCallback)(
/* in */
void *callbackData,
OFBool cancelled, T_DIMSE_C_GetRQ *request,
DcmDataset *requestIdentifiers, int responseCount,
/* out */
T_DIMSE_C_GetRSP *response, DcmDataset **statusDetail,
DcmDataset **responseIdentifiers);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_getProvider(
/* in */
T_ASC_Association *assoc,
T_ASC_PresentationContextID presIdCmd,
T_DIMSE_C_GetRQ *request,
DIMSE_GetProviderCallback callback, void *callbackData,
/* blocking info for data set */
T_DIMSE_BlockingMode blockMode, int timeout);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendGetResponse(T_ASC_Association * assoc,
T_ASC_PresentationContextID presID, const T_DIMSE_C_GetRQ *request,
T_DIMSE_C_GetRSP *response, DcmDataset *rspIds,
DcmDataset *statusDetail);
/*
* Query/Retrieve Service Class (CANCEL)
*/
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendCancelRequest(T_ASC_Association * assoc,
T_ASC_PresentationContextID presId, DIC_US msgId);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_checkForCancelRQ(T_ASC_Association * assoc,
T_ASC_PresentationContextID presId, DIC_US msgId);
/****
*
* Low Level DIMSE Messaging
* With the exception of DIMSE_receiveCommand,
* the following function are only intended for use if you
* wish to implement an alternative interface to the
* higher level routines provided above.
* Service call providers will have to use DIMSE_receiveCommand
* before calling the appropriate provider routine declared above.
*
*/
typedef void (*DIMSE_ProgressCallback)(void *callbackContext,
unsigned long byteCount);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendMessageUsingFileData(T_ASC_Association *association,
T_ASC_PresentationContextID presID,
T_DIMSE_Message *msg, DcmDataset *statusDetail,
const char* dataFileName,
DIMSE_ProgressCallback callback,
void *callbackContext,
DcmDataset **commandSet=NULL);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_sendMessageUsingMemoryData(T_ASC_Association *association,
T_ASC_PresentationContextID presID,
T_DIMSE_Message *msg, DcmDataset *statusDetail,
DcmDataset *dataObject,
DIMSE_ProgressCallback callback,
void *callbackContext,
DcmDataset **commandSet=NULL);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_receiveCommand(T_ASC_Association *association,
T_DIMSE_BlockingMode blocking,
int timeout,
T_ASC_PresentationContextID *presID,
T_DIMSE_Message *msg,
DcmDataset **statusDetail,
DcmDataset **commandSet=NULL);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_receiveDataSetInMemory(T_ASC_Association *association,
T_DIMSE_BlockingMode blocking,
int timeout,
T_ASC_PresentationContextID *presID,
DcmDataset **dataObject,
DIMSE_ProgressCallback callback,
void *callbackContext);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_createFilestream(
/* in */
const OFFilename &filename,
const T_DIMSE_C_StoreRQ *request,
const T_ASC_Association *assoc,
T_ASC_PresentationContextID presIdCmd,
int writeMetaheader,
/* out */
DcmOutputFileStream **filestream);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_receiveDataSetInFile(T_ASC_Association *assoc,
T_DIMSE_BlockingMode blocking, int timeout,
T_ASC_PresentationContextID *presID,
DcmOutputStream *filestream,
DIMSE_ProgressCallback callback, void *callbackData);
DCMTK_DCMNET_EXPORT OFCondition
DIMSE_ignoreDataSet( T_ASC_Association * assoc,
T_DIMSE_BlockingMode blocking,
int timeout,
DIC_UL * bytesRead,
DIC_UL * pdvCount);
/*
* Misc functions
*/
DCMTK_DCMNET_EXPORT OFString DIMSE_warn_str(T_ASC_Association *assoc);
enum DIMSE_direction {
DIMSE_INCOMING,
DIMSE_OUTGOING
};
/* Debugging functions for printing contents of a command structure */
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_Message &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_EchoRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_EchoRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_GetRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_GetRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_MoveRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_MoveRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_FindRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_FindRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_StoreRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_StoreRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_C_CancelRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_EventReportRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_EventReportRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_GetRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_GetRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_SetRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_SetRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_ActionRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_ActionRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_CreateRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_CreateRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_DeleteRQ &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
DCMTK_DCMNET_EXPORT OFString& DIMSE_dumpMessage(OFString &str, T_DIMSE_N_DeleteRSP &msg,
enum DIMSE_direction dir, DcmItem *dataset = NULL, T_ASC_PresentationContextID presID = 0);
// Compatibility wrapper
#define DIMSE_COMPAT_WRAP(func, type) \
static inline void func (FILE * f, type * msg) \
{ \
OFString str; \
DIMSE_dumpMessage(str, *msg, DIMSE_INCOMING); \
fprintf(f, "%s\n", str.c_str()); \
}
#define DIMSE_COMPAT_WRAP_R(func, type) \
DIMSE_COMPAT_WRAP(func ## RQ, type ## RQ) \
DIMSE_COMPAT_WRAP(func ## RSP, type ## RSP)
static inline void DIMSE_printMessage(STD_NAMESPACE ostream& ostream, T_DIMSE_Message &msg, DcmItem *dataset = NULL)
{
OFString str;
ostream << DIMSE_dumpMessage(str, msg, DIMSE_INCOMING, dataset) << OFendl;
}
DIMSE_COMPAT_WRAP(DIMSE_printCommand, T_DIMSE_Message)
DIMSE_COMPAT_WRAP_R(DIMSE_printCEcho, T_DIMSE_C_Echo)
DIMSE_COMPAT_WRAP_R(DIMSE_printCStore, T_DIMSE_C_Store)
DIMSE_COMPAT_WRAP_R(DIMSE_printCGet, T_DIMSE_C_Get)
DIMSE_COMPAT_WRAP_R(DIMSE_printCMove, T_DIMSE_C_Move)
DIMSE_COMPAT_WRAP_R(DIMSE_printCFind, T_DIMSE_C_Find)
DIMSE_COMPAT_WRAP(DIMSE_printCCancelRQ, T_DIMSE_C_EchoRQ)
DIMSE_COMPAT_WRAP_R(DIMSE_printNEventReport, T_DIMSE_N_EventReport)
DIMSE_COMPAT_WRAP_R(DIMSE_printNGet, T_DIMSE_N_Get)
DIMSE_COMPAT_WRAP_R(DIMSE_printNSet, T_DIMSE_N_Set)
DIMSE_COMPAT_WRAP_R(DIMSE_printNAction, T_DIMSE_N_Action)
DIMSE_COMPAT_WRAP_R(DIMSE_printNCreate, T_DIMSE_N_Create)
DIMSE_COMPAT_WRAP_R(DIMSE_printNDelete, T_DIMSE_N_Delete)
#undef DIMSE_COMPAT_WRAP
#undef DIMSE_COMPAT_WRAP_R
#endif