3.2.5.4.2 Receiving an XAUSER_XACT_MTAG_RESUME Message
When the XA Subordinate Transaction Manager Facet receives an XAUSER_XACT_MTAG_RESUME message, it MUST perform the following actions:
If the connection state is Idle:
Set the connection state to Processing Migrate Request.
Attempt to find an XA Superior Object in the XA Superior Table referenced by this connection keyed by the guidXaRm field of the message.
If an Object is not found:
Send an XAUSER_XACT_MTAG_OPEN_NOT_FOUND message using the connection.
Set the connection state to Ended.
Otherwise:
Attempt to find XA Superior Enlistment Object in XA Superior Enlistment Table referenced by the XA Superior Object that meets one of the following conditions:
The XID field is set to the XAIdentifier field of the message.
The Coupling field of the XA Superior Enlistment Object is set to Tight and has a Child Branch Table which contains an XA Superior Child Branch Enlistment Object with a XID field set to the value of the XAIdentifier field of the message.
If an Object is not found:
Send an XAUSER_XACT_MTAG_OPEN_NOT_FOUND message using the connection.
Otherwise:
If first condition was satisfied:
If the State field of the XA Superior Enlistment Object is set to Migrate:
Set State field of the XA Superior Enlistment Object to Active.
Send an XAUSER_XACT_MTAG_OPEN_NOT_FOUND message.
Otherwise:
Send an XAUSER_XACT_MTAG_TRANSACTION_NOT_SUSPENDED message.
Otherwise, if second condition was satisfied:
If the State field of the XA Superior Child Branch Enlistment Object is set to Migrate:
Set State field of the XA Superior Child Branch Enlistment Object to Active.
Send an XAUSER_XACT_MTAG_RESUME_DONE message.
Otherwise:
Send an XAUSER_XACT_MTAG_TRANSACTION_NOT_SUSPENDED message.
Set the connection state to Ended.
Otherwise, the message MUST be processed as an invalid message as specified in section 3.1.6.