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