3.2.3.5.4.2 STATE_RECEIVE_FRAGS

The server MUST take the following actions for every fragment received:

  1. If the packet is undersized (less than the size of the Connectionless PDU header as defined in [C706] section 12.5.1), the server MUST drop it. No further processing is required.

  2. If the packet is oversized, the server MUST drop it and send a FACK-with-body PDU indicating to the client the current limit of the server buffer (implementation specific) using the window_size field of the FACK PDU body as described in section 12.5.3.4 of [C706]. No further processing is required.

  3. Update the Received Fragment List.

  4. Update the Last Fragment Received Timestamp of the call.

  5. If a Callback State is false, check whether a conversation callback is required. If the call is not secure, is non-idempotent, and has an unknown CAS UUID (determined by searching the Table of Client Address Spaces), begin a conv_who_are_you2. When the callback completes, set the Table of Activity IDs entry CAS UUID to the value returned by the client. If the CAS UUID is not represented in the Table of Client Address Spaces, create a new entry in the Table of Client Address Spaces and set the new entry's CAS Context Handle List to NULL

  6. If the call is secure and the server does not have a security context in the activity's Table of Security Contexts that matches the key_vers_num in the packet's security trailer, begin a conv_who_are_you_auth and set Callback State to true. See section 3.2.1.4.1 for more information on how the callback generates a security context. If the server has no credentials matching the packet's auth_proto field, fail the conversation callback with status 0x000006D3.

    • If the conversation callback fails, send a REJECT to the client, change the call state to STATE_COMPLETE, remove the call from the Table of Active Calls per Activity, and update the Lowest-Allowed-Sequence Counter of the activity. End Processing.

    • If the conversation callback (for the purpose of establishing a security context) succeeds, add the resulting Security Context Handle to the activity's Table of Security Contexts.

  7. Send a FACK PDU with a body (as specified in [C706] section 12.5.3.4) and version field value set to 1, to the client.

  8. Update the Last Use Timestamp value in the Table of Activity IDs activity entry.

  9. If all receive fragments are present in the Received Fragment List, or if the call uses DCE pipes, and the server has received all the [in] arguments that are not marked with the [PIPE] attribute in the IDL file, set Call State to STATE_WORKING and dispatch to the application stub. For information about how the [in] arguments that are marked with the [PIPE] attribute in the IDL file are received in an application stub through the pull procedure, refer to [C706] section 5.1.4.

  10. If the received packet has the PF2_UNRELATED flag set, set Overlapped in the server call to TRUE, otherwise, set it to FALSE.