Extended negotiation allows “options” to be negotiated between 2 Application Entities as part of Negotiation. In order for the option to be available for use, it must be both proposed by the initiator and agreed by the acceptor.

The uses for extended negotiation are currently:

  • Relational Queries
  • Specification of storage level (how accurately the data is retained) for C-STORE

In DicomObjects, these values are used as follows:

For an SCU:

  • Create and set up a DicomConnection/DicomAssociation object
  • Add the appropriate Presentation Context
  • Set the ExtendedNegotiationValues property of that context to a byte array containing the values required
  • Use SetDestination/Open as normal
  • Check the ExtendedNegotiationValues property of the context to see if it has been accepted by the SCP (and if not, do not expect to use the facility!)

For an SCP:

  • Set DicomServer.AllowExtendedNegotiation to true
  • In the AssociationRequest event, check the value of the ExtendedNegotiationValues property of the requested contexts, and leave at 1 if you accept, or set to 0 if you do not.

Note that for convenience in DicomObjects, these values are attached per DicomContext COM/.NET but in fact are negotiated at a SOP Class level, so values set/accessed for one DicomContext are in fact shared between all DicomContext objects in the same association sharing the same SOP Class/Abstract Context.