3.7.5.3.1 Processing 430 (Flow Failed) Responses
When a user agent receives a 430 Flow Failed response for a mid-dialog request and the response contains a P-Dialog-Recovery-Action header field, the user agent MUST examine the value of this field to decide if it needs to perform dialog recovery procedures. Based on the value, the user agent takes the following actions:
If the P-Dialog-Recovery-Action header field contains a P-Dialog-Recovery-Action tag, the user agent MUST indicate the failure to the upper layer and then perform registration refresh, as described in [RFC3261] section 10.2.4, on the endpoint that received the 430 Flow Failed response. If registration is successfully refreshed, the user agent MUST execute dialog recovery procedures, as described in section 3.7.5.3.4, on all dialogs associated with the registered endpoint (5) that have dialog recovery enabled. The user agent SHOULD also terminate and re-create all dialogs associated with the registered endpoint (5) that did not have dialog recovery enabled.
If the P-Dialog-Recovery-Action header field contains a single Dialog-Route-Set-Update tag, the user agent MUST perform a dialog recovery procedure described in section 3.7.5.3.4. If the refresh request for the dialog recovery procedure results in a successful response, the user agent MUST re-send the request that resulted in the 430 Flow Failed response with the route set and Request-URI field populated from the updated route set and remote target fields in the dialog state. If the refresh request for the dialog recovery procedure does not result in a successful response, the user agent MUST indicate the failure of the original request to the upper layer.
If as the result of performing dialog recovery procedures, the same request is re-sent two or more times and it again receives a 430 Flow Failed response, the user agent SHOULD stop retrying the same request and report the failure to the user. If the P-Dialog-Recovery-Action header field contains a single Wait-For-Session-Update tag and the user agent has negotiated a session timer, as described in [RFC4028] on the dialog, it SHOULD start or reset the recovery refresh timer with the interval set to at least the interval it negotiated for the session timer.
When a user agent receives a 430 Flow Failed response for a dialog creating request and the response contains a P-Dialog-Recovery-Action header field, the user agent MUST examine the value of this field to decide if it needs to perform dialog recovery procedures<30>. Based on the value, the user agent takes the following actions:
If the P-Dialog-Recovery-Action header field contains a P-Dialog-Recovery-Action tag, the user agent MUST indicate the failure to the upper layer and then perform registration refresh, as described in [RFC3261] section 10.2.4, on the endpoint that received the 430 Flow Failed response. If the registration is successfully refreshed, the user agent MUST execute dialog recovery procedures, as described in section 3.7.5.3.4, on all dialogs associated with the registered endpoint (5) that have dialog recovery enabled. The user agent SHOULD also terminate and recreate all dialogs associated with registered endpoints (5) that did not have dialog recovery enabled. Finally, it SHOULD re-send the dialog creating request that originally received the 430 response.
If as the result of performing dialog recovery procedures, the same request is re-sent two or more times and it again receives a 430 Flow Failed response, the user agent SHOULD stop retrying the same request and report the failure to the user.