Существует ли встроенный способ отклонения определенных классов SOP на сервере fo-DICOM? - PullRequest
1 голос
/ 03 февраля 2020

Я хочу запустить сервер fo-DICOM, который возвращает DicomStatus SOPClassNotSupported, если, например, я пытаюсь сделать на нем CStoreRequest с классом SOP для документов Encapsulated PDF. Могу ли я заранее определить классы SOP для отклонения вместо того, чтобы явно отклонять его в методе OnCStoreRequest()?

Что у меня есть:

public DicomCStoreResponse OnCStoreRequest(DicomCStoreRequest request)
{
   DicomStatus dicomStatus = DicomStatus.Success;
   var SOPClassUID = request.Dataset.GetSingleValue<DicomUID>(DicomTag.SOPClassUID);
   if(SOPClassUID == DicomUID.EncapsulatedPDFStorage) {
      dicomStatus = DicomStatus.SOPClassNotSupported;
   }
   return new DicomCStoreResponse(request, dicomStatus);
}

Приведенный выше код работает, но Я бы сделал это по-другому, если бы был какой-то официальный / встроенный способ определить, какие классы SOP следует отклонить.

1 Ответ

2 голосов
/ 03 февраля 2020

Вы можете контролировать это поведение на уровне АССОЦИАЦИИ. Перед отправкой ASSOCIATE_ACCEPT проверьте предложенный абстрактный синтаксис.

public Task OnReceiveAssociationRequestAsync(DicomAssociation association)
{
    foreach(var pc in association.PresentationContexts)
    {
        if(pc.AbstractSyntax == DicomUID.EncapsulatedPDFStorage)
            pc.SetResult(DicomPresentationContextResult.RejectAbstractSyntaxNotSupported);
        else
        {
            pc.AcceptTransferSyntaxes(AcceptedImageTransferSyntaxes);
            pc.SetResult(DicomPresentationContextResult.Accept);
        }
    }

    return SendAssociationAcceptAsync(association);
}

DicomAssociation association - это ASSOCIATION_REQUEST, который вы получили. association.PresentationContexts содержит все предложенные контексты представления в полученной ассоциации. Вы перечисляете по каждому из них. Каждый предлагаемый контекст представления содержит абстрактный синтаксис и список предлагаемых синтаксисов передачи. Вы можете l oop просмотреть список синтаксисов передачи и установить тот, который вы предпочитаете; поскольку ваш вопрос не об этом, я пропустил эту часть в коде.

Если вы можете принять (получить / обработать) предложенную пару абстрактного синтаксиса и синтаксиса передачи, вы принимаете эту конкретную c презентацию Контекст, установив его результат. Если вы этого не сделаете, установите результат соответственно с указанием причины.

Наконец, отправьте ASSOCIATE_ACCEPT (или отклоните ...).

...