3.2.1.5.2 Overlapped Calls

These extensions extend the connectionless protocol, as specified in [C706], to allow multiple simultaneously active calls in a single activity. This reduces the overhead of asynchronous calls, which ordinarily require a separate activity and security context for each overlapping call. Use of the new feature requires that both the client and server support the extension.

The processing order for calls on the server is specified in [C706] section 6.1. That definition is preserved in these extensions. These extensions deviate from what is specified in [C706] by allowing the [in] and [out] buffers of multiple calls to overlap in transmission.

The server conv_who_are_you2 and conv_who_are_you_auth conversation callbacks SHOULD set the PF2_UNRELATED bit; this indicates to the client that the server is capable of handling overlapped calls correctly.

After the client has successfully processed a conversation callback with the PF2_UNRELATED flag set, it SHOULD set the client's Supports PF2_Unrelated Flag and overlap calls on any activity in the Client Address Space for that particular RPC server if the implementation-specific methods for call invocation allow the specification of simultaneous or asynchronous call invocations, and the higher-layer protocol requests simultaneous or asynchronous calls..<76>All calls where the higher-layer protocol requests simultaneous or asynchronous behavior MUST set the Overlapping ADM element of the call to TRUE. If Overlapping is set to TRUE, the client MUST set the PF2_UNRELATED flag in each REQUEST packet that is sent before a call with a lower sequence number has completed. This informs the server not to cancel or complete other active calls with lower sequence numbers.<77>

When the client has not successfully processed a conversation callback with the PF2_UNRELATED flag set, it MUST NOT overlap multiple calls of an activity. In particular, the client MUST NOT send a REQUEST for a call until all calls with lower sequence numbers have entered STATE_ACK_PENDING, STATE_COMPLETE, or STATE_FAULT. The client MUST NOT set the PF2_UNRELATED flag in any REQUEST packet.

Overlapped calls all use the same Security Context Handle associated to their parent activity. If the activity's security context (identified by the activity's Security Context Handle) is renegotiated while calls are overlapped, it might happen that certain PDUs will be handled with the wrong security context and thus will fail the security verification. In such a case, the packets are dropped and the protocol relies on the Communication Time-Out Timer to resend the packet using the new security context.

The client and server MUST NOT set the PF2_UNRELATED flag in the header of any other packet type.

See section 3.2.2.4.1.5 for details of how overlapped calls are processed on the client.