CONDITION DCM_FreeFileMeta(DCM_FILE_META ** fileMeta) { if (fileMeta == NULL) return 0; /* repair */ if (*fileMeta == NULL) return 0; /* repair */ if ((*fileMeta)->privateInformation != NULL) CTN_FREE((*fileMeta)->privateInformation); CTN_FREE(*fileMeta); *fileMeta = NULL; return DCM_NORMAL; }
CONDITION SRV_ProposeSOPClassWithXfer(const char*SOPClass, DUL_SC_ROLE role, char** xferSyntaxes, int xferSyntaxCount, int isStorageClass, DUL_ASSOCIATESERVICEPARAMETERS* params) { DUL_PRESENTATIONCONTEXTID contextID = 1; CONDITION cond; DUL_PRESENTATIONCONTEXT* ctx; char** xferSyntaxesLocal = 0; char* prefix = "PROPOSE/XFER"; int singleMode = 1; if (params->requestedPresentationContext == NULL) { params->requestedPresentationContext = LST_Create(); if (params->requestedPresentationContext == NULL) return COND_PushCondition(SRV_LISTFAILURE, SRV_Message(SRV_LISTFAILURE), "SRV_ProposeSOPClassWithXfer"); } ctx = LST_Head(¶ms->requestedPresentationContext); if (ctx != NULL) (void) LST_Position(¶ms->requestedPresentationContext, ctx); while (ctx != NULL) { contextID += 2; if (strcmp(SOPClass, ctx->abstractSyntax) == 0) return SRV_NORMAL; ctx = LST_Next(¶ms->requestedPresentationContext); } if (xferSyntaxCount == 0) { if (isStorageClass) prefix = "PROPOSE/XFER/STORAGE"; xferSyntaxesLocal = mapProposedSOPToXferSyntax(SOPClass, prefix, &xferSyntaxCount, &singleMode); }else{ xferSyntaxesLocal = xferSyntaxes; singleMode = 1; } if (singleMode == 1) { cond = DUL_AddSinglePresentationCtx(params, role, DUL_SC_ROLE_DEFAULT, contextID, 0, SOPClass, xferSyntaxesLocal, xferSyntaxCount); }else{ cond = DUL_AddMultiplePresentationCtx(params, role, DUL_SC_ROLE_DEFAULT, contextID, 0, SOPClass, xferSyntaxesLocal, xferSyntaxCount); } if (xferSyntaxesLocal != xferSyntaxes) CTN_FREE(xferSyntaxesLocal); if (cond != DUL_NORMAL) return COND_PushCondition(SRV_PRESENTATIONCONTEXTERROR, SRV_Message(SRV_PRESENTATIONCONTEXTERROR), "SRV_ProposeSOPClassWithXfer"); if (cond != DUL_NORMAL) return COND_PushCondition(SRV_PRESENTATIONCONTEXTERROR, SRV_Message(SRV_PRESENTATIONCONTEXTERROR), "SRV_ProposeSOPClassWithXfer"); return SRV_NORMAL; }
static DUL_TRANSFERSYNTAX* matchProposedXferSyntax(DUL_PRESENTATIONCONTEXT* requestedCtx, const char* prefix, char** xferSyntaxes, int xferSyntaxCount) { char** xferSyntaxesLocal = 0; DUL_TRANSFERSYNTAX* transfer; int found = 0; int idx; if (xferSyntaxCount == 0) { char* paramValue; char paramName[1024] = ""; strcpy(paramName, prefix); strcat(paramName, "/"); strcat(paramName, requestedCtx->abstractSyntax); paramValue = UTL_GetConfigParameter(paramName); if (paramValue == NULL) paramValue = DICOM_TRANSFERLITTLEENDIAN; xferSyntaxesLocal = UTL_ExpandToPointerArray(paramValue, ";", &xferSyntaxCount); }else{ xferSyntaxesLocal = xferSyntaxes; } for (idx = 0; (idx < xferSyntaxCount) && !found; idx++) { transfer = (DUL_TRANSFERSYNTAX*)LST_Head(&requestedCtx->proposedTransferSyntax); (void) LST_Position(&requestedCtx->proposedTransferSyntax, transfer); while (transfer != NULL) { if (strcmp(transfer->transferSyntax, xferSyntaxesLocal[idx]) == 0) { found = 1; break; }else{ transfer = LST_Next(&requestedCtx->proposedTransferSyntax); } } } if (xferSyntaxesLocal != xferSyntaxes) CTN_FREE(xferSyntaxesLocal); return transfer; }
CONDITION UTL_SetConfigFile(const char* configFile) { if (UTL_configFile != 0) { CTN_FREE(UTL_configFile); } if (configFile == 0 || configFile[0] == '\0') { char* p = getenv("CTN_TARGET"); if (p == NULL) { return UTL_NO_CTN_TARGET; } UTL_configFile = (char*) malloc(strlen(p) + strlen("/runtime/ctn_cfg.txt") + 1); strcpy(UTL_configFile, p); strcat(UTL_configFile, "/runtime/ctn_cfg.txt"); } else { UTL_configFile = (char*) malloc(strlen(configFile)+1); strcpy(UTL_configFile, configFile); } return UTL_NORMAL; }
int MDDRFile::getStudyCount(const char* patientID) { if (mDICOMWrapper == 0) { return -1; } CONDITION cond; LST_HEAD* studyList = 0; studyList = ::LST_Create(); DCM_OBJECT* obj = mDICOMWrapper->getNativeObject(); cond = ::DDR_GetStudyList(&obj, patientID, &studyList); if (cond != DDR_NORMAL) { return -1; } int count = ::LST_Count(&studyList); LST_NODE* n; while ((n = ::LST_Dequeue(&studyList)) != 0) { CTN_FREE(n); } ::LST_Destroy(&studyList); return count; }
static DUL_TRANSFERSYNTAX* matchProposedXferSyntax(DUL_PRESENTATIONCONTEXT* requestedCtx, const char* prefix, char** xferSyntaxes, int xferSyntaxCount) { char** xferSyntaxesLocal = 0; int singleMode = 0; DUL_TRANSFERSYNTAX* transfer; int found = 0; int idx; if (xferSyntaxCount == 0) { char* paramValue; char paramName[1024] = ""; strcpy(paramName, prefix); strcat(paramName, "/"); strcat(paramName, requestedCtx->abstractSyntax); paramValue = UTL_GetConfigParameter(paramName); if (paramValue == NULL) paramValue = DICOM_TRANSFERLITTLEENDIAN; xferSyntaxesLocal = UTL_ExpandToPointerArray(paramValue, ";", &xferSyntaxCount); } else { xferSyntaxesLocal = xferSyntaxes; } for (idx = 0; (idx < xferSyntaxCount) && !found; idx++) { transfer = (DUL_TRANSFERSYNTAX*)LST_Head(&requestedCtx->proposedTransferSyntax); (void) LST_Position(&requestedCtx->proposedTransferSyntax, transfer); while (transfer != NULL) { // COND_PushCondition(0, "%s %s", transfer->transferSyntax, xferSyntaxesLocal[idx]); /*repair*/ if (strcmp(transfer->transferSyntax, xferSyntaxesLocal[idx]) == 0) { found = 1; break; } else transfer = LST_Next(&requestedCtx->proposedTransferSyntax); } } if (!found) { DUL_TRANSFERSYNTAX* x; x = (DUL_TRANSFERSYNTAX*)LST_Head(&requestedCtx->proposedTransferSyntax); (void)LST_Position(&requestedCtx->proposedTransferSyntax, x); while (x != NULL) { COND_PushCondition(SRV_REQUESTEDXFER, "SRV REQUESTED transfer syntax: %s", x->transferSyntax); x = (DUL_TRANSFERSYNTAX*)LST_Next(&requestedCtx->proposedTransferSyntax); } for (idx = 0; (idx < xferSyntaxCount) && !found; idx++) { COND_PushCondition(SRV_SUPPORTEDXFER, "SRV Supported transfer syntax: %s", xferSyntaxesLocal[idx]); } transfer = 0; } if (xferSyntaxesLocal != xferSyntaxes) { CTN_FREE(xferSyntaxesLocal); } return transfer; }