12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "ctkDICOMFindContext.h"
- #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
- #include "dcmtk/dcmqrdb/dcmqrcbf.h"
- #include "dcmtk/dcmqrdb/dcmqrcnf.h"
- #include "dcmtk/dcmdata/dcdeftag.h"
- #include "dcmtk/dcmqrdb/dcmqropt.h"
- #include "dcmtk/dcmnet/diutil.h"
- #include "dcmtk/dcmdata/dcfilefo.h"
- #include "dcmtk/dcmqrdb/dcmqrdbs.h"
- #include "dcmtk/dcmqrdb/dcmqrdbi.h"
- // CTK includes
- #include "ctkLogger.h"
- static ctkLogger logger ("org.commontk.dicom.DcmFindContext");
- //------------------------------------------------------------------------------
- ctkDICOMFindContext::ctkDICOMFindContext(DIC_US priorStat, QObject* parent):
- QObject(parent),
- priorStatus(priorStat),
- ourAETitle()
- {
- }
- //------------------------------------------------------------------------------
- void ctkDICOMFindContext::callbackHandler(
- /* in */
- OFBool cancelled, T_DIMSE_C_FindRQ *request,
- DcmDataset *requestIdentifiers, int responseCount,
- /* out */
- T_DIMSE_C_FindRSP *response,
- DcmDataset **responseIdentifiers,
- DcmDataset **stDetail)
- {
- OFCondition dbcond = EC_Normal;
- DcmQueryRetrieveDatabaseStatus dbStatus(priorStatus);
- if (responseCount == 1) {
- /* start the database search */
- DCMQRDB_INFO("Find SCP Request Identifiers:" << OFendl << DcmObject::PrintHelper(*requestIdentifiers));
- dbcond = this->startFindRequest(
- request->AffectedSOPClassUID, requestIdentifiers, &dbStatus);
- if (dbcond.bad()) {
- DCMQRDB_ERROR("findSCP: Database: startFindRequest Failed ("
- << DU_cfindStatusString(dbStatus.status()) << "):");
- }
- }
- /* only cancel if we have pending responses */
- if (cancelled && DICOM_PENDING_STATUS(dbStatus.status())) {
- this->cancelFindRequest(&dbStatus);
- }
- if (DICOM_PENDING_STATUS(dbStatus.status())) {
- dbcond = this->nextFindResponse(responseIdentifiers, &dbStatus);
- if (dbcond.bad()) {
- DCMQRDB_ERROR("findSCP: Database: nextFindResponse Failed ("
- << DU_cfindStatusString(dbStatus.status()) << "):");
- }
- }
- if (*responseIdentifiers != NULL)
- {
- if (! DU_putStringDOElement(*responseIdentifiers, DCM_RetrieveAETitle, ourAETitle.c_str())) {
- DCMQRDB_ERROR("DO: adding Retrieve AE Title");
- }
- }
- /* set response status */
- response->DimseStatus = dbStatus.status();
- *stDetail = dbStatus.extractStatusDetail();
- OFString str;
- logger.info(QString("Find SCP Response ") + QString::number(responseCount)
- + "[status:" + DU_cfindStatusString(dbStatus.status()) + "]");
- DIMSE_dumpMessage(str, *response, DIMSE_OUTGOING);
- logger.debug(str.c_str());
- if (DICOM_PENDING_STATUS(dbStatus.status()) && (*responseIdentifiers != NULL))
- //DCMQRDB_DEBUG("Find SCP Response Identifiers:" << OFendl << DcmObject::PrintHelper(**responseIdentifiers));
- if (*stDetail)
- //DCMQRDB_DEBUG(" Status detail:" << OFendl << DcmObject::PrintHelper(**stDetail));
- this->priorStatus = dbStatus.status();
- }
|