DYTSrouce/Tool/3rdParty_x64/include/dcmtk/dcmqrdb/dcmqrcbm.h
2024-11-22 23:19:31 +08:00

183 lines
5.2 KiB
C++

/*
*
* Copyright (C) 1993-2011, 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: dcmqrdb
*
* Author: Marco Eichelberg
*
* Purpose: class DcmQueryRetrieveMoveContext
*
*/
#ifndef DCMQRCBM_H
#define DCMQRCBM_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmnet/dimse.h"
#include "dcmtk/dcmqrdb/qrdefine.h"
class DcmQueryRetrieveDatabaseHandle;
class DcmQueryRetrieveOptions;
class DcmQueryRetrieveConfig;
class DcmQueryRetrieveDatabaseStatus;
/** this class maintains the context information that is passed to the
* callback function called by DIMSE_moveProvider.
*/
class DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveMoveContext
{
public:
/** constructor
* @param handle reference to database handle
* @param options options for the Q/R service
* @param cfg configuration for the Q/R service
* @param priorstatus prior DIMSE status
* @param assoc pointer to DIMSE association
* @param msgid DIMSE message ID
* @param pr DIMSE priority
*/
DcmQueryRetrieveMoveContext(
DcmQueryRetrieveDatabaseHandle& handle,
const DcmQueryRetrieveOptions& options,
const DcmQueryRetrieveConfig *cfg,
DIC_US priorstatus,
T_ASC_Association *assoc,
DIC_US msgid,
T_DIMSE_Priority pr)
: dbHandle(handle)
, options_(options)
, priorStatus(priorstatus)
, origAssoc(assoc)
, subAssoc(NULL)
, config(cfg)
, assocStarted(OFFalse)
, origMsgId(msgid)
// , origAETitle()
// , origHostName()
, priority(pr)
, ourAETitle()
// , dstAETitle()
, failedUIDs(NULL)
, nRemaining(0)
, nCompleted(0)
, nFailed(0)
, nWarning(0)
{
origAETitle[0] = '\0';
origHostName[0] = '\0';
dstAETitle[0] = '\0';
}
/** callback handler called by the DIMSE_storeProvider callback function.
* @param cancelled (in) flag indicating whether a C-CANCEL was received
* @param request original move request (in)
* @param requestIdentifiers original move request identifiers (in)
* @param responseCount move response count (in)
* @param response move response (out)
* @param stDetail status detail for move response (out)
* @param responseIdentifiers move response identifiers (out)
*/
void callbackHandler(
/* in */
OFBool cancelled, T_DIMSE_C_MoveRQ *request,
DcmDataset *requestIdentifiers, int responseCount,
/* out */
T_DIMSE_C_MoveRSP *response, DcmDataset **stDetail,
DcmDataset **responseIdentifiers);
/** set the AEtitle under which this application operates
* @param ae AEtitle, is copied into this object.
*/
void setOurAETitle(const char *ae)
{
if (ae) ourAETitle = ae; else ourAETitle.clear();
}
private:
/// private undefined copy constructor
DcmQueryRetrieveMoveContext(const DcmQueryRetrieveMoveContext& other);
/// private undefined assignment operator
DcmQueryRetrieveMoveContext& operator=(const DcmQueryRetrieveMoveContext& other);
void addFailedUIDInstance(const char *sopInstance);
OFCondition performMoveSubOp(DIC_UI sopClass, DIC_UI sopInstance, char *fname);
OFCondition buildSubAssociation(T_DIMSE_C_MoveRQ *request);
OFCondition closeSubAssociation();
void moveNextImage(DcmQueryRetrieveDatabaseStatus * dbStatus);
void failAllSubOperations(DcmQueryRetrieveDatabaseStatus * dbStatus);
void buildFailedInstanceList(DcmDataset ** rspIds);
OFBool mapMoveDestination(
const char *origPeer, const char *origAE,
const char *dstAE, char *dstPeer, int *dstPort);
OFCondition addAllStoragePresentationContexts(T_ASC_Parameters *params);
/// reference to database handle
DcmQueryRetrieveDatabaseHandle& dbHandle;
/// reference to Q/R service options
const DcmQueryRetrieveOptions& options_;
/// prior DIMSE status
DIC_US priorStatus;
/// pointer to original association on which the C-MOVE-RQ was received
T_ASC_Association *origAssoc; /* association of requestor */
/// pointer to sub-association for outgoing C-STORE-RQ
T_ASC_Association *subAssoc; /* sub-association */
/// pointer to Q/R configuration
const DcmQueryRetrieveConfig *config;
/// true if the association was started
OFBool assocStarted;
/// message id of request
DIC_US origMsgId;
/// title of requestor
DIC_AE origAETitle;
/// hostname of move requestor
DIC_NODENAME origHostName;
/// priority of move request
T_DIMSE_Priority priority;
/// our current title
OFString ourAETitle;
/// destination title for move
DIC_AE dstAETitle;
/// instance UIDs of failed store sub-ops
char *failedUIDs;
/// number of remaining sub-operations
DIC_US nRemaining;
/// number of completed sub-operations
DIC_US nCompleted;
/// number of failed sub-operations
DIC_US nFailed;
/// number of completed sub-operations that causes warnings
DIC_US nWarning;
};
#endif