00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #include "osconfig.h"
00060 #include "extneg.h"
00061
00062 class DcmTransportConnection;
00063 class DcmTransportLayer;
00064
00065 #define NETWORK_DISCONNECTED 2
00066 #define NETWORK_CONNECTED 3
00067
00068 typedef enum {
00069 DUL_ASSOC_WAITINGFORACK,
00070 DUL_ASSOC_ESTABLISHED,
00071 DUL_ASSOC_RELEASED,
00072 DUL_ASSOC_ABORTED,
00073 DUL_ASSOC_DROPPED
00074 } DUL_ASSOC_STATE;
00075
00076 #define ASSOCIATION_DISCONNECTED 2
00077 #define ASSOCIATION_ABORTED 4
00078 #define ASSOCIATION_RELEASED 5
00079
00080 typedef struct {
00081 char keyType[40];
00082 int applicationFunction;
00083 int networkState;
00084 int protocolState;
00085 int timeout;
00086 unsigned long options;
00087 union {
00088 struct {
00089 int port;
00090 int listenSocket;
00091 DcmTransportLayer *tLayer;
00092 int tLayerOwned;
00093 } TCP;
00094 } networkSpecific;
00095 } PRIVATE_NETWORKKEY;
00096
00097 typedef struct {
00098 char keyType[40];
00099 int applicationFunction;
00100 char remoteNode[64];
00101 DUL_ASSOC_STATE associationState;
00102 int protocolState;
00103 int networkState;
00104 int timeout;
00105 time_t timerStart;
00106 unsigned long maxPDVRequestor;
00107 unsigned long maxPDVAcceptor;
00108 unsigned long maxPDV;
00109 unsigned long maxPDVInput;
00110 unsigned long receiveQp1;
00111 unsigned long receiveQp2;
00112 char calledAPTitle[20];
00113 char callingAPTitle[20];
00114 char applicationContextName[68];
00115 char abstractSyntaxName[68];
00116 void *receivePDUQueue;
00117 DUL_PRESENTATIONCONTEXTID presentationContextID;
00118 DcmTransportConnection *connection;
00119 DUL_PDVLIST pdvList;
00120 int inputPDU;
00121 unsigned char pduHead[6];
00122 unsigned char nextPDUType;
00123 unsigned char nextPDUReserved;
00124 unsigned long nextPDULength;
00125 unsigned long compatibilityMode;
00126 int pdvCount;
00127 int pdvIndex;
00128 void *logHandle;
00129 int associatePDUFlag;
00130 void *associatePDU;
00131 unsigned long associatePDULength;
00132 DUL_PDV currentPDV;
00133 unsigned char *pdvPointer;
00134 unsigned long fragmentBufferLength;
00135 unsigned char *fragmentBuffer;
00136 DUL_ModeCallback *modeCallback;
00137 } PRIVATE_ASSOCIATIONKEY;
00138
00139 #define KEY_NETWORK "KEY NETWORK"
00140 #define KEY_ASSOCIATION "KEY ASSOCIATION"
00141
00142 #define AE_REQUESTOR "AE REQUESTOR"
00143 #define AE_ACCEPTOR "AE ACCEPTOR"
00144 #define AE_BOTH "AE BOTH"
00145
00146 #define NO_PDU 1
00147 #define PDU_HEAD 2
00148 #define PDU_DATA 2
00149
00150
00151
00152
00153
00154
00155 #define DEFAULT_TIMEOUT 100
00156
00157
00158
00159 typedef struct dul_subitem {
00160 void *reserved[2];
00161 unsigned char type;
00162 unsigned char rsv1;
00163 unsigned short length;
00164 char data[DICOM_UI_LENGTH + 1];
00165 } DUL_SUBITEM;
00166
00167 typedef struct dul_maxlength {
00168 void *reserved[2];
00169 unsigned char type;
00170 unsigned char rsv1;
00171 unsigned short length;
00172 unsigned long maxLength;
00173 } DUL_MAXLENGTH;
00174
00175 typedef struct {
00176 unsigned char type;
00177 unsigned char rsv1;
00178 unsigned short length;
00179 unsigned short maximumOperationsInvoked;
00180 unsigned short maximumOperationsProvided;
00181 } PRV_ASYNCOPERATIONS;
00182
00183 typedef struct {
00184 unsigned char type;
00185 unsigned char rsv1;
00186 unsigned short length;
00187 char implementationClassUID[DICOM_UI_LENGTH + 1];
00188 } PRV_IMPLEMENTATIONCLASSUID;
00189
00190 typedef struct {
00191 unsigned char type;
00192 unsigned char rsv1;
00193 unsigned short length;
00194 char implementationVersionName[16 + 1];
00195 } PRV_IMPLEMENTATIONVERSIONNAME;
00196
00197 typedef struct {
00198 void *reserved[2];
00199 unsigned char type;
00200 unsigned char rsv1;
00201 unsigned short length;
00202 unsigned short UIDLength;
00203 char SOPClassUID[DICOM_UI_LENGTH + 1];
00204 unsigned char SCURole;
00205 unsigned char SCPRole;
00206 } PRV_SCUSCPROLE;
00207
00208 typedef struct dul_presentationcontext {
00209 void *reserved[2];
00210 unsigned char type;
00211 unsigned char rsv1;
00212 unsigned short length;
00213 unsigned char contextID;
00214 unsigned char rsv2;
00215 unsigned char result;
00216 unsigned char rsv3;
00217
00218 DUL_SUBITEM abstractSyntax;
00219 LST_HEAD *transferSyntaxList;
00220 } PRV_PRESENTATIONCONTEXTITEM;
00221
00222 typedef struct user_info {
00223 void *reserved[2];
00224 unsigned char type;
00225 unsigned char rsv1;
00226 unsigned short length;
00227 DUL_MAXLENGTH maxLength;
00228 PRV_ASYNCOPERATIONS asyncOperations;
00229 DUL_SUBITEM implementationClassUID;
00230 DUL_SUBITEM implementationVersionName;
00231 LST_HEAD *SCUSCPRoleList;
00232 SOPClassExtendedNegotiationSubItemList *extNegList;
00233 } DUL_USERINFO;
00234
00235 typedef struct dul_associatepdu {
00236 void *reserved[2];
00237 unsigned char type;
00238 unsigned char rsv1;
00239 unsigned long length;
00240 unsigned short protocol;
00241 unsigned char rsv2[2];
00242 char calledAPTitle[18];
00243 char callingAPTitle[18];
00244 unsigned char rsv3[32];
00245
00246 DUL_SUBITEM applicationContext;
00247 LST_HEAD *presentationContextList;
00248 DUL_USERINFO userInfo;
00249 } PRV_ASSOCIATEPDU;
00250
00251 typedef struct dul_rejectreleaseabortpdu {
00252 void *reserved[2];
00253 unsigned char type;
00254 unsigned char rsv1;
00255 unsigned long length;
00256 unsigned char rsv2;
00257 unsigned char result;
00258 unsigned char source;
00259 unsigned char reason;
00260 } DUL_REJECTRELEASEABORTPDU;
00261
00262 typedef struct dul_presentationdatavalue {
00263 void *reserved[2];
00264 unsigned long length;
00265 unsigned char presentationContextID;
00266 unsigned char messageControlHeader;
00267 void *data;
00268 } DUL_PRESENTATIONDATAVALUE;
00269
00270 typedef struct dul_datapdu {
00271 void *reserved[2];
00272 unsigned char type;
00273 unsigned char rsv1;
00274 unsigned long length;
00275 DUL_PRESENTATIONDATAVALUE presentationDataValue;
00276 } DUL_DATAPDU;
00277
00278 #define DUL_PROTOCOL (unsigned short) 0x01
00279
00280 #define DUL_TYPEAPPLICATIONCONTEXT (unsigned char)0x10
00281 #define DUL_TYPEPRESENTATIONCONTEXTRQ (unsigned char)0x20
00282 #define DUL_TYPEPRESENTATIONCONTEXTAC (unsigned char)0x21
00283 #define DUL_TYPEABSTRACTSYNTAX (unsigned char)0x30
00284 #define DUL_TYPETRANSFERSYNTAX (unsigned char)0x40
00285 #define DUL_TYPEUSERINFO (unsigned char)0x50
00286 #define DUL_TYPEMAXLENGTH (unsigned char)0x51
00287 #define DUL_TYPEIMPLEMENTATIONCLASSUID (unsigned char)0x52
00288 #define DUL_TYPEASYNCOPERATIONS (unsigned char)0x53
00289 #define DUL_TYPESCUSCPROLE (unsigned char)0x54
00290 #define DUL_TYPEIMPLEMENTATIONVERSIONNAME (unsigned char)0x55
00291
00292 #define COPY_LONG_BIG(A,B) { \
00293 (B)[0] = (unsigned char)((A)>>24); \
00294 (B)[1] = (unsigned char)((A)>>16) ; \
00295 (B)[2] = (unsigned char)((A)>>8) ; \
00296 (B)[3] = (unsigned char)(A) ; }
00297 #define COPY_SHORT_BIG(A,B) { \
00298 (B)[0] = (unsigned char)((A)>>8); \
00299 (B)[1] = (unsigned char)(A) ; }
00300
00301 #define EXTRACT_LONG_BIG(A,B) { \
00302 (B) = (unsigned long)(A)[3] \
00303 | (((unsigned long)(A)[2]) << 8) \
00304 | (((unsigned long)(A)[1]) << 16) \
00305 | (((unsigned long)(A)[0]) << 24); \
00306 }
00307
00308 #define EXTRACT_SHORT_BIG(A,B) { (B) = (unsigned short)(A)[1] | (((unsigned short)(A)[0]) << 8); }
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345