DYT/Tool/3rdParty_x64/include/dcmtk/dcmnet/cond.h
2024-11-22 23:19:31 +08:00

265 lines
16 KiB
C++

/*
*
* Copyright (C) 1994-2012, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmnet
*
* Author: Marco Eichelberg
*
* Purpose: network conditions and helper class
*
*/
#ifndef COND_H
#define COND_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/ofstd/ofconsol.h"
#include "dcmtk/dcmdata/dcerror.h"
#include "dcmtk/dcmnet/dndefine.h"
/* NOTES ON THE CONVERSION OF THE DCMNET MODULE FROM CONDITION TO OFCONDITION
*
* All functions in this module have been adapted to the new OFCondition
* class which - unlike the CONDITION functions - does not create problems
* in multi-threaded code. The following notes explain the major differences
* and modifications needed in client code.
*
* - OFCondition is a class (CONDITION was just a typedef for long). This
* means that switch statements on conditions are not possible anymore.
* Use if/else if/else constructs instead.
*
* - The condition ASC_RELEASECONFIRMED has been removed.
* ASC_releaseAssociation() now returns EC_Normal upon successful completion.
*
* - No translation of error codes that are passed from the DUL module to the
* ASC or DIMSE module is performed anymore. That means that error codes
* such as DUL_PEERABORTEDASSOCIATION or DUL_PEERREQUESTEDRELEASE are now
* passed back to client code instead of their "aliases" with ASC_ or
* DIMSE_ prefix. Macros have been defined to catch most of these cases.
*
* - All normal status codes (DUL_NORMAL, DIMSE_NORMAL, ASC_NORMAL) have been
* mapped to EC_Normal. Macros have also been defined for these identifiers.
*
* - DUL_PEERREQUESTEDRELEASE is now an error code, i.e. unlike prior releases
* SUCCESS(DUL_PEERREQUESTEDRELEASE) is false.
*/
// condition code constants used in the association module
const unsigned short ASCC_BADPRESENTATIONCONTEXTID = 0x101;
const unsigned short ASCC_BADPRESENTATIONCONTEXTPOSITION = 0x102;
const unsigned short ASCC_CODINGERROR = 0x103;
const unsigned short ASCC_DUPLICATEPRESENTATIONCONTEXTID = 0x104;
const unsigned short ASCC_MISSINGTRANSFERSYNTAX = 0x105;
const unsigned short ASCC_NULLKEY = 0x106;
const unsigned short ASCC_SHUTDOWNAPPLICATION = 0x107;
const unsigned short ASCC_USERIDENTIFICATIONFAILED = 0x108;
const unsigned short ASCC_SCPSCUROLESELECTIONFAILED = 0x109;
const unsigned short ASCC_NOPRESENTATIONCONTEXTPROPOSED = 0x110;
// condition constants used in the association module
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_BADPRESENTATIONCONTEXTID; /* Bad presentation context ID */
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_MISSINGTRANSFERSYNTAX; /* Missing transfer syntax */
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_NULLKEY; /* Caller passed in a NULL key */
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_SHUTDOWNAPPLICATION; /* Peer requested application shutdown */
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_USERIDENTIFICATIONFAILED; /* User Identity Negotiation failed */
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_SCPSCUROLESELECTIONFAILED; /* SCP/SCU role selection failed */
extern DCMTK_DCMNET_EXPORT const OFConditionConst ASC_NOPRESENTATIONCONTEXTPROPOSED; /* No presentation context proposed */
// condition code constants used in the DIMSE module
const unsigned short DIMSEC_BADCOMMANDTYPE = 0x201;
const unsigned short DIMSEC_BADDATA = 0x202;
const unsigned short DIMSEC_BADMESSAGE = 0x203;
const unsigned short DIMSEC_BUILDFAILED = 0x204;
const unsigned short DIMSEC_ILLEGALASSOCIATION = 0x205;
const unsigned short DIMSEC_INVALIDPRESENTATIONCONTEXTID = 0x206;
const unsigned short DIMSEC_NODATAAVAILABLE = 0x207;
const unsigned short DIMSEC_NOVALIDPRESENTATIONCONTEXTID = 0x208;
const unsigned short DIMSEC_NULLKEY = 0x209;
const unsigned short DIMSEC_OUTOFRESOURCES = 0x20a;
const unsigned short DIMSEC_PARSEFAILED = 0x20b;
const unsigned short DIMSEC_READPDVFAILED = 0x20c;
const unsigned short DIMSEC_RECEIVEFAILED = 0x20d;
const unsigned short DIMSEC_SENDFAILED = 0x20e;
const unsigned short DIMSEC_UNEXPECTEDPDVTYPE = 0x20f;
const unsigned short DIMSEC_UNEXPECTEDREQUEST = 0x210;
const unsigned short DIMSEC_UNEXPECTEDRESPONSE = 0x211;
const unsigned short DIMSEC_UNSUPPORTEDTRANSFERSYNTAX = 0x212;
const unsigned short DIMSEC_NODATADICT = 0x213;
// condition constants used in the DIMSE module
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_BADCOMMANDTYPE; /* Bad command type */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_BADDATA; /* Inappropriate data for message (send) */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_BADMESSAGE; /* Badly formed message (send) */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_ILLEGALASSOCIATION; /* Caller passed in an illegal association */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_NODATAAVAILABLE; /* No data (timeout in non-blocking mode) */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_NOVALIDPRESENTATIONCONTEXTID; /* No valid presentation context ID */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_NULLKEY; /* Caller passed in a NULL key */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_OUTOFRESOURCES; /* Out of resources */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_PARSEFAILED; /* Failed to parse received message*/
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_READPDVFAILED; /* Read PDV failed */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_RECEIVEFAILED; /* Failed to receive message */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_SENDFAILED; /* Failed to send message */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_UNEXPECTEDPDVTYPE; /* Unexpected PDV type */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DIMSE_NODATADICT; /* Data dictionary missing */
// condition code constants used in the DUL module
const unsigned short DULC_ASSOCIATIONREJECTED = 0x301;
const unsigned short DULC_CODINGERROR = 0x302;
const unsigned short DULC_FSMERROR = 0x303;
const unsigned short DULC_ILLEGALACCEPT = 0x304;
const unsigned short DULC_ILLEGALKEY = 0x305;
const unsigned short DULC_ILLEGALPARAMETER = 0x306;
const unsigned short DULC_ILLEGALPDU = 0x307;
const unsigned short DULC_ILLEGALPDULENGTH = 0x308;
const unsigned short DULC_ILLEGALREJECTREASON = 0x309;
const unsigned short DULC_ILLEGALREJECTRESULT = 0x30a;
const unsigned short DULC_ILLEGALREQUEST = 0x30b;
const unsigned short DULC_ILLEGALSERVICEPARAMETER = 0x30c;
const unsigned short DULC_INCORRECTBUFFERLENGTH = 0x30d;
const unsigned short DULC_INSUFFICIENTBUFFERLENGTH = 0x30e;
const unsigned short DULC_LISTERROR = 0x30f;
const unsigned short DULC_NETWORKCLOSED = 0x310;
// 0x311 was NETWORKINITIALIZED (Network already initialized) in previous releases
const unsigned short DULC_NOASSOCIATIONREQUEST = 0x312;
const unsigned short DULC_NOPDVS = 0x313;
const unsigned short DULC_NULLKEY = 0x314;
const unsigned short DULC_PCTRANSLATIONFAILURE = 0x315;
const unsigned short DULC_PDATAPDUARRIVED = 0x316;
const unsigned short DULC_PEERABORTEDASSOCIATION = 0x317;
const unsigned short DULC_PEERILLEGALXFERSYNTAXCOUNT = 0x318;
const unsigned short DULC_PEERREQUESTEDRELEASE = 0x319;
const unsigned short DULC_READTIMEOUT = 0x31a;
const unsigned short DULC_REQUESTASSOCIATIONFAILED = 0x31b;
const unsigned short DULC_TCPINITERROR = 0x31c;
const unsigned short DULC_TCPIOERROR = 0x31d;
const unsigned short DULC_TLSERROR = 0x31e;
const unsigned short DULC_UNEXPECTEDPDU = 0x31f;
const unsigned short DULC_UNKNOWNHOST = 0x320;
const unsigned short DULC_UNRECOGNIZEDPDUTYPE = 0x321;
const unsigned short DULC_UNSUPPORTEDPEERPROTOCOL = 0x322;
const unsigned short DULC_WRONGDATATYPE = 0x323;
const unsigned short DULC_TCPWRAPPER = 0x324;
const unsigned short DULC_FORKEDCHILD = 0x325;
const unsigned short DULC_CANNOTFORK = 0x326;
const unsigned short DULC_ILLEGALREJECTSOURCE = 0x327;
// condition constants used in the DUL module
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_ASSOCIATIONREJECTED; /* DUL Association Rejected */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_ILLEGALACCEPT; /* Attempt to accept by requestor */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_ILLEGALKEY; /* Illegal key */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_ILLEGALPDU; /* DUL Illegal or ill-formed PDU */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_ILLEGALPDULENGTH; /* DUL Illegal PDU Length */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_ILLEGALREQUEST; /* Attempt to request by acceptor */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_INCORRECTBUFFERLENGTH; /* DUL Incorrect buffer space allocated for data */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_INSUFFICIENTBUFFERLENGTH; /* DUL Insufficient buffer space allocated for data */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_LISTERROR; /* DUL List error */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_NETWORKCLOSED; /* DUL network closed */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_NOASSOCIATIONREQUEST; /* No requests for associations for this server */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_NOPDVS; /* DUL No PDVs available in current buffer */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_NULLKEY; /* NULL key passed to routine */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_PCTRANSLATIONFAILURE; /* DUL Presentation Context translation failure */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_PDATAPDUARRIVED; /* DUL P-Data PDU arrived */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_PEERABORTEDASSOCIATION; /* Peer aborted Association (or never connected) */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_PEERREQUESTEDRELEASE; /* DUL Peer Requested Release */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_READTIMEOUT; /* DUL network read timeout */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_REQUESTASSOCIATIONFAILED; /* Failed to establish association */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_UNEXPECTEDPDU; /* Received unexpected PDU */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_UNSUPPORTEDPEERPROTOCOL; /* DUL Unsupported peer protocol */
extern DCMTK_DCMNET_EXPORT const OFConditionConst DUL_WRONGDATATYPE; /* DUL Wrong Data Type Specified for Request */
// other condition constants used in the network module (codes 1000 to 1023)
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_InvalidSOPClassUID; /* Invalid SOP Class UID */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_UnknownStorageSOPClass; /* Unknown Storage SOP Class */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_InvalidSOPInstanceUID; /* Invalid SOP Instance UID */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_InvalidTransferSyntaxUID; /* Invalid Transfer Syntax UID */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_UnknownTransferSyntax; /* Unknown Transfer Syntax */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_NoPresentationContextsDefined; /* No Presentation Contexts defined */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_NoAcceptablePresentationContexts; /* No acceptable Presentation Contexts */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_NoSOPInstancesToSend; /* No SOP instances to send */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_NoSuchSOPInstance; /* No such SOP instance */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_InvalidDatasetPointer; /* Invalid dataset pointer */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_AlreadyConnected; /* Already connected */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_InsufficientPortPrivileges; /* Insufficient Port Privileges */
// codes 1024 to 1073 are used for the association negotiation profile classes
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_SCPBusy; /* SCP is busy */
extern DCMTK_DCMNET_EXPORT const OFConditionConst NET_EC_CannotStartSCPThread; /* Cannot start SCP thread */
// This macro creates a condition with given code, severity and text.
// Making this a macro instead of a function saves the creation of a temporary.
#define makeDcmnetCondition(A, B, C) makeOFCondition(OFM_dcmnet, (A), (B), (C))
// This macro creates a condition with given code, severity, text, and subcondition.
// This method is intended as a replacement for COND_PushCondition().
// Instead of maintaining a global condition stack (which is difficult
// in multi-threaded applications), the error text of the sub-condition
// is appended to the newly created condition.
// Making this a macro instead of a function saves the creation of a temporary.
#define makeDcmnetSubCondition(A, B, C, D) DimseCondition::push(OFM_dcmnet, (A), (B), (C), (D))
/** helper class with static methods that facilitate the
* migration from the old stack-based condition handling code
* in module dcmnet to the new class based code.
*/
class DCMTK_DCMNET_EXPORT DimseCondition
{
public:
/** Get a string representation for the given condition code
* This method is intended as a replacement for COND_DumpCondition().
* Since no global condition stack exists anymore, the condition
* must be passed to this method.
* @param str string to dump into
* @param cond condition to be dumped
* @return reference to string
*/
static OFString& dump(OFString& str, OFCondition cond);
/** dumps a given condition code to the console.
* This method is intended as a replacement for COND_DumpCondition().
* Since no global condition stack exists anymore, the condition
* must be passed to this method.
* @param cond condition to be dumped
* @param console console to dump to
* @deprecated Please use the other dump() function instead!
*/
static void dump(OFCondition cond, OFConsole& console = ofConsole);
/** creates a new condition from the given parameters and the sub-condition.
* This method is intended as a replacement for COND_PushCondition().
* Instead of maintaining a global condition stack (which is difficult
* in multi-threaded applications), the error text of the sub-condition
* is appended to the newly created condition.
*/
static OFCondition push(
unsigned short aModule,
unsigned short aCode,
OFStatus aStatus,
const char *aText,
OFCondition subCondition);
/** creates a new hierarchical condition from the given condition and sub-condition.
* This method is intended as a replacement for COND_PushCondition().
* Instead of maintaining a global condition stack (which is difficult
* in multi-threaded applications), the error text of the sub-condition
* is appended to the newly created condition.
*/
static OFCondition push(
OFCondition newCondition,
OFCondition subCondition);
};
#endif