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: association 00052 ** 00053 ** Purpose: 00054 ** This file contains the routines which provide association management 00055 ** for DICOM applications. It maintains structures which describe 00056 ** active associations and provides access to association specific 00057 ** informtion. Also provided are routines for aiding association 00058 ** negotiation (presentation contexts, abstract syntaxes, transfer 00059 ** syntaxes, maximum PDU length, and other extended negotiation). 00060 ** 00061 ** This package uses the facilities of the DICOM Upper Layer for 00062 ** receiving/sending association requests/responses. 00063 ** 00064 ** Each active association is represented by an T_ASC_Association 00065 ** structure which contains all relevant information. 00066 ** 00067 ** Module Prefix: ASC_ 00068 ** 00069 ** 00070 ** Last Update: $Author: joergr $ 00071 ** Update Date: $Date: 2010-10-14 13:17:21 $ 00072 ** CVS/RCS Revision: $Revision: 1.32 $ 00073 ** Status: $State: Exp $ 00074 ** 00075 ** CVS/RCS Log at end of file 00076 */ 00077 00078 00079 #ifndef ASSOCIATION_H 00080 #define ASSOCIATION_H 00081 00082 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ 00083 00084 /* 00085 ** Required Include Files 00086 */ 00087 #include "dcmtk/dcmnet/dicom.h" 00088 #include "dcmtk/dcmnet/lst.h" 00089 #include "dcmtk/dcmnet/dul.h" 00090 00091 /* 00092 ** Constant Definitions 00093 */ 00094 00095 /* 00096 * There have been reports that smaller PDUs work better in some environments. 00097 * Allow a 4K minimum and a 128K maximum. Any further extension requires 00098 * modifications in the DUL code. 00099 */ 00100 #define ASC_DEFAULTMAXPDU 16384 /* 16K is default if nothing else specified */ 00101 #define ASC_MINIMUMPDUSIZE 4096 00102 #define ASC_MAXIMUMPDUSIZE 131072 /* 128K - we only handle this big */ 00103 00104 /* 00105 ** Type Definitions 00106 */ 00107 00108 /* 00109 ** Network initialization structure. 00110 ** Is a wrapper for DUL functionality. 00111 */ 00112 00113 enum T_ASC_NetworkRole 00114 { 00115 NET_ACCEPTOR, /* Provider Only */ 00116 NET_REQUESTOR, /* User Only */ 00117 NET_ACCEPTORREQUESTOR /* User and Provider */ 00118 }; 00119 00120 struct T_ASC_Network 00121 { 00122 T_ASC_NetworkRole role; 00123 int acceptorPort; 00124 DUL_NETWORKKEY *network; 00125 }; 00126 00127 00128 /* 00129 ** Association negotiation parameters. 00130 ** 00131 */ 00132 00133 00134 /* not defined anywhere (I think) but a hard limitation for now. 00135 * DICOM (1998) defines 22 transfer syntaxes, this upper limit 00136 * should allow for sufficiently many private transfer syntaxes. 00137 */ 00138 #define DICOM_MAXTRANSFERSYNTAXES 50 00139 00140 00141 typedef DUL_PRESENTATIONCONTEXTID T_ASC_PresentationContextID; 00142 00143 enum T_ASC_P_ResultReason 00144 { /* Part 8, pp 45. */ 00145 ASC_P_ACCEPTANCE = 0, 00146 ASC_P_USERREJECTION = 1, 00147 ASC_P_NOREASON = 2, 00148 ASC_P_ABSTRACTSYNTAXNOTSUPPORTED = 3, 00149 ASC_P_TRANSFERSYNTAXESNOTSUPPORTED = 4, 00150 ASC_P_NOTYETNEGOTIATED = 255 00151 }; 00152 00153 enum T_ASC_SC_ROLE 00154 { 00155 ASC_SC_ROLE_NONE, 00156 ASC_SC_ROLE_DEFAULT, 00157 ASC_SC_ROLE_SCU, 00158 ASC_SC_ROLE_SCP, 00159 ASC_SC_ROLE_SCUSCP 00160 }; 00161 00162 struct T_ASC_PresentationContext 00163 { 00164 T_ASC_PresentationContextID presentationContextID; 00165 DIC_UI abstractSyntax; 00166 unsigned char transferSyntaxCount; 00167 DIC_UI proposedTransferSyntaxes[DICOM_MAXTRANSFERSYNTAXES]; 00168 DIC_UI acceptedTransferSyntax; 00169 T_ASC_P_ResultReason resultReason; 00170 T_ASC_SC_ROLE proposedRole; 00171 T_ASC_SC_ROLE acceptedRole; 00172 }; 00173 00174 enum T_ASC_RejectParametersResult 00175 { 00176 ASC_RESULT_REJECTEDPERMANENT = 1, 00177 ASC_RESULT_REJECTEDTRANSIENT = 2 00178 }; 00179 00180 enum T_ASC_RejectParametersSource 00181 { 00182 ASC_SOURCE_SERVICEUSER = 1, 00183 ASC_SOURCE_SERVICEPROVIDER_ACSE_RELATED = 2, 00184 ASC_SOURCE_SERVICEPROVIDER_PRESENTATION_RELATED = 3 00185 }; 00186 00187 enum T_ASC_RejectParametersReason 00188 { /* the following values are coded by DUL */ 00189 /* Service User reasons */ 00190 ASC_REASON_SU_NOREASON = 0x0101, 00191 ASC_REASON_SU_APPCONTEXTNAMENOTSUPPORTED = 0x0102, 00192 ASC_REASON_SU_CALLINGAETITLENOTRECOGNIZED = 0x0103, 00193 ASC_REASON_SU_CALLEDAETITLENOTRECOGNIZED = 0x0107, 00194 /* Service Provider ACSE Related reasons */ 00195 ASC_REASON_SP_ACSE_NOREASON = 0x0201, 00196 ASC_REASON_SP_ACSE_PROTOCOLVERSIONNOTSUPPORTED = 0x0202, 00197 /* Service Provider Presentation Related reasons */ 00198 ASC_REASON_SP_PRES_TEMPORARYCONGESTION = 0x0301, 00199 ASC_REASON_SP_PRES_LOCALLIMITEXCEEDED = 0x0302 00200 }; 00201 00202 struct T_ASC_RejectParameters 00203 { 00204 T_ASC_RejectParametersResult result; 00205 T_ASC_RejectParametersSource source; 00206 T_ASC_RejectParametersReason reason; 00207 }; 00208 00209 00210 struct T_ASC_Parameters 00211 { 00212 DIC_UI ourImplementationClassUID; 00213 DIC_SH ourImplementationVersionName; 00214 DIC_UI theirImplementationClassUID; 00215 DIC_SH theirImplementationVersionName; 00216 DUL_ModeCallback *modeCallback; 00217 00218 DUL_ASSOCIATESERVICEPARAMETERS DULparams; 00219 /* 00220 * DICOM Upper Layer service parameters. They should only be 00221 * accessed via functions defined below. 00222 */ 00223 00224 long ourMaxPDUReceiveSize; /* we say what we can receive */ 00225 long theirMaxPDUReceiveSize; /* they say what we can send */ 00226 00227 }; 00228 00229 /* 00230 ** Association structure containing all association specific 00231 ** information. 00232 */ 00233 struct T_ASC_Association 00234 { 00235 DUL_ASSOCIATIONKEY *DULassociation; 00236 T_ASC_Parameters *params; 00237 00238 unsigned short nextMsgID; /* should be incremented by user */ 00239 unsigned long sendPDVLength; /* max length of PDV to send out */ 00240 unsigned char *sendPDVBuffer; /* buffer of size sendPDVLength */ 00241 }; 00242 00243 /* 00244 ** Public Function Prototypes 00245 */ 00246 00257 OFCondition ASC_initializeNetwork( 00258 T_ASC_NetworkRole role, 00259 int acceptorPort, 00260 int timeout, 00261 T_ASC_Network ** network, 00262 unsigned long options = 0); 00263 00268 OFCondition ASC_dropNetwork(T_ASC_Network ** network); 00269 00270 /* 00271 * Building Association parameters 00272 */ 00273 00274 OFCondition 00275 ASC_createAssociationParameters( 00276 T_ASC_Parameters ** params, 00277 long maxReceivePDUSize); 00278 00279 OFCondition 00280 ASC_destroyAssociationParameters( 00281 T_ASC_Parameters ** params); 00282 00283 /* set transport layer type in association parameters */ 00284 OFCondition 00285 ASC_setTransportLayerType( 00286 T_ASC_Parameters * params, 00287 OFBool useSecureLayer); 00288 00289 OFCondition 00290 ASC_setAPTitles( 00291 T_ASC_Parameters * params, 00292 const char* callingAPTitle, 00293 const char* calledAPTitle, 00294 const char* respondingAPTitle); 00295 00296 OFCondition 00297 ASC_getAPTitles( 00298 T_ASC_Parameters * params, 00299 char* callingAPTitle, 00300 char* calledAPTitle, 00301 char* respondingAPTitle); 00302 00303 OFCondition 00304 ASC_getApplicationContextName( 00305 T_ASC_Parameters * params, 00306 char* applicationContextName); 00307 00308 OFCondition 00309 ASC_setPresentationAddresses( 00310 T_ASC_Parameters * params, 00311 const char* callingPresentationAddress, 00312 const char* calledPresentationAddress); 00313 00314 OFCondition 00315 ASC_getPresentationAddresses( 00316 T_ASC_Parameters * params, 00317 char* callingPresentationAddress, 00318 char* calledPresentationAddress); 00319 00320 OFCondition 00321 ASC_getRejectParameters( 00322 T_ASC_Parameters * params, 00323 T_ASC_RejectParameters * rejectParameters); 00324 00325 OFString& 00326 ASC_printRejectParameters( 00327 OFString& str, 00328 T_ASC_RejectParameters *rej); 00329 00330 OFCondition 00331 ASC_addPresentationContext( 00332 T_ASC_Parameters * params, 00333 T_ASC_PresentationContextID presentationContextID, 00334 const char* abstractSyntax, 00335 const char* transferSyntaxList[], 00336 int transferSyntaxListCount, 00337 T_ASC_SC_ROLE proposedRole = ASC_SC_ROLE_DEFAULT); 00338 00339 int 00340 ASC_countPresentationContexts( 00341 T_ASC_Parameters * params); 00342 00343 int 00344 ASC_countAcceptedPresentationContexts( 00345 T_ASC_Parameters * params); 00346 00347 OFCondition 00348 ASC_getPresentationContext( 00349 T_ASC_Parameters * params, 00350 int listPosition, 00351 T_ASC_PresentationContext * presentationContext); 00352 00353 OFCondition 00354 ASC_acceptPresentationContext( 00355 T_ASC_Parameters * params, 00356 T_ASC_PresentationContextID presentationContextID, 00357 const char* transferSyntax, 00358 T_ASC_SC_ROLE acceptedRole = ASC_SC_ROLE_DEFAULT); 00359 00360 OFCondition 00361 ASC_acceptContextsWithPreferredTransferSyntaxes( 00362 T_ASC_Parameters * params, 00363 const char* abstractSyntaxes[], int abstractSyntaxCount, 00364 const char* transferSyntaxes[], int transferSyntaxCount, 00365 T_ASC_SC_ROLE acceptedRole = ASC_SC_ROLE_DEFAULT); 00366 00367 OFCondition 00368 ASC_acceptContextsWithTransferSyntax( 00369 T_ASC_Parameters * params, 00370 const char* transferSyntax, int abstractSyntaxCount, 00371 const char* abstractSyntaxes[], 00372 T_ASC_SC_ROLE acceptedRole = ASC_SC_ROLE_DEFAULT); 00373 00374 OFCondition 00375 ASC_refusePresentationContext( 00376 T_ASC_Parameters * params, 00377 T_ASC_PresentationContextID presentationContextID, 00378 T_ASC_P_ResultReason resultReason); 00379 00380 OFCondition 00381 ASC_findAcceptedPresentationContext( 00382 T_ASC_Parameters * params, 00383 T_ASC_PresentationContextID presentationContextID, 00384 T_ASC_PresentationContext * presentationContext); 00385 00386 T_ASC_PresentationContextID 00387 ASC_findAcceptedPresentationContextID( 00388 T_ASC_Association *assoc, 00389 const char* abstractSyntax); 00390 00391 T_ASC_PresentationContextID 00392 ASC_findAcceptedPresentationContextID( 00393 T_ASC_Association *assoc, 00394 const char* abstractSyntax, 00395 const char * transferSyntax); 00396 00397 /* extended negotiation */ 00398 void ASC_getRequestedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList** extNegList); 00399 void ASC_getAcceptedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList** extNegList); 00400 void ASC_setRequestedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList* extNegList); 00401 void ASC_setAcceptedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList* extNegList); 00402 00403 /* user identity negotiation */ 00404 00405 /* function that returns user identity request structure from association 00406 * parameters. 00407 * @param params - [in] The parameters to read from 00408 * @param usrIdentAC - [out] The result pointer to user identity request 00409 */ 00410 void ASC_getUserIdentRQ(T_ASC_Parameters* params, UserIdentityNegotiationSubItemRQ** usrIdentRQ); 00411 00412 /* function that returns user identity response structure from association 00413 * parameters. Note: For accessing the User Identity response value, 00414 * it is more convenient to use the function ASC_getCopyOfIdentResponse(). 00415 * @param params - [in] The parameters to read from 00416 * @param usrIdentAC - [out] The result pointer to user identity response 00417 * @return none 00418 */ 00419 void ASC_getUserIdentAC(T_ASC_Parameters* params, UserIdentityNegotiationSubItemAC** usrIdentAC); 00420 00428 OFCondition 00429 ASC_setIdentRQUserPassword( 00430 T_ASC_Parameters * params, 00431 const OFString& userName, 00432 const OFString& password, 00433 const OFBool& requestRsp = OFTrue); 00434 00441 OFCondition 00442 ASC_setIdentRQUserOnly( 00443 T_ASC_Parameters * params, 00444 const OFString& userName, 00445 const OFBool& requestRsp = OFTrue); 00446 00453 OFCondition 00454 ASC_setIdentRQKerberos( 00455 T_ASC_Parameters * params, 00456 const char* kerbTicket, 00457 const Uint16& length, 00458 const OFBool& requestRsp = OFTrue); 00459 00466 OFCondition 00467 ASC_setIdentRQSaml( 00468 T_ASC_Parameters * params, 00469 const char* saml, 00470 const Uint16& length, 00471 const OFBool& requestRsp = OFTrue); 00472 00473 00480 OFCondition ASC_setIdentAC( 00481 T_ASC_Parameters * params, 00482 const char* response, 00483 const Uint16& length ); 00484 00497 void 00498 ASC_getCopyOfIdentResponse(T_ASC_Parameters * params, 00499 void*& buffer, 00500 unsigned short& bufferLen); 00501 00502 /* TLS/SSL */ 00503 00504 /* get peer certificate from open association */ 00505 unsigned long ASC_getPeerCertificateLength(T_ASC_Association *assoc); 00506 unsigned long ASC_getPeerCertificate(T_ASC_Association *assoc, void *buf, unsigned long bufLen); 00507 00508 /* set new transport layer object */ 00509 OFCondition 00510 ASC_setTransportLayer(T_ASC_Network *network, DcmTransportLayer *newLayer, int takeoverOwnership); 00511 00512 enum ASC_associateType 00513 { 00514 ASC_ASSOC_RQ, 00515 ASC_ASSOC_AC, 00516 ASC_ASSOC_RJ 00517 }; 00518 00519 OFString& 00520 ASC_dumpParameters(OFString& str, T_ASC_Parameters * param, ASC_associateType dir); 00521 00522 OFString& 00523 ASC_dumpConnectionParameters(OFString& str, T_ASC_Association *association); 00524 00525 void ASC_activateCallback(T_ASC_Parameters *params, DUL_ModeCallback *cb); 00526 00527 /* 00528 * Association Inquiries 00529 */ 00530 00531 OFBool 00532 ASC_associationWaiting(T_ASC_Network * network, int timeout); 00533 00534 OFBool 00535 ASC_dataWaiting(T_ASC_Association * association, int timeout); 00536 00537 OFBool 00538 ASC_selectReadableAssociation( 00539 T_ASC_Association* assocs[], 00540 int assocCount, int timeout); 00541 00542 /* 00543 * Association Messages 00544 */ 00545 00546 OFCondition 00547 ASC_requestAssociation( 00548 T_ASC_Network * network, 00549 T_ASC_Parameters * params, /* params will be saved 00550 * in the association 00551 * structure */ 00552 T_ASC_Association ** association, 00553 void **associatePDU=NULL, 00554 unsigned long *associatePDUlength=NULL); 00555 00556 OFCondition 00557 ASC_receiveAssociation( 00558 T_ASC_Network * network, 00559 T_ASC_Association ** association, 00560 long maxReceivePDUSize, 00561 void **associatePDU=NULL, 00562 unsigned long *associatePDUlength=NULL, 00563 OFBool useSecureLayer=OFFalse, 00564 DUL_BLOCKOPTIONS block=DUL_BLOCK, 00565 int timeout=0); 00566 00567 OFCondition 00568 ASC_acknowledgeAssociation( 00569 T_ASC_Association * assoc, 00570 void **associatePDU=NULL, 00571 unsigned long *associatePDUlength=NULL); 00572 00573 OFCondition 00574 ASC_rejectAssociation( 00575 T_ASC_Association * association, 00576 T_ASC_RejectParameters * rejectParameters, 00577 void **associatePDU=NULL, 00578 unsigned long *associatePDUlength=NULL); 00579 00580 OFCondition 00581 ASC_releaseAssociation(T_ASC_Association * association); 00582 00583 OFCondition 00584 ASC_acknowledgeRelease(T_ASC_Association * association); 00585 00586 OFCondition 00587 ASC_abortAssociation(T_ASC_Association * association); 00588 00589 OFCondition 00590 ASC_dropSCPAssociation(T_ASC_Association * association, int timeout = DUL_TIMEOUT); 00591 00592 OFCondition 00593 ASC_dropAssociation(T_ASC_Association * association); 00594 00595 OFCondition 00596 ASC_destroyAssociation(T_ASC_Association ** association); 00597 00599 void 00600 ASC_printRejectParameters( 00601 FILE *f, 00602 T_ASC_RejectParameters *rej); 00603 00605 void 00606 ASC_printRejectParameters( 00607 STD_NAMESPACE ostream& out, 00608 T_ASC_RejectParameters *rej); 00609 00614 void 00615 ASC_dumpParameters(T_ASC_Parameters * params, STD_NAMESPACE ostream& outstream); 00616 00618 void 00619 ASC_dumpPresentationContext(T_ASC_PresentationContext * presentationContext, STD_NAMESPACE ostream& outstream); 00620 00625 void 00626 ASC_dumpConnectionParameters(T_ASC_Association *association, STD_NAMESPACE ostream& outstream); 00627 00628 00629 #endif 00630 00631 /* 00632 ** CVS Log 00633 ** $Log: assoc.h,v $ 00634 ** Revision 1.32 2010-10-14 13:17:21 joergr 00635 ** Updated copyright header. Added reference to COPYRIGHT file. 00636 ** 00637 ** Revision 1.31 2010-10-01 12:25:29 uli 00638 ** Fixed most compiler warnings in remaining modules. 00639 ** 00640 ** Revision 1.30 2010-08-26 09:26:41 joergr 00641 ** Fixed incorrect behavior of association acceptors during SCP/SCU role 00642 ** selection negotiation. 00643 ** 00644 ** Revision 1.29 2009-11-18 11:53:58 uli 00645 ** Switched to logging mechanism provided by the "new" oflog module. 00646 ** 00647 ** Revision 1.28 2008-10-07 09:07:47 onken 00648 ** Added code for accessing user identity from the server's side. 00649 ** 00650 ** Revision 1.27 2008-04-17 15:28:33 onken 00651 ** Reworked and extended User Identity Negotiation code. 00652 ** 00653 ** Revision 1.26 2007-09-07 08:49:12 onken 00654 ** Added basic support for Extended Negotiation of User Identity. 00655 ** 00656 ** Revision 1.25 2006/08/15 16:04:29 meichel 00657 ** Updated the code in module dcmnet to correctly compile when 00658 ** all standard C++ classes remain in namespace std. 00659 ** 00660 ** Revision 1.24 2005/12/08 16:02:06 meichel 00661 ** Changed include path schema for all DCMTK header files 00662 ** 00663 ** Revision 1.23 2004/07/15 08:10:45 meichel 00664 ** Added optional timeout parameter to ASC_dropSCPAssociation(). 00665 ** 00666 ** Revision 1.22 2004/04/07 10:22:09 meichel 00667 ** Added optional parameter to ASC_initializeNetwork that allows to pass 00668 ** the DUL_FULLDOMAINNAME option to the DUL layer 00669 ** 00670 ** Revision 1.21 2004/02/25 12:31:15 meichel 00671 ** Added global option flag for compatibility with very old DCMTK releases in the 00672 ** DICOM upper layer and ACSE code. Default is automatic handling, which should 00673 ** work in most cases. 00674 ** 00675 ** Revision 1.20 2003/06/10 13:42:07 meichel 00676 ** Replaced unnamed C style structs by C++ declarations 00677 ** 00678 ** Revision 1.19 2002/07/10 11:43:55 meichel 00679 ** Replaced dcmnet specific definitions for implementation class UID and 00680 ** version name by the constants defined in dcmdata. 00681 ** 00682 ** Revision 1.18 2001/11/27 09:54:33 wilkens 00683 ** Updated storescp. 6 new options (--output-directory, --sort-conc-studies, 00684 ** --exec-on-reception, --exec-on-eostudy, --rename-on-eostudy, and 00685 ** --eostudy-timeout) implemented (requirements from GO-Kard). 00686 ** 00687 ** Revision 1.17 2001/10/12 10:18:25 meichel 00688 ** Replaced the CONDITION types, constants and functions in the dcmnet module 00689 ** by an OFCondition based implementation which eliminates the global condition 00690 ** stack. This is a major change, caveat emptor! 00691 ** 00692 ** Revision 1.16 2001/09/28 13:23:46 joergr 00693 ** Added forward declaration of "ostream" to keep gcc 3.0 quiet. 00694 ** 00695 ** Revision 1.15 2000/10/10 12:06:05 meichel 00696 ** Added version of function ASC_printRejectParameters that takes 00697 ** an STD_NAMESPACE ostream& instead of a FILE* 00698 ** 00699 ** Revision 1.14 2000/08/10 14:50:52 meichel 00700 ** Added initial OpenSSL support. 00701 ** 00702 ** Revision 1.13 2000/06/07 13:56:20 meichel 00703 ** Output stream now passed as mandatory parameter to ASC_dumpParameters. 00704 ** 00705 ** Revision 1.12 2000/06/07 08:57:21 meichel 00706 ** dcmnet ACSE routines now allow to retrieve a binary copy of the A-ASSOCIATE 00707 ** RQ/AC/RJ PDUs, e.g. for logging purposes. 00708 ** 00709 ** Revision 1.11 2000/05/30 13:07:41 joergr 00710 ** Added a condition value to report the external request for a shutdown of 00711 ** the application (used for imagectn). 00712 ** 00713 ** Revision 1.10 1999/09/06 13:28:31 meichel 00714 ** Enhanced max receive PDU range to 4-128K. 00715 ** 00716 ** Revision 1.9 1999/04/26 17:20:55 meichel 00717 ** Added new "transfer syntax aware" variant of the dcmnet function 00718 ** ASC_findAcceptedPresentationContextID. This variant tries to find an 00719 ** accepted presentation context that matches both abstract and transfer syntax. 00720 ** 00721 ** Revision 1.8 1999/04/21 13:01:23 meichel 00722 ** Increased max. number of transfer syntaxes that 00723 ** can be managed in an A-ASSOCIATE packet from 25 to 50. 00724 ** 00725 ** Revision 1.7 1999/04/19 08:39:27 meichel 00726 ** Added experimental support for extended SOP class negotiation. 00727 ** 00728 ** Revision 1.6 1997/08/05 07:38:08 andreas 00729 ** Corrected error in DUL finite state machine 00730 ** SCPs shall close sockets after the SCU have closed the socket in 00731 ** a normal association release. Therfore, an ARTIM timer is described 00732 ** in DICOM part 8 that is not implemented correctly in the 00733 ** DUL. Since the whole DUL finite state machine is affected, we 00734 ** decided to solve the proble outside the fsm. Now it is necessary to call the 00735 ** ASC_DropSCPAssociation() after the calling ASC_acknowledgeRelease(). 00736 ** 00737 ** Revision 1.5 1997/07/21 08:40:08 andreas 00738 ** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL) 00739 ** with one unique boolean type OFBool. 00740 ** 00741 ** Revision 1.4 1997/05/05 13:05:53 meichel 00742 ** Removed unused constant DICOM_MAXPRESENTATIONCONTEXTS. 00743 ** 00744 ** Revision 1.3 1997/05/05 10:30:08 meichel 00745 ** Fixed bugs related to association negotiation in the DICOM upper layer module. 00746 ** Added application tests/assctest.cc to examine handling of large A-ASSOCIATE 00747 ** PDUs. See CHANGES file for details. 00748 ** 00749 ** Revision 1.2 1996/04/25 16:06:27 hewett 00750 ** Replaced declarations of DIC_UL with unsigned long. 00751 ** 00752 ** Revision 1.1.1.1 1996/03/26 18:38:44 hewett 00753 ** Initial Release. 00754 ** 00755 ** 00756 */