3.13.4 Message Processing Events and Sequencing Rules

When the client transaction ORPC extension participates in an ORPC request, it MUST perform the following sequence of operations.

If the TransactionRequiredInORPC flag is FALSE, the client MUST NOT send a transaction ORPC call extension (section 2.2.3.1.1) in the ORPC request.

Otherwise, the client transaction ORPC extension MUST construct a TransactionPropCallHeader (section 2.2.3.1.1.1) structure as follows:

  • It MUST set the m_ulSeq field to the CurrentTSN value.

  • If the DtcCap_CanTransmit bit (section 2.2.6.1) is set in the DtcCapabilities flag, the client transaction ORPC extension MUST set the m_usFlags field to 0x00000000.

  • Otherwise, if the DtcCap_CanExport bit (section 2.2.6.1) is set in the DtcCapabilities value:

    • The client transaction ORPC extension MUST look up the WhereaboutsID GUID in the global Whereabouts table.

      • If the entry is found and if the entry has a non-empty SWhereabouts structure, it MUST set the m_usFlags field to 0x00000000.

      • Otherwise, it MUST set the m_usFlags field to TransactionPropCallFlag_NeedWhereabouts.

  • Otherwise, it MUST set the m_usFlags field to 0x00000000.

  • If the CurrentTSN value is the same as the KnownTSN value, the client transaction ORPC extension MUST set the m_usVariant field to TransactionPropCall_None.

  • Otherwise, if the m_usFlags field is set to TransactionPropCallFlag_NeedWhereabouts, the client transaction ORPC extension MUST set the m_usVariant field to TransactionPropCall_None.

  • Otherwise, if the DtcCap_CanTransmit bit is set in the DtcCapabilities value, the client transaction ORPC extension MUST set the m_usVariant field to TransactionPropCall_TransmitterBuffer and MUST follow the TransactionPropCallHeader structure with a TransactionPropCallTransmitterBuffer (section 2.2.3.1.1.3) structure containing the Propagation_Token ([MS-DTCO] section 2.2.5.4) for the current transaction.

  • Otherwise, if the DtcCap_CanExport bit is set in the DtcCapabilities value, the client transaction ORPC extension MUST set the m_usVariant field to TransactionPropCallExportCookie (section 2.2.3.1.1.2) and MUST follow the TransactionPropCallHeader structure with TransactionPropCallExportCookie containing the STxInfo ([MS-DTCO] section 2.2.5.10) for the current transaction.

If the ORPC request contains an application object in an ORPC request parameter, the client transaction ORPC extension MUST marshal the application object as specified in section 3.19.

If the ORPC request contains an application object reference in an ORPC request parameter, the client transaction ORPC extension MUST marshal the application object reference as specified in section 3.20.

Upon return of the ORPC call, the client transaction ORPC extension MUST process the returned TransactionPropRetHeader (section 2.2.3.1.2.1) from the server as follows:

  • If the ORPC response contains an application object reference in an ORPC response parameter, the client transaction ORPC extension MUST unmarshal the application object reference as specified in section 3.20.

  • If the m_usFlags field of TransactionPropRetHeader contains the TransactionPropRetFlag_DontSend flag, the client transaction envoy MUST set the KnownTSN value to the CurrentTSN value.

  • If the m_usVariant field of TransactionPropRetHeader contains the TransactionPropRet_Whereabouts flag, the client MUST do the following: