292 lines
13 KiB
C
292 lines
13 KiB
C
|
/*
|
||
|
*
|
||
|
* Copyright (C) 1998-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: dcmpstat
|
||
|
*
|
||
|
* Author: Marco Eichelberg
|
||
|
*
|
||
|
* Purpose:
|
||
|
* classes: DVPSPrintMessageHandler
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef DVPSPR_H
|
||
|
#define DVPSPR_H
|
||
|
|
||
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
||
|
#include "dcmtk/dcmpstat/dpdefine.h"
|
||
|
#include "dcmtk/dcmnet/dimse.h"
|
||
|
|
||
|
/** pure abstract event handler class for N-EVENT-REPORT.
|
||
|
*/
|
||
|
|
||
|
class DCMTK_DCMPSTAT_EXPORT DVPSPrintEventHandler
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/// destructor
|
||
|
virtual ~DVPSPrintEventHandler() {}
|
||
|
|
||
|
/** handles an N-EVENT-REPORT-RQ message. This method is called
|
||
|
* from DVPSPrintMessageHandler whenever an event report is received.
|
||
|
* The event message, information and status detail elements must be copied
|
||
|
* if they should remain valid after the end of this method call.
|
||
|
* The event handler can react on the event message in any implementation
|
||
|
* dependent way, e.g. display the event on-screen.
|
||
|
* @param eventMessage the N-EVENT-REPORT-RQ message
|
||
|
* @param eventInformation event information dataset. May be NULL if no event information available.
|
||
|
* @param statusDetail status detail dataset. ay be NULL if no status detail available.
|
||
|
* @return the status code to be sent back as part of the N-EVENT-REPORT-RSP message, usually STATUS_Success.
|
||
|
*/
|
||
|
virtual DIC_US handleEvent(
|
||
|
T_DIMSE_N_EventReportRQ& eventMessage,
|
||
|
DcmDataset *eventInformation,
|
||
|
DcmDataset *statusDetail)=0;
|
||
|
};
|
||
|
|
||
|
/** representation of an association used for DICOM Basic Grayscale Print.
|
||
|
*/
|
||
|
|
||
|
class DCMTK_DCMPSTAT_EXPORT DVPSPrintMessageHandler
|
||
|
{
|
||
|
public:
|
||
|
/// default constructor
|
||
|
DVPSPrintMessageHandler();
|
||
|
|
||
|
/// destructor
|
||
|
virtual ~DVPSPrintMessageHandler();
|
||
|
|
||
|
/** sends an N-CREATE-RQ message and receives response.
|
||
|
* Any event report requests incoming before the expected response message are handled.
|
||
|
* @param sopclassUID the affected SOP class UID, must be one of the supported print classes.
|
||
|
* @param sopinstanceUID the affected SOP instance UID. May be empty in which case the
|
||
|
* UID is assigned by the SCP and returned in this parameter.
|
||
|
* @param attributeListIn the attribute list dataset, may be NULL.
|
||
|
* @param status the response message status code is passed back in this parameter
|
||
|
* if the method returns with success status. Content is undefined otherwise.
|
||
|
* @param attributeListOut a pointer to the attribute list returned by the SCP is passed back
|
||
|
* in this parameter if the method returns with success status. Content is undefined otherwise.
|
||
|
* May return NULL if the SCP has not returned an attribute list. If a DICOM dataset is returned,
|
||
|
* it must be deleted by the caller.
|
||
|
* @return DIMSE_NORMAL if successful (e.g. no protocol failure), an error code otherwise.
|
||
|
*/
|
||
|
OFCondition createRQ(
|
||
|
const char *sopclassUID,
|
||
|
OFString& sopinstanceUID,
|
||
|
DcmDataset *attributeListIn,
|
||
|
Uint16& status,
|
||
|
DcmDataset* &attributeListOut);
|
||
|
|
||
|
/** sends an N-SET-RQ message and receives response.
|
||
|
* Any event report requests incoming before the expected response message are handled.
|
||
|
* @param sopclassUID the requested SOP class UID, must be one of the supported print classes.
|
||
|
* @param sopinstanceUID the requested SOP instance UID
|
||
|
* @param modificationList the modification list dataset, must not be NULL.
|
||
|
* @param status the response message status code is passed back in this parameter
|
||
|
* if the method returns with success status. Content is undefined otherwise.
|
||
|
* @param attributeListOut a pointer to the attribute list returned by the SCP is passed back
|
||
|
* in this parameter if the method returns with success status. Content is undefined otherwise.
|
||
|
* May return NULL if the SCP has not returned an attribute list. If a DICOM dataset is returned,
|
||
|
* it must be deleted by the caller.
|
||
|
* @return DIMSE_NORMAL if successful (e.g. no protocol failure), an error code otherwise.
|
||
|
*/
|
||
|
OFCondition setRQ(
|
||
|
const char *sopclassUID,
|
||
|
const char *sopinstanceUID,
|
||
|
DcmDataset *modificationList,
|
||
|
Uint16& status,
|
||
|
DcmDataset* &attributeListOut);
|
||
|
|
||
|
/** sends an N-GET-RQ message and receives response.
|
||
|
* Any event report requests incoming before the expected response message are handled.
|
||
|
* @param sopclassUID the requested SOP class UID, must be one of the supported print classes.
|
||
|
* @param sopinstanceUID the requested SOP instance UID
|
||
|
* @param attributeIdentifierList the list of DICOM attributes to get, may be NULL.
|
||
|
* The attributes should be coded in pairs along the array (e.g. {g,e,g,e,g,e,...}).
|
||
|
* @param numShorts the number of Uint16 values in the array (not the number of pairs).
|
||
|
* @param status the response message status code is passed back in this parameter
|
||
|
* if the method returns with success status. Content is undefined otherwise.
|
||
|
* @param attributeListOut a pointer to the attribute list returned by the SCP is passed back
|
||
|
* in this parameter if the method returns with success status. Content is undefined otherwise.
|
||
|
* May return NULL if the SCP has not returned an attribute list. If a DICOM dataset is returned,
|
||
|
* it must be deleted by the caller.
|
||
|
* @return DIMSE_NORMAL if successful (e.g. no protocol failure), an error code otherwise.
|
||
|
*/
|
||
|
OFCondition getRQ(
|
||
|
const char *sopclassUID,
|
||
|
const char *sopinstanceUID,
|
||
|
const Uint16 *attributeIdentifierList,
|
||
|
size_t numShorts,
|
||
|
Uint16& status,
|
||
|
DcmDataset* &attributeListOut);
|
||
|
|
||
|
/** sends an N-ACTION-RQ message and receives response.
|
||
|
* Any event report requests incoming before the expected response message are handled.
|
||
|
* @param sopclassUID the requested SOP class UID, must be one of the supported print classes.
|
||
|
* @param sopinstanceUID the requested SOP instance UID
|
||
|
* @param actionTypeID the action type ID
|
||
|
* @param actionInformation the action information dataset, may be NULL.
|
||
|
* @param status the response message status code is passed back in this parameter
|
||
|
* if the method returns with success status. Content is undefined otherwise.
|
||
|
* @param actionReply a pointer to the action reply dataset returned by the SCP is passed back
|
||
|
* in this parameter if the method returns with success status. Content is undefined otherwise.
|
||
|
* May return NULL if the SCP has not returned an attribute list. If a DICOM dataset is returned,
|
||
|
* it must be deleted by the caller.
|
||
|
* @return DIMSE_NORMAL if successful (e.g. no protocol failure), an error code otherwise.
|
||
|
*/
|
||
|
OFCondition actionRQ(
|
||
|
const char *sopclassUID,
|
||
|
const char *sopinstanceUID,
|
||
|
Uint16 actionTypeID,
|
||
|
DcmDataset *actionInformation,
|
||
|
Uint16& status,
|
||
|
DcmDataset* &actionReply);
|
||
|
|
||
|
/** sends an N-DELETE-RQ message and receives response.
|
||
|
* Any event report requests incoming before the expected response message are handled.
|
||
|
* @param sopclassUID the requested SOP class UID, must be one of the supported print classes.
|
||
|
* @param sopinstanceUID the requested SOP instance UID
|
||
|
* @param status the response message status code is passed back in this parameter
|
||
|
* if the method returns with success status. Content is undefined otherwise.
|
||
|
* @return DIMSE_NORMAL if successful (e.g. no protocol failure), an error code otherwise.
|
||
|
*/
|
||
|
OFCondition deleteRQ(
|
||
|
const char *sopclassUID,
|
||
|
const char *sopinstanceUID,
|
||
|
Uint16& status);
|
||
|
|
||
|
/** opens a DICOM association to a remote printer.
|
||
|
* The Basic Grayscale Print Management Meta SOP Class and Presentation LUT SOP Class
|
||
|
* are requested. The association is only accepted if the remote printer supports
|
||
|
* at least the Basic Grayscale Print Management Meta SOP Class.
|
||
|
* @param tlayer transport layer object, may be NULL. If present, a transport
|
||
|
* layer object for TLS transports is expected.
|
||
|
* @param myAEtitle the print client's own application entity title (calling aetitle)
|
||
|
* @param peerAEtitle the printer's called aetitle
|
||
|
* @param peerHost hostname/IP address of the printer
|
||
|
* @param peerPort port number of the printer
|
||
|
* @param peerMaxPDU maximum PDU size to negotiate, must be between 8192 and 65536.
|
||
|
* @param negotiatePresentationLUT if true, Presentation LUT SOP Class is negotiated
|
||
|
* @param negotiateAnnotationBox if true, Basic Annotation Box SOP Class is negotiated
|
||
|
* @param implicitOnly if true, only the default implicit VR transfer syntax is proposed,
|
||
|
* otherwise all uncompressed transfer syntaxes are proposed.
|
||
|
* @return status code that can be checked with the SUCCESS macro. If successful, an association
|
||
|
* is established. If unsuccessful, no association is established.
|
||
|
*/
|
||
|
OFCondition negotiateAssociation(
|
||
|
DcmTransportLayer *tlayer,
|
||
|
const char *myAEtitle,
|
||
|
const char *peerAEtitle,
|
||
|
const char *peerHost,
|
||
|
int peerPort,
|
||
|
long peerMaxPDU,
|
||
|
OFBool negotiatePresentationLUT,
|
||
|
OFBool negotiateAnnotationBox,
|
||
|
OFBool implicitOnly);
|
||
|
|
||
|
/** releases the current association.
|
||
|
* @return ASC_NORMAL or ASC_RELEASECONFIRMED upon success, an error code otherwise.
|
||
|
*/
|
||
|
OFCondition releaseAssociation();
|
||
|
|
||
|
/** aborts the current association.
|
||
|
* @return a status code that can be checked with the SUCCESS() macro.
|
||
|
*/
|
||
|
OFCondition abortAssociation();
|
||
|
|
||
|
/** registers an event handler object for incoming N-EVENT-REPORTs.
|
||
|
* @param handler pointer to the new handler object. May be NULL.
|
||
|
*/
|
||
|
void setEventHandler(DVPSPrintEventHandler *handler) { eventHandler = handler; }
|
||
|
|
||
|
/** sets the blocking and timeout mode for receive operations.
|
||
|
* @param blockMode blocking mode
|
||
|
* @param timeout
|
||
|
*/
|
||
|
void setTimeout(T_DIMSE_BlockingMode blocking, int timeOut) { blockMode=blocking; timeout=timeOut; }
|
||
|
|
||
|
/** checks if the remote printer supports the Presentation LUT SOP class.
|
||
|
* May only be called if association in place.
|
||
|
* @return true if presentation context for presentation LUT exists, false otherwise.
|
||
|
*/
|
||
|
OFBool printerSupportsPresentationLUT();
|
||
|
|
||
|
/** checks if the remote printer supports the Basic Annotation Box SOP class.
|
||
|
* May only be called if association in place.
|
||
|
* @return true if presentation context for Basic Annotation Box exists, false otherwise.
|
||
|
*/
|
||
|
OFBool printerSupportsAnnotationBox();
|
||
|
|
||
|
private:
|
||
|
|
||
|
/// private undefined copy constructor
|
||
|
DVPSPrintMessageHandler(const DVPSPrintMessageHandler& copy);
|
||
|
/// private undefined assignment operator
|
||
|
DVPSPrintMessageHandler& operator=(const DVPSPrintMessageHandler& copy);
|
||
|
|
||
|
/** sends a DIMSE-N request (any type except N-EVENT-REPORT) and waits for a response.
|
||
|
* Any event report requests incoming before the expected DIMSE-N-RSP are handled.
|
||
|
* If an event handler is registered, it is called for each received event report request.
|
||
|
* @param presId presentation context ID
|
||
|
* @param request DIMSE-N request message to be sent. All fields except DataSetType must be filled in.
|
||
|
* @param rqDataSet DICOM dataset to be sent with the request message, e.g. N-Set modification list,
|
||
|
* N-Action action information, or N-Create attribute list. Not applicable to N-Get or N-Delete.
|
||
|
* @param response the received response is passed back in this parameter if the method returns
|
||
|
* with success status. Content is undefined otherwise.
|
||
|
* @param statusDetail the status detail dataset of the received response is passed back in this
|
||
|
* parameter if the method returns with success status. Content is undefined otherwise.
|
||
|
* @param rspDataset the received response dataset is passed back in this
|
||
|
* parameter if the method returns with success status. Content is undefined otherwise.
|
||
|
* @return DIMSE_NORMAL if successful, an error code otherwise.
|
||
|
*/
|
||
|
OFCondition sendNRequest(
|
||
|
T_ASC_PresentationContextID presId,
|
||
|
T_DIMSE_Message &request,
|
||
|
DcmDataset *rqDataSet,
|
||
|
T_DIMSE_Message &response,
|
||
|
DcmDataset* &statusDetail,
|
||
|
DcmDataset* &rspDataset);
|
||
|
|
||
|
/** looks for an accepted presentation context for the given SOP class.
|
||
|
* If the SOP class is one of the Basic Grayscale Print Management Meta classes,
|
||
|
* looks for a presentation context for the meta SOP class.
|
||
|
* @param sopclassuid SOP Class UID for which a presentation context is searched
|
||
|
* @return presentation context if found, 0 otherwise.
|
||
|
*/
|
||
|
T_ASC_PresentationContextID findAcceptedPC(const char *sopclassuid);
|
||
|
|
||
|
/** dumps the given message to the dump stream if it exists.
|
||
|
* @param msg message to be dumped, should be DIMSE-N
|
||
|
* @param dataset option dataset to be dumped, may be NULL
|
||
|
* @param outgoing OFTrue if message is outgoing, OFFalse if incoming.
|
||
|
*/
|
||
|
void dumpNMessage(T_DIMSE_Message &msg, DcmItem *dataset, OFBool outgoing);
|
||
|
|
||
|
/// the association to be used for message communication. Can be NULL.
|
||
|
T_ASC_Association *assoc;
|
||
|
|
||
|
/// the network used for establishing associations. Can be NULL.
|
||
|
T_ASC_Network *net;
|
||
|
|
||
|
/// the current event handler. Can be NULL.
|
||
|
DVPSPrintEventHandler *eventHandler;
|
||
|
|
||
|
/// blocking mode for receive
|
||
|
T_DIMSE_BlockingMode blockMode;
|
||
|
|
||
|
/// timeout for receive
|
||
|
int timeout;
|
||
|
};
|
||
|
|
||
|
#endif
|