3.3.1.5.3 Bind Time Feature Negotiation

These extensions introduce additional rules about how a bind PDU SHOULD be composed by the client and processed by the server, and how the response bind_ack PDU SHOULD be composed by the server and processed by the client. [C706] sections 12.6.4.3 and 12.6.4.4 specify a bind PDU and a bind_ack PDU. When sending a bind PDU, a client SHOULD add an element in the p_cont_elem array that has the same value for the abstract_syntax field as the previous element in the p_cont_elem array, but that MUST have exactly one element in the transfer_syntaxes array; also, its if_uuid field MUST have the following prefix: 6CB71C2C-9812-4540 and a version number of 1.0. If a client does so, it is said to have indicated support for bind time feature negotiation. A client MUST have, at most, one element in the p_cont_elem array that has an if_uuid with that prefix in the transfer_syntaxes array. If a client has indicated support for bind time feature negotiation, the message processing rule in this section SHOULD be applied by the server implementation to all messages for this connection. If a client has not indicated support for bind time feature negotiation, the message processing rules in this section do not apply to this connection.<99>

If a client has indicated support for bind time feature negotiation, the eight octets immediately after the prefix are interpreted as BindTimeFeatureNegotiationBitmask, as specified in section 2.2.2.14. If the SecurityContextMultiplexingSupported bit is set, this means the client supports security context multiplexing, as specified in section 3.3.1.5.4. If the KeepConnectionOnOrphan bit is set, this means the client supports keeping the connection open after an orphaned PDU is sent, as specified in section 3.3.1.5.10.

As specified in [C706], section 12.6.3.1, the bind_ack PDU MUST contain the same number of <p_result_t> elements in <p_result_list> as the number of elements in p_cont_array in the bind PDU. Each <p_result_t> element represents the response from the server for each element in the p_cont_array. Thus the elements in the <p_result_list> MUST be in the same order as the elements in the p_cont_array.

The server MUST set the corresponding p_result_t element in the p_result_list in the bind_ack PDU described as follows. If the server supports bind time feature negotiation, it MUST reply with the result field in the p_result_t structure of the bind_ack PDU equal to negotiate_ack, and it MUST use the reason field of the p_result_t structure as a BindTimeFeatureNegotiationResponseBitmask structure. The server MUST set the transfer_syntax element in the p_result_t structure to zero.

If a client has set the SecurityContextMultiplexingSupported bit in the BindTimeFeatureNegotiationResponseBitmask structure, and the server supports security context multiplexing, the server SHOULD set the SecurityContextMultiplexingSupported bit of the BindTimeFeatureNegotiationResponseBitmask structure.

If the server does not support security context multiplexing, the server MUST clear the SecurityContextMultiplexingSupported bit of the BindTimeFeatureNegotiationResponseBitmask structure. If the SecurityContextMultiplexingSupported bit in the BindTimeFeatureNegotiationResponseBitmask structure is set, and if the client supports security context multiplexing, then security context multiplexing SHOULD be used on this connection, as specified in section 3.3.1.5.4.<100>

If a client has set the KeepConnectionOnOrphanSupported bit in the BindTimeFeatureNegotiationBitmask structure and the server supports keeping the connection open after an orphaned PDU is received, the server SHOULD set the KeepConnectionOnOrphanSupported bit in the BindTimeFeatureNegotiationResponseBitmask structure.

If the server does not support keeping the connection open after an orphaned PDU is received, the server MUST clear the KeepConnectionOnOrphanSupported bit in the BindTimeFeatureNegotiationResponseBitmask. If the KeepConnectionOnOrphanSupported bit in the BindTimeFeatureNegotiationResponseBitmask is set and the client supports keeping the connection open after an orphaned PDU is sent, the client SHOULD start keeping the connection open after sending an orphaned PDU on the connection, as specified in Keeping Connections Open After Client Sends an Orphaned PDU (section 3.3.1.5.10).<101>

For future extensibility, these rules MUST be applied by the server and the client to all reserved bits in the BindTimeFeatureNegotiationResponseBitmask and BindTimeFeatureNegotiationResponseBitmask structures:

  • If a client supports a given feature, the client MUST set the bit (or set of bits) associated with this feature.

  • If a bit (or set of bits) used to communicate that a client supports a given feature is not set, the server MUST assume that the client does not support this feature.

  • If a server does support the feature, the server MUST set the bits associated with that feature in the BindTimeFeatureNegotiationResponseBitmask bitmask.

  • A server MUST clear all bits in the BindTimeFeatureNegotiationResponseBitmask bitmask that it interprets are reserved.

Any bind time features that are successfully negotiated are stored in the client and server's Association's Bind Features Bitmask.