00001 /* 00002 Copyright (C) 1993, 1994, RSNA and Washington University 00003 00004 The software and supporting documentation for the Radiological 00005 Society of North America (RSNA) 1993, 1994 Digital Imaging and 00006 Communications in Medicine (DICOM) Demonstration were developed 00007 at the 00008 Electronic Radiology Laboratory 00009 Mallinckrodt Institute of Radiology 00010 Washington University School of Medicine 00011 510 S. Kingshighway Blvd. 00012 St. Louis, MO 63110 00013 as part of the 1993, 1994 DICOM Central Test Node project for, and 00014 under contract with, the Radiological Society of North America. 00015 00016 THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND NEITHER RSNA NOR 00017 WASHINGTON UNIVERSITY MAKE ANY WARRANTY ABOUT THE SOFTWARE, ITS 00018 PERFORMANCE, ITS MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR 00019 USE, FREEDOM FROM ANY COMPUTER DISEASES OR ITS CONFORMITY TO ANY 00020 SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND PERFORMANCE OF 00021 THE SOFTWARE IS WITH THE USER. 00022 00023 Copyright of the software and supporting documentation is 00024 jointly owned by RSNA and Washington University, and free access 00025 is hereby granted as a license to use this software, copy this 00026 software and prepare derivative works based upon this software. 00027 However, any distribution of this software source code or 00028 supporting documentation or derivative works (source code and 00029 supporting documentation) must include the three paragraphs of 00030 the copyright notice. 00031 */ 00032 /* Copyright marker. Copyright will be inserted above. Do not remove */ 00033 /* 00034 ** @$=@$=@$= 00035 */ 00036 /* 00037 ** DICOM 93 00038 ** Electronic Radiology Laboratory 00039 ** Mallinckrodt Institute of Radiology 00040 ** Washington University School of Medicine 00041 ** 00042 ** Module Name(s): 00043 ** Author, Date: Stephen M. Moore, 14-Apr-1993 00044 ** Intent: This file defines the public structures and constants 00045 ** and the function prototypes for the DUL (DICOM Upper 00046 ** Layer) facility. 00047 ** Last Update: $Author: joergr $, $Date: 2010-10-14 13:17:22 $ 00048 ** Revision: $Revision: 1.30 $ 00049 ** Status: $State: Exp $ 00050 */ 00051 00052 00053 #ifndef DUL_IS_IN 00054 #define DUL_IS_IN 1 00055 00056 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ 00057 00058 #include "dcmtk/ofstd/ofglobal.h" 00059 #include "dcmtk/ofstd/oftypes.h" 00060 #include "dcmtk/ofstd/ofcast.h" 00061 #include "dcmtk/dcmnet/extneg.h" 00062 #include "dcmtk/dcmnet/dicom.h" 00063 #include "dcmtk/dcmnet/dcuserid.h" 00064 00065 class DcmTransportConnection; 00066 class DcmTransportLayer; 00067 class LST_HEAD; 00068 00075 extern OFGlobal<OFBool> dcmDisableGethostbyaddr; /* default OFFalse */ 00076 00082 extern OFGlobal<OFBool> dcmStrictRoleSelection; /* default OFFalse */ 00083 00087 extern OFGlobal<Sint32> dcmConnectionTimeout; /* default -1 */ 00088 00093 extern OFGlobal<int> dcmExternalSocketHandle; /* default -1 */ 00094 00101 extern OFGlobal<const char *> dcmTCPWrapperDaemonName; /* default NULL */ 00102 00103 /* Global option flag for compatibility with DCMTK releases prior to version 3.0. 00104 * Default (0) is automatic handling, which should work in most cases. 00105 */ 00106 extern OFGlobal<unsigned long> dcmEnableBackwardCompatibility; 00107 00108 #ifndef DUL_KEYS 00109 #define DUL_KEYS 1 00110 typedef void DUL_NETWORKKEY; 00111 typedef void DUL_ASSOCIATIONKEY; 00112 typedef unsigned char DUL_PRESENTATIONCONTEXTID; 00113 #endif 00114 00118 /* Define a structure containing fixed length fields that can 00119 * be used for requesting or accepting an association. The 00120 * lengths of "titles" and "names" are specified by the DICOM 00121 * protocol document. The fields in the structure are made 00122 * longer to allow for zero-terminators. DICOM doesn't know 00123 * about node names, but the DUL_ package needs them. 00124 */ 00125 00126 #define DUL_LEN_TITLE OFstatic_cast(size_t, 16) /* required by DICOM protocol */ 00127 #define DUL_LEN_NAME OFstatic_cast(size_t, 64) /* required by DICOM protocol */ 00128 #define DUL_LEN_UID OFstatic_cast(size_t, 64) /* required by DICOM protocol */ 00129 #define DUL_LEN_NODE OFstatic_cast(size_t, 127) /* should be "big enough" */ 00130 00131 00132 /* DICOM PDU Types */ 00133 00134 #define DUL_TYPEASSOCIATERQ OFstatic_cast(unsigned char, 0x01) 00135 #define DUL_TYPEASSOCIATEAC OFstatic_cast(unsigned char, 0x02) 00136 #define DUL_TYPEASSOCIATERJ OFstatic_cast(unsigned char, 0x03) 00137 #define DUL_TYPEDATA OFstatic_cast(unsigned char, 0x04) 00138 #define DUL_TYPERELEASERQ OFstatic_cast(unsigned char, 0x05) 00139 #define DUL_TYPERELEASERP OFstatic_cast(unsigned char, 0x06) 00140 #define DUL_TYPEABORT OFstatic_cast(unsigned char, 0x07) 00141 00142 #define DUL_MAXTYPE OFstatic_cast(unsigned char, 0x07) 00143 00144 class DUL_ModeCallback 00145 { 00146 public: 00147 00149 virtual ~DUL_ModeCallback() {} 00150 00154 virtual void callback(unsigned long mode) = 0; 00155 }; 00156 00157 typedef struct { 00158 char applicationContextName[DUL_LEN_NAME + 1]; 00159 char callingAPTitle[DUL_LEN_TITLE + 1]; 00160 char calledAPTitle[DUL_LEN_TITLE + 1]; 00161 char respondingAPTitle[DUL_LEN_TITLE + 1]; 00162 unsigned long maxPDU; 00163 unsigned short result; 00164 unsigned short resultSource; 00165 unsigned short diagnostic; 00166 char callingPresentationAddress[64]; 00167 char calledPresentationAddress[64]; 00168 LST_HEAD *requestedPresentationContext; 00169 LST_HEAD *acceptedPresentationContext; 00170 unsigned short maximumOperationsInvoked; 00171 unsigned short maximumOperationsPerformed; 00172 char callingImplementationClassUID[DICOM_UI_LENGTH + 1]; 00173 char callingImplementationVersionName[16 + 1]; 00174 char calledImplementationClassUID[DICOM_UI_LENGTH + 1]; 00175 char calledImplementationVersionName[16 + 1]; 00176 unsigned long peerMaxPDU; 00177 SOPClassExtendedNegotiationSubItemList *requestedExtNegList; 00178 SOPClassExtendedNegotiationSubItemList *acceptedExtNegList; 00179 UserIdentityNegotiationSubItemRQ *reqUserIdentNeg; 00180 UserIdentityNegotiationSubItemAC *ackUserIdentNeg; 00181 00182 OFBool useSecureLayer; 00183 } DUL_ASSOCIATESERVICEPARAMETERS; 00184 00185 typedef enum { 00186 DUL_SC_ROLE_NONE, 00187 DUL_SC_ROLE_DEFAULT, 00188 DUL_SC_ROLE_SCU, 00189 DUL_SC_ROLE_SCP, 00190 DUL_SC_ROLE_SCUSCP 00191 } DUL_SC_ROLE; 00192 00193 #define DUL_PRESENTATION_ACCEPT 0 00194 #define DUL_PRESENTATION_REJECT_USER 1 00195 #define DUL_PRESENTATION_REJECT_NOREASON 2 00196 #define DUL_PRESENTATION_REJECT_ABSTRACT_SYNTAX 3 00197 #define DUL_PRESENTATION_REJECT_TRANSFER_SYNTAX 4 00198 00199 typedef OFList<char *> DUL_TRANSFERSYNTAXLIST; 00200 00201 typedef struct { 00202 void *reserved[2]; 00203 DUL_PRESENTATIONCONTEXTID presentationContextID; 00204 char abstractSyntax[DUL_LEN_UID + 1]; 00205 LST_HEAD *proposedTransferSyntax; 00206 char acceptedTransferSyntax[DUL_LEN_UID + 1]; 00207 unsigned char result; 00208 DUL_SC_ROLE proposedSCRole; 00209 DUL_SC_ROLE acceptedSCRole; 00210 } DUL_PRESENTATIONCONTEXT; 00211 00212 typedef struct { 00213 void *reserved[2]; 00214 char transferSyntax[DUL_LEN_UID + 1]; 00215 } DUL_TRANSFERSYNTAX; 00216 00217 typedef struct dul_abortitems { 00218 unsigned char result; 00219 unsigned char source; 00220 unsigned char reason; 00221 } DUL_ABORTITEMS; 00222 00223 typedef enum { 00224 DUL_COMMANDPDV, /* A command PDV inside a data PDU */ 00225 DUL_DATASETPDV 00226 } /* A data set PDV inside a data PDU */ 00227 DUL_DATAPDV; 00228 00229 typedef enum { 00230 DUL_BLOCK, /* Block on an operation (read, request) */ 00231 DUL_NOBLOCK 00232 } /* Or return immediately if nothing avail */ 00233 DUL_BLOCKOPTIONS; 00234 00235 typedef struct { 00236 unsigned long fragmentLength; 00237 unsigned char presentationContextID; 00238 DUL_DATAPDV pdvType; 00239 OFBool lastPDV; 00240 void *data; 00241 } DUL_PDV; 00242 00243 typedef struct { 00244 unsigned long count; 00245 void *scratch; 00246 unsigned long scratchLength; 00247 DUL_ABORTITEMS abort; 00248 DUL_PDV *pdv; 00249 } DUL_PDVLIST; 00250 00251 /* Define the bits that go in the options field for InitializeNetwork 00252 ** 00253 ** The low two bits define the byte order of messages at the DICOM 00254 ** level. This does not define the order of user data inside of a 00255 ** DICOM PDU. 00256 */ 00257 00258 #define DUL_ORDERMASK 0x03 /* The bottom two bits */ 00259 #define DUL_ORDERLITTLEENDIAN 0x01 00260 #define DUL_ORDERBIGENDIAN 0x02 00261 00262 #define DUL_DOMAINMASK 0x04 00263 #define DUL_FULLDOMAINNAME 0x04 00264 00265 #define DUL_AEREQUESTOR "AE REQUESTOR" 00266 #define DUL_AEACCEPTOR "AE ACCEPTOR" 00267 #define DUL_AEBOTH "AE BOTH" 00268 00269 /* These macros define results and reasons for rejecting an association 00270 ** request. Result is permanent or transient. There are a number of 00271 ** different reasons for rejecting requests that occur at different layers 00272 */ 00273 #define DUL_REJ_RSLTPERMANENT 0x01 00274 #define DUL_REJ_RSLTTRANSIENT 0x02 00275 00276 /* These macros define parameters used to construct an ABORT PDU. 00277 ** These include the source of the abort (SCU or SCP) and the 00278 ** reason for the abort. 00279 */ 00280 00281 #define DUL_SCU_INITIATED_ABORT 0x00 00282 #define DUL_SCP_INITIATED_ABORT 0x02 00283 00284 #define DUL_ABORTSERVICEUSER 0x00 00285 #define DUL_ABORTSERVICEPROVIDER 0x02 00286 00287 #define DUL_ABORTNOREASON 0x00 00288 #define DUL_ABORTUNRECOGNIZEDPDU 0x01 00289 #define DUL_ABORTUNEXPECTEDPDU 0x02 00290 #define DUL_ABORTUNRECOGNIZEDPDUPARAM 0x04 00291 #define DUL_ABORTUNEXPECTEDPDUPARAM 0x05 00292 #define DUL_ABORTINVALIDPDUPARAM 0x06 00293 00294 /* These macros define parameters used to construct a REJECT PDU. 00295 ** These include the source of the reject (DICOM UL service-user, 00296 ** (DICOM UL service-provider) and the reason for the reject. 00297 */ 00298 #define DUL_REJECT_PERMANENT 0x01 00299 #define DUL_REJECT_TRANSIENT 0x02 00300 00301 #define DUL_ULSU_REJECT 0x01 00302 #define DUL_ULSP_ACSE_REJECT 0x02 00303 #define DUL_ULSP_PRESENTATION_REJECT 0x03 00304 00305 #define DUL_ULSU_REJ_NOREASON 0x01 00306 #define DUL_ULSU_REJ_UNSUP_APP_CTX_NAME 0x02 00307 #define DUL_ULSU_REJ_UNREC_CALLING_TITLE 0x03 00308 #define DUL_ULSU_REJ_UNREC_CALLED_TITLE 0x07 00309 00310 #define DUL_ULSP_ACSE_REJ_NOREASON 0x01 00311 #define DUL_ULSP_ACSE_UNSUP_PROTOCOL 0x02 00312 00313 #define DUL_ULSP_PRES_REJ_TEMP_CONGEST 0x01 00314 #define DUL_ULSP_PRES_REJ_LIMIT 0x02 00315 00316 #define DUL_ABORTNOREASON 0x00 00317 #define DUL_ABORTUNRECOGNIZEDPDU 0x01 00318 #define DUL_ABORTUNEXPECTEDPDU 0x02 00319 #define DUL_ABORTUNRECOGNIZEDPDUPARAM 0x04 00320 #define DUL_ABORTUNEXPECTEDPDUPARAM 0x05 00321 #define DUL_ABORTINVALIDPDUPARAM 0x06 00322 00323 /* Define a set of constants and types that let the user get information 00324 ** about the Association 00325 */ 00326 00327 typedef enum { 00328 DUL_K_INTEGER, /* An integer type */ 00329 DUL_K_STRING /* A string type */ 00330 } DUL_DATA_TYPE; 00331 typedef enum { 00332 DUL_K_MAX_PDV_XMIT 00333 } DUL_ASSOCIATION_PARAMETER; 00334 00335 #define DUL_TIMEOUT 180 00336 00337 /* Operating mode flags as defined in the 1993 toolkit specification. 00338 ** Needed for backward compatibility with DCMTK releases prior to 3.0 00339 ** (and possibly older CTN releases). 00340 */ 00341 00342 #define DUL_DULCOMPAT 2768240730UL 00343 #define DUL_DIMSECOMPAT 327680UL 00344 #define DUL_MAXPDUCOMPAT 4278190335UL 00345 00346 /* Define the function prototypes for this facility. 00347 ** 00348 ** First set of functions are for establishing the network and associations. 00349 */ 00350 00351 OFCondition 00352 DUL_AcknowledgeAssociationRQ( 00353 DUL_ASSOCIATIONKEY ** association, 00354 DUL_ASSOCIATESERVICEPARAMETERS * params, 00355 int activatePDUStorage); 00356 00357 OFCondition 00358 DUL_InitializeNetwork( 00359 const char *mode, 00360 void *param, 00361 int timeout, 00362 unsigned long 00363 options, 00364 DUL_NETWORKKEY ** network); 00365 00366 OFCondition 00367 DUL_ReceiveAssociationRQ( 00368 DUL_NETWORKKEY ** net, 00369 DUL_BLOCKOPTIONS blk, 00370 int timeout, 00371 DUL_ASSOCIATESERVICEPARAMETERS * parameters, 00372 DUL_ASSOCIATIONKEY ** association, 00373 int activatePDUStorage); 00374 00375 OFCondition 00376 DUL_RejectAssociationRQ( 00377 DUL_ASSOCIATIONKEY ** association, 00378 DUL_ABORTITEMS * params, 00379 int activatePDUStorage); 00380 00381 OFCondition 00382 DUL_RequestAssociation( 00383 DUL_NETWORKKEY ** network, 00384 DUL_ASSOCIATESERVICEPARAMETERS * params, 00385 DUL_ASSOCIATIONKEY ** association, 00386 int activatePDUStorage); 00387 00388 /* Define functions for releasing/aborting Associations. 00389 */ 00390 OFCondition DUL_AbortAssociation(DUL_ASSOCIATIONKEY ** association); 00391 OFCondition DUL_DropAssociation(DUL_ASSOCIATIONKEY ** association); 00392 OFCondition DUL_DropNetwork(DUL_NETWORKKEY ** network); 00393 OFCondition DUL_ReleaseAssociation(DUL_ASSOCIATIONKEY ** association); 00394 OFCondition DUL_AcknowledgeRelease(DUL_ASSOCIATIONKEY ** association); 00395 00396 /* Functions for reading/write PDVs inside P DATA PDUs. 00397 */ 00398 OFCondition 00399 DUL_ReadPDVs(DUL_ASSOCIATIONKEY ** association, 00400 DUL_PDVLIST * pdvList, DUL_BLOCKOPTIONS block, int timeout); 00401 OFCondition 00402 DUL_WritePDVs(DUL_ASSOCIATIONKEY ** association, 00403 DUL_PDVLIST * pdvList); 00404 OFCondition DUL_NextPDV(DUL_ASSOCIATIONKEY ** association, DUL_PDV * pdv); 00405 00406 00407 /* Miscellaneous functions. 00408 */ 00409 OFCondition 00410 DUL_AssociationParameter(DUL_ASSOCIATIONKEY ** association, 00411 DUL_ASSOCIATION_PARAMETER param, DUL_DATA_TYPE type, 00412 void *address, size_t length); 00413 OFCondition 00414 DUL_MakePresentationCtx(DUL_PRESENTATIONCONTEXT ** ctx, 00415 DUL_SC_ROLE proposedSCRole, DUL_SC_ROLE acceptedSCRole, 00416 DUL_PRESENTATIONCONTEXTID ctxID, unsigned char reason, const char *abstractSyntax, 00417 const char *transferSyntax,...); 00418 OFString& DUL_DumpParams(OFString& str, DUL_ASSOCIATESERVICEPARAMETERS * params); 00419 OFString& DUL_DumpConnectionParameters(OFString& str, DUL_ASSOCIATIONKEY *association); 00420 00421 OFCondition DUL_ClearServiceParameters(DUL_ASSOCIATESERVICEPARAMETERS * params); 00422 void DUL_DefaultServiceParameters(DUL_ASSOCIATESERVICEPARAMETERS * params); 00423 OFString& dumpExtNegList(OFString& str, SOPClassExtendedNegotiationSubItemList& lst); 00424 00425 /* 00426 ** Additional functions (from dulextra.cc) needed to support 00427 ** selecting amongst several concurrent associations. 00428 ** Andrew Hewett, Institute OFFIS, Oldenburg, Germany. 00429 */ 00430 00431 OFBool 00432 DUL_dataWaiting(DUL_ASSOCIATIONKEY * callerAssociation, int timeout); 00433 int 00434 DUL_networkSocket(DUL_NETWORKKEY * callerNet); 00435 OFBool 00436 DUL_associationWaiting(DUL_NETWORKKEY * callerNet, int timeout); 00437 00438 /* 00439 * functions allowing to retrieve raw A-ASSOCIATE PDUs from the DUL layer 00440 */ 00441 void DUL_activateAssociatePDUStorage(DUL_ASSOCIATIONKEY *dulassoc); 00442 void DUL_returnAssociatePDUStorage(DUL_ASSOCIATIONKEY *dulassoc, void *& pdu, unsigned long& pdusize); 00443 00444 /* get pointer to transport connection from opaque association pointer */ 00445 DcmTransportConnection *DUL_getTransportConnection(DUL_ASSOCIATIONKEY * callerAssociation); 00446 00447 /* change transport layer */ 00448 OFCondition DUL_setTransportLayer(DUL_NETWORKKEY *callerNetworkKey, DcmTransportLayer *newLayer, int takeoverOwnership); 00449 00450 /* activate compatibility mode and callback */ 00451 void DUL_activateCompatibilityMode(DUL_ASSOCIATIONKEY *dulassoc, unsigned long mode); 00452 void DUL_activateCallback(DUL_ASSOCIATIONKEY *dulassoc, DUL_ModeCallback *cb); 00453 00454 /* 00455 * function allowing to retrieve the peer certificate from the DUL layer 00456 */ 00457 unsigned long DUL_getPeerCertificateLength(DUL_ASSOCIATIONKEY *dulassoc); 00458 unsigned long DUL_getPeerCertificate(DUL_ASSOCIATIONKEY *dulassoc, void *buf, unsigned long bufLen); 00459 00460 /* 00461 * functions for multi-process servers 00462 */ 00463 00469 OFBool DUL_processIsForkedChild(); 00470 00475 void DUL_markProcessAsForkedChild(); 00476 00489 void DUL_requestForkOnTransportConnectionReceipt(int argc, char *argv[]); 00490 00491 00493 void DUL_DumpParams(DUL_ASSOCIATESERVICEPARAMETERS * params); 00495 void DUL_DumpConnectionParameters(DUL_ASSOCIATIONKEY *association, STD_NAMESPACE ostream& outstream); 00497 void dumpExtNegList(SOPClassExtendedNegotiationSubItemList& lst); 00498 00499 #endif 00500 00501 /* 00502 ** CVS Log 00503 ** $Log: dul.h,v $ 00504 ** Revision 1.30 2010-10-14 13:17:22 joergr 00505 ** Updated copyright header. Added reference to COPYRIGHT file. 00506 ** 00507 ** Revision 1.29 2010-08-26 09:28:02 joergr 00508 ** Fixed incorrect behavior of association acceptors during SCP/SCU role 00509 ** selection negotiation. 00510 ** Introduced new global flag which allows for rejecting presentation contexts 00511 ** in case of an unsuccessful SCP/SCU role selection (disabled by default). 00512 ** 00513 ** Revision 1.28 2009-12-08 16:37:52 joergr 00514 ** Fixed inconsistent source code formatting. 00515 ** 00516 ** Revision 1.27 2009-11-18 11:53:58 uli 00517 ** Switched to logging mechanism provided by the "new" oflog module. 00518 ** 00519 ** Revision 1.26 2008-04-17 15:28:33 onken 00520 ** Reworked and extended User Identity Negotiation code. 00521 ** 00522 ** Revision 1.25 2007-09-07 08:49:12 onken 00523 ** Added basic support for Extended Negotiation of User Identity. 00524 ** 00525 ** Revision 1.24 2006/08/15 16:04:29 meichel 00526 ** Updated the code in module dcmnet to correctly compile when 00527 ** all standard C++ classes remain in namespace std. 00528 ** 00529 ** Revision 1.23 2005/12/12 15:15:08 meichel 00530 ** Added missing include dependency 00531 ** 00532 ** Revision 1.22 2005/12/09 14:48:35 meichel 00533 ** Added missing virtual destructors 00534 ** 00535 ** Revision 1.21 2005/12/08 16:02:23 meichel 00536 ** Changed include path schema for all DCMTK header files 00537 ** 00538 ** Revision 1.20 2005/11/25 11:31:11 meichel 00539 ** StoreSCP now supports multi-process mode both on Posix and Win32 platforms 00540 ** where a separate client process is forked for each incoming association. 00541 ** 00542 ** Revision 1.19 2004/02/25 12:31:15 meichel 00543 ** Added global option flag for compatibility with very old DCMTK releases in the 00544 ** DICOM upper layer and ACSE code. Default is automatic handling, which should 00545 ** work in most cases. 00546 ** 00547 ** Revision 1.18 2003/08/14 09:01:37 meichel 00548 ** Adapted type casts to new-style typecast operators defined in ofcast.h 00549 ** 00550 ** Revision 1.17 2003/06/10 13:37:36 meichel 00551 ** Added support for TCP wrappers in DICOM network layer 00552 ** 00553 ** Revision 1.16 2003/06/06 13:07:29 meichel 00554 ** Introduced global flag dcmExternalSocketHandle which allows 00555 ** to pass an already opened socket file descriptor to dcmnet. 00556 ** 00557 ** Revision 1.15 2003/06/02 16:44:11 meichel 00558 ** Renamed local variables to avoid name clashes with STL 00559 ** 00560 ** Revision 1.14 2002/11/28 16:57:36 meichel 00561 ** Added global flag dcmConnectionTimeout that defines a timeout for 00562 ** outgoing association requests in the DICOM upper layer. 00563 ** 00564 ** Revision 1.13 2001/11/27 09:54:33 wilkens 00565 ** Updated storescp. 6 new options (--output-directory, --sort-conc-studies, 00566 ** --exec-on-reception, --exec-on-eostudy, --rename-on-eostudy, and 00567 ** --eostudy-timeout) implemented (requirements from GO-Kard). 00568 ** 00569 ** Revision 1.12 2001/10/12 10:18:27 meichel 00570 ** Replaced the CONDITION types, constants and functions in the dcmnet module 00571 ** by an OFCondition based implementation which eliminates the global condition 00572 ** stack. This is a major change, caveat emptor! 00573 ** 00574 ** Revision 1.11 2001/09/26 12:28:59 meichel 00575 ** Implemented changes in dcmnet required by the adaptation of dcmdata 00576 ** to class OFCondition. Removed some unused code. 00577 ** 00578 ** Revision 1.10 2001/06/01 11:02:02 meichel 00579 ** Implemented global flag and command line option to disable reverse 00580 ** DNS hostname lookup using gethostbyaddr when accepting associations. 00581 ** 00582 ** Revision 1.9 2000/10/10 12:06:54 meichel 00583 ** Updated transport layer error codes and routines for printing 00584 ** connection parameters. 00585 ** 00586 ** Revision 1.8 2000/08/10 14:50:54 meichel 00587 ** Added initial OpenSSL support. 00588 ** 00589 ** Revision 1.7 2000/06/07 08:57:22 meichel 00590 ** dcmnet ACSE routines now allow to retrieve a binary copy of the A-ASSOCIATE 00591 ** RQ/AC/RJ PDUs, e.g. for logging purposes. 00592 ** 00593 ** Revision 1.6 1999/04/19 08:39:27 meichel 00594 ** Added experimental support for extended SOP class negotiation. 00595 ** 00596 ** Revision 1.5 1999/03/29 11:19:59 meichel 00597 ** Cleaned up dcmnet code for char* to const char* assignments. 00598 ** 00599 ** Revision 1.4 1998/06/29 12:14:27 meichel 00600 ** Removed some name clashes (e.g. local variable with same 00601 ** name as class member) to improve maintainability. 00602 ** Applied some code purifications proposed by the gcc 2.8.1 -Weffc++ option. 00603 ** 00604 ** Revision 1.3 1997/07/21 08:40:11 andreas 00605 ** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL) 00606 ** with one unique boolean type OFBool. 00607 ** 00608 ** Revision 1.2 1997/01/13 15:53:02 hewett 00609 ** Added missing function prototypes (required for CodeWarrior 10). 00610 ** 00611 ** Revision 1.1.1.1 1996/03/26 18:38:44 hewett 00612 ** Initial Release. 00613 ** 00614 ** 00615 */