예제 #1
0
파일: dcm1.c 프로젝트: bhavik86/Dicom
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;
}
예제 #2
0
파일: srv1.c 프로젝트: bhavik86/Dicom
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(&params->requestedPresentationContext);
  if (ctx != NULL) (void) LST_Position(&params->requestedPresentationContext, ctx);
  while (ctx != NULL) {
	  contextID += 2;
	  if (strcmp(SOPClass, ctx->abstractSyntax) == 0) return SRV_NORMAL;
	  ctx = LST_Next(&params->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;
}
예제 #3
0
파일: srv1.c 프로젝트: bhavik86/Dicom
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;
}
예제 #4
0
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;
}
예제 #5
0
파일: MDDRFile.cpp 프로젝트: nagyistge/mesa
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;
}
예제 #6
0
파일: srv1.c 프로젝트: stl-steve-moore/ctn
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;
}