3.2.5.7 Receiving PULL TIP Command

This event MUST be received with the following arguments:

  • superior's transaction identifier

  • subordinate's transaction identifier

When the TIP superior transaction manager facet (section 1.3.1.2.1) receives a PULL TIP command, it MUST perform the following actions:

  • If the value of the Allow Network Transactions flag or the Allow Outbound Transactions flag is FALSE:

  • Test whether the receiving TIP connection object meets the following conditions:

    • The Connection Type field is set to Secondary.

    • The State field is set to Idle.

  • If the receiving TIP connection does not satisfy the conditions, signal the Invalid TIP Command Event (section 3.4.7.1) and terminate the processing of this TIP command.

  • If the provided superior's transaction identifier does not have the OleTxTipTransactionIdentifier format, as specified in section 2.2:

    • Call the TIP connection manager's HasPartnerTransaction operation with the following arguments:

    • If HasPartnerTransaction returns TRUE, send a NOTPULLED TIP command and terminate the processing of this TIP command.

  • Call the Transaction Identifier Converter's Convert TIP Transaction Identifier to Transaction Identifier operation with the following argument:

    • The provided superior's transaction identifier.

  • Attempt to find a transaction object in the transaction table referenced by the core transaction manager facet that meets the following condition:<12>

    • Transaction Identifier is set to the return value from the Transaction Identifier Converter's Convert TIP Transaction Identifier to Transaction Identifier operation.

  • If a transaction object is not found, send a NOTPULLED TIP command and terminate the processing of this TIP command.

  • Attempt to find a transaction object in the transaction table referenced by the core transaction manager facet that has a superior enlistment object whose Partner Transaction Identifier field is not of the OleTxTipTransactionIdentifier format.

  • If a transaction object is found:

    • Call the TIP connection manager's TerminateTipConnection operation with the provided TIP connection object. This action does not conform to the [RFC2371] specification.

    • Terminate the processing of this event.

  • If the value of the Allow PassThrough flag is FALSE and the transaction object has a superior TIP enlistment and no local enlistments, send a NOTPULLED TIP command and terminate the processing of this TIP command.

  • Create a new enlistment object with the following values:

    • The TIP connection reference is set to the TIP connection object.

    •  The transaction object reference is set to the transaction object.

    • The Partner Transaction Identifier field is set to the provided subordinate's transaction identifier.

    • Set the TIP connection object's Enlistment field to the enlistment object.

    • Signal the Create Subordinate Enlistment event on the core transaction manager facet with the following argument:

      • The TIP connection object's enlistment object.

  • Set the TIP connection object's State field to Enlisted.

  • Send a PULLED TIP command.