3.2.5.1.4 Receiving Any Transaction Response

When a client receives an SMB transaction response, it MUST first determine whether it is an interim response or a final response by looking up the TransactionState for this request in Client.Connection.PIDMIDList. If the TransactionState is "TransmittedPrimaryRequest", and if the SMB_Parameters.WordCount and SMB_Data.ByteCount values are 0 in the transaction response, the client MUST consider the received response an interim response.

  • If the interim response indicates an error, then the transaction is canceled. The client MUST NOT send any secondary transaction request messages.

  • If the interim response indicates success, then the client MUST set the TransactionState for this request (in Client.Connection.PIDMIDList) to "ReceivedInterimResponse" and send as many secondary requests as are needed to complete the transfer of transaction parameters and data. After transmitting all the secondary requests, the client MUST set the TransactionState for this request to "TransmittedAllRequests".

If the TransactionState is not "TransmittedPrimaryRequest", or if the SMB_Parameters.WordCount and SMB_Data.ByteCount values are not both 0 in the transaction response, the client MUST consider the received response as a final transaction response. The server can send multiple final SMB transaction response messages in order to transfer the entire transaction response. If multiple final SMB transaction response messages are needed, the client MUST reconstruct the transaction response parameters and transaction response data from the contents of the SMB response messages before processing the completed transaction response.