20 #define QT_NO_CAST_TO_ASCII 23 #include "dcmtk/dcmtls/tlstrans.h" 24 #include "dcmtk/dcmtls/tlslayer.h" 97 d->
maxPDU = ASC_DEFAULTMAXPDU;
155 if ( this->isRunning() ) {
156 ASC_dropNetwork ( &d->
net );
163 d->
step = ( int ) ( 100.0 / d->
series.size() );
166 for (
int i = 0; i < d->
series.size(); i++ ) {
168 const QDir serieDir ( d->
outputDir + QDir::separator() + d->
series.at ( i ) );
170 if ( !serieDir.exists() ) {
196 { UID_FINDPatientRootQueryRetrieveInformationModel,
197 UID_MOVEPatientRootQueryRetrieveInformationModel },
198 { UID_FINDStudyRootQueryRetrieveInformationModel,
199 UID_MOVEStudyRootQueryRetrieveInformationModel },
200 { UID_RETIRED_FINDPatientStudyOnlyQueryRetrieveInformationModel,
201 UID_RETIRED_MOVEPatientStudyOnlyQueryRetrieveInformationModel }
207 this->
addOverrideKey ( QString (
"QueryRetrieveLevel=" ) + QString (
"" "SERIES" "" ) );
211 this->
addOverrideKey ( QString (
"QueryRetrieveLevel=" ) + QString (
"" "IMAGE" "" ) );
218 qDebug() <<
"Cannot create network: " << DimseCondition::dump ( temp_str, cond ).c_str();
222 cond = ASC_createAssociationParameters ( &d->
params, d->
maxPDU );
225 qDebug() <<
"Cannot create association: " << DimseCondition::dump ( temp_str, cond ).c_str();
229 ASC_setAPTitles ( d->
params,
234 ASC_setPresentationAddresses ( d->
params,
242 qDebug() <<
"Wrong presentation context:" << DimseCondition::dump ( temp_str, cond ).c_str();
243 T_ASC_RejectParameters rej;
244 ASC_getRejectParameters ( d->
params, &rej );
245 ASC_printRejectParameters ( temp_str, &rej );
247 ASC_dropNetwork ( &d->
net );
254 if ( cond == DUL_ASSOCIATIONREJECTED ) {
255 T_ASC_RejectParameters rej;
256 ASC_getRejectParameters ( d->
params, &rej );
257 ASC_printRejectParameters ( temp_str, &rej );
260 qDebug() <<
"Association Request Failed:" << DimseCondition::dump ( temp_str,cond ).c_str();
263 ASC_abortAssociation ( d->
assoc );
264 ASC_dropNetwork ( &d->
net );
266 qDebug() <<
"Association Rejected:" << QString ( temp_str.c_str() );
270 if ( ASC_countAcceptedPresentationContexts ( d->
params ) == 0 ) {
271 qDebug() <<
"No Acceptable Presentation Contexts";
273 ASC_abortAssociation ( d->
assoc );
274 ASC_dropNetwork ( &d->
net );
284 this->
addOverrideKey ( QString (
"QueryRetrieveLevel=" ) + QString (
"" "STUDY" "" ) );
286 if ( cond == EC_Normal ) {
288 qDebug() <<
"Aborting Association";
289 cond = ASC_abortAssociation ( d->
assoc );
290 ASC_dropNetwork ( &d->
net );
293 qDebug() <<
"Association Abort Failed: " << DimseCondition::dump ( temp_str,cond ).c_str();
299 qDebug() <<
"Releasing Association";
301 cond = ASC_dropNetwork ( &d->
net );
303 qDebug() <<
"Drop Network Failed:" << DimseCondition::dump ( temp_str,cond ).c_str();
308 else if ( cond == DUL_PEERREQUESTEDRELEASE ) {
309 qDebug() <<
"Protocol Error: Peer requested release (Aborting)";
310 cond = ASC_abortAssociation ( d->
assoc );
311 ASC_dropNetwork ( &d->
net );
314 qDebug() <<
"Association Abort Failed: " << DimseCondition::dump ( temp_str,cond ).c_str();
320 else if ( cond == DUL_PEERABORTEDASSOCIATION ) {
321 qDebug() <<
"Peer Aborted Association";
322 ASC_abortAssociation ( d->
assoc );
323 ASC_dropNetwork ( &d->
net );
328 qDebug() <<
"Move SCU Failed: Aborting Association";
329 cond = ASC_abortAssociation ( d->
assoc );
330 ASC_dropNetwork ( &d->
net );
333 qDebug() <<
"Association Abort Failed: " << DimseCondition::dump ( temp_str,cond ).c_str();
344 unsigned int g = 0xffff;
345 unsigned int e = 0xffff;
347 OFString dicName, valStr;
352 OFString toParse(key.toLatin1().data());
353 n = sscanf ( key.toLatin1().data(),
"%x,%x=", &g, &e );
355 size_t eqPos = toParse.find (
'=' );
359 if ( eqPos != OFString_npos ) {
360 dicName = toParse.substr ( 0, eqPos ).c_str();
361 valStr = toParse.substr ( eqPos + 1, toParse.length() );
365 dicName = key.toLatin1().data();
369 DcmTagKey key ( 0xffff, 0xffff );
370 const DcmDataDictionary& globalDataDict = dcmDataDict.rdlock();
371 const DcmDictEntry *dicent = globalDataDict.findEntry ( dicName.c_str() );
373 dcmDataDict.unlock();
375 if ( dicent != NULL ) {
377 key = dicent->getKey();
379 e = key.getElement();
383 msg =
"bad key format or dictionary name not found in dictionary: ";
385 qDebug() << QString ( msg.c_str() );
389 if ( eqPos != OFString_npos )
390 valStr = toParse.substr ( eqPos + 1, toParse.length() );
394 if ( tag.error() != EC_Normal ) {
395 sprintf ( msg2,
"unknown tag: (%04x,%04x)", g, e );
396 qDebug() << QString ( msg2 );
399 DcmElement *elem = newDicomElement ( tag );
400 if ( elem == NULL ) {
401 sprintf ( msg2,
"cannot create element for tag: (%04x,%04x)", g, e );
402 qDebug() << QString ( msg2 );
405 if ( valStr.length() > 0 ) {
406 if ( elem->putString ( valStr.c_str() ).bad() ) {
407 sprintf ( msg2,
"cannot put tag value: (%04x,%04x)=\"", g, e );
411 qDebug() << QString ( msg.c_str() );
416 sprintf ( msg2,
"cannot insert tag: (%04x,%04x)", g, e );
417 qDebug() << QString ( msg2 );
423 const char* transferSyntaxes[] = { NULL, NULL, NULL };
424 int numTransferSyntaxes = 0;
426 switch ( preferredTransferSyntax )
428 case EXS_LittleEndianImplicit:
430 transferSyntaxes[0] = UID_LittleEndianImplicitTransferSyntax;
431 numTransferSyntaxes = 1;
434 case EXS_LittleEndianExplicit:
436 transferSyntaxes[0] = UID_LittleEndianExplicitTransferSyntax;
437 transferSyntaxes[1] = UID_BigEndianExplicitTransferSyntax;
438 transferSyntaxes[2] = UID_LittleEndianImplicitTransferSyntax;
439 numTransferSyntaxes = 3;
442 case EXS_BigEndianExplicit:
444 transferSyntaxes[0] = UID_BigEndianExplicitTransferSyntax;
445 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
446 transferSyntaxes[2] = UID_LittleEndianImplicitTransferSyntax;
447 numTransferSyntaxes = 3;
456 if ( gLocalByteOrder == EBO_LittleEndian ) {
457 transferSyntaxes[0] = UID_LittleEndianExplicitTransferSyntax;
458 transferSyntaxes[1] = UID_BigEndianExplicitTransferSyntax;
461 transferSyntaxes[0] = UID_BigEndianExplicitTransferSyntax;
462 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
465 transferSyntaxes[2] = UID_LittleEndianImplicitTransferSyntax;
467 numTransferSyntaxes = 3;
471 return ASC_addPresentationContext (
472 params, pid, abstractSyntax,
473 transferSyntaxes, numTransferSyntaxes );
478 const char* knownAbstractSyntaxes[] = { UID_VerificationSOPClass };
479 const char* transferSyntaxes[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
480 int numTransferSyntaxes;
482 OFCondition cond = ASC_receiveAssociation ( aNet, assoc, ASC_DEFAULTMAXPDU );
485 switch ( EXS_Unknown ) {
487 case EXS_LittleEndianImplicit:
489 transferSyntaxes[0] = UID_LittleEndianImplicitTransferSyntax;
490 numTransferSyntaxes = 1;
493 case EXS_LittleEndianExplicit:
495 transferSyntaxes[0] = UID_LittleEndianExplicitTransferSyntax;
496 transferSyntaxes[1] = UID_BigEndianExplicitTransferSyntax;
497 transferSyntaxes[2] = UID_LittleEndianImplicitTransferSyntax;
498 numTransferSyntaxes = 3;
501 case EXS_BigEndianExplicit:
503 transferSyntaxes[0] = UID_BigEndianExplicitTransferSyntax;
504 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
505 transferSyntaxes[2] = UID_LittleEndianImplicitTransferSyntax;
506 numTransferSyntaxes = 3;
509 case EXS_JPEGProcess14SV1:
511 transferSyntaxes[0] = UID_JPEGProcess14SV1TransferSyntax;
512 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
513 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
514 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
515 numTransferSyntaxes = 4;
518 case EXS_JPEGProcess1:
520 transferSyntaxes[0] = UID_JPEGProcess1TransferSyntax;
521 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
522 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
523 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
524 numTransferSyntaxes = 4;
527 case EXS_JPEGProcess2_4:
529 transferSyntaxes[0] = UID_JPEGProcess2_4TransferSyntax;
530 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
531 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
532 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
533 numTransferSyntaxes = 4;
536 case EXS_JPEG2000LosslessOnly:
538 transferSyntaxes[0] = UID_JPEG2000LosslessOnlyTransferSyntax;
539 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
540 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
541 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
542 numTransferSyntaxes = 4;
547 transferSyntaxes[0] = UID_JPEG2000TransferSyntax;
548 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
549 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
550 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
551 numTransferSyntaxes = 4;
554 case EXS_JPEGLSLossless:
556 transferSyntaxes[0] = UID_JPEGLSLosslessTransferSyntax;
557 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
558 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
559 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
560 numTransferSyntaxes = 4;
563 case EXS_JPEGLSLossy:
565 transferSyntaxes[0] = UID_JPEGLSLossyTransferSyntax;
566 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
567 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
568 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
569 numTransferSyntaxes = 4;
572 case EXS_MPEG2MainProfileAtMainLevel:
574 transferSyntaxes[0] = UID_MPEG2MainProfileAtMainLevelTransferSyntax;
575 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
576 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
577 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
578 numTransferSyntaxes = 4;
581 case EXS_RLELossless:
583 transferSyntaxes[0] = UID_RLELosslessTransferSyntax;
584 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
585 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
586 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
587 numTransferSyntaxes = 4;
591 case EXS_DeflatedLittleEndianExplicit:
593 transferSyntaxes[0] = UID_DeflatedExplicitVRLittleEndianTransferSyntax;
594 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
595 transferSyntaxes[2] = UID_BigEndianExplicitTransferSyntax;
596 transferSyntaxes[3] = UID_LittleEndianImplicitTransferSyntax;
597 numTransferSyntaxes = 4;
605 transferSyntaxes[0] = UID_JPEG2000TransferSyntax;
606 transferSyntaxes[1] = UID_JPEG2000LosslessOnlyTransferSyntax;
607 transferSyntaxes[2] = UID_JPEGProcess2_4TransferSyntax;
608 transferSyntaxes[3] = UID_JPEGProcess1TransferSyntax;
609 transferSyntaxes[4] = UID_JPEGProcess14SV1TransferSyntax;
610 transferSyntaxes[5] = UID_JPEGLSLossyTransferSyntax;
611 transferSyntaxes[6] = UID_JPEGLSLosslessTransferSyntax;
612 transferSyntaxes[7] = UID_RLELosslessTransferSyntax;
613 transferSyntaxes[8] = UID_MPEG2MainProfileAtMainLevelTransferSyntax;
614 transferSyntaxes[9] = UID_DeflatedExplicitVRLittleEndianTransferSyntax;
616 if ( gLocalByteOrder == EBO_LittleEndian ) {
617 transferSyntaxes[10] = UID_LittleEndianExplicitTransferSyntax;
618 transferSyntaxes[11] = UID_BigEndianExplicitTransferSyntax;
621 transferSyntaxes[10] = UID_BigEndianExplicitTransferSyntax;
622 transferSyntaxes[11] = UID_LittleEndianExplicitTransferSyntax;
625 transferSyntaxes[12] = UID_LittleEndianImplicitTransferSyntax;
627 numTransferSyntaxes = 13;
634 if ( gLocalByteOrder == EBO_LittleEndian ) {
635 transferSyntaxes[0] = UID_LittleEndianExplicitTransferSyntax;
636 transferSyntaxes[1] = UID_BigEndianExplicitTransferSyntax;
639 transferSyntaxes[0] = UID_BigEndianExplicitTransferSyntax;
640 transferSyntaxes[1] = UID_LittleEndianExplicitTransferSyntax;
643 transferSyntaxes[2] = UID_LittleEndianImplicitTransferSyntax;
645 numTransferSyntaxes = 3;
653 cond = ASC_acceptContextsWithPreferredTransferSyntaxes (
655 knownAbstractSyntaxes, DIM_OF ( knownAbstractSyntaxes ),
656 transferSyntaxes, numTransferSyntaxes );
660 cond = ASC_acceptContextsWithPreferredTransferSyntaxes (
662 dcmAllStorageSOPClassUIDs, numberOfAllDcmStorageSOPClassUIDs,
663 transferSyntaxes, numTransferSyntaxes );
667 if ( cond.good() ) cond = ASC_acknowledgeAssociation ( *assoc );
670 ASC_dropAssociation ( *assoc );
671 ASC_destroyAssociation ( assoc );
677 OFCondition
QtDcmMoveScu::echoSCP ( T_ASC_Association * assoc, T_DIMSE_Message * msg, T_ASC_PresentationContextID presID )
679 OFCondition cond = DIMSE_sendEchoResponse ( assoc, presID, &msg->msg.CEchoRQ, STATUS_Success, NULL );
682 qDebug() <<
"Echo SCP Failed";
688 OFCondition
QtDcmMoveScu::storeSCP ( T_ASC_Association *assoc, T_DIMSE_Message *msg, T_ASC_PresentationContextID presID,
void* subOpCallbackData )
692 qWarning() <<
"Cannot cast caller";
693 return EC_IllegalCall;
696 OFCondition cond = EC_Normal;
697 T_DIMSE_C_StoreRQ *req;
698 char imageFile[2048];
700 req = &msg->msg.CStoreRQ;
704 tmpnam ( imageFile );
706 strcpy ( imageFile, NULL_DEVICE_NAME );
710 sprintf ( imageFile,
"%s.%s",
711 dcmSOPClassUIDToModality ( req->AffectedSOPClassUID ),
712 req->AffectedSOPInstanceUID );
715 self->d->assoc = assoc;
717 self->d->imageFile = imageFile;
719 self->d->file = &dcmff;
723 if ( assoc && assoc->params ) {
724 const char *aet = assoc->params->DULparams.callingAPTitle;
726 if ( aet ) dcmff.getMetaInfo()->putAndInsertString ( DCM_SourceApplicationEntityTitle, aet );
729 DcmDataset *dset = dcmff.getDataset();
732 cond = DIMSE_storeProvider ( assoc, presID, req, imageFile, OFFalse,
736 cond = DIMSE_storeProvider ( assoc, presID, req, (
char * ) NULL, OFFalse,
743 void QtDcmMoveScu::storeSCPCallback (
void *callbackData, T_DIMSE_StoreProgress *progress, T_DIMSE_C_StoreRQ *req,
char *imageFile, DcmDataset **imageDataSet, T_DIMSE_C_StoreRSP *rsp, DcmDataset **statusDetail )
747 qWarning() <<
"Cannot cast caller";
754 if ( progress->state == DIMSE_StoreEnd ) {
755 *statusDetail = NULL;
756 if ( ( imageDataSet != NULL ) && ( *imageDataSet != NULL ) && !self->d->bitPreserving && !self->d->ignore ) {
759 OFStandard::combineDirAndFilename ( ofname, self->d->outputDirectory, self->d->imageFile, OFTrue );
761 E_TransferSyntax xfer =
self->d->writeTransferSyntax;
763 if ( xfer == EXS_Unknown ) xfer = ( *imageDataSet )->getOriginalXfer();
765 OFCondition cond =
self->d->file->saveFile ( ofname.c_str(), xfer,
self->d->sequenceType,
self->d->groupLength,
766 self->d->paddingType, OFstatic_cast ( Uint32, self->d->filepad ), OFstatic_cast ( Uint32, self->d->itempad ),
767 (
self->d->useMetaheader ) ? EWM_fileformat : EWM_dataset );
769 if ( QFile ( ofname.c_str() ).exists() ) {
770 emit
self->previewSlice ( QString ( ofname.c_str() ) );
773 if ( ( rsp->DimseStatus == STATUS_Success ) && !
self->d->ignore ) {
775 if ( !DU_findSOPClassAndInstanceInDataSet ( *imageDataSet, sopClass, sopInstance, self->d->correctUIDPadding ) ) {
776 rsp->DimseStatus = STATUS_STORE_Error_CannotUnderstand;
778 else if ( strcmp ( sopClass, req->AffectedSOPClassUID ) != 0 ) {
779 rsp->DimseStatus = STATUS_STORE_Error_DataSetDoesNotMatchSOPClass;
781 else if ( strcmp ( sopInstance, req->AffectedSOPInstanceUID ) != 0 ) {
782 rsp->DimseStatus = STATUS_STORE_Error_DataSetDoesNotMatchSOPClass;
794 T_ASC_PresentationContextID presID;
796 if ( !ASC_dataWaiting ( *subAssoc, 0 ) ) {
797 return DIMSE_NODATAAVAILABLE;
800 OFCondition cond = DIMSE_receiveCommand ( *subAssoc, DIMSE_BLOCKING, 0, &presID, &msg, NULL );
802 if ( cond == EC_Normal ) {
803 switch ( msg.CommandField )
805 case DIMSE_C_STORE_RQ:
806 cond =
storeSCP ( *subAssoc, &msg, presID, subOpCallbackData );
809 case DIMSE_C_ECHO_RQ:
810 cond =
echoSCP ( *subAssoc, &msg, presID );
814 cond = DIMSE_BADCOMMANDTYPE;
820 if ( cond == DUL_PEERREQUESTEDRELEASE ) {
821 cond = ASC_acknowledgeRelease ( *subAssoc );
822 ASC_dropSCPAssociation ( *subAssoc );
823 ASC_destroyAssociation ( subAssoc );
826 else if ( cond == DUL_PEERABORTEDASSOCIATION ) {
828 else if ( cond != EC_Normal ) {
830 qDebug() <<
"DIMSE failure (aborting sub-association): " << DimseCondition::dump ( temp_str, cond ).c_str();
832 cond = ASC_abortAssociation ( *subAssoc );
835 if ( cond != EC_Normal ) {
836 ASC_dropAssociation ( *subAssoc );
837 ASC_destroyAssociation ( subAssoc );
850 qWarning() <<
"Cannot cast caller";
854 if ( self->d->slicesCount ) {
855 emit
self->
updateProgress ( self->d->progressTotal + (
int ) ( ( (
float ) ( self->d->step * ( self->d->progressSerie ) / self->d->slicesCount ) ) ) );
858 if ( aNet == NULL )
return;
860 if ( *subAssoc == NULL ) {
869 self->d->progressSerie ++;
879 qWarning() <<
"Cannot cast caller";
883 if ( responseCount == 1 ) {
887 self->d->slicesCount = rsp->NumberOfRemainingSubOperations + rsp->NumberOfFailedSubOperations + rsp->NumberOfWarningSubOperations + rsp->NumberOfCompletedSubOperations;
891 DIMSE_dumpMessage ( temp_str, *rsp, DIMSE_INCOMING );
893 qDebug() <<
"Move Response " << responseCount <<
":";
894 foreach (
const QString &msg, QString ( temp_str.c_str() ).split(
'\n')) {
909 unsigned long elemCount = keys.card();
911 for (
unsigned long i = 0; i < elemCount; i++ ) {
912 DcmElement *elem = keys.remove ( (
unsigned long ) 0 );
913 dset.insert ( elem, OFTrue );
919 T_DIMSE_C_MoveRQ req;
920 T_DIMSE_C_MoveRSP rsp;
921 DIC_US msgId = assoc->nextMsgID++;
922 DcmDataset *rspIds = NULL;
923 const char *sopClass;
924 DcmDataset *statusDetail = NULL;
928 { UID_FINDPatientRootQueryRetrieveInformationModel,
929 UID_MOVEPatientRootQueryRetrieveInformationModel },
930 { UID_FINDStudyRootQueryRetrieveInformationModel,
931 UID_MOVEStudyRootQueryRetrieveInformationModel },
932 { UID_RETIRED_FINDPatientStudyOnlyQueryRetrieveInformationModel,
933 UID_RETIRED_MOVEPatientStudyOnlyQueryRetrieveInformationModel }
938 if ( fname != NULL ) {
939 if ( file.loadFile ( fname ).bad() ) {
940 qDebug() <<
"bad DICOM file: " << QString ( fname );
941 return DIMSE_BADDATA;
951 d->
presId = ASC_findAcceptedPresentationContextID ( d->
assoc, sopClass );
953 if ( d->
presId == 0 )
return DIMSE_NOVALIDPRESENTATIONCONTEXTID;
955 req.MessageID = msgId;
957 strcpy ( req.AffectedSOPClassUID, sopClass );
959 req.Priority = DIMSE_PRIORITY_MEDIUM;
961 req.DataSetType = DIMSE_DATASET_PRESENT;
965 ASC_getAPTitles ( assoc->params, req.MoveDestination,
973 const OFCondition cond = DIMSE_moveUser ( assoc,
989 if ( rspIds != NULL )
delete rspIds;
997 OFCondition cond = EC_Normal;
1000 while ( cond.good() && n-- ) {
1001 cond =
moveSCU ( assoc, fname );
static OFCondition storeSCP(T_ASC_Association *assoc, T_DIMSE_Message *msg, T_ASC_PresentationContextID presID, void *subOpCallbackData)
static QtDcmPreferences * instance()
void substituteOverrideKeys(DcmDataset &dset)
E_PaddingEncoding paddingType
QtDcmMoveScu(QObject *parent=0)
static OFCondition echoSCP(T_ASC_Association *assoc, T_DIMSE_Message *msg, T_ASC_PresentationContextID presID)
QtDcmServer currentPacs() const
QString aetitle() const
PACS AETitle getter.
E_TransferSyntax networkTransferSyntax
void setImportDir(const QString &dir)
QtDcmMoveScu::QueryModel queryModel
static OFCondition acceptSubAssoc(T_ASC_Network *aNet, T_ASC_Association **assoc)
static QtDcmManager * instance()
OFCondition move(const QString &uid)
OFCondition cmove(T_ASC_Association *assoc, const char *fname)
void setImageId(const QString &id)
const char * moveDestination
void updateProgress(int i)
E_TransferSyntax writeTransferSyntax
OFCondition moveSCU(T_ASC_Association *assoc, const char *fname)
OFCondition addPresentationContext(T_ASC_Parameters *params, T_ASC_PresentationContextID pid, const char *abstractSyntax, E_TransferSyntax preferredTransferSyntax)
T_ASC_Association * assoc
T_ASC_Parameters * params
static void moveCallback(void *caller, T_DIMSE_C_MoveRQ *req, int responseCount, T_DIMSE_C_MoveRSP *rsp)
QString aetitle() const
QtDcm local AETitle getter.
T_ASC_PresentationContextID presId
OFCmdSignedInt cancelAfterNResponses
void serieMoved(const QString &directory, const QString &uid, int number)
static OFCondition subOpSCP(T_ASC_Association **subAssoc, void *subOpCallbackData)
void setSeries(const QStringList &series)
E_EncodingType sequenceType
OFBool ignorePendingDatasets
OFCmdUnsignedInt repeatCount
static void storeSCPCallback(void *caller, T_DIMSE_StoreProgress *progress, T_DIMSE_C_StoreRQ *req, char *imageFile, DcmDataset **imageDataSet, T_DIMSE_C_StoreRSP *rsp, DcmDataset **statusDetail)
void setMode(eMoveMode eMoveMode)
QtDcmMoveScu::eMoveMode mode
void setOutputDir(const QString &dir)
void addOverrideKey(const QString &key)
T_DIMSE_BlockingMode blockMode
static void subOpCallback(void *, T_ASC_Network *aNet, T_ASC_Association **subAssoc)
E_GrpLenEncoding groupLength