Reverse Role Negotiation

In the vast majority of Associations, the Association is initiated by the SCU with the SCP responding, but DICOM does allow Reverse Role Negotiation whereby the initiator can request to be regarded as the SCP. In practise, this is only used as part of the Storage Commitment service.

An oddity of reverse role negotiation (like Extended_Negotiation) is that it is agreed per SOP Class not Per Presentation Context, so an agreement to reverse the roles applies to all presentation contexts using that SOP Class.


Use in DicomObjects

As an SCU

This is only possible when using a DicomConnection(COM_Version) or DicomAssociation(.NET_Version) and is controlled by changing the RequesterSCURole & RequesterSCPRole properties. By Default, RequesterSCURole is true and RequesterSCPRole is false. Note that whilst these appear to be properties of a presentation context (DicomContext), they are in fact shared by all presentation contexts with the same SOP_Class. Following negotiation (SetDestination in COM or Open in .NET) these properties contain the values which were accepted by the accepting application.

As an SCP

Check the values of the RequesterSCURole & RequesterSCPRole properties of the offered presentation contexts, and if necessary change to false to indicate your capabilities.

Allowed Values

One or other of RequesterSCURole or RequesterSCPRole must be true for any usable presentation context, and of course the acceptor may only accept what is offered. In addition, it would not generally be advisable to have both accepted, so that only really leaves 3 possibilities:

  • Normal
    • Initiator offers SCU=True and SCP=False
    • Acceptor must either leave untouched or refuse the context/SOP class
    • Result is "Normal" mode with initiator = SCU
  • Reverse Role
    • Initiator offers SCU=False and SCP=True
    • Acceptor must either leave untouched or refuse the context/SOP class
    • Result is "Reverse" mode with initiator=SCP
  • Acceptor Choice
    • Initiator offers SCU=True and SCP=True
    • Acceptor should set one or other to false
    • Result depends on choice made by acceptor