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:
Call the TIP connection manager's TerminateTipConnection operation with the following argument:
The provided TIP connection object.
Terminate the processing of this TIP command.
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:
The provided partner transaction manager address.
The provided superior's transaction identifier.
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.