]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix request routing issue when outboundproxy is used.
authorMark Michelson <mmichelson@digium.com>
Tue, 19 Jun 2012 15:30:58 +0000 (15:30 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 19 Jun 2012 15:30:58 +0000 (15:30 +0000)
Asterisk was incorrectly setting the destination of CANCELs
and ACKs for error responses to the URI of the initial INVITE.
This resulted in further requests, such as INVITEs with authentication
credentials, to be routed incorrectly. Instead, when these CANCEL
or ACKs are to be sent, we should simply keep the destination the
same as what it previously was. There is no need to alter it any.

(closes issue ASTERISK-20008)
Reported by Marcus Hunger
Patches:
ASTERISK-20008.patch uploaded by Mark Michelson (license #5049)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@369066 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index cd0edacefb1181e7f20f74c478d73855a2328ac1..29f1ea18aaf076e099f8952e5b7013a4132a44ee 100644 (file)
@@ -10409,10 +10409,9 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, ui
         * final response. For a CANCEL or ACK, we have to send to the same destination
         * as the original INVITE.
         */
-       if (sipmethod == SIP_CANCEL ||
-                       (sipmethod == SIP_ACK && (p->invitestate == INV_COMPLETED || p->invitestate == INV_CANCELLED))) {
-               set_destination(p, ast_strdupa(p->uri));
-       } else if (p->route) {
+       if (p->route &&
+                       !(sipmethod == SIP_CANCEL ||
+                               (sipmethod == SIP_ACK && (p->invitestate == INV_COMPLETED || p->invitestate == INV_CANCELLED)))) {
                set_destination(p, p->route->hop);
                add_route(req, is_strict ? p->route->next : p->route);
        }