예제 #1
0
파일: srv1.c 프로젝트: bhavik86/Dicom
CONDITION
SRV_RequestServiceClass(const char *SOPClass, DUL_SC_ROLE role, DUL_ASSOCIATESERVICEPARAMETERS * params)
{
    DUL_PRESENTATIONCONTEXTID	contextID = 1;
    int					        index;
    CTNBOOLEAN					found = FALSE;
    CONDITION					cond;
    DUL_PRESENTATIONCONTEXT		* ctx;

    if (params->requestedPresentationContext == NULL) {
    	params->requestedPresentationContext = LST_Create();
    	if (params->requestedPresentationContext == NULL) return COND_PushCondition(SRV_LISTFAILURE, SRV_Message(SRV_LISTFAILURE), "SRV_RequestServiceClass");
    }

    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);
    }

    for (index = 0; index < (int) DIM_OF(syntaxList) && !found; index++) {
    	if (strcmp(SOPClass, syntaxList[index]) == 0) found = TRUE;
	}
    if (found) {
    	char 	**xferSyntaxes;
    	int 	singleMode = 1;
    	int 	xferSyntaxCount = 0;

    	xferSyntaxes = mapProposedSOPToXferSyntax(SOPClass,	"PROPOSE/XFER", &xferSyntaxCount, &singleMode);

    	if (singleMode == 1) {
    		cond = DUL_AddSinglePresentationCtx(params, role, DUL_SC_ROLE_DEFAULT, contextID, 0, SOPClass, xferSyntaxes, xferSyntaxCount);
    	}else{
    		cond = DUL_AddMultiplePresentationCtx(params, role, DUL_SC_ROLE_DEFAULT, contextID, 0, SOPClass, xferSyntaxes, xferSyntaxCount);
    	}
    	if (cond != DUL_NORMAL) return COND_PushCondition(SRV_PRESENTATIONCONTEXTERROR, SRV_Message(SRV_PRESENTATIONCONTEXTERROR), "SRV_RequestServiceClass");

    	/* Legacy version removed 1/3/2001, smm
		cond = DUL_MakePresentationCtx(&ctx, role, DUL_SC_ROLE_DEFAULT, contextID, 0, SOPClass, "", DICOM_TRANSFERLITTLEENDIAN, NULL);
		if (cond != DUL_NORMAL){
			 return COND_PushCondition(SRV_PRESENTATIONCONTEXTERROR, SRV_Message(SRV_PRESENTATIONCONTEXTERROR), "SRV_RequestServiceClass");
		}else{
			cond = LST_Enqueue(&params->requestedPresentationContext, ctx);
			if (cond != LST_NORMAL) return COND_PushCondition(SRV_LISTFAILURE, SRV_Message(SRV_LISTFAILURE), "SRV_RequestServiceClass");
			contextID += 2;
		}
    	 */

    }else{
    	return COND_PushCondition(SRV_UNSUPPORTEDSERVICE, SRV_Message(SRV_UNSUPPORTEDSERVICE), SOPClass, "SRV_RequestServiceClass");
    }
    return SRV_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
파일: dulpresent.c 프로젝트: nagyistge/ctn
CONDITION
DUL_AddMultiplePresentationCtx(DUL_ASSOCIATESERVICEPARAMETERS* params,
			DUL_SC_ROLE proposedRole, DUL_SC_ROLE acceptedRole,
			DUL_PRESENTATIONCONTEXTID contextID,
			unsigned char reason, const char* abstractSyntax,
			const char** xferSyntaxes, int xferSyntaxCount)
{
  CONDITION cond;

  for (; xferSyntaxCount-- > 0; xferSyntaxes++, contextID += 2) {
    if (strlen(*xferSyntaxes) != 0) {
      cond = DUL_AddSinglePresentationCtx(params, proposedRole, acceptedRole,
	    contextID, reason, abstractSyntax, xferSyntaxes, 1);
      if (cond != DUL_NORMAL) {
	return cond;
      }
    }
  }

  return DUL_NORMAL;
}