Add thirdparty dir.

This commit is contained in:
Krad
2022-07-08 10:04:23 +08:00
parent 36f854dadc
commit 3e9f4a7b75
14 changed files with 3082 additions and 1 deletions

87
thirdparty/dcm_network/dcm_find.h vendored Normal file
View File

@@ -0,0 +1,87 @@
#ifndef _DCM_FIND_H_
#define _DCM_FIND_H_
#include "internal/dcm_global.h"
#include "internal/dcm_type.h"
#include "internal/dcmtk_headers.h"
#include <list>
// this class is awkward, since even it make you a little happy to do with DCMTK, but you still need to
// deal with DCMTK type.
// For a whole wrapper, really a big project.
// Inherit this class for custom callback handler
class _DCM_EXPORT dcm_cfind_callback : public DcmFindSCUCallback
{
public:
dcm_cfind_callback();
dcm_cfind_callback(DcmFindSCUExtractMode extractResponse, int cancelAfterNResponse, const char *outputDirectory = NULL);
virtual ~dcm_cfind_callback() {};
virtual void callback(T_DIMSE_C_FindRQ *request, int &responseCount, T_DIMSE_C_FindRSP *rsp, DcmDataset *responseIdentifiers);
std::string get_outputdir();
// verify whether the dir exists and writable
bool verify();
private:
DcmFindSCUExtractMode extractResponse_;
int cancelAfterNReponses_;
std::string outputDirectory_;
};
//only support find filter passed in, not files.
class _DCM_EXPORT dcm_cfind
{
public:
//dcm_cfind();
dcm_cfind(const char *peerIp, unsigned long peerPort, const char *peerTitle, const char *ourTile);
~dcm_cfind();
void set_asce_timeout(int timeout);
void set_dimse_timeout(int timeout);
void set_max_received_pdu_lenght(unsigned long length);
void set_find_callback(dcm_cfind_callback *callback);
// the query condition will contains as much as information, handle it in your custom callback
int find_by_patient_id(std::string patient_id);
int find_by_patient_id_and_date(std::string patient_id, std::string startdate, std::string enddate);
int find_by_patient_name(std::string patient_name);
int find_by_patient_name_and_date(std::string patient_name, std::string startdate, std::string enddate);
int find_by_accession_no(std::string accession_no);
int find_by_accession_no_and_date(std::string accession_no, std::string startdate, std::string enddate);
int find_by_study_uid(std::string study_uid);
int find_by_series_uid(std::string study_uid);
int find_by_series_uid(std::string study_uid, std::string series_uid);
// worklist related
int find_by_timeinterval(std::string startDate, std::string endDate);
private:
OFCondition docfind();
void initQueryInfo();
private:
std::list<std::string> fileNameList;
bool abortAssociation;
const char * abstractSyntax;
int acse_timeout;
T_DIMSE_BlockingMode blockMode;
//signed long cancelAfterNResponse;
int dimse_timeout;
//DcmFindSCUExtractMode extractResponse;
//std::string extractXMLFileName;
//std::string outputDirectory;
unsigned long maxReceivePDULength;
E_TransferSyntax networkTransferSyntax;
const char * ourTitle_;
const char * peerIp_;
const char * peerTitle_;
unsigned long peerPort_;
unsigned long repeatCount;
std::list<std::string> overrideKeys;
dcm_cfind_callback *cfind_callback;
};
#endif // _DCM_FIND_H_