OFFIS DCMTK  Version 3.6.0
assoc.h
1 /*
2  *
3  * Copyright (C) 1994-2010, OFFIS e.V.
4  * All rights reserved. See COPYRIGHT file for details.
5  *
6  * This software and supporting documentation were partly developed by
7  *
8  * OFFIS e.V.
9  * R&D Division Health
10  * Escherweg 2
11  * D-26121 Oldenburg, Germany
12  *
13  * For further copyrights, see the following paragraphs.
14  *
15  */
16 
17 /*
18 ** Copyright (C) 1993/1994, OFFIS, Oldenburg University and CERIUM
19 **
20 ** This software and supporting documentation were
21 ** developed by
22 **
23 ** Institut OFFIS
24 ** Bereich Kommunikationssysteme
25 ** Westerstr. 10-12
26 ** 26121 Oldenburg, Germany
27 **
28 ** Fachbereich Informatik
29 ** Abteilung Prozessinformatik
30 ** Carl von Ossietzky Universitaet Oldenburg
31 ** Ammerlaender Heerstr. 114-118
32 ** 26111 Oldenburg, Germany
33 **
34 ** CERIUM
35 ** Laboratoire SIM
36 ** Faculte de Medecine
37 ** 2 Avenue du Pr. Leon Bernard
38 ** 35043 Rennes Cedex, France
39 **
40 ** for CEN/TC251/WG4 as a contribution to the Radiological
41 ** Society of North America (RSNA) 1993 Digital Imaging and
42 ** Communications in Medicine (DICOM) Demonstration.
43 **
44 ** THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND NEITHER OFFIS,
45 ** OLDENBURG UNIVERSITY NOR CERIUM MAKE ANY WARRANTY REGARDING
46 ** THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR
47 ** FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER
48 ** DISEASES OR ITS CONFORMITY TO ANY SPECIFICATION. THE
49 ** ENTIRE RISK AS TO QUALITY AND PERFORMANCE OF THE SOFTWARE
50 ** IS WITH THE USER.
51 **
52 ** Copyright of the software and supporting documentation
53 ** is, unless otherwise stated, jointly owned by OFFIS,
54 ** Oldenburg University and CERIUM and free access is hereby
55 ** granted as a license to use this software, copy this
56 ** software and prepare derivative works based upon this
57 ** software. However, any distribution of this software
58 ** source code or supporting documentation or derivative
59 ** works (source code and supporting documentation) must
60 ** include the three paragraphs of this copyright notice.
61 **
62 */
63 
64 /*
65 **
66 ** Author: Andrew Hewett Created: 03-06-93
67 **
68 ** Module: association
69 **
70 ** Purpose:
71 ** This file contains the routines which provide association management
72 ** for DICOM applications. It maintains structures which describe
73 ** active associations and provides access to association specific
74 ** informtion. Also provided are routines for aiding association
75 ** negotiation (presentation contexts, abstract syntaxes, transfer
76 ** syntaxes, maximum PDU length, and other extended negotiation).
77 **
78 ** This package uses the facilities of the DICOM Upper Layer for
79 ** receiving/sending association requests/responses.
80 **
81 ** Each active association is represented by an T_ASC_Association
82 ** structure which contains all relevant information.
83 **
84 ** Module Prefix: ASC_
85 **
86 ** Last Update: $Author: joergr $
87 ** Update Date: $Date: 2010-12-01 08:26:10 $
88 ** CVS/RCS Revision: $Revision: 1.33 $
89 ** Status: $State: Exp $
90 **
91 ** CVS/RCS Log at end of file
92 */
93 
94 
95 #ifndef ASSOCIATION_H
96 #define ASSOCIATION_H
97 
98 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
99 
100 /*
101 ** Required Include Files
102 */
103 #include "dcmtk/dcmnet/dicom.h"
104 #include "dcmtk/dcmnet/lst.h"
105 #include "dcmtk/dcmnet/dul.h"
106 
107 /*
108 ** Constant Definitions
109 */
110 
111 /*
112  * There have been reports that smaller PDUs work better in some environments.
113  * Allow a 4K minimum and a 128K maximum. Any further extension requires
114  * modifications in the DUL code.
115  */
116 #define ASC_DEFAULTMAXPDU 16384 /* 16K is default if nothing else specified */
117 #define ASC_MINIMUMPDUSIZE 4096
118 #define ASC_MAXIMUMPDUSIZE 131072 /* 128K - we only handle this big */
119 
120 /*
121 ** Type Definitions
122 */
123 
124 /*
125 ** Network initialization structure.
126 ** Is a wrapper for DUL functionality.
127 */
128 
129 enum T_ASC_NetworkRole
130 {
131  NET_ACCEPTOR, /* Provider Only */
132  NET_REQUESTOR, /* User Only */
133  NET_ACCEPTORREQUESTOR /* User and Provider */
134 };
135 
137 {
138  T_ASC_NetworkRole role;
139  int acceptorPort;
140  DUL_NETWORKKEY *network;
141 };
142 
143 
144 /*
145 ** Association negotiation parameters.
146 **
147 */
148 
149 
150 /* not defined anywhere (I think) but a hard limitation for now.
151  * DICOM (1998) defines 22 transfer syntaxes, this upper limit
152  * should allow for sufficiently many private transfer syntaxes.
153  */
154 #define DICOM_MAXTRANSFERSYNTAXES 50
155 
156 
157 typedef DUL_PRESENTATIONCONTEXTID T_ASC_PresentationContextID;
158 
159 enum T_ASC_P_ResultReason
160 { /* Part 8, pp 45. */
161  ASC_P_ACCEPTANCE = 0,
162  ASC_P_USERREJECTION = 1,
163  ASC_P_NOREASON = 2,
164  ASC_P_ABSTRACTSYNTAXNOTSUPPORTED = 3,
165  ASC_P_TRANSFERSYNTAXESNOTSUPPORTED = 4,
166  ASC_P_NOTYETNEGOTIATED = 255
167 };
168 
169 enum T_ASC_SC_ROLE
170 {
171  ASC_SC_ROLE_NONE,
172  ASC_SC_ROLE_DEFAULT,
173  ASC_SC_ROLE_SCU,
174  ASC_SC_ROLE_SCP,
175  ASC_SC_ROLE_SCUSCP
176 };
177 
179 {
180  T_ASC_PresentationContextID presentationContextID;
181  DIC_UI abstractSyntax;
182  unsigned char transferSyntaxCount;
183  DIC_UI proposedTransferSyntaxes[DICOM_MAXTRANSFERSYNTAXES];
184  DIC_UI acceptedTransferSyntax;
185  T_ASC_P_ResultReason resultReason;
186  T_ASC_SC_ROLE proposedRole;
187  T_ASC_SC_ROLE acceptedRole;
188 };
189 
190 enum T_ASC_RejectParametersResult
191 {
192  ASC_RESULT_REJECTEDPERMANENT = 1,
193  ASC_RESULT_REJECTEDTRANSIENT = 2
194 };
195 
196 enum T_ASC_RejectParametersSource
197 {
198  ASC_SOURCE_SERVICEUSER = 1,
199  ASC_SOURCE_SERVICEPROVIDER_ACSE_RELATED = 2,
200  ASC_SOURCE_SERVICEPROVIDER_PRESENTATION_RELATED = 3
201 };
202 
203 enum T_ASC_RejectParametersReason
204 { /* the following values are coded by DUL */
205  /* Service User reasons */
206  ASC_REASON_SU_NOREASON = 0x0101,
207  ASC_REASON_SU_APPCONTEXTNAMENOTSUPPORTED = 0x0102,
208  ASC_REASON_SU_CALLINGAETITLENOTRECOGNIZED = 0x0103,
209  ASC_REASON_SU_CALLEDAETITLENOTRECOGNIZED = 0x0107,
210  /* Service Provider ACSE Related reasons */
211  ASC_REASON_SP_ACSE_NOREASON = 0x0201,
212  ASC_REASON_SP_ACSE_PROTOCOLVERSIONNOTSUPPORTED = 0x0202,
213  /* Service Provider Presentation Related reasons */
214  ASC_REASON_SP_PRES_TEMPORARYCONGESTION = 0x0301,
215  ASC_REASON_SP_PRES_LOCALLIMITEXCEEDED = 0x0302
216 };
217 
219 {
220  T_ASC_RejectParametersResult result;
221  T_ASC_RejectParametersSource source;
222  T_ASC_RejectParametersReason reason;
223 };
224 
225 
227 {
228  DIC_UI ourImplementationClassUID;
229  DIC_SH ourImplementationVersionName;
230  DIC_UI theirImplementationClassUID;
231  DIC_SH theirImplementationVersionName;
232  DUL_ModeCallback *modeCallback;
233 
235  /*
236  * DICOM Upper Layer service parameters. They should only be
237  * accessed via functions defined below.
238  */
239 
240  long ourMaxPDUReceiveSize; /* we say what we can receive */
241  long theirMaxPDUReceiveSize; /* they say what we can send */
242 
243 };
244 
245 /*
246 ** Association structure containing all association specific
247 ** information.
248 */
250 {
251  DUL_ASSOCIATIONKEY *DULassociation;
252  T_ASC_Parameters *params;
253 
254  unsigned short nextMsgID; /* should be incremented by user */
255  unsigned long sendPDVLength; /* max length of PDV to send out */
256  unsigned char *sendPDVBuffer; /* buffer of size sendPDVLength */
257 };
258 
259 /*
260 ** Public Function Prototypes
261 */
262 
273 OFCondition ASC_initializeNetwork(
274  T_ASC_NetworkRole role,
275  int acceptorPort,
276  int timeout,
277  T_ASC_Network ** network,
278  unsigned long options = 0);
279 
284 OFCondition ASC_dropNetwork(T_ASC_Network ** network);
285 
286 /*
287  * Building Association parameters
288  */
289 
291 ASC_createAssociationParameters(
292  T_ASC_Parameters ** params,
293  long maxReceivePDUSize);
294 
296 ASC_destroyAssociationParameters(
297  T_ASC_Parameters ** params);
298 
299 /* set transport layer type in association parameters */
301 ASC_setTransportLayerType(
302  T_ASC_Parameters * params,
303  OFBool useSecureLayer);
304 
306 ASC_setAPTitles(
307  T_ASC_Parameters * params,
308  const char* callingAPTitle,
309  const char* calledAPTitle,
310  const char* respondingAPTitle);
311 
313 ASC_getAPTitles(
314  T_ASC_Parameters * params,
315  char* callingAPTitle,
316  char* calledAPTitle,
317  char* respondingAPTitle);
318 
320 ASC_getApplicationContextName(
321  T_ASC_Parameters * params,
322  char* applicationContextName);
323 
325 ASC_setPresentationAddresses(
326  T_ASC_Parameters * params,
327  const char* callingPresentationAddress,
328  const char* calledPresentationAddress);
329 
331 ASC_getPresentationAddresses(
332  T_ASC_Parameters * params,
333  char* callingPresentationAddress,
334  char* calledPresentationAddress);
335 
337 ASC_getRejectParameters(
338  T_ASC_Parameters * params,
339  T_ASC_RejectParameters * rejectParameters);
340 
341 OFString&
342 ASC_printRejectParameters(
343  OFString& str,
345 
347 ASC_addPresentationContext(
348  T_ASC_Parameters * params,
349  T_ASC_PresentationContextID presentationContextID,
350  const char* abstractSyntax,
351  const char* transferSyntaxList[],
352  int transferSyntaxListCount,
353  T_ASC_SC_ROLE proposedRole = ASC_SC_ROLE_DEFAULT);
354 
355 int
356 ASC_countPresentationContexts(
357  T_ASC_Parameters * params);
358 
359 int
360 ASC_countAcceptedPresentationContexts(
361  T_ASC_Parameters * params);
362 
364 ASC_getPresentationContext(
365  T_ASC_Parameters * params,
366  int listPosition,
367  T_ASC_PresentationContext * presentationContext);
368 
370 ASC_acceptPresentationContext(
371  T_ASC_Parameters * params,
372  T_ASC_PresentationContextID presentationContextID,
373  const char* transferSyntax,
374  T_ASC_SC_ROLE acceptedRole = ASC_SC_ROLE_DEFAULT);
375 
377 ASC_acceptContextsWithPreferredTransferSyntaxes(
378  T_ASC_Parameters * params,
379  const char* abstractSyntaxes[], int abstractSyntaxCount,
380  const char* transferSyntaxes[], int transferSyntaxCount,
381  T_ASC_SC_ROLE acceptedRole = ASC_SC_ROLE_DEFAULT);
382 
384 ASC_acceptContextsWithTransferSyntax(
385  T_ASC_Parameters * params,
386  const char* transferSyntax, int abstractSyntaxCount,
387  const char* abstractSyntaxes[],
388  T_ASC_SC_ROLE acceptedRole = ASC_SC_ROLE_DEFAULT);
389 
391 ASC_refusePresentationContext(
392  T_ASC_Parameters * params,
393  T_ASC_PresentationContextID presentationContextID,
394  T_ASC_P_ResultReason resultReason);
395 
397 ASC_findAcceptedPresentationContext(
398  T_ASC_Parameters * params,
399  T_ASC_PresentationContextID presentationContextID,
400  T_ASC_PresentationContext * presentationContext);
401 
402 T_ASC_PresentationContextID
403 ASC_findAcceptedPresentationContextID(
404  T_ASC_Association *assoc,
405  const char* abstractSyntax);
406 
407 T_ASC_PresentationContextID
408 ASC_findAcceptedPresentationContextID(
409  T_ASC_Association *assoc,
410  const char* abstractSyntax,
411  const char * transferSyntax);
412 
413 /* extended negotiation */
414 void ASC_getRequestedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList** extNegList);
415 void ASC_getAcceptedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList** extNegList);
416 void ASC_setRequestedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList* extNegList);
417 void ASC_setAcceptedExtNegList(T_ASC_Parameters* params, SOPClassExtendedNegotiationSubItemList* extNegList);
418 
419 /* user identity negotiation */
420 
421 /* function that returns user identity request structure from association
422  * parameters.
423  * @param params - [in] The parameters to read from
424  * @param usrIdentAC - [out] The result pointer to user identity request
425  */
426 void ASC_getUserIdentRQ(T_ASC_Parameters* params, UserIdentityNegotiationSubItemRQ** usrIdentRQ);
427 
428 /* function that returns user identity response structure from association
429  * parameters. Note: For accessing the User Identity response value,
430  * it is more convenient to use the function ASC_getCopyOfIdentResponse().
431  * @param params - [in] The parameters to read from
432  * @param usrIdentAC - [out] The result pointer to user identity response
433  * @return none
434  */
435 void ASC_getUserIdentAC(T_ASC_Parameters* params, UserIdentityNegotiationSubItemAC** usrIdentAC);
436 
445 ASC_setIdentRQUserPassword(
446  T_ASC_Parameters * params,
447  const OFString& userName,
448  const OFString& password,
449  const OFBool& requestRsp = OFTrue);
450 
458 ASC_setIdentRQUserOnly(
459  T_ASC_Parameters * params,
460  const OFString& userName,
461  const OFBool& requestRsp = OFTrue);
462 
470 ASC_setIdentRQKerberos(
471  T_ASC_Parameters * params,
472  const char* kerbTicket,
473  const Uint16& length,
474  const OFBool& requestRsp = OFTrue);
475 
483 ASC_setIdentRQSaml(
484  T_ASC_Parameters * params,
485  const char* saml,
486  const Uint16& length,
487  const OFBool& requestRsp = OFTrue);
488 
489 
496 OFCondition ASC_setIdentAC(
497  T_ASC_Parameters * params,
498  const char* response,
499  const Uint16& length );
500 
513 void
514 ASC_getCopyOfIdentResponse(T_ASC_Parameters * params,
515  void*& buffer,
516  unsigned short& bufferLen);
517 
518 /* TLS/SSL */
519 
520 /* get peer certificate from open association */
521 unsigned long ASC_getPeerCertificateLength(T_ASC_Association *assoc);
522 unsigned long ASC_getPeerCertificate(T_ASC_Association *assoc, void *buf, unsigned long bufLen);
523 
524 /* set new transport layer object */
526 ASC_setTransportLayer(T_ASC_Network *network, DcmTransportLayer *newLayer, int takeoverOwnership);
527 
528 enum ASC_associateType
529 {
530  ASC_ASSOC_RQ,
531  ASC_ASSOC_AC,
532  ASC_ASSOC_RJ
533 };
534 
535 OFString&
536 ASC_dumpParameters(OFString& str, T_ASC_Parameters * param, ASC_associateType dir);
537 
538 OFString&
539 ASC_dumpConnectionParameters(OFString& str, T_ASC_Association *association);
540 
541 void ASC_activateCallback(T_ASC_Parameters *params, DUL_ModeCallback *cb);
542 
543 /*
544  * Association Inquiries
545  */
546 
547 OFBool
548 ASC_associationWaiting(T_ASC_Network * network, int timeout);
549 
550 OFBool
551 ASC_dataWaiting(T_ASC_Association * association, int timeout);
552 
553 OFBool
554 ASC_selectReadableAssociation(
555  T_ASC_Association* assocs[],
556  int assocCount, int timeout);
557 
558 /*
559  * Association Messages
560  */
561 
563 ASC_requestAssociation(
564  T_ASC_Network * network,
565  T_ASC_Parameters * params, /* params will be saved
566  * in the association
567  * structure */
568  T_ASC_Association ** association,
569  void **associatePDU=NULL,
570  unsigned long *associatePDUlength=NULL);
571 
573 ASC_receiveAssociation(
574  T_ASC_Network * network,
575  T_ASC_Association ** association,
576  long maxReceivePDUSize,
577  void **associatePDU=NULL,
578  unsigned long *associatePDUlength=NULL,
579  OFBool useSecureLayer=OFFalse,
580  DUL_BLOCKOPTIONS block=DUL_BLOCK,
581  int timeout=0);
582 
584 ASC_acknowledgeAssociation(
585  T_ASC_Association * assoc,
586  void **associatePDU=NULL,
587  unsigned long *associatePDUlength=NULL);
588 
590 ASC_rejectAssociation(
591  T_ASC_Association * association,
592  T_ASC_RejectParameters * rejectParameters,
593  void **associatePDU=NULL,
594  unsigned long *associatePDUlength=NULL);
595 
597 ASC_releaseAssociation(T_ASC_Association * association);
598 
600 ASC_acknowledgeRelease(T_ASC_Association * association);
601 
603 ASC_abortAssociation(T_ASC_Association * association);
604 
606 ASC_dropSCPAssociation(T_ASC_Association * association, int timeout = DUL_TIMEOUT);
607 
609 ASC_dropAssociation(T_ASC_Association * association);
610 
612 ASC_destroyAssociation(T_ASC_Association ** association);
613 
615 void
616 ASC_printRejectParameters(
617  FILE *f,
619 
621 void
622 ASC_printRejectParameters(
623  STD_NAMESPACE ostream& out,
625 
630 void
631 ASC_dumpParameters(T_ASC_Parameters * params, STD_NAMESPACE ostream& outstream);
632 
634 void
635 ASC_dumpPresentationContext(T_ASC_PresentationContext * presentationContext, STD_NAMESPACE ostream& outstream);
636 
641 void
642 ASC_dumpConnectionParameters(T_ASC_Association *association, STD_NAMESPACE ostream& outstream);
643 
644 
645 #endif
646 
647 /*
648 ** CVS Log
649 ** $Log: assoc.h,v $
650 ** Revision 1.33 2010-12-01 08:26:10 joergr
651 ** Added OFFIS copyright header (beginning with the year 1994).
652 **
653 ** Revision 1.32 2010-10-14 13:17:21 joergr
654 ** Updated copyright header. Added reference to COPYRIGHT file.
655 **
656 ** Revision 1.31 2010-10-01 12:25:29 uli
657 ** Fixed most compiler warnings in remaining modules.
658 **
659 ** Revision 1.30 2010-08-26 09:26:41 joergr
660 ** Fixed incorrect behavior of association acceptors during SCP/SCU role
661 ** selection negotiation.
662 **
663 ** Revision 1.29 2009-11-18 11:53:58 uli
664 ** Switched to logging mechanism provided by the "new" oflog module.
665 **
666 ** Revision 1.28 2008-10-07 09:07:47 onken
667 ** Added code for accessing user identity from the server's side.
668 **
669 ** Revision 1.27 2008-04-17 15:28:33 onken
670 ** Reworked and extended User Identity Negotiation code.
671 **
672 ** Revision 1.26 2007-09-07 08:49:12 onken
673 ** Added basic support for Extended Negotiation of User Identity.
674 **
675 ** Revision 1.25 2006/08/15 16:04:29 meichel
676 ** Updated the code in module dcmnet to correctly compile when
677 ** all standard C++ classes remain in namespace std.
678 **
679 ** Revision 1.24 2005/12/08 16:02:06 meichel
680 ** Changed include path schema for all DCMTK header files
681 **
682 ** Revision 1.23 2004/07/15 08:10:45 meichel
683 ** Added optional timeout parameter to ASC_dropSCPAssociation().
684 **
685 ** Revision 1.22 2004/04/07 10:22:09 meichel
686 ** Added optional parameter to ASC_initializeNetwork that allows to pass
687 ** the DUL_FULLDOMAINNAME option to the DUL layer
688 **
689 ** Revision 1.21 2004/02/25 12:31:15 meichel
690 ** Added global option flag for compatibility with very old DCMTK releases in the
691 ** DICOM upper layer and ACSE code. Default is automatic handling, which should
692 ** work in most cases.
693 **
694 ** Revision 1.20 2003/06/10 13:42:07 meichel
695 ** Replaced unnamed C style structs by C++ declarations
696 **
697 ** Revision 1.19 2002/07/10 11:43:55 meichel
698 ** Replaced dcmnet specific definitions for implementation class UID and
699 ** version name by the constants defined in dcmdata.
700 **
701 ** Revision 1.18 2001/11/27 09:54:33 wilkens
702 ** Updated storescp. 6 new options (--output-directory, --sort-conc-studies,
703 ** --exec-on-reception, --exec-on-eostudy, --rename-on-eostudy, and
704 ** --eostudy-timeout) implemented (requirements from GO-Kard).
705 **
706 ** Revision 1.17 2001/10/12 10:18:25 meichel
707 ** Replaced the CONDITION types, constants and functions in the dcmnet module
708 ** by an OFCondition based implementation which eliminates the global condition
709 ** stack. This is a major change, caveat emptor!
710 **
711 ** Revision 1.16 2001/09/28 13:23:46 joergr
712 ** Added forward declaration of "ostream" to keep gcc 3.0 quiet.
713 **
714 ** Revision 1.15 2000/10/10 12:06:05 meichel
715 ** Added version of function ASC_printRejectParameters that takes
716 ** an STD_NAMESPACE ostream& instead of a FILE*
717 **
718 ** Revision 1.14 2000/08/10 14:50:52 meichel
719 ** Added initial OpenSSL support.
720 **
721 ** Revision 1.13 2000/06/07 13:56:20 meichel
722 ** Output stream now passed as mandatory parameter to ASC_dumpParameters.
723 **
724 ** Revision 1.12 2000/06/07 08:57:21 meichel
725 ** dcmnet ACSE routines now allow to retrieve a binary copy of the A-ASSOCIATE
726 ** RQ/AC/RJ PDUs, e.g. for logging purposes.
727 **
728 ** Revision 1.11 2000/05/30 13:07:41 joergr
729 ** Added a condition value to report the external request for a shutdown of
730 ** the application (used for imagectn).
731 **
732 ** Revision 1.10 1999/09/06 13:28:31 meichel
733 ** Enhanced max receive PDU range to 4-128K.
734 **
735 ** Revision 1.9 1999/04/26 17:20:55 meichel
736 ** Added new "transfer syntax aware" variant of the dcmnet function
737 ** ASC_findAcceptedPresentationContextID. This variant tries to find an
738 ** accepted presentation context that matches both abstract and transfer syntax.
739 **
740 ** Revision 1.8 1999/04/21 13:01:23 meichel
741 ** Increased max. number of transfer syntaxes that
742 ** can be managed in an A-ASSOCIATE packet from 25 to 50.
743 **
744 ** Revision 1.7 1999/04/19 08:39:27 meichel
745 ** Added experimental support for extended SOP class negotiation.
746 **
747 ** Revision 1.6 1997/08/05 07:38:08 andreas
748 ** Corrected error in DUL finite state machine
749 ** SCPs shall close sockets after the SCU have closed the socket in
750 ** a normal association release. Therfore, an ARTIM timer is described
751 ** in DICOM part 8 that is not implemented correctly in the
752 ** DUL. Since the whole DUL finite state machine is affected, we
753 ** decided to solve the proble outside the fsm. Now it is necessary to call the
754 ** ASC_DropSCPAssociation() after the calling ASC_acknowledgeRelease().
755 **
756 ** Revision 1.5 1997/07/21 08:40:08 andreas
757 ** - Replace all boolean types (BOOLEAN, CTNBOOLEAN, DICOM_BOOL, BOOL)
758 ** with one unique boolean type OFBool.
759 **
760 ** Revision 1.4 1997/05/05 13:05:53 meichel
761 ** Removed unused constant DICOM_MAXPRESENTATIONCONTEXTS.
762 **
763 ** Revision 1.3 1997/05/05 10:30:08 meichel
764 ** Fixed bugs related to association negotiation in the DICOM upper layer module.
765 ** Added application tests/assctest.cc to examine handling of large A-ASSOCIATE
766 ** PDUs. See CHANGES file for details.
767 **
768 ** Revision 1.2 1996/04/25 16:06:27 hewett
769 ** Replaced declarations of DIC_UL with unsigned long.
770 **
771 ** Revision 1.1.1.1 1996/03/26 18:38:44 hewett
772 ** Initial Release.
773 **
774 **
775 */


Generated on Thu Dec 20 2012 for OFFIS DCMTK Version 3.6.0 by Doxygen 1.8.2