3.2.5.6.4 Receiving an XAUSER_XACT_MTAG_ABORT Message
When the XA Subordinate Transaction Manager Facet receives an XAUSER_XACT_MTAG_ABORT message, it MUST perform the following actions:
If the receiving connection references XA Superior Enlistment:
If the connection state is set to Active and the State field of the XA Superior Enlistment Object referenced by the XA Superior Enlistment CMP Connection is set to Aborted:
Send an XAUSER_XACT_MTAG_REQUEST_COMPLETED message.
Remove XA Superior Enlistment Object from the XA Superior Enlistment Table of the XA Superior Object indexed in the XA Superior Table by the Resource Manager Recovery GUID of the XA Superior Enlistment Object.
Otherwise if the connection state is set to Active and the State field of the XA Superior Enlistment Object referenced by the XA Superior Enlistment CMP Connection is set to either Active, Prepared, or In Doubt:
Set Current Request CMP Connection field of XA Superior Enlistment Object referenced by the XA Superior Enlistment CMP Connection to receiving connection.
Set State field of XA Superior Enlistment Object referenced by the XA Superior Enlistment CMP Connection to Aborting.
Signal the Begin Rollback event ([MS-DTCO] section 3.2.7.6) on the Core Transaction Manager Facet with the following argument:
The Transaction Object referenced by the XA Superior Enlistment Object referenced by the XA Superior Enlistment CMP Connection.
Otherwise, if the connection state is set to Active and the State field of the XA Superior Enlistment Object referenced by the XA Superior Enlistment CMP Connection is set to Aborting and Current Request CMP Connection referenced by XA Superior Enlistment referenced by the XA Superior Enlistment CMP Connection is not set:
Set Current Request CMP Connection field of XA Superior Enlistment referenced by the XA Superior Enlistment CMP Connection to receiving connection.
Set the connection state to Ended.
Otherwise, the message MUST be processed as an invalid message as specified in section 3.1.6.
Otherwise, if receiving connection references XA Superior Child Branch Enlistment:
If the connection state is set to Active and the State field of the Parent XA Superior Enlistment Object referenced by XA Superior Child Branch Enlistment referenced by receiving connection is set to Aborted:
Send XAUSER_XACT_MTAG_REQUEST_COMPLETED message.
Remove the XA Superior Child Branch Enlistment from the Child Branch table referenced by the Parent XA Superior Enlistment Object referenced by the XA Superior Child Branch Enlistment.
Otherwise, if the connection state is set to Active and the State field of the XA Superior Enlistment is set to either Active, Prepared, or In Doubt:
Set Current Request CMP Connection field of the XA Superior Child Branch Enlistment to receiving connection.
Set the State field of Parent XA Superior Enlistment referenced by XA Superior Child Branch Enlistment to Aborting.
Signal the Begin Rollback event ([MS-DTCO] section 3.2.7.6) on the Core Transaction Manager Facet with the following argument:
The Transaction Object referenced by Parent XA Superior Enlistment Object.
Otherwise, if the connection state is set to Active and the State field of the XA Superior Enlistment Object is set to Aborting and Current Request CMP Connection referenced by XA Superior Enlistment is not set:
Set Current Request CMP Connection field of XA Superior Child Branch Enlistment to receiving connection.
Otherwise:
Send a XAUSER_XACT_MTAG_REQUEST_FAILED_BAD_PROTOCOL message upon receiving connection.