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