main(int argc, char **argv) { FIS_HANDLE *fisHandle = NULL; char *fisDatabase; while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'h': usageerror(); break; default: break; } } if (argc < 1) usageerror(); THR_Init(); fisDatabase = *argv++; openFIS(fisDatabase, &fisHandle); dumpCommitRequests(&fisHandle); closeFIS(&fisHandle); THR_Shutdown(); return 0; }
main(int argc, char **argv) { DCM_OBJECT * object; CONDITION cond; char * fileInput; CTNBOOLEAN verbose = FALSE, exitFlag = FALSE, formatFlag = FALSE; unsigned long options = DCM_ORDERLITTLEENDIAN; long vmLimit = 0; LST_HEAD* fileNames = 0; UTL_FILEITEM* p = NULL; if (argc < 2) usageerror(); else { argv++; fileInput = *argv; } THR_Init(); DCM_Debug(verbose); cond = DCM_OpenFile(fileInput, options, &object); if (cond != DCM_NORMAL && ((options & DCM_PART10FILE) == 0)) { COND_DumpConditions(); (void) DCM_CloseObject(&object); (void) COND_PopCondition(TRUE); fprintf(stderr, "Could not open %s as expected. Trying Part 10 format.\n", p->path); cond = DCM_OpenFile(p->path, options | DCM_PART10FILE, &object); } if (cond == DCM_NORMAL) { printf("<?xml version=\"1.0\" ?>\n"); printf("<Structured_Report>\n"); iterateThroughElements(&object, 1); printf("</Structured_Report>\n"); } COND_DumpConditions(); (void) DCM_CloseObject(&object); (void) COND_PopCondition(TRUE); if (cond != DCM_NORMAL && exitFlag) { THR_Shutdown(); exit(1); } #ifdef MALLOC_DEBUG malloc_verify(0); malloc_shutdown(); #endif THR_Shutdown(); return 0; }
int main(int argc, char **argv) { CONDITION cond; /* Return value from DUL and ACR routines */ DCM_OBJECT * object; /* Handle to the information object */ DCM_ELEMENT element; /* Handle to the DCM_ELEMENT */ IE_OBJECT * ieObject; /* Handle to the IE_OBJECT object */ IE_INFORMATIONENTITY * ieIE, *ie_node; /* Handle to IE_INFORMATIONENTITY */ LST_HEAD * ie_head, *mod_head, *attr_head; /* Handle to the LST_HEAD */ IE_MODULE * ieModule, *mod_node; /* Handle to IE_MODULE */ IE_ATTRIBUTE * attr_node; /* Handle to IE_ATTRIBUTE */ CTNBOOLEAN verbose = FALSE; /* For debugging purpose */ CTNBOOLEAN flag; /* Return value from findElement routine */ unsigned long options = DCM_ORDERLITTLEENDIAN; /* Byte order in data streams */ char *file; /* The image file name */ char UID[90]; /* The SOP Class UID of the image file */ U32 length; /* Length of the data field of DCM_ELEMENT */ int ie_loop, mod_loop, attr_loop, j, k, i;/* Iteration variables */ while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'v': verbose = TRUE; break; case 'b': options &= ~DCM_ORDERMASK; options |= DCM_ORDERBIGENDIAN; break; case 't': options &= ~DCM_FILEFORMATMASK; options |= DCM_PART10FILE; break; default: break; } } if (argc < 1) usageerror(); file = *argv; THR_Init(); DCM_Debug(verbose); /* Open a DICOM object file and put the contents into the memory represented by the information object. */ cond = DCM_OpenFile(file, options, &object); if (cond != DCM_NORMAL && ((options & DCM_PART10FILE) == 0)) { COND_DumpConditions(); (void) DCM_CloseObject(&object); (void) COND_PopCondition(TRUE); fprintf(stderr, "Could not open %s as expected. Trying Part 10 format.\n", file); cond = DCM_OpenFile(file, options | DCM_PART10FILE, &object); } if (cond != DCM_NORMAL) { COND_DumpConditions(); THR_Shutdown(); return 1; }else{ printf("file is successfully opened!\n"); /* Call IE_ExamineObject to examine this DCM object. */ cond = IE_ExamineObject(&object, &ieObject); if (cond == IE_ILLEGALDCMOBJECT || cond == IE_LISTFAILURE || cond == IE_MALLOCFAILURE){ COND_DumpConditions(); }else{ /* Print the IE_OBJECT object. */ strcpy(UID, ieObject->classUID); printObject(ieObject); /* Examine each IE on the list. */ ie_head = ieObject->ieList; ie_loop = LST_Count(&ie_head); for (i = 0; i < ie_loop; i++) { ie_node = LST_Pop(&ie_head); cond = IE_ExamineInformationEntity(&object, ie_node->ieType, &ieIE); /* Print each IE_IE. */ printIE(ieIE); /* Examine each module on the list. */ mod_head = ieIE->moduleList; mod_loop = LST_Count(&mod_head); for (k = 0; k < mod_loop; k++) { mod_node = LST_Pop(&mod_head); cond = IE_ExamineModule(&object, ieIE->ieType, mod_node->moduleType, &ieModule); printModule(ieModule); /* Print each IE_ATTRIBUTE. */ attr_head = ieModule->attributeList; attr_loop = LST_Count(&attr_head); for (j = 0; j < attr_loop; j++) { attr_node = LST_Pop(&attr_head); printIEAttribute(attr_node); free(attr_node); } free(mod_node); cond = IE_Free((void **) &ieModule); } free(ie_node); cond = IE_Free((void **) &ieIE); } cond = IE_Free((void **) &ieObject); /* Check to see the status of the Information Entities. */ cond = IE_ExamineObject(&object, &ieObject); printf("\n%s requirements:\n", ieObject->objectDescription); ie_head = ieObject->ieList; ie_loop = LST_Count(&ie_head); for (i = 0; i < ie_loop; i++) { ie_node = LST_Pop(&ie_head); if (ie_node->requirement == IE_K_REQUIRED) printIE(ie_node); free(ie_node); } cond = IE_Free((void **) &ieObject); /* Check to see the status of the Information Entity and status of the Modules within them. */ cond = IE_ExamineObject(&object, &ieObject); printf("\n%s requirements:\n", ieObject->objectDescription); ie_head = ieObject->ieList; ie_loop = LST_Count(&ie_head); for (i = 0; i < ie_loop; i++) { ie_node = LST_Pop(&ie_head); cond = IE_ExamineInformationEntity(&object, ie_node->ieType, &ieIE); if (ie_node->requirement == IE_K_REQUIRED) { printf("\n"); printIE(ieIE); mod_head = ieIE->moduleList; mod_loop = LST_Count(&mod_head); for (k = 0; k < mod_loop; k++) { mod_node = LST_Pop(&mod_head); if (mod_node->requirement == IE_K_REQUIRED) printModule(mod_node); free(mod_node); } } free(ie_node); cond = IE_Free((void **) &ieIE); } cond = IE_Free((void **) &ieObject); /* Check to see the missing attributes if there is any. */ cond = IE_ObjectRequirements(UID, &ieObject); printf("\n Missing required(type1 and type2) attributes: \n"); ie_head = ieObject->ieList; ie_loop = LST_Count(&ie_head); for (i = 0; i < ie_loop; i++) { ie_node = LST_Pop(&ie_head); cond = IE_IERequirements(UID, ie_node->ieType, &ieIE); mod_head = ieIE->moduleList; mod_loop = LST_Count(&mod_head); for (k = 0; k < mod_loop; k++) { mod_node = LST_Pop(&mod_head); cond = IE_ModuleRequirements(UID, ie_node->ieType, mod_node->moduleType, &ieModule); printf(" %s\n", ieModule->moduleDescription); attr_head = ieModule->attributeList; attr_loop = LST_Count(&attr_head); for (j = 0; j < attr_loop; j++) { attr_node = LST_Pop(&attr_head); flag = findElement(object, attr_node->element.tag, &element); cond = DCM_LookupElement(&element); if (cond != DCM_NORMAL) cond = COND_PopCondition(FALSE); if (!flag) { if (attr_node->requirement == IE_K_TYPE1){ printf(" %08x, %s\n", element.tag, element.description); }else if (attr_node->requirement == IE_K_TYPE2){ cond = DCM_GetElementSize(&object, attr_node->element.tag, &length); if (cond != DCM_NORMAL){ cond = COND_PopCondition(FALSE); printf(" %08x, %s\n", element.tag, element.description); } } } } /* finish one module */ free(mod_node); cond = IE_Free((void **) &ieModule); } free(ie_node); cond = IE_Free((void **) &ieIE); } cond = IE_Free((void **) &ieObject); } } /* Free the memory and remove the object handle. */ cond = DCM_CloseObject(&object); if (cond != DCM_NORMAL){ COND_DumpConditions(); }else{ printf("The object is closed successfully.\n"); } THR_Shutdown(); return 0; }
int main(int argc, char **argv) { CONDITION /* Return value from DUL and ACR routines */ cond; IE_OBJECT /* Handle to the IE_OBJECT object */ * ieObject; IE_INFORMATIONENTITY /* Handle to IE_INFORMATIONENTITY */ * ieIE, *ie_node; LST_HEAD /* Handle to the LST_HEAD */ * ie_head, *mod_head, *attr_head; IE_MODULE /* Handle to IE_MODULE */ * ieModule, *mod_node; IE_ATTRIBUTE /* Handle to IE_ATTRIBUTE */ * attr_node; CTNBOOLEAN /* For debugging purpose */ verbose = FALSE; char /* The UID of the image file */ *UID, *SOPClassName; int /* Iteration variables */ ie_loop, mod_loop, attr_loop, i, k, j; if (argc < 1) usageerror(); THR_Init(); DCM_Debug(verbose); while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'v': verbose = TRUE; break; default: break; } } while (argc-- > 0) { SOPClassName = *argv; (void) *argv++; /* * Find the SOP Class UID according to the SOP Class name. */ UID = lookupUID(SOPClassName); if (UID != NULL) { /* The SOP Class name is legal */ printf("\nRequired IEs and Modules for %s image file:\n", SOPClassName); /* * Find the required IEs. */ cond = IE_ObjectRequirements(UID, &ieObject); if (cond == IE_LISTFAILURE || cond == IE_MALLOCFAILURE || cond == IE_ILLEGALDCMOBJECT) { COND_DumpConditions(); THR_Shutdown(); return (2); } ie_head = ieObject->ieList; ie_loop = LST_Count(&ie_head); for (i = 0; i < ie_loop; i++) { /* * Find all the required Modules. */ ie_node = LST_Pop(&ie_head); printf("%s\n", ie_node->ieDescription); cond = IE_IERequirements(UID, ie_node->ieType, &ieIE); mod_head = ieIE->moduleList; mod_loop = LST_Count(&mod_head); for (k = 0; k < mod_loop; k++) { mod_node = LST_Pop(&mod_head); printf(" %s\n", mod_node->moduleDescription); } cond = IE_Free((void **) &ieIE); } cond = IE_Free((void **) &ieObject); printf("\n"); printf("Required Modules and Attributes for %s image file:\n", SOPClassName); /* * Find all the required IEs. */ cond = IE_ObjectRequirements(UID, &ieObject); if (cond == IE_LISTFAILURE || cond == IE_MALLOCFAILURE || cond == IE_ILLEGALDCMOBJECT) { COND_DumpConditions(); THR_Shutdown(); return (2); } ie_head = ieObject->ieList; ie_loop = LST_Count(&ie_head); for (i = 0; i < ie_loop; i++) { /* * Find all the required Modules. */ ie_node = LST_Pop(&ie_head); cond = IE_IERequirements(UID, ie_node->ieType, &ieIE); mod_head = ieIE->moduleList; mod_loop = LST_Count(&mod_head); for (k = 0; k < mod_loop; k++) { mod_node = LST_Pop(&mod_head); cond = IE_ModuleRequirements(UID, ie_node->ieType, mod_node->moduleType, &ieModule); printf("%s\n", mod_node->moduleDescription); attr_head = ieModule->attributeList; attr_loop = LST_Count(&attr_head); for (j = 0; j < attr_loop; j++) { /* * Find all the mandatory attributes. */ attr_node = LST_Pop(&attr_head); cond = DCM_LookupElement (&(attr_node->element)); printf(" %s\n", attr_node->element.description); } } } } else /* Illegal SOP Class entered by the user */ printf("Illegal SOP Class.\n"); } THR_Shutdown(); return (0); }
main(int argc, char **argv) { CONDITION /* Return values from facilities */ cond; DUL_NETWORKKEY /* Used to initialize our network */ * network = NULL; DUL_ASSOCIATESERVICEPARAMETERS /* The items which describe this * Association */ params = { DICOM_STDAPPLICATIONCONTEXT, "DEMO_SENDER_93", "RSNA_STORAGE_93", "", 16384, 0, 0, 0, "calling addr", "called addr", NULL, NULL, 0, 0, MIR_IMPLEMENTATIONCLASSUID, MIR_IMPLEMENTATIONVERSIONNAME, "", "" }; char *calledAPTitle = "RSNA_STORAGE_93", *callingAPTitle = "DEMO_SENDER_93", localHost[40], *node, /* The node we are calling */ *port; /* ASCIIZ representation of TCP port */ int scratch; /* Used to check syntax of port number */ unsigned long maxPDU = 16384; CTNBOOLEAN verboseDCM = FALSE, verboseDUL = FALSE, verboseSRV = FALSE; while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'c': argc--; argv++; if (argc <= 0) usageerror(); callingAPTitle = *argv; break; case 'd': argc--; argv++; if (argc <= 0) usageerror(); if (strcmp(*argv, "DCM") == 0) verboseDCM = TRUE; else if (strcmp(*argv, "DUL") == 0) verboseDUL = TRUE; else if (strcmp(*argv, "SRV") == 0) verboseSRV = TRUE; else usageerror(); break; case 'm': argc--; argv++; if (argc <= 0) usageerror(); if (sscanf(*argv, "%lu", &maxPDU) != 1) usageerror(); break; case 't': argc--; argv++; if (argc <= 0) usageerror(); calledAPTitle = *argv; break; case 'v': verboseDUL = TRUE; verboseSRV = TRUE; break; default: break; } } if (argc < 2) usageerror(); THR_Init(); DCM_Debug(verboseDCM); DUL_Debug(verboseDUL); SRV_Debug(verboseSRV); node = *argv++; argc--; port = *argv++; argc--; if (sscanf(port, "%d", &scratch) != 1) usageerror(); cond = DUL_InitializeNetwork(DUL_NETWORK_TCP, DUL_AEREQUESTOR, NULL, DUL_TIMEOUT, DUL_ORDERBIGENDIAN, &network); if (cond != DUL_NORMAL) myExit(NULL); (void) gethostname(localHost, sizeof(localHost)); sprintf(params.calledPresentationAddress, "%s:%s", node, port); strcpy(params.callingPresentationAddress, localHost); strcpy(params.calledAPTitle, calledAPTitle); strcpy(params.callingAPTitle, callingAPTitle); params.maxPDU = maxPDU; reqReleaseAssociation(&network, ¶ms); THR_Shutdown(); exit(0); }
main(int argc, char *argv[]) #endif /* _NO_PROTO */ { char *databaseName = "CTNControl"; CONDITION cond; CTNBOOLEAN verboseTBL = FALSE; /*----------------------------------------------------------- * Declarations. * The default identifier - mainIface will only be declared * if the interface function is global and of type swidget. * To change the identifier to a different name, modify the * string mainIface in the file "xtmain.dat". If "mainIface" * is declared, it will be used below where the return value * of PJ_INTERFACE_FUNCTION_CALL will be assigned to it. *----------------------------------------------------------*/ Widget mainIface; /*--------------------------------- * Interface function declaration *--------------------------------*/ Widget create_applicationShell1(swidget); swidget UxParent = NULL; /*--------------------- * Initialize program *--------------------*/ #ifdef XOPEN_CATALOG if (XSupportsLocale()) { XtSetLanguageProc(NULL, (XtLanguageProc) NULL, NULL); } #endif SgePreInitialize(&argc, argv); UxTopLevel = XtAppInitialize(&UxAppContext, "cfg_ctn_tables", NULL, 0, &argc, argv, NULL, NULL, 0); UxDisplay = XtDisplay(UxTopLevel); UxScreen = XDefaultScreen(UxDisplay); /* * We set the geometry of UxTopLevel so that dialogShells that are * parented on it will get centered on the screen (if defaultPosition is * true). */ XtVaSetValues(UxTopLevel, XtNx, 0, XtNy, 0, XtNwidth, DisplayWidth(UxDisplay, UxScreen), XtNheight, DisplayHeight(UxDisplay, UxScreen), NULL); /*------------------------------------------------------- * Insert initialization code for your application here *------------------------------------------------------*/ while (--argc > 0 && *(++argv)[0] == '-') { switch ((*argv)[1]) { case 'f': if (argc-- < 1) exit(1); databaseName = *++argv; break; case 'h': usageerror(); break; case 'x': if (argc-- < 0) usageerror(); argv++; if (strcmp(*argv, "TBL") == 0) verboseTBL = TRUE; else usageerror(); break; default: printf("Unrecognized option: %s\n", *argv); break; } } TBL_Debug(verboseTBL); THR_Init(); cond = DMAN_Open(databaseName, "", "", &dmanHandle); if (cond != DMAN_NORMAL) { COND_DumpConditions(); exit(1); } /*---------------------------------------------------------------- * Create and popup the first window of the interface. The * return value can be used in the popdown or destroy functions. * The Widget return value of PJ_INTERFACE_FUNCTION_CALL will * be assigned to "mainIface" from PJ_INTERFACE_RETVAL_TYPE. *---------------------------------------------------------------*/ mainIface = create_applicationShell1(UxParent); UxPopupInterface(mainIface, no_grab); /*----------------------- * Enter the event loop *----------------------*/ XtAppMainLoop(UxAppContext); }
int main (int argc, char **argv) { int i = 1; char *infilename, *outfilename; int fileFormat, outFileFormat = AF_FILE_UNKNOWN; AFfilehandle infile, outfile; AFfilesetup outfilesetup; int sampleFormat, sampleWidth, channelCount; double sampleRate; int outSampleFormat = -1, outSampleWidth = -1, outChannelCount = -1; double outMaxAmp = 1.0; AFframecount totalFrames; if (argc == 2) { if (!strcmp(argv[1], "--version") || !strcmp(argv[1], "-v")) { printversion(); exit(EXIT_SUCCESS); } if (!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")) { printusage(); exit(EXIT_SUCCESS); } } if (argc < 3) usageerror(); infilename = argv[1]; outfilename = argv[2]; i = 3; while (i < argc) { if (!strcmp(argv[i], "format")) { if (i + 1 >= argc) usageerror(); if (!strcmp(argv[i+1], "aiff")) outFileFormat = AF_FILE_AIFF; else if (!strcmp(argv[i+1], "aifc")) outFileFormat = AF_FILE_AIFFC; else if (!strcmp(argv[i+1], "wave")) outFileFormat = AF_FILE_WAVE; else if (!strcmp(argv[i+1], "next")) outFileFormat = AF_FILE_NEXTSND; else if (!strcmp(argv[i+1], "bics")) outFileFormat = AF_FILE_BICSF; else if (!strcmp(argv[i+1], "voc")) outFileFormat = AF_FILE_VOC; else if (!strcmp(argv[i+1], "nist")) outFileFormat = AF_FILE_NIST_SPHERE; else if (!strcmp(argv[i+1], "caf")) outFileFormat = AF_FILE_CAF; else { fprintf(stderr, "sfconvert: Unknown format %s.\n", argv[i+1]); exit(EXIT_FAILURE); } /* Increment for argument. */ i++; } else if (!strcmp(argv[i], "channels")) { if (i + 1 >= argc) usageerror(); outChannelCount = atoi(argv[i+1]); if (outChannelCount < 1) usageerror(); /* Increment for argument. */ i++; } else if (!strcmp(argv[i], "float")) { if (i + 1 >= argc) usageerror(); outSampleFormat = AF_SAMPFMT_FLOAT; outSampleWidth = 32; outMaxAmp = atof(argv[i+1]); /* Increment for argument. */ i++; } else if (!strcmp(argv[i], "integer")) { if (i + 2 >= argc) usageerror(); outSampleWidth = atoi(argv[i+1]); if (outSampleWidth < 1 || outSampleWidth > 32) usageerror(); if (!strcmp(argv[i+2], "2scomp")) outSampleFormat = AF_SAMPFMT_TWOSCOMP; else if (!strcmp(argv[i+2], "unsigned")) outSampleFormat = AF_SAMPFMT_UNSIGNED; else usageerror(); /* Increment for arguments. */ i += 2; } else { printf("Unrecognized command %s\n", argv[i]); } i++; } infile = afOpenFile(infilename, "r", AF_NULL_FILESETUP); if (infile == AF_NULL_FILEHANDLE) { printf("Could not open file '%s' for reading.\n", infilename); return 1; } /* Get audio format parameters from input file. */ fileFormat = afGetFileFormat(infile, NULL); totalFrames = afGetFrameCount(infile, AF_DEFAULT_TRACK); channelCount = afGetChannels(infile, AF_DEFAULT_TRACK); sampleRate = afGetRate(infile, AF_DEFAULT_TRACK); afGetSampleFormat(infile, AF_DEFAULT_TRACK, &sampleFormat, &sampleWidth); /* Initialize output audio format parameters. */ outfilesetup = afNewFileSetup(); if (outFileFormat == -1) outFileFormat = fileFormat; if (outSampleFormat == -1 || outSampleWidth == -1) { outSampleFormat = sampleFormat; outSampleWidth = sampleWidth; } if (outChannelCount == -1) outChannelCount = channelCount; afInitFileFormat(outfilesetup, outFileFormat); afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, outSampleFormat, outSampleWidth); afInitChannels(outfilesetup, AF_DEFAULT_TRACK, outChannelCount); afInitRate(outfilesetup, AF_DEFAULT_TRACK, sampleRate); outfile = afOpenFile(outfilename, "w", outfilesetup); if (outfile == AF_NULL_FILEHANDLE) { printf("Could not open file '%s' for writing.\n", outfilename); return 1; } /* Set the output file's virtual audio format parameters to match the audio format parameters of the input file. */ afSetVirtualChannels(outfile, AF_DEFAULT_TRACK, channelCount); afSetVirtualSampleFormat(outfile, AF_DEFAULT_TRACK, sampleFormat, sampleWidth); afFreeFileSetup(outfilesetup); copyaudiodata(infile, outfile, AF_DEFAULT_TRACK, totalFrames); afCloseFile(infile); afCloseFile(outfile); printfileinfo(infilename); putchar('\n'); printfileinfo(outfilename); return EXIT_SUCCESS; }
int main(int argc, char **argv) { CONDITION cond; DUL_NETWORKKEY* network = NULL; DUL_ASSOCIATIONKEY* association = NULL; DUL_ASSOCIATESERVICEPARAMETERS params; char *calledAPTitle = "CFIND_SCP", *callingAPTitle = "CFIND_SCU"; char localHost[40] = ""; int port; char *node; CTNBOOLEAN verbose = FALSE, abortFlag = FALSE, paramsFlag = FALSE; char *fileName = NULL; DUL_SC_ROLE role = DUL_SC_ROLE_DEFAULT; char* sopClass = DICOM_SOPSTUDYQUERY_FIND; char* outputPath = ""; while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'a': argc--; argv++; if (argc <= 0) usageerror(); callingAPTitle = *argv; break; case 'c': argc--; argv++; if (argc <= 0) usageerror(); calledAPTitle = *argv; break; case 'o': argc--; argv++; if (argc <= 0) usageerror(); outputPath = *argv; break; case 'v': verbose = TRUE; break; default: break; } } if (argc < 5) usageerror(); ::THR_Init(); ::DUL_Debug(verbose); ::SRV_Debug(verbose); node = *argv; if (sscanf(*++argv, "%d", &port) != 1) usageerror(); if( gethostname(localHost, sizeof(localHost)) != 0) { // gethostname is failing under Win32 //fprintf(stderr, "gethostname() failed.\n"); } cond = DUL_InitializeNetwork(DUL_NETWORK_TCP, DUL_AEREQUESTOR, NULL, 10, DUL_ORDERBIGENDIAN, &network); if (cond != DUL_NORMAL) myExit(&association); ::DUL_DefaultServiceParameters(¶ms); ::sprintf(params.calledPresentationAddress, "%s:%s", node, *argv); ::strcpy(params.callingPresentationAddress, localHost); ::strcpy(params.calledAPTitle, calledAPTitle); ::strcpy(params.callingAPTitle, callingAPTitle); cond = ::SRV_RequestServiceClass(sopClass, role, ¶ms); if (cond != SRV_NORMAL) { ::COND_DumpConditions(); ::THR_Shutdown(); ::exit(1); } cond = ::DUL_RequestAssociation(&network, ¶ms, &association); if (cond != DUL_NORMAL) { if (cond == DUL_ASSOCIATIONREJECTED) { ::fprintf(stderr, "Association Rejected\n"); ::fprintf(stderr, " Result: %2x Source %2x Reason %2x\n", params.result, params.resultSource, params.diagnostic); } myExit(&association); } if (verbose || paramsFlag) { (void) ::printf("Association accepted, parameters:\n"); ::DUL_DumpParams(¶ms); } MString patientID(*++argv); MDICOMWrapper qStudy(*++argv); qStudy.setString(0x00100020, patientID); MDICOMWrapper qSeries(*++argv); MDICOMWrapper qSOPInstance(*++argv); DCM_OBJECT* queryObj = qStudy.getNativeObject(); MLQuery qHandlerStudy(outputPath); MLQuery qHandlerSeries(outputPath); MLQuery qHandlerInstance(outputPath); MDICOMReactor reactor; reactor.registerHandler(&qHandlerStudy, sopClass); qHandlerStudy.sendCFindRequest(&association, ¶ms, sopClass, &queryObj); reactor.processRequests(&association, ¶ms, 1); WRAPPERVector studyVector = qHandlerStudy.wrapperVector(); WRAPPERVector::iterator studyIterator = studyVector.begin(); for (; studyIterator != studyVector.end(); studyIterator++) { MDICOMWrapper* w = *studyIterator; DCM_OBJECT* obj = w->getNativeObject(); ::DCM_FormatElements(&obj, 1, ""); reactor.registerHandler(&qHandlerSeries, sopClass); MString studyUID = w->getString(0x0020000D); qSeries.setString(0x0020000D, studyUID); DCM_OBJECT* seriesQueryObj = qSeries.getNativeObject(); qHandlerSeries.sendCFindRequest(&association, ¶ms, sopClass, &seriesQueryObj); qHandlerSeries.clearVector(); reactor.processRequests(&association, ¶ms, 1); WRAPPERVector seriesVector = qHandlerSeries.wrapperVector(); WRAPPERVector::iterator seriesIterator = seriesVector.begin(); for (; seriesIterator != seriesVector.end(); seriesIterator++) { MDICOMWrapper* w2 = *seriesIterator; DCM_OBJECT* objSeries = w2->getNativeObject(); ::DCM_FormatElements(&objSeries, 1, " "); reactor.registerHandler(&qHandlerInstance, sopClass); MString seriesUID = w2->getString(0x0020000E); qSOPInstance.setString(0x0020000D, studyUID); qSOPInstance.setString(0x0020000E, seriesUID); DCM_OBJECT* instanceQueryObj = qSOPInstance.getNativeObject(); qHandlerInstance.sendCFindRequest(&association, ¶ms, sopClass, &instanceQueryObj); qHandlerInstance.clearVector(); reactor.processRequests(&association, ¶ms, 1); WRAPPERVector instanceVector = qHandlerInstance.wrapperVector(); WRAPPERVector::iterator instanceIterator = instanceVector.begin(); for (; instanceIterator != instanceVector.end(); instanceIterator++) { MDICOMWrapper* w3 = *instanceIterator; DCM_OBJECT* objInstance = w3->getNativeObject(); ::DCM_FormatElements(&objInstance, 1, " "); } } } cond = ::DUL_ReleaseAssociation(&association); if (cond != DUL_RELEASECONFIRMED) { (void) ::fprintf(stderr, "%x\n", cond); ::COND_DumpConditions(); } (void) ::DUL_ClearServiceParameters(¶ms); (void) ::DUL_DropNetwork(&network); ::THR_Shutdown(); return 0; }
int main(int argc, char **argv) { // Setup Signal Handler, to exit gracefully on an INT signal signal(SIGINT, *sighandler); CONDITION cond; DUL_NETWORKKEY * network = NULL; DUL_ASSOCIATIONKEY * association = NULL; DUL_ASSOCIATESERVICEPARAMETERS *service; DUL_PRESENTATIONCONTEXT * requestedCtx; DUL_ABORTITEMS abortItems; MFileOperations f; char path[256]; f.expandPath(path, "MESA_TARGET", "logs"); MString logDir(path); // Default is Storage Area f.expandPath(path, "MESA_STORAGE", "postproc"); MString storageDir(path); // Default is Storage Area char *dbName = "ppwf"; // Default database nameea int port, trips = 2048, /* Trips through the main loop */ classCount = 0, releaseDelay = 0, numBase = 100; // msg number base for logging unsigned long maxPDU = 16384; CTNBOOLEAN verboseDUL = FALSE, verboseSRV = FALSE, verboseDCM = FALSE, abortFlag = FALSE, forgiveFlag = FALSE, forkFlag = FALSE, threadFlag = FALSE, paramsFlag = FALSE, acceptFlag, drop, done = FALSE, printConnectionStatistics = FALSE; DUL_SC_ROLE scRole; int associationRequests = 0; char *classArray[] = { DICOM_SOPCLASSVERIFICATION, DICOM_SOPGPWORKLIST_FIND, DICOM_SOPGPSPS, DICOM_SOPGPPPS, ""}; char *serverTitle = POST_PROC_AE_TITLE; MLogClient::LOGLEVEL logLevel = MLogClient::MLOG_NONE; int fileMode = 0; while (--argc > 0 && (*++argv)[0] == '-') { int l1 = 0; switch (*(argv[0] + 1)) { case 'a': argc--; argv++; if (argc < 1) usageerror(); logDir = MString(*argv); break; case 'b': argc--; argv++; if (argc < 1) usageerror(); if (sscanf(*argv, "%d", &numBase) != 1) usageerror(); break; case 'c': argc--; argv++; if (argc < 1) usageerror(); serverTitle = *argv; break; case 'd': argc--; argv++; if (argc < 1) usageerror(); if (strcmp(*argv, "DCM") == 0) verboseDCM = TRUE; else if (strcmp(*argv, "DUL") == 0) verboseDUL = TRUE; else if (strcmp(*argv, "SRV") == 0) verboseSRV = TRUE; else usageerror(); break; case 'f': forkFlag = TRUE; break; case 'i': forgiveFlag = TRUE; break; case 'j': #ifndef CTN_USE_THREADS fprintf(stderr, "pp_dcmps was not compiled with threads\n"); return 1; #else //threadFlag = TRUE; break; #endif case 'l': argc--; argv++; if (argc < 1) usageerror(); if (sscanf(*argv, "%d", &l1) != 1) usageerror(); logLevel = (MLogClient::LOGLEVEL)l1; break; case 'm': argc--; argv++; if (argc < 1) usageerror(); if (sscanf(*argv, "%lu", &maxPDU) != 1) usageerror(); break; case 'n': argc--; argv++; if (argc < 1) usageerror(); dbName = *argv; break; case 'p': paramsFlag = TRUE; break; case 't': argc--; argv++; if (argc < 1) usageerror(); if (sscanf(*argv, "%d", &trips) != 1) usageerror(); break; case 'v': verboseDUL = TRUE; verboseSRV = TRUE; break; case 'y': printConnectionStatistics = TRUE; break; case 'z': fileMode++; break; default: (void) fprintf(stderr, "Unrecognized option: %c\n", *(argv[0] + 1)); break; } } if (argc < 1) usageerror(); // If in filemode, perform the query and exit if (fileMode) { ppwlQuery (*argv, logDir, numBase, dbName); return 0; } // Write PID file MServerAgent a("pp_dcmps"); a.registerServerPID(); if (sscanf(*argv, "%d", &port) != 1) usageerror(); checkEnvironment(); ::THR_Init(); ::DCM_Debug(verboseDCM); ::DUL_Debug(verboseDUL); ::SRV_Debug(verboseSRV); #ifndef _MSC_VER if (port < 1024) { if (geteuid() != 0) { char errmsg[] = "To use this port (%d), you must run as root or the application must be\n\ setuid root (see chmod)\n"; fprintf(stderr, errmsg, port); perror(""); exit(1); } } #endif if (logLevel != MLogClient::MLOG_NONE) { MLogClient logClient; logClient.initialize(logLevel, logDir + "/pp_dcmps.log"); logClient.log(MLogClient::MLOG_ERROR, "<no peer>", "pp_dcmps<main>", __LINE__, "Begin server process"); cout << "pp_dcmps logging messages at level " << logLevel << " to " << logDir + "/pp_dcmps.log" << endl; } cond = ::DUL_InitializeNetwork(DUL_NETWORK_TCP, DUL_AEBOTH, (void *) &port, DUL_TIMEOUT, DUL_ORDERBIGENDIAN, &network); if (cond != DUL_NORMAL) { ::COND_DumpConditions(); ::exit(1); } /* Go back to the proper uid so we don't mess with things we don't own. */ #ifndef _MSC_VER (void) setuid(getuid()); #endif done = FALSE; while (!done) { drop = FALSE; service = (DUL_ASSOCIATESERVICEPARAMETERS*)malloc(sizeof(*service)); if (service == NULL) { ::fprintf(stderr, "Could not allocate memory for association parameters\n"); ::exit(1); } (void) ::memset(service, 0, sizeof(*service)); service->maxPDU = maxPDU; strcpy(service->calledImplementationClassUID, MIR_IMPLEMENTATIONCLASSUID); strcpy(service->calledImplementationVersionName, MIR_IMPLEMENTATIONVERSIONNAME); cond = ::DUL_ReceiveAssociationRQ(&network, DUL_BLOCK, service, &association); { MLogClient logClient; logClient.log(MLogClient::MLOG_CONVERSATION, service->callingAPTitle, "pp_dcmps<main>", __LINE__, "Association Request"); } acceptFlag = TRUE; if (cond != DUL_NORMAL) { ::COND_DumpConditions(); if (cond == DUL_UNSUPPORTEDPEERPROTOCOL) { acceptFlag = FALSE; cond = APP_NORMAL; /* Yes, this is normal */ } else ::exit(0); } if (acceptFlag) { cond = associationCheck(service, serverTitle, forgiveFlag, &abortItems); if (CTN_ERROR(cond)) { acceptFlag = FALSE; ::fprintf(stderr, "Incorrect Association Request\n"); ::COND_DumpConditions(); cond = ::DUL_RejectAssociationRQ(&association, &abortItems); if (cond != DUL_NORMAL) { ::fprintf(stderr, "Unable to cleanly reject Association\n"); ::COND_DumpConditions(); } } else if (!CTN_SUCCESS(cond)) { ::COND_DumpConditions(); } } if (acceptFlag) { if (verboseDUL || paramsFlag) { fprintf(stdout, "Application is about to accept association. The association parameters\n\ before the app has decided which presentation contexts to accept follow.\n"); ::DUL_DumpParams(service); } requestedCtx = (DUL_PRESENTATIONCONTEXT*)::LST_Head(&service->requestedPresentationContext); if (requestedCtx != NULL) (void) ::LST_Position(&service->requestedPresentationContext, requestedCtx); classCount = 0; while (requestedCtx != NULL) { if (strcmp(requestedCtx->abstractSyntax, MIR_SOPCLASSKILLSERVER) == 0) done = TRUE; if (supportedClass(requestedCtx->abstractSyntax, classArray)) { switch (requestedCtx->proposedSCRole) { case DUL_SC_ROLE_DEFAULT: scRole = DUL_SC_ROLE_DEFAULT; break; case DUL_SC_ROLE_SCU: scRole = DUL_SC_ROLE_SCU; break; case DUL_SC_ROLE_SCP: scRole = DUL_SC_ROLE_DEFAULT; break; case DUL_SC_ROLE_SCUSCP: scRole = DUL_SC_ROLE_SCU; break; default: scRole = DUL_SC_ROLE_DEFAULT; break; } cond = ::SRV_AcceptServiceClass(requestedCtx, scRole, service); if (cond == SRV_NORMAL) { classCount++; } else { ::printf("SRV Facility rejected SOP Class: %s\n", requestedCtx->abstractSyntax); ::COND_DumpConditions(); } } else { ::printf("Simple server rejects SOP Class with UID: %s\n", requestedCtx->abstractSyntax); dumpUIDDescription(requestedCtx->abstractSyntax); cond = ::SRV_RejectServiceClass(requestedCtx, DUL_PRESENTATION_REJECT_USER, service); if (cond != SRV_NORMAL) { drop = TRUE; } } requestedCtx = (DUL_PRESENTATIONCONTEXT*)::LST_Next(&service->requestedPresentationContext); } #if 0 ::printf("Supported classes: %d\n", classCount); #endif if (paramsFlag) { ::fprintf(stdout, "Application has now decided which presentation contexts to accept.\n\ Association parameters now look like this.\n"); ::DUL_DumpParams(service); } if (drop) { (void) ::DUL_DropAssociation(&association); ::COND_DumpConditions(); } else { if (printConnectionStatistics) { printf("%6d: %16s %16s %s\n", ++associationRequests, service->calledAPTitle, service->callingAPTitle, service->callingPresentationAddress); } acceptManageAssociation(&network, association, service, forkFlag, threadFlag, abortFlag, verboseDUL, releaseDelay, logDir.strData(), storageDir.strData(), dbName ); } } #if 0 (void) ::DUL_ClearServiceParameters(service); #endif if (CTN_ERROR(cond)) done = TRUE; if (trips >= 0) { if (trips-- <= 0) done = TRUE; } }
main(int argc, char **argv) { CONDITION cond; DUL_NETWORKKEY* network = NULL; DUL_ASSOCIATIONKEY* association = NULL; DUL_ASSOCIATESERVICEPARAMETERS params; char *calledAPTitle = "QUERY_SCP", *callingAPTitle = "QUERY_SCU"; char localHost[40]; int port; /* TCP port used to establish Association */ char* node; /* The node we are calling */ CTNBOOLEAN verbose = FALSE, abortFlag = FALSE, paramsFlag = FALSE; char *fileName = NULL; DUL_SC_ROLE role = DUL_SC_ROLE_DEFAULT; MSG_C_FIND_RESP response; MSG_C_FIND_REQ findRequest = {MSG_K_C_FIND_REQ, 0, 0, DCM_CMDDATAIDENTIFIER, 0, NULL, DICOM_SOPPATIENTQUERY_FIND}; char* queryLevel = "patient"; LST_HEAD* patientList = 0; LST_HEAD* studyList = 0; while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'a': argc--; argv++; if (argc <= 0) usageerror(); callingAPTitle = *argv; break; case 'c': argc--; argv++; if (argc <= 0) usageerror(); calledAPTitle = *argv; break; case 'f': argc--; argv++; if (argc <= 0) usageerror(); fileName = *argv; break; case 'l': argc--; argv++; if (argc <= 0) usageerror(); queryLevel = *argv; break; case 'p': paramsFlag = TRUE; break; case 'v': verbose = TRUE; break; default: break; } } if (argc < 2) usageerror(); THR_Init(); DUL_Debug(verbose); SRV_Debug(verbose); node = *argv; if (sscanf(*++argv, "%d", &port) != 1) usageerror(); (void) gethostname(localHost, sizeof(localHost)); cond = DUL_InitializeNetwork(DUL_NETWORK_TCP, DUL_AEREQUESTOR, NULL, 10, DUL_ORDERBIGENDIAN, &network); if (cond != DUL_NORMAL) myExit(&association); DUL_DefaultServiceParameters(¶ms); sprintf(params.calledPresentationAddress, "%s:%s", node, *argv); strcpy(params.callingPresentationAddress, localHost); strcpy(params.calledAPTitle, calledAPTitle); strcpy(params.callingAPTitle, callingAPTitle); cond = SRV_RequestServiceClass(DICOM_SOPPATIENTQUERY_FIND, role, ¶ms); if (cond != SRV_NORMAL) { COND_DumpConditions(); THR_Shutdown(); exit(1); } cond = DUL_RequestAssociation(&network, ¶ms, &association); if (cond != DUL_NORMAL) { if (cond == DUL_ASSOCIATIONREJECTED) { fprintf(stderr, "Association Rejected\n"); fprintf(stderr, " Result: %2x Source %2x Reason %2x\n", params.result, params.resultSource, params.diagnostic); } myExit(&association); } if (verbose || paramsFlag) { (void) printf("Association accepted, parameters:\n"); DUL_DumpParams(¶ms); } findRequest.messageID = SRV_MessageIDOut(); findRequest.identifier = createQueryObject(fileName); patientList = LST_Create(); studyList = LST_Create(); cond = SRV_CFindRequest(&association, ¶ms, &findRequest, &response, queryCallback, patientList, ""); if (!(CTN_SUCCESS(cond))) { (void) printf("Verification Request unsuccessful\n"); COND_DumpConditions(); } else { MSG_DumpMessage(&response, stdout); } SRV_MessageIDIn(findRequest.messageID); if (strcmp(queryLevel, "patient") != 0) { handleStudyQueries(&association, ¶ms, &findRequest, patientList, queryLevel); } if (strcmp(queryLevel, "series") == 0) { handleSeriesQueries(&association, ¶ms, &findRequest, patientList, queryLevel); } cond = DUL_ReleaseAssociation(&association); if (cond != DUL_RELEASECONFIRMED) { (void) fprintf(stderr, "%x\n", cond); COND_DumpConditions(); } (void) DUL_ClearServiceParameters(¶ms); printResults(patientList); (void) DUL_DropNetwork(&network); THR_Shutdown(); return 0; }
main(int argc, char **argv) { CONDITION /* Return values from DUL and ACR routines */ cond; DUL_NETWORKKEY /* Used to initialize our network */ * network = NULL; DUL_ASSOCIATIONKEY /* Describes the Association with the * Acceptor */ * association = NULL; DUL_ASSOCIATESERVICEPARAMETERS /* The items which describe this * Association */ params = { DICOM_STDAPPLICATIONCONTEXT, "DICOM_TEST", "DICOM_VERIFY", "", 16384, 0, 0, 0, "calling presentation addr", "called presentation addr", NULL, NULL, 0, 0, MIR_IMPLEMENTATIONCLASSUID, MIR_IMPLEMENTATIONVERSIONNAME, "", "" }; char *calledAPTitle = "DICOM_STORAGE", *callingAPTitle = "DICOM_ECHO"; char localHost[256]; int port; /* TCP port used to establish Association */ char *node; /* The node we are calling */ CTNBOOLEAN verbose = FALSE, abortFlag = FALSE, paramsFlag = FALSE, drop = FALSE, noRelease = FALSE; int repeat = 1, connections = 1, repeatCopy, sleepTime = 0; DUL_SC_ROLE role = DUL_SC_ROLE_DEFAULT; MSG_C_ECHO_RESP response; char *classFile = NULL; while (--argc > 0 && (*++argv)[0] == '-') { switch (*(argv[0] + 1)) { case 'a': argc--; argv++; if (argc <= 0) usageerror(); callingAPTitle = *argv; break; case 'c': argc--; argv++; if (argc <= 0) usageerror(); calledAPTitle = *argv; break; case 'd': drop = TRUE; break; case 'f': argc--; argv++; if (argc <= 0) { usageerror(); } classFile = *argv; break; case 'm': argc--; argv++; if (argc <= 0) usageerror(); if (strcmp(*argv, "SCU") == 0) role = DUL_SC_ROLE_SCU; else if (strcmp(*argv, "SCP") == 0) role = DUL_SC_ROLE_SCP; else if (strcmp(*argv, "SCUSCP") == 0) role = DUL_SC_ROLE_SCUSCP; else usageerror(); break; case 'n': argc--; argv++; if (argc <= 0) usageerror(); if (sscanf(*argv, "%d", &connections) != 1) usageerror(); break; case 'p': paramsFlag = TRUE; break; case 'r': argc--; argv++; if (argc <= 0) usageerror(); if (sscanf(*argv, "%d", &repeat) != 1) usageerror(); if (repeat <= 0) /* A special case */ repeat = 32 * 1024 * 1024; break; case 's': argc--; argv++; if (argc <= 0) usageerror(); if (sscanf(*argv, "%d", &sleepTime) != 1) usageerror(); break; case 'v': verbose = TRUE; break; case 'x': noRelease = TRUE; break; default: break; } } if (argc < 2) usageerror(); THR_Init(); DUL_Debug(verbose); SRV_Debug(verbose); node = *argv; if (sscanf(*++argv, "%d", &port) != 1) usageerror(); (void) gethostname(localHost, sizeof(localHost)); cond = DUL_InitializeNetwork(DUL_NETWORK_TCP, DUL_AEREQUESTOR, NULL, 10, DUL_ORDERBIGENDIAN, &network); if (cond != DUL_NORMAL) myExit(&association); if (classFile != NULL) { testSOPClasses(network, classFile, callingAPTitle, localHost, calledAPTitle, node, port); connections = 0; /* This will force us to skip the next section of echo code */ } while (connections-- > 0) { sprintf(params.calledPresentationAddress, "%s:%s", node, *argv); strcpy(params.callingPresentationAddress, localHost); strcpy(params.calledAPTitle, calledAPTitle); strcpy(params.callingAPTitle, callingAPTitle); cond = SRV_RequestServiceClass(DICOM_SOPCLASSVERIFICATION, role, ¶ms); if (cond != SRV_NORMAL) { COND_DumpConditions(); THR_Shutdown(); exit(1); } cond = DUL_RequestAssociation(&network, ¶ms, &association); if (cond != DUL_NORMAL) { if (cond == DUL_ASSOCIATIONREJECTED) { fprintf(stderr, "Association Rejected\n"); fprintf(stderr, " Result: %2x Source %2x Reason %2x\n", params.result, params.resultSource, params.diagnostic); } myExit(&association); } if (verbose || paramsFlag) { (void) printf("Association accepted, parameters:\n"); DUL_DumpParams(¶ms); } repeatCopy = repeat; while (repeatCopy-- > 0) { MSG_C_ECHO_REQ echoRequest = {MSG_K_C_ECHO_REQ, 0, 0, DCM_CMDDATANULL, DICOM_SOPCLASSVERIFICATION}; echoRequest.messageID = SRV_MessageIDOut(); cond = SRV_CEchoRequest(&association, ¶ms, &echoRequest, &response, echoCallback, "Context", ""); if (!(CTN_SUCCESS(cond))) { (void) printf("Verification Request unsuccessful\n"); COND_DumpConditions(); } else { MSG_DumpMessage(&response, stdout); } SRV_MessageIDIn(echoRequest.messageID); #ifdef _MSC_VER if (sleepTime > 0) Sleep(sleepTime * 1000); #else if (sleepTime > 0) sleep(sleepTime); #endif } if (abortFlag) { cond = DUL_AbortAssociation(&association); } else if (drop) { cond = DUL_DropAssociation(&association); } else if (noRelease == FALSE) { cond = DUL_ReleaseAssociation(&association); if (cond != DUL_RELEASECONFIRMED) { (void) COND_PopCondition(TRUE); #if 0 (void) fprintf(stderr, "%x\n", cond); COND_DumpConditions(); #endif } } (void) DUL_ClearServiceParameters(¶ms); } (void) DUL_DropNetwork(&network); THR_Shutdown(); return 0; }