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(¶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); } 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(¶ms->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; }
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; }
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; }