dimse.h

00001 /*
00002 **  Copyright (C) 1993/1994, OFFIS, Oldenburg University and CERIUM
00003 **  
00004 **  This software and supporting documentation were
00005 **  developed by 
00006 **  
00007 **    Institut OFFIS
00008 **    Bereich Kommunikationssysteme
00009 **    Westerstr. 10-12
00010 **    26121 Oldenburg, Germany
00011 **    
00012 **    Fachbereich Informatik
00013 **    Abteilung Prozessinformatik
00014 **    Carl von Ossietzky Universitaet Oldenburg 
00015 **    Ammerlaender Heerstr. 114-118
00016 **    26111 Oldenburg, Germany
00017 **    
00018 **    CERIUM
00019 **    Laboratoire SIM
00020 **    Faculte de Medecine
00021 **    2 Avenue du Pr. Leon Bernard
00022 **    35043 Rennes Cedex, France
00023 **  
00024 **  for CEN/TC251/WG4 as a contribution to the Radiological 
00025 **  Society of North America (RSNA) 1993 Digital Imaging and 
00026 **  Communications in Medicine (DICOM) Demonstration.
00027 **  
00028 **  THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND NEITHER OFFIS,
00029 **  OLDENBURG UNIVERSITY NOR CERIUM MAKE ANY WARRANTY REGARDING 
00030 **  THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR 
00031 **  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER 
00032 **  DISEASES OR ITS CONFORMITY TO ANY SPECIFICATION.  THE 
00033 **  ENTIRE RISK AS TO QUALITY AND PERFORMANCE OF THE SOFTWARE   
00034 **  IS WITH THE USER. 
00035 **  
00036 **  Copyright of the software and supporting documentation
00037 **  is, unless otherwise stated, jointly owned by OFFIS,
00038 **  Oldenburg University and CERIUM and free access is hereby
00039 **  granted as a license to use this software, copy this
00040 **  software and prepare derivative works based upon this
00041 **  software. However, any distribution of this software
00042 **  source code or supporting documentation or derivative
00043 **  works (source code and supporting documentation) must
00044 **  include the three paragraphs of this copyright notice. 
00045 ** 
00046 */
00047 /*
00048 **
00049 ** Author: Andrew Hewett        Created: 03-06-93
00050 ** 
00051 ** Module: dimse
00052 **
00053 ** Purpose: 
00054 **  This file contains the routines which provide dimse layer services
00055 **  for DICOM applications.  
00056 **
00057 **  Module Prefix: DIMSE_
00058 **
00059 ** Last Update:     $Author: meichel $
00060 ** Update Date:     $Date: 2005/12/08 16:02:21 $
00061 ** Source File:     $Source: /share/dicom/cvs-depot/dcmtk/dcmnet/include/dcmtk/dcmnet/dimse.h,v $
00062 ** CVS/RCS Revision:    $Revision: 1.17 $
00063 ** Status:      $State: Exp $
00064 **
00065 ** CVS/RCS Log at end of file
00066 **
00067 */
00068 
00069 
00070 #ifndef DIMSE_H
00071 #define DIMSE_H
00072 
00073 /*
00074  * Required Include Files
00075  */
00076  
00077 #include "dcmtk/config/osconfig.h"    /* make sure OS specific configuration is included first */
00078 
00079 #include "dcmtk/dcmnet/dicom.h"
00080 #include "dcmtk/dcmnet/lst.h"
00081 #include "dcmtk/dcmnet/cond.h"
00082 #include "dcmtk/dcmnet/dul.h"
00083 #include "dcmtk/dcmnet/assoc.h"
00084 #include "dcmtk/dcmdata/dcdatset.h"
00085 #include "dcmtk/ofstd/ofglobal.h"
00086 
00087 class DcmOutputFileStream;
00088 
00097 extern OFGlobal<OFBool> dcmPeerRequiresExactUIDCopy; /* default OFFalse */
00098 
00105 extern OFGlobal<Uint32> dcmMaxOutgoingPDUSize; /* default 2^32-1 */
00106 
00107 
00108 /* 
00109  * General Status Codes 
00110  */
00111 #define STATUS_Success  0x0000
00112 #define STATUS_Pending  0xff00
00113 
00114 #define DICOM_PENDING_STATUS(status) (((status)&0xff00) == 0xff00)
00115 #define DICOM_WARNING_STATUS(status) (((status)&0xf000) == 0xb000)
00116 
00117 /* 
00118  * Service Class Specific Status Codes 
00119  * NOTE: some codes are only significant in the high byte 
00120  * or high nibble (4 bits).
00121  */
00122 /* Storage Specific Codes*/
00123 #define STATUS_STORE_Refused_OutOfResources     /* high byte */ 0xa700  
00124 #define STATUS_STORE_Refused_SOPClassNotSupported   /* high byte */ 0xa800 
00125 #define STATUS_STORE_Error_DataSetDoesNotMatchSOPClass  /* high byte */ 0xa900 
00126 #define STATUS_STORE_Error_CannotUnderstand /* high nibble */   0xc000  
00127 #define STATUS_STORE_Warning_CoersionOfDataElements             0xb000
00128 #define STATUS_STORE_Warning_DataSetDoesNotMatchSOPClass        0xb007
00129 #define STATUS_STORE_Warning_ElementsDiscarded              0xb006
00130 
00131 /* Find Specific Codes */
00132 #define STATUS_FIND_Refused_OutOfResources              0xa700
00133 #define STATUS_FIND_Refused_SOPClassNotSupported            0xa800
00134 #define STATUS_FIND_Failed_IdentifierDoesNotMatchSOPClass       0xa900
00135 #define STATUS_FIND_Failed_UnableToProcess  /* high nibble */   0xc000  
00136 #define STATUS_FIND_Cancel_MatchingTerminatedDueToCancelRequest     0xfe00
00137 #define STATUS_FIND_Pending_WarningUnsupportedOptionalKeys      0xff01
00138 
00139 /* Move Specific Codes */
00140 #define STATUS_MOVE_Refused_OutOfResourcesNumberOfMatches       0xa701
00141 #define STATUS_MOVE_Refused_OutOfResourcesSubOperations         0xa702
00142 #define STATUS_MOVE_Failed_SOPClassNotSupported             0xa800
00143 #define STATUS_MOVE_Failed_MoveDestinationUnknown           0xa801
00144 #define STATUS_MOVE_Failed_IdentifierDoesNotMatchSOPClass       0xa900
00145 #define STATUS_MOVE_Failed_UnableToProcess   /* high nibble */      0xc000 
00146 #define STATUS_MOVE_Cancel_SubOperationsTerminatedDueToCancelIndication 0xfe00
00147 #define STATUS_MOVE_Warning_SubOperationsCompleteOneOrMoreFailures  0xb000
00148 
00149 /* Get Specific Codes */
00150 #define STATUS_GET_Refused_OutOfResourcesNumberOfMatches        0xa701
00151 #define STATUS_GET_Refused_OutOfResourcesSubOperations          0xa702
00152 #define STATUS_GET_Failed_SOPClassNotSupported                  0xa800
00153 #define STATUS_GET_Failed_IdentifierDoesNotMatchSOPClass        0xa900
00154 #define STATUS_GET_Failed_UnableToProcess    /* high nibble */      0xc000 
00155 #define STATUS_GET_Cancel_SubOperationsTerminatedDueToCancelIndication  0xfe00
00156 #define STATUS_GET_Warning_SubOperationsCompleteOneOrMoreFailures   0xb000
00157 
00158 /* DIMSE-N Specific Codes */
00159 #define STATUS_N_Cancel                                                 0xFE00
00160 #define STATUS_N_AttributeListError                                     0x0107
00161 #define STATUS_N_SOPClassNotSupported                                   0x0122
00162 #define STATUS_N_ClassInstanceConflict                                  0x0119
00163 #define STATUS_N_DuplicateSOPInstance                                   0x0111
00164 #define STATUS_N_DuplicateInvocation                                    0x0210
00165 #define STATUS_N_InvalidArgumentValue                                   0x0115
00166 #define STATUS_N_InvalidAttributeValue                                  0x0106
00167 #define STATUS_N_InvalidObjectInstance                                  0x0117
00168 #define STATUS_N_MissingAttribute                                       0x0120
00169 #define STATUS_N_MissingAttributeValue                                  0x0121
00170 #define STATUS_N_MistypedArgument                                       0x0212
00171 #define STATUS_N_NoSuchArgument                                         0x0114
00172 #define STATUS_N_NoSuchAttribute                                        0x0105
00173 #define STATUS_N_NoSuchEventType                                        0x0113
00174 #define STATUS_N_NoSuchObjectInstance                                   0x0112
00175 #define STATUS_N_NoSuchSOPClass                                         0x0118
00176 #define STATUS_N_ProcessingFailure                                      0x0110
00177 #define STATUS_N_ResourceLimitation                                     0x0213
00178 #define STATUS_N_UnrecognizedOperation                                  0x0211
00179 
00180 /* Print Management Service Class Specific Codes */
00181 #define STATUS_N_PRINT_BFS_Warn_MemoryAllocation                        0xB600
00182 #define STATUS_N_PRINT_BFS_Warn_NoSessionPrinting                       0xB601
00183 #define STATUS_N_PRINT_BFS_Warn_EmptyPage                               0xB602
00184 #define STATUS_N_PRINT_BFB_Warn_EmptyPage                               0xB603
00185 #define STATUS_N_PRINT_BFS_Fail_NoFilmBox                               0xC600
00186 #define STATUS_N_PRINT_BFS_Fail_PrintQueueFull                          0xC601
00187 #define STATUS_N_PRINT_BSB_Fail_PrintQueueFull                          0xC602
00188 #define STATUS_N_PRINT_BFS_BFB_Fail_ImageSize                           0xC603
00189 #define STATUS_N_PRINT_BFS_BFB_Fail_PositionCollision                   0xC604
00190 #define STATUS_N_PRINT_IB_Fail_InsufficientMemory                       0xC605
00191 #define STATUS_N_PRINT_IB_Fail_MoreThanOneVOILUT                        0xC606
00192 
00193 
00194 /*
00195  * Type Definitions
00196  */
00197 
00198 
00199 /*
00200  * DIMSE Command Codes (Request and Response)
00201  */
00202 typedef enum {          /* DIC_US */
00203     DIMSE_NOTHING = 0x0000, /* none of the rest !! */
00204     DIMSE_C_STORE_RQ = 0x0001,  /* also known as C_SEND_RQ  */
00205     DIMSE_C_STORE_RSP = 0x8001, /* also known as C_SEND_RSP */
00206     DIMSE_C_GET_RQ = 0x0010,
00207     DIMSE_C_GET_RSP = 0x8010,
00208     DIMSE_C_FIND_RQ = 0x0020,
00209     DIMSE_C_FIND_RSP = 0x8020,
00210     DIMSE_C_MOVE_RQ = 0x0021,
00211     DIMSE_C_MOVE_RSP = 0x8021,
00212     DIMSE_C_ECHO_RQ = 0x0030,
00213     DIMSE_C_ECHO_RSP = 0x8030,
00214     DIMSE_C_CANCEL_RQ = 0x0fff,
00215     /* there is no DIMSE_C_CANCEL_RSP */
00216 
00217     DIMSE_N_EVENT_REPORT_RQ = 0x0100,
00218     DIMSE_N_EVENT_REPORT_RSP = 0x8100,
00219     DIMSE_N_GET_RQ = 0x0110,
00220     DIMSE_N_GET_RSP = 0x8110,
00221     DIMSE_N_SET_RQ = 0x0120,
00222     DIMSE_N_SET_RSP = 0x8120,
00223     DIMSE_N_ACTION_RQ = 0x0130,
00224     DIMSE_N_ACTION_RSP = 0x8130,
00225     DIMSE_N_CREATE_RQ = 0x0140,
00226     DIMSE_N_CREATE_RSP = 0x8140,
00227     DIMSE_N_DELETE_RQ = 0x0150,
00228     DIMSE_N_DELETE_RSP = 0x8150
00229 } T_DIMSE_Command;
00230 
00231 /*
00232  * DIMSE Data Set Type Codes
00233  */
00234 
00235 typedef enum {          /* DIC_US */
00236     DIMSE_DATASET_PRESENT = 0x0001, /* anything other than 0x0101) */
00237     DIMSE_DATASET_NULL = 0x0101
00238 } T_DIMSE_DataSetType;
00239 
00240 /*
00241  * DIMSE Priority Codes
00242  */
00243 
00244 typedef enum {          /* DIC_US */
00245     DIMSE_PRIORITY_LOW = 0x0002,
00246     DIMSE_PRIORITY_MEDIUM = 0x0000,
00247     DIMSE_PRIORITY_HIGH = 0x0001
00248 } T_DIMSE_Priority;
00249 
00250 /*
00251  * DIMSE Blocking Modes (reading)
00252  */
00253 
00254 typedef enum {
00255     DIMSE_BLOCKING,
00256     DIMSE_NONBLOCKING
00257 } T_DIMSE_BlockingMode;
00258 
00259 
00260 /*
00261  * DIMSE Messages 
00262  * 
00263  */
00264 
00265 /* C-STORE */
00266 
00267 struct T_DIMSE_C_StoreRQ {
00268     DIC_US          MessageID;              /* M */
00269     DIC_UI          AffectedSOPClassUID;            /* M */
00270     T_DIMSE_Priority Priority;              /* M */
00271     T_DIMSE_DataSetType DataSetType;            /* M */
00272     DIC_UI          AffectedSOPInstanceUID;         /* M */
00273     DIC_AE          MoveOriginatorApplicationEntityTitle;   /* U */
00274     DIC_US          MoveOriginatorID;           /* U */
00275     /* DataSet provided as argument to DIMSE functions */   /* M */
00276     unsigned int    opts; /* which optional items are set */
00277 #define O_STORE_MOVEORIGINATORAETITLE           0x0001
00278 #define O_STORE_MOVEORIGINATORID            0x0002
00279         /* the following flag is set on incoming C-STORE requests if
00280          * the SOP instance UID is (incorrectly) padded with a space
00281          * character. Will only be detected if the dcmdata flag
00282          * dcmEnableAutomaticInputDataCorrection is false.
00283          */
00284 #define O_STORE_RQ_BLANK_PADDING            0x0008
00285 };
00286 
00287 struct T_DIMSE_C_StoreRSP {
00288     DIC_US          MessageIDBeingRespondedTo;      /* M */
00289     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00290     T_DIMSE_DataSetType DataSetType;            /* M */
00291     DIC_US          DimseStatus;                /* M */
00292     DIC_UI          AffectedSOPInstanceUID;         /* U(=) */
00293     unsigned int    opts; /* which optional items are set */
00294 #define O_STORE_AFFECTEDSOPCLASSUID     0x0001
00295 #define O_STORE_AFFECTEDSOPINSTANCEUID      0x0002
00296         /* peer requires an exact copy of the SOP instance UID
00297          * as it was sent in the C-STORE-RQ,
00298          * including any illegal trailing space padding.
00299          */
00300 #define O_STORE_PEER_REQUIRES_EXACT_UID_COPY    0x0004
00301         /* SOP instance UID in C-STORE-RQ was space padded. */
00302 #define O_STORE_RSP_BLANK_PADDING       0x0008
00303 } ;
00304 
00305 /* C-ECHO */
00306 
00307 struct T_DIMSE_C_EchoRQ {
00308     DIC_US          MessageID;              /* M */
00309     DIC_UI          AffectedSOPClassUID;            /* M */
00310     T_DIMSE_DataSetType DataSetType;            /* M */
00311 } ;
00312 
00313 struct T_DIMSE_C_EchoRSP {
00314     DIC_US          MessageIDBeingRespondedTo;      /* M */
00315     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00316     T_DIMSE_DataSetType DataSetType;            /* M */
00317     DIC_US          DimseStatus;                /* M */
00318     unsigned int    opts; /* which optional items are set */
00319 #define O_ECHO_AFFECTEDSOPCLASSUID      0x0001
00320 } ;
00321 
00322 /* C-FIND */
00323 
00324 struct T_DIMSE_C_FindRQ {
00325     DIC_US          MessageID;              /* M */
00326     DIC_UI          AffectedSOPClassUID;            /* M */
00327     T_DIMSE_Priority Priority;              /* M */
00328     T_DIMSE_DataSetType DataSetType;            /* M */
00329     /* Identifier provided as argument to DIMSE functions *//* M */
00330 } ;
00331 
00332 struct T_DIMSE_C_FindRSP {
00333     DIC_US          MessageIDBeingRespondedTo;      /* M */
00334     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00335     T_DIMSE_DataSetType DataSetType;            /* M */
00336     DIC_US          DimseStatus;                /* M */
00337     /* Identifier provided as argument to DIMSE functions *//* C */
00338     unsigned int    opts; /* which optional items are set */
00339 #define O_FIND_AFFECTEDSOPCLASSUID      0x0001
00340 } ;
00341 
00342 /* C-GET */
00343 
00344 struct T_DIMSE_C_GetRQ {
00345     DIC_US          MessageID;              /* M */
00346     DIC_UI          AffectedSOPClassUID;            /* M */
00347     T_DIMSE_Priority Priority;              /* M */
00348     T_DIMSE_DataSetType DataSetType;            /* M */
00349     /* Identifier provided as argument to DIMSE functions *//* M */
00350 } ;
00351 
00352 struct T_DIMSE_C_GetRSP {
00353     DIC_US          MessageIDBeingRespondedTo;      /* M */
00354     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00355     T_DIMSE_DataSetType DataSetType;            /* M */
00356     DIC_US          DimseStatus;                /* M */
00357     DIC_US          NumberOfRemainingSubOperations;     /* C */
00358     DIC_US          NumberOfCompletedSubOperations;     /* C */
00359     DIC_US          NumberOfFailedSubOperations;        /* C */
00360     DIC_US          NumberOfWarningSubOperations;       /* C */
00361     unsigned int    opts; /* which optional items are set */
00362 #define O_GET_AFFECTEDSOPCLASSUID       0x0001
00363 #define O_GET_NUMBEROFREMAININGSUBOPERATIONS    0x0002
00364 #define O_GET_NUMBEROFCOMPLETEDSUBOPERATIONS    0x0004
00365 #define O_GET_NUMBEROFFAILEDSUBOPERATIONS   0x0008
00366 #define O_GET_NUMBEROFWARNINGSUBOPERATIONS  0x0010
00367 } ;
00368 
00369 /* C-MOVE */
00370 
00371 struct T_DIMSE_C_MoveRQ {
00372     DIC_US          MessageID;              /* M */
00373     DIC_UI          AffectedSOPClassUID;            /* M */
00374     T_DIMSE_Priority Priority;              /* M */
00375     T_DIMSE_DataSetType DataSetType;            /* M */
00376     DIC_AE          MoveDestination;            /* M */
00377     /* Identifier provided as argument to DIMSE functions *//* M */
00378 } ;
00379 
00380 struct T_DIMSE_C_MoveRSP {
00381     DIC_US          MessageIDBeingRespondedTo;      /* M */
00382     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00383     T_DIMSE_DataSetType DataSetType;            /* M */
00384     DIC_US          DimseStatus;                /* M */
00385     DIC_US          NumberOfRemainingSubOperations;     /* C */
00386     DIC_US          NumberOfCompletedSubOperations;     /* C */
00387     DIC_US          NumberOfFailedSubOperations;        /* C */
00388     DIC_US          NumberOfWarningSubOperations;       /* C */
00389     unsigned int    opts; /* which optional items are set */
00390 #define O_MOVE_AFFECTEDSOPCLASSUID      0x0001
00391 #define O_MOVE_NUMBEROFREMAININGSUBOPERATIONS   0x0002
00392 #define O_MOVE_NUMBEROFCOMPLETEDSUBOPERATIONS   0x0004
00393 #define O_MOVE_NUMBEROFFAILEDSUBOPERATIONS  0x0008
00394 #define O_MOVE_NUMBEROFWARNINGSUBOPERATIONS 0x0010
00395 } ;
00396 
00397 
00398 /* C-CANCEL */
00399 
00400 struct T_DIMSE_C_CancelRQ {
00401     DIC_US          MessageIDBeingRespondedTo;      /* M */
00402     T_DIMSE_DataSetType DataSetType;            /* M */
00403 } ;
00404 
00405 
00406 /* N-EVENT-REPORT */
00407 
00408 struct T_DIMSE_N_EventReportRQ {
00409     DIC_US          MessageID;              /* M */
00410     DIC_UI          AffectedSOPClassUID;            /* M */
00411     DIC_UI          AffectedSOPInstanceUID;         /* M */
00412     T_DIMSE_DataSetType DataSetType;            /* M */
00413     DIC_US      EventTypeID;                /* M */
00414     /* EventInformation provided as argument to DIMSE functions *//* U */
00415 } ;
00416 
00417 struct T_DIMSE_N_EventReportRSP {
00418     DIC_US          MessageIDBeingRespondedTo;      /* M */
00419     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00420     DIC_US          DimseStatus;                /* M */
00421     DIC_UI          AffectedSOPInstanceUID;         /* U(=) */
00422     T_DIMSE_DataSetType DataSetType;            /* M */
00423     DIC_US      EventTypeID;                /* C(=) */
00424     /* EventReply provided as argument to DIMSE functions *//* C */
00425     unsigned int    opts; /* which optional items are set */
00426 #define O_NEVENTREPORT_AFFECTEDSOPCLASSUID      0x0001
00427 #define O_NEVENTREPORT_AFFECTEDSOPINSTANCEUID       0x0002
00428 #define O_NEVENTREPORT_EVENTTYPEID          0x0004
00429 } ;
00430 
00431 /* N-GET */
00432 
00433 struct T_DIMSE_N_GetRQ {
00434     DIC_US          MessageID;              /* M */
00435     DIC_UI          RequestedSOPClassUID;           /* M */
00436     DIC_UI          RequestedSOPInstanceUID;        /* M */
00437     T_DIMSE_DataSetType DataSetType;            /* M */
00438     /*
00439      * In the following array, the attributes to get should be coded
00440      * in pairs along the array (e.g. {g,e,g,e,g,e,...}).  The ListCount
00441      * variable should contain the number of 'DIC_US' values in the
00442      * array (not the number of pairs).
00443      */
00444     int     ListCount;
00445     DIC_US      *AttributeIdentifierList;       /* U */
00446 } ;
00447 
00448 struct T_DIMSE_N_GetRSP {
00449     DIC_US          MessageIDBeingRespondedTo;      /* M */
00450     DIC_UI          AffectedSOPClassUID;            /* U */
00451     DIC_US          DimseStatus;                /* M */
00452     DIC_UI          AffectedSOPInstanceUID;         /* U */
00453     T_DIMSE_DataSetType DataSetType;            /* M */
00454     /* AttributeList provided as argument to DIMSE functions *//* C */
00455     unsigned int    opts; /* which optional items are set */
00456 #define O_NGET_AFFECTEDSOPCLASSUID      0x0001
00457 #define O_NGET_AFFECTEDSOPINSTANCEUID       0x0002
00458 } ;
00459 
00460 /* N-SET */
00461 
00462 struct T_DIMSE_N_SetRQ {
00463     DIC_US          MessageID;              /* M */
00464     DIC_UI          RequestedSOPClassUID;           /* M */
00465     DIC_UI          RequestedSOPInstanceUID;        /* M */
00466     T_DIMSE_DataSetType DataSetType;            /* M */
00467     /* ModificationList provided as argument to DIMSE functions *//* M */
00468 } ;
00469 
00470 struct T_DIMSE_N_SetRSP {
00471     DIC_US          MessageIDBeingRespondedTo;      /* M */
00472     DIC_UI          AffectedSOPClassUID;            /* U */
00473     DIC_US          DimseStatus;                /* M */
00474     DIC_UI          AffectedSOPInstanceUID;         /* U */
00475     T_DIMSE_DataSetType DataSetType;            /* M */
00476     /* AttributeList provided as argument to DIMSE functions *//* U */
00477     unsigned int    opts; /* which optional items are set */
00478 #define O_NSET_AFFECTEDSOPCLASSUID      0x0001
00479 #define O_NSET_AFFECTEDSOPINSTANCEUID       0x0002
00480 } ;
00481 
00482 /* N-ACTION */
00483 
00484 struct T_DIMSE_N_ActionRQ {
00485     DIC_US          MessageID;              /* M */
00486     DIC_UI          RequestedSOPClassUID;           /* M */
00487     DIC_UI          RequestedSOPInstanceUID;        /* M */
00488     DIC_US      ActionTypeID;               /* M */
00489     T_DIMSE_DataSetType DataSetType;            /* M */
00490     /* ActionInformation provided as argument to DIMSE functions *//* U */
00491 } ;
00492 
00493 struct T_DIMSE_N_ActionRSP {
00494     DIC_US          MessageIDBeingRespondedTo;      /* M */
00495     DIC_UI          AffectedSOPClassUID;            /* U */
00496     DIC_US          DimseStatus;                /* M */
00497     DIC_UI          AffectedSOPInstanceUID;         /* U */
00498     DIC_US      ActionTypeID;               /* C(=) */
00499     T_DIMSE_DataSetType DataSetType;            /* M */
00500     /* ActionReply provided as argument to DIMSE functions *//* C */
00501     unsigned int    opts; /* which optional items are set */
00502 #define O_NACTION_AFFECTEDSOPCLASSUID       0x0001
00503 #define O_NACTION_AFFECTEDSOPINSTANCEUID    0x0002
00504 #define O_NACTION_ACTIONTYPEID          0x0004
00505 } ;
00506 
00507 /* N-CREATE */
00508 
00509 struct T_DIMSE_N_CreateRQ {
00510     DIC_US          MessageID;              /* M */
00511     DIC_UI          AffectedSOPClassUID;            /* M */
00512     DIC_UI          AffectedSOPInstanceUID;         /* U */
00513     T_DIMSE_DataSetType DataSetType;            /* M */
00514     /* AttributeList provided as argument to DIMSE functions *//* M */
00515     unsigned int    opts; /* which optional items are set */
00516 #define O_NCREATE_AFFECTEDSOPINSTANCEUID    0x0002
00517 } ;
00518 
00519 struct T_DIMSE_N_CreateRSP {
00520     DIC_US          MessageIDBeingRespondedTo;      /* M */
00521     DIC_UI          AffectedSOPClassUID;            /* U(=) */
00522     DIC_US          DimseStatus;                /* M */
00523     DIC_UI          AffectedSOPInstanceUID;         /* C */
00524     T_DIMSE_DataSetType DataSetType;            /* M */
00525     /* AttributeList provided as argument to DIMSE functions *//* U */
00526     unsigned int    opts; /* which optional items are set */
00527 #define O_NCREATE_AFFECTEDSOPCLASSUID       0x0001
00528 #define O_NCREATE_AFFECTEDSOPINSTANCEUID    0x0002
00529 } ;
00530 
00531 /* N-DELETE */
00532 
00533 struct T_DIMSE_N_DeleteRQ {
00534     DIC_US          MessageID;              /* M */
00535     DIC_UI          RequestedSOPClassUID;           /* M */
00536     DIC_UI          RequestedSOPInstanceUID;        /* M */
00537     T_DIMSE_DataSetType DataSetType;            /* M */
00538 } ;
00539 
00540 struct T_DIMSE_N_DeleteRSP {
00541     DIC_US          MessageIDBeingRespondedTo;      /* M */
00542     DIC_UI          AffectedSOPClassUID;            /* U */
00543     DIC_US          DimseStatus;                /* M */
00544     DIC_UI          AffectedSOPInstanceUID;         /* U */
00545     T_DIMSE_DataSetType DataSetType;            /* M */
00546     unsigned int    opts; /* which optional items are set */
00547 #define O_NDELETE_AFFECTEDSOPCLASSUID       0x0001
00548 #define O_NDELETE_AFFECTEDSOPINSTANCEUID    0x0002
00549 } ;
00550 
00551 
00552 
00553 /* 
00554  * Composite  DIMSE Message 
00555  */
00556 
00557 struct T_DIMSE_Message {
00558     T_DIMSE_Command CommandField;   /* M */
00559 
00560     union {
00561         /* requests */
00562         T_DIMSE_C_StoreRQ CStoreRQ;
00563         T_DIMSE_C_EchoRQ  CEchoRQ;
00564         T_DIMSE_C_FindRQ  CFindRQ;
00565         T_DIMSE_C_GetRQ   CGetRQ;
00566         T_DIMSE_C_MoveRQ  CMoveRQ;
00567         T_DIMSE_C_CancelRQ  CCancelRQ;
00568         T_DIMSE_N_EventReportRQ NEventReportRQ;
00569         T_DIMSE_N_GetRQ NGetRQ;
00570         T_DIMSE_N_SetRQ NSetRQ;
00571         T_DIMSE_N_ActionRQ NActionRQ;
00572         T_DIMSE_N_CreateRQ NCreateRQ;
00573         T_DIMSE_N_DeleteRQ NDeleteRQ;
00574 
00575         /* responses */
00576         T_DIMSE_C_StoreRSP CStoreRSP;
00577         T_DIMSE_C_EchoRSP CEchoRSP;
00578         T_DIMSE_C_FindRSP CFindRSP;
00579         T_DIMSE_C_GetRSP  CGetRSP;
00580         T_DIMSE_C_MoveRSP CMoveRSP;
00581         T_DIMSE_N_EventReportRSP NEventReportRSP;
00582         T_DIMSE_N_GetRSP NGetRSP;
00583         T_DIMSE_N_SetRSP NSetRSP;
00584         T_DIMSE_N_ActionRSP NActionRSP;
00585         T_DIMSE_N_CreateRSP NCreateRSP;
00586         T_DIMSE_N_DeleteRSP NDeleteRSP;
00587     } msg;
00588 
00589 };
00590 
00591 
00592 /*
00593  * Globale Variables
00594  */
00595 
00596 /*
00597  * Define global defaults for data encoding when sending out data-sets.
00598  * These can be adjusted to allow variants to be tested.
00599  */
00600 
00601 extern E_GrpLenEncoding  g_dimse_send_groupLength_encoding;    /* default: EGL_recalcGL */
00602 extern E_EncodingType    g_dimse_send_sequenceType_encoding;   /* default: EET_ExplicitLength */
00603 
00604 /*
00605  * If this global flag is set to OFTrue, all DIMSE messages sent or received
00606  * are stored in files with the name
00607  * "dimse-TTT-DDD-XXXX.dcm" or "dimse-TTT-DDD-XXXX-YY.dcm", where
00608  *   TTT is "cmd" for a command set, or "dat" for a data set
00609  *   DDD is "snd" for data sent, or "rcv" for data received
00610  *   XXXX is a counter, starting at 1 (global for all associations)
00611  *   YY is an additional counter used if multiple datasets follow a single command set
00612  * The files are in implicit VR little endian encoding, without meta-header.
00613  */
00614 
00615 extern OFBool            g_dimse_save_dimse_data;              /* default: OFFalse */
00616 
00617 /*
00618  * Public Function Prototypes
00619  */
00620 
00621 
00622 /*
00623  * High Level DIMSE Messaging.
00624  */
00625 
00626 /*
00627  * General Information.
00628  *
00629  * Many of the DIMSE routines take parameters for a blocking mode
00630  * and a timeout.  In all cases, these parameters are only used
00631  * when receiving commands or data sets (reading).  There are no blocking
00632  * and timeout options for send operations.
00633  * When receiving commands or data sets:
00634  * If the parameter blockMode is DIMSE_BLOCKING, the DIMSE routine
00635  * will wait until a response arrives before returning.
00636  * If the parameter blockMode is DIMSE_NONBLOCKING then the DIMSE routine
00637  * will wait at most timeout seconds for a response and if no response arrives
00638  * will return DIMSE_NODATAAVAILABLE.  In both cases waiting will be
00639  * interupted by association release, and abort messages, or network
00640  * disruption.
00641  */
00642 
00643 
00644 /*
00645  * Verification Service Class
00646  */
00647  
00648 OFCondition
00649 DIMSE_echoUser(
00650     /* in */ 
00651     T_ASC_Association *assoc, DIC_US msgId, 
00652     /* blocking info for response */
00653     T_DIMSE_BlockingMode blockMode, int timeout,
00654     /* out */
00655     DIC_US *status, DcmDataset **statusDetail);
00656  
00657 OFCondition
00658 DIMSE_sendEchoResponse(T_ASC_Association * assoc, 
00659     T_ASC_PresentationContextID presID,
00660     T_DIMSE_C_EchoRQ *request, DIC_US status, DcmDataset *statusDetail);
00661 
00662 
00663 /*
00664  * Storage Service Class
00665  */
00666 
00667 typedef enum {
00668     DIMSE_StoreBegin,   /* before data set */
00669     DIMSE_StoreProgressing, /* during data set */
00670     DIMSE_StoreEnd      /* after data set */
00671 } T_DIMSE_StoreProgressState;
00672 
00673 struct T_DIMSE_StoreProgress { /* progress structure for store callback routines */
00674     T_DIMSE_StoreProgressState state;   /* current state */
00675     long callbackCount; /* callback execution count */
00676     long progressBytes; /* sent/received so far */
00677     long totalBytes;        /* total/estimated total to send/receive */
00678 } ;
00679 
00680 
00681 typedef void (*DIMSE_StoreUserCallback)(
00682     void *callbackData, 
00683     T_DIMSE_StoreProgress *progress,
00684     T_DIMSE_C_StoreRQ *request  /* original store request */
00685    );
00686 
00687 struct T_DIMSE_DetectedCancelParameters {
00688     OFBool cancelEncountered;
00689     T_ASC_PresentationContextID presId;
00690     T_DIMSE_C_CancelRQ req;
00691 } ;
00692 
00693 OFCondition
00694 DIMSE_storeUser(
00695     /* in */ 
00696     T_ASC_Association *assoc, T_ASC_PresentationContextID presId,
00697     T_DIMSE_C_StoreRQ *request,
00698     const char *imageFileName, DcmDataset *imageDataSet,
00699     DIMSE_StoreUserCallback callback, void *callbackData,
00700     /* blocking info for response */
00701     T_DIMSE_BlockingMode blockMode, int timeout,
00702     /* out */
00703     T_DIMSE_C_StoreRSP *response,
00704     DcmDataset **statusDetail,
00705         T_DIMSE_DetectedCancelParameters *checkForCancelParams = NULL,
00706         /* in */
00707         long imageFileTotalBytes=0);
00708 
00709 typedef void (*DIMSE_StoreProviderCallback)(
00710     /* in */
00711     void *callbackData, 
00712     T_DIMSE_StoreProgress *progress,    /* progress state */
00713     T_DIMSE_C_StoreRQ *request,     /* original store request */
00714     char *imageFileName, DcmDataset **imageDataSet, /* being received into */
00715     /* in/out */
00716     T_DIMSE_C_StoreRSP *response,   /* final store response */
00717     /* out */
00718     DcmDataset **statusDetail);
00719 
00720 OFCondition
00721 DIMSE_storeProvider(/* in */
00722     T_ASC_Association *assoc, 
00723     T_ASC_PresentationContextID presIdCmd,
00724     T_DIMSE_C_StoreRQ *request,
00725     const char* imageFileName, int writeMetaheader,
00726     DcmDataset **imageDataSet,
00727     DIMSE_StoreProviderCallback callback, void *callbackData,
00728     /* blocking info for data set */
00729     T_DIMSE_BlockingMode blockMode, int timeout);
00730 
00731 OFCondition
00732 DIMSE_sendStoreResponse(T_ASC_Association * assoc,
00733     T_ASC_PresentationContextID presID,
00734     T_DIMSE_C_StoreRQ *request, /* send response to this request */
00735     T_DIMSE_C_StoreRSP *response, /* response structure */
00736     DcmDataset *statusDetail);
00737 
00738 /*
00739  * Query/Retrieve Service Class (FIND)
00740  */
00741 
00742 
00743 typedef void (*DIMSE_FindUserCallback)(
00744     /* in */
00745     void *callbackData, 
00746     T_DIMSE_C_FindRQ *request,  /* original find request */
00747     int responseCount, 
00748     T_DIMSE_C_FindRSP *response,    /* pending response received */
00749     DcmDataset *responseIdentifiers /* pending response identifiers */
00750     );
00751 
00752 OFCondition
00753 DIMSE_findUser(
00754     /* in */
00755     T_ASC_Association *assoc, 
00756         T_ASC_PresentationContextID presID,
00757     T_DIMSE_C_FindRQ *request, DcmDataset *requestIdentifiers,
00758     DIMSE_FindUserCallback callback, void *callbackData,
00759     /* blocking info for response */
00760     T_DIMSE_BlockingMode blockMode, int timeout,
00761     /* out */
00762     T_DIMSE_C_FindRSP *response, DcmDataset **statusDetail);
00763 
00764 typedef void (*DIMSE_FindProviderCallback)(
00765     /* in */ 
00766     void *callbackData,  
00767     OFBool cancelled, T_DIMSE_C_FindRQ *request, 
00768     DcmDataset *requestIdentifiers, int responseCount,
00769     /* out */
00770     T_DIMSE_C_FindRSP *response,
00771     DcmDataset **responseIdentifiers,
00772     DcmDataset **statusDetail);
00773 
00774 OFCondition
00775 DIMSE_findProvider(
00776     /* in */ 
00777     T_ASC_Association *assoc, 
00778     T_ASC_PresentationContextID presIdCmd,
00779     T_DIMSE_C_FindRQ *request,
00780     DIMSE_FindProviderCallback callback, void *callbackData,
00781     /* blocking info for data set */
00782     T_DIMSE_BlockingMode blockMode, int timeout);
00783  
00784 OFCondition
00785 DIMSE_sendFindResponse(T_ASC_Association * assoc, 
00786     T_ASC_PresentationContextID presID,
00787     T_DIMSE_C_FindRQ *request, 
00788     T_DIMSE_C_FindRSP *response, DcmDataset *responseIdentifiers,
00789     DcmDataset *statusDetail);
00790 
00791 /*
00792  * Query/Retrieve Service Class (MOVE)
00793  */
00794 
00795 typedef void (*DIMSE_MoveUserCallback)(
00796     /* in */ 
00797     void *callbackData,  
00798     T_DIMSE_C_MoveRQ *request, 
00799     int responseCount, T_DIMSE_C_MoveRSP *response);
00800 
00801 typedef void (*DIMSE_SubOpProviderCallback)(void *subOpCallbackData,
00802     T_ASC_Network *net, T_ASC_Association **subOpAssoc);
00803 
00804 OFCondition
00805 DIMSE_moveUser(
00806     /* in */
00807     T_ASC_Association *assoc, 
00808         T_ASC_PresentationContextID presID,
00809     T_DIMSE_C_MoveRQ *request,
00810     DcmDataset *requestIdentifiers,
00811     DIMSE_MoveUserCallback callback, void *callbackData,
00812     /* blocking info for response */
00813     T_DIMSE_BlockingMode blockMode, int timeout,
00814     /* sub-operation provider callback */
00815     T_ASC_Network *net,
00816     DIMSE_SubOpProviderCallback subOpCallback, void *subOpCallbackData,
00817     /* out */
00818     T_DIMSE_C_MoveRSP *response, DcmDataset **statusDetail,
00819         DcmDataset **responseIdentifers,
00820         OFBool ignorePendingDatasets = OFFalse);
00821     
00822 typedef void (*DIMSE_MoveProviderCallback)(
00823     /* in */ 
00824     void *callbackData,  
00825     OFBool cancelled, T_DIMSE_C_MoveRQ *request, 
00826     DcmDataset *requestIdentifiers, int responseCount,
00827     /* out */
00828     T_DIMSE_C_MoveRSP *response, DcmDataset **statusDetail, 
00829     DcmDataset **responseIdentifiers);
00830 
00831 OFCondition
00832 DIMSE_moveProvider(
00833     /* in */ 
00834     T_ASC_Association *assoc, 
00835     T_ASC_PresentationContextID presIdCmd,
00836     T_DIMSE_C_MoveRQ *request,
00837     DIMSE_MoveProviderCallback callback, void *callbackData,
00838     /* blocking info for data set */
00839     T_DIMSE_BlockingMode blockMode, int timeout);
00840 
00841 OFCondition
00842 DIMSE_sendMoveResponse(T_ASC_Association * assoc, 
00843     T_ASC_PresentationContextID presID, T_DIMSE_C_MoveRQ *request, 
00844     T_DIMSE_C_MoveRSP *response, DcmDataset *rspIds, 
00845     DcmDataset *statusDetail);
00846 
00847 /*
00848  * Query/Retrieve Service Class (GET)
00849  */
00850 
00851 typedef void (*DIMSE_GetUserCallback)(
00852     /* in */ 
00853     void *callbackData,  
00854     T_DIMSE_C_GetRQ *request, 
00855     int responseCount, T_DIMSE_C_GetRSP *response);
00856 
00857 typedef void (*DIMSE_SubOpProviderCallback)(void *subOpCallbackData,
00858     T_ASC_Network *net, T_ASC_Association **subOpAssoc);
00859 
00860 OFCondition
00861 DIMSE_getUser(
00862     /* in */
00863     T_ASC_Association *assoc, 
00864         T_ASC_PresentationContextID presID,
00865     T_DIMSE_C_GetRQ *request,
00866     DcmDataset *requestIdentifiers,
00867     DIMSE_GetUserCallback callback, void *callbackData,
00868     /* blocking info for response */
00869     T_DIMSE_BlockingMode blockMode, int timeout,
00870     /* sub-operation provider callback */
00871     T_ASC_Network *net,
00872     DIMSE_SubOpProviderCallback subOpCallback, void *subOpCallbackData,
00873     /* out */
00874     T_DIMSE_C_GetRSP *response, DcmDataset **statusDetail,
00875         DcmDataset **responseIdentifers);
00876     
00877 typedef void (*DIMSE_GetProviderCallback)(
00878     /* in */ 
00879     void *callbackData,  
00880     OFBool cancelled, T_DIMSE_C_GetRQ *request, 
00881     DcmDataset *requestIdentifiers, int responseCount,
00882     /* out */
00883     T_DIMSE_C_GetRSP *response, DcmDataset **statusDetail,  
00884     DcmDataset **responseIdentifiers);
00885 
00886 OFCondition
00887 DIMSE_getProvider(
00888     /* in */ 
00889     T_ASC_Association *assoc, 
00890     T_ASC_PresentationContextID presIdCmd,
00891     T_DIMSE_C_GetRQ *request,
00892     DIMSE_GetProviderCallback callback, void *callbackData,
00893     /* blocking info for data set */
00894     T_DIMSE_BlockingMode blockMode, int timeout);
00895 
00896 OFCondition
00897 DIMSE_sendGetResponse(T_ASC_Association * assoc, 
00898     T_ASC_PresentationContextID presID, T_DIMSE_C_GetRQ *request, 
00899     T_DIMSE_C_GetRSP *response, DcmDataset *rspIds, 
00900     DcmDataset *statusDetail);
00901 
00902 /*
00903  * Query/Retrieve Service Class (CANCEL)
00904  */
00905  
00906 OFCondition
00907 DIMSE_sendCancelRequest(T_ASC_Association * assoc, 
00908     T_ASC_PresentationContextID presId, DIC_US msgId);
00909 
00910 OFCondition
00911 DIMSE_checkForCancelRQ(T_ASC_Association * assoc, 
00912     T_ASC_PresentationContextID presId, DIC_US msgId);
00913 
00914 
00915 /****
00916  *
00917  * Low Level DIMSE Messaging
00918  * With the exception of DIMSE_receiveCommand, 
00919  * the following function are only intended for use if you
00920  * wish to implement an alternative interface to the
00921  * higher level routines provided above.
00922  * Service call providers will have to use DIMSE_receiveCommand
00923  * before calling the appropriate provider routine declared above.
00924  *
00925  */
00926 
00927 
00928 typedef void (*DIMSE_ProgressCallback)(void *callbackContext, 
00929     unsigned long byteCount);
00930 
00931 
00932 OFCondition 
00933 DIMSE_sendMessageUsingFileData(T_ASC_Association *association,
00934           T_ASC_PresentationContextID presID,
00935           T_DIMSE_Message *msg, DcmDataset *statusDetail,
00936           const char* dataFileName,
00937           DIMSE_ProgressCallback callback,
00938           void *callbackContext,
00939           DcmDataset **commandSet=NULL);
00940 
00941 OFCondition 
00942 DIMSE_sendMessageUsingMemoryData(T_ASC_Association *association,
00943           T_ASC_PresentationContextID presID,
00944           T_DIMSE_Message *msg, DcmDataset *statusDetail,
00945           DcmDataset *dataObject,
00946           DIMSE_ProgressCallback callback,
00947           void *callbackContext,
00948           DcmDataset **commandSet=NULL);
00949 
00950 OFCondition
00951 DIMSE_receiveCommand(T_ASC_Association *association,
00952              T_DIMSE_BlockingMode blocking,
00953              int timeout,
00954              T_ASC_PresentationContextID *presID,
00955              T_DIMSE_Message *msg, 
00956              DcmDataset **statusDetail,
00957              DcmDataset **commandSet=NULL);
00958 
00959 OFCondition
00960 DIMSE_receiveDataSetInMemory(T_ASC_Association *association,
00961              T_DIMSE_BlockingMode blocking,
00962              int timeout, 
00963              T_ASC_PresentationContextID *presID,
00964              DcmDataset **dataObject,
00965              DIMSE_ProgressCallback callback,
00966              void *callbackContext);
00967 
00968 OFCondition
00969 DIMSE_createFilestream(
00970              /* in */
00971              const char *filename,
00972              const T_DIMSE_C_StoreRQ *request,
00973              const T_ASC_Association *assoc, 
00974              T_ASC_PresentationContextID presIdCmd,
00975              int writeMetaheader,
00976              /* out */
00977              DcmOutputFileStream **filestream);
00978 
00979 OFCondition
00980 DIMSE_receiveDataSetInFile(T_ASC_Association *assoc,
00981              T_DIMSE_BlockingMode blocking, int timeout, 
00982              T_ASC_PresentationContextID *presID,
00983              DcmOutputStream *filestream,
00984              DIMSE_ProgressCallback callback, void *callbackData);
00985 
00986 OFCondition 
00987 DIMSE_ignoreDataSet( T_ASC_Association * assoc,
00988                      T_DIMSE_BlockingMode blocking, 
00989                      int timeout,
00990                      DIC_UL * bytesRead, 
00991                      DIC_UL * pdvCount);
00992 
00993 /*
00994  * Misc functions
00995  */
00996 
00997 void DIMSE_debug(int level);
00998     /* set debug level */
00999 
01000 void DIMSE_warning(T_ASC_Association *assoc, const char *format, ...);
01001 
01002 /* Debugging functions for printing contents of a command structure */
01003 void DIMSE_printCommand(FILE *f, T_DIMSE_Message *msg);
01004 void DIMSE_printCEchoRQ(FILE * f, T_DIMSE_C_EchoRQ * req);
01005 void DIMSE_printCEchoRSP(FILE * f, T_DIMSE_C_EchoRSP * rsp);
01006 void DIMSE_printCStoreRQ(FILE * f, T_DIMSE_C_StoreRQ * req);
01007 void DIMSE_printCStoreRSP(FILE * f, T_DIMSE_C_StoreRSP * rsp);
01008 void DIMSE_printCGetRQ(FILE * f, T_DIMSE_C_GetRQ * req);
01009 void DIMSE_printCGetRSP(FILE * f, T_DIMSE_C_GetRSP * rsp);
01010 void DIMSE_printCMoveRQ(FILE * f, T_DIMSE_C_MoveRQ * req);
01011 void DIMSE_printCMoveRSP(FILE * f, T_DIMSE_C_MoveRSP * rsp);
01012 void DIMSE_printCFindRQ(FILE * f, T_DIMSE_C_FindRQ * req);
01013 void DIMSE_printCFindRSP(FILE * f, T_DIMSE_C_FindRSP * rsp);
01014 void DIMSE_printCCancelRQ(FILE * f, T_DIMSE_C_CancelRQ * req);
01015 void DIMSE_printNEventReportRQ(FILE * f, T_DIMSE_N_EventReportRQ * req);
01016 void DIMSE_printNEventReportRSP(FILE * f, T_DIMSE_N_EventReportRSP * rsp);
01017 void DIMSE_printNGetRQ(FILE * f, T_DIMSE_N_GetRQ * req);
01018 void DIMSE_printNGetRSP(FILE * f, T_DIMSE_N_GetRSP * rsp);
01019 void DIMSE_printNSetRQ(FILE * f, T_DIMSE_N_SetRQ * req);
01020 void DIMSE_printNSetRSP(FILE * f, T_DIMSE_N_SetRSP * rsp);
01021 void DIMSE_printNActionRQ(FILE * f, T_DIMSE_N_ActionRQ * req);
01022 void DIMSE_printNActionRSP(FILE * f, T_DIMSE_N_ActionRSP * rsp);
01023 void DIMSE_printNCreateRQ(FILE * f, T_DIMSE_N_CreateRQ * req);
01024 void DIMSE_printNCreateRSP(FILE * f, T_DIMSE_N_CreateRSP * rsp);
01025 void DIMSE_printNDeleteRQ(FILE * f, T_DIMSE_N_DeleteRQ * req);
01026 void DIMSE_printNDeleteRSP(FILE * f, T_DIMSE_N_DeleteRSP * rsp);
01027 
01028 void DIMSE_printMessage(ostream& outstream, T_DIMSE_Message &msg, DcmItem *dataset=NULL);
01029 
01030 
01031 #endif
01032 
01033 /*
01034 ** CVS Log
01035 ** $Log: dimse.h,v $
01036 ** Revision 1.17  2005/12/08 16:02:21  meichel
01037 ** Changed include path schema for all DCMTK header files
01038 **
01039 ** Revision 1.16  2005/11/22 16:44:44  meichel
01040 ** Added option to movescu that allows graceful handling of Move SCPs
01041 **   that send illegal datasets following pending C-MOVE-RSP messages.
01042 **
01043 ** Revision 1.15  2005/02/22 09:40:55  meichel
01044 ** Fixed two bugs in "bit-preserving" Store SCP code. Errors while creating or
01045 **   writing the DICOM file (e.g. file system full) now result in a DIMSE error
01046 **   response (out of resources) being sent back to the SCU.
01047 **
01048 ** Revision 1.14  2003/08/27 15:03:33  meichel
01049 ** Changed anonymous struct typedefs into struct declarations
01050 **
01051 ** Revision 1.13  2002/09/10 16:00:47  meichel
01052 ** Added global flag dcmMaxOutgoingPDUSize that allows to restrict the maximum
01053 **   size of outgoiung P-DATA PDUs to a value less than the maximum supported by
01054 **   the remote application entity or this library.  May be useful if there is an
01055 **   interaction between PDU size and other network layers, e. g. TLS, IP or
01056 **   below.
01057 **
01058 ** Revision 1.12  2002/08/27 17:00:59  meichel
01059 ** Initial release of new DICOM I/O stream classes that add support for stream
01060 **   compression (deflated little endian explicit VR transfer syntax)
01061 **
01062 ** Revision 1.11  2001/10/12 10:18:26  meichel
01063 ** Replaced the CONDITION types, constants and functions in the dcmnet module
01064 **   by an OFCondition based implementation which eliminates the global condition
01065 **   stack.  This is a major change, caveat emptor!
01066 **
01067 ** Revision 1.10  2000/12/15 13:28:16  meichel
01068 ** Global flag to enable/disable workaround code for some buggy Store SCUs
01069 **   in DIMSE_storeProvider().  If enabled, an illegal space-padding in the
01070 **   Affected SOP Instance UID field of the C-STORE-RQ message is retained
01071 **   in the corresponding C-STORE-RSP message.
01072 **
01073 ** Revision 1.9  2000/06/07 08:57:52  meichel
01074 ** dcmnet DIMSE routines now allow to retrieve raw command sets as DcmDataset
01075 **   objects, e.g. for logging purposes. Added enhanced message dump functions.
01076 **
01077 ** Revision 1.8  2000/01/31 17:14:17  meichel
01078 ** ntroduced new flag g_dimse_save_dimse_data. If enabled, all DIMSE messages
01079 ** and data sets sent or received are stored in files.
01080 ** This facilitates debugging of DIMSE problems.
01081 **
01082 ** Revision 1.7  1999/04/19 08:36:48  meichel
01083 ** Added support for C-FIND-CANCEL/C-MOVE-CANCEL in DIMSE_storeUser().
01084 **
01085 ** Revision 1.6  1998/08/10 08:53:40  meichel
01086 ** renamed member variable in DIMSE structures from "Status" to
01087 **   "DimseStatus". This is required if dcmnet is used together with
01088 **   <X11/Xlib.h> where Status is #define'd as int.
01089 **
01090 ** Revision 1.5  1998/06/29 12:14:26  meichel
01091 ** Removed some name clashes (e.g. local variable with same
01092 **   name as class member) to improve maintainability.
01093 **   Applied some code purifications proposed by the gcc 2.8.1 -Weffc++ option.
01094 **
01095 ** Revision 1.4  1997/07/21 08:40:10  andreas
01096 ** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL)
01097 **   with one unique boolean type OFBool.
01098 **
01099 ** Revision 1.3  1997/05/23 10:47:06  meichel
01100 ** Major rewrite of storescp application. See CHANGES for details.
01101 ** Changes required to interfaces of some DIMSE functions.
01102 **
01103 ** Revision 1.2  1996/04/25 16:06:28  hewett
01104 ** Replaced declarations of DIC_UL with unsigned long.
01105 **
01106 ** Revision 1.1.1.1  1996/03/26 18:38:45  hewett
01107 ** Initial Release.
01108 **
01109 **
01110 */


Generated on 20 Dec 2005 for OFFIS DCMTK Version 3.5.4 by Doxygen 1.4.5