3.2.2.1.10 Call

The call is a data element that encapsulates the state associated with a client call. The client call is specified by a state machine with the following states.

 State

 Description

STATE_QUEUED

The call is queued by the client and will transition to STATE_SEND_FRAGS when possible. This is the call's initial state.

STATE_SEND_FRAGS

The client is sending fragments of the call's [in] parameters to the server.

STATE_DISPATCHED

The server has called the server application stub.

STATE_RECEIVE_FRAGS

The server is sending fragments of the call's [out] parameters to the client.

STATE_ACK_PENDING

[out] parameters are received, and the call is waiting to send an ACK packet.

STATE_COMPLETE

The call completed successfully. This is a terminal state.

STATE_FAULT

The call failed. This is a terminal state.

When a call reaches STATE_COMPLETE or STATE_FAULT, the client MUST decrement the associated Active Call Reference counter. See section 3.2.2.4.1.2 for more information on how a call is associated with an activity.

The call maintains several properties:

  • Call State: an implementation-specific value that represents the call state from the preceding table.

  • A flag F_CANCELED that is true when the client application cancels the call.

  • A counter CANCEL_EVENT_ID that identifies a particular cancellation attempt. It is an unsigned long counter, initialized to a value of 0. The CANCEL_EVENT_ID is incremented each time before sending QUIT message (so that the first CANCEL_EVENT_ID is 1). Sending a QUIT message happens every time a call is being canceled and is always initiated by the client.

  • Status: A 32-bit unsigned integer that contains the status code for the call as described in [C706] section 2.9. See section 3.1.1.5.5 for information on processing rules related to returning status codes to a higher-layer protocol.

  • Causal Ordering Flag

  • Send Window (Call)

  • Receive Window (Call)

  • Sequence Number: An unsigned 32-bit integer, as specified in [C706] section 12.5.2.11, that identifies this Call.

  • Overlapping: A Boolean flag that indicates whether the call SHOULD use overlapped behavior as described in section 3.2.1.5.2. The client SHOULD set this flag to TRUE if the activity's Client Address Space Supports PF2_Unrelated Flag is set to TRUE. When the flag is set, each call from the client MUST set the PF2_UNRELATED flag in each REQUEST packet.

  • Activity UUID: The UUID of the activity associated with the Call as specified in [C706] section 9.5.3. Initialization of the Activity UUID for a call is specified in section 3.2.2.4.1.2.

  • Packet Retransmission Timer: The Packet Retransmission Timer for the call. See section 3.2.2.2.1 for a description of the timer.

When the call reaches a terminal state (STATE_COMPLETE or STATE_FAULT), all the call properties listed in the preceding list are invalidated and SHOULD be freed.

The following diagram illustrates the state transitions.

State transitions

Figure 16: State transitions

Note The preceding conceptual data can be implemented by using a variety of techniques.