SVG5/SDCMSendImpl.h
2025-10-12 13:55:56 +09:00

172 lines
5.5 KiB
C++

#pragma once
#ifdef UNICODE
#undef UNICODE
#undef _UNICODE
#define UNICODE_DEFINED
#endif
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/ofstd/ofcond.h" /* for class OFCondition */
#include "dcmtk/dcmdata/dcxfer.h" /* for E_TransferSyntax */
#include "dcmtk/dcmnet/dimse.h" /* for T_DIMSE_BlockingMode */
#include "dcmtk/dcmnet/dcasccfg.h"
#include "dcmtk/ofstd/ofcmdln.h"
#include "csdcm.h"
//#include "SDCMNetBase.h"
#include "SCallback.h"
#ifdef UNICODE_DEFINED
#define UNICODE
#define _UNICODE
#undef UNICODE_DEFINED
#endif
typedef enum _SNETWORK_CONNECTION
{
SCONNECT_NORMAL = 0,
SCONNECT_TLS
}SNETWORK_CONNECTION, *PSNETWORK_CONNECTION;
typedef enum _SNETWORK_BLOCK_MODE
{
SNETWORK_BLOCKING = 0,
SNETWORK_NONBLOCKING
}SNETWORK_BLOCK_MODE, *PSNETWORK_BLOCK_MODE;
class CSDCMSendImpl
{
public:
CSDCMSendImpl();
virtual ~CSDCMSendImpl();
virtual void Stop();
OFCondition DIMSE_storeUser(
T_ASC_Association *assoc, T_ASC_PresentationContextID presId,
T_DIMSE_C_StoreRQ *request,
const char *imageFileName, DcmDataset *imageDataSet,
DIMSE_StoreUserCallback callback, void *callbackData,
T_DIMSE_BlockingMode blockMode, int timeout,
T_DIMSE_C_StoreRSP *response,
DcmDataset **statusDetail,
T_DIMSE_DetectedCancelParameters *checkForCancelParams,
long imageFileTotalBytes);
OFCondition
DIMSE_sendMessage(
T_ASC_Association *assoc,
T_ASC_PresentationContextID presID,
T_DIMSE_Message *msg,
DcmDataset *statusDetail,
DcmDataset *dataObject,
const char *dataFileName,
DIMSE_ProgressCallback callback,
void *callbackContext,
DcmDataset **commandSet);
void SetAETitle(OFString strAETitle);
void SetServerInfo(OFString strServerAETitle, OFString strClientAETitle, OFString strIP, int nPort, int nConnectionType=SCONNECT_NORMAL, int nBlockingMethod=SNETWORK_BLOCKING);
void SetServerInfo(QString strServerAETitle, QString strClientAETitle, QString strIP, int nPort, int nConnectionType=SCONNECT_NORMAL, int nBlockingMethod=SNETWORK_BLOCKING);
int InitNetwork(OFString strServerAETitle, OFString strClientAETitle, OFString strHostIP, int nPort, int nConnectType=SCONNECT_NORMAL, int nBlock=SNETWORK_BLOCKING, int nTimeoutDIMSE=0, int nTimeoutACSE=0, E_TransferSyntax networkTransferSyntax = EXS_Unknown);
//int Send(CSThread* pCallbackThread, int nTimeoutDIMSE=0, int nTimeoutACSE=0, E_TransferSyntax networkTransferSyntax = EXS_Unknown);
vector<QString> Send(CSCallback* pCallback, int nTimeoutDIMSE = -1, int nTimeoutACSE = -1, E_TransferSyntax networkTransferSyntax = EXS_Unknown);
void AddImageFilename(OFString strFilename);
void AddMpegFilename(OFString strFilename);
void ClearFileList();
void ClearImageFileList();
void ClearMpegFileList();
OFBool IsaListMember(OFList<OFString> &lst, OFString &s);
OFCondition AddStoragePresentationContexts(T_ASC_Parameters *params, OFList<OFString> &sopClasses);
OFCondition AddPresentationContext(T_ASC_Parameters *params, int presentationContextId, const OFString &abstractSyntax, const OFString &transferSyntax, T_ASC_SC_ROLE proposedRole = ASC_SC_ROLE_DEFAULT);
OFCondition AddPresentationContext(T_ASC_Parameters *params, int presentationContextId, const OFString &abstractSyntax, const OFList<OFString> &transferSyntaxList, T_ASC_SC_ROLE proposedRole = ASC_SC_ROLE_DEFAULT);
OFCondition CheckUserIdentityResponse(T_ASC_Parameters *params);
OFCondition cstore(T_ASC_Association *assoc, const OFString &fname);
OFCondition storeSCU(T_ASC_Association *assoc, const char *fname);
void ReplaceSOPInstanceInformation(DcmDataset *dataset);
OFBool FindSOPClassAndInstanceInFile(const char *fname, char *sopClass, char *sopInstance);
static void ProgressCallback(void * callbackData, T_DIMSE_StoreProgress *progress, T_DIMSE_C_StoreRQ * req);
void SetCurrentFilenameList(int nCurrent=0); // 0:NULL, 1:Image, 2:Mpeg
int GetImageFileCount();
int GetMpegFileCount();
void SetLogLevel(int nLevel);
OFLogger* GetLogger();
protected:
OFLogger* m_pLoggerStoreSCU;
CSCallback* m_pCallback;
//CSDCMNetBase* m_pNetClass;
//CSThread* m_pCallbackThread;
OFString m_strHostIP;
OFString m_strAETitle;
OFString m_strServerAETitle;
int m_nPort;
SNETWORK_CONNECTION m_ConnectType;
SNETWORK_BLOCK_MODE m_BlockMode;
E_TransferSyntax m_NetworkTransferSyntax;
OFList<OFString> m_ImageFileNameList;
OFList<OFString> m_MpegFileNameList;
OFList<OFString>* m_pCurrentFileNameList;
T_ASC_UserIdentityNegotiationMode m_IdentMode;
OFBool m_bIdentResponse;
OFBool m_bProposeOnlyRequiredPresentationContexts;
OFBool m_bCombineProposedTransferSyntaxes;
int m_nTimeoutACSE;
int m_nTimeoutDIMSE;
OFCmdUnsignedInt m_nMaxReceivePDULength;
T_ASC_Network* m_pNetwork;
T_ASC_Parameters* m_pNetworkParams;
DIC_NODENAME m_LocalHost;
DIC_NODENAME m_PeerHost;
T_ASC_Association* m_pAssoc;
DcmAssociationConfiguration m_pAssocConfig; // handler for association configuration profiles
int m_nRepeatCount;
OFBool m_bHaltOnUnsuccessfulStore;
OFBool m_bUnsuccessfulStoreEncountered;
E_FileReadMode m_ReadMode;
OFBool m_bInventSOPInstanceInformation;
OFBool m_bCorrectUIDPadding;
T_DIMSE_BlockingMode m_DIMSEBlockMode;
int m_nLastStatusCode;
bool m_bAbortAssociation;
vector<QString> OnDCMSend();
};