]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Make sure that the branch sent in CANCEL requests
authorMark Michelson <mmichelson@digium.com>
Tue, 9 Sep 2008 19:15:28 +0000 (19:15 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 9 Sep 2008 19:15:28 +0000 (19:15 +0000)
matches the branch of the INVITE it is cancelling.

(closes issue #13381)
Reported by: atca_pres
Patches:
      13381v2.patch uploaded by putnopvut (license 60)
Tested by: atca_pres

(closes issue #13198)
Reported by: rickead2000
Tested by: rickead2000

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

channels/chan_sip.c

index aa02eef2214d1348148aabf778cde5308c8ca01b..6f205a38197c66e051a5825d7cbe9cb0cc8ce48c 100644 (file)
@@ -973,6 +973,7 @@ static struct sip_pvt {
        int authtries;                          /*!< Times we've tried to authenticate */
        int expiry;                             /*!< How long we take to expire */
        long branch;                            /*!< The branch identifier of this session */
+       long invite_branch;                     /*!< The branch used when we sent the initial INVITE */
        char tag[11];                           /*!< Our tag for this session */
        int sessionid;                          /*!< SDP Session ID */
        int sessionversion;                     /*!< SDP Session Version */
@@ -5980,7 +5981,10 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
                seqno = p->ocseq;
        }
        
-       if (newbranch) {
+       if (sipmethod == SIP_CANCEL) {
+               p->branch = p->invite_branch;
+               build_via(p);
+       } else if (newbranch) {
                p->branch ^= ast_random();
                build_via(p);
        }
@@ -7128,6 +7132,7 @@ static int transmit_invite(struct sip_pvt *p, int sipmethod, int sdp, int init)
        if (init) {             /* Seems like init always is 2 */
                /* Bump branch even on initial requests */
                p->branch ^= ast_random();
+               p->invite_branch = p->branch;
                build_via(p);
                if (init > 1)
                        initreqprep(&req, p, sipmethod);