Only try to use the invite_branch on outgoing INVITEs with auth credentials.
[asterisk/asterisk.git] / channels / chan_sip.c
index 4e78b96..0117197 100644 (file)
@@ -8967,7 +8967,11 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
                seqno = p->ocseq;
        }
        
                seqno = p->ocseq;
        }
        
-       if (sipmethod == SIP_CANCEL || sipmethod == SIP_INVITE) {
+       /* A CANCEL must have the same branch as the INVITE that it is canceling.
+        * Similarly, if we need to re-send an INVITE with auth credentials, then we
+        * need to use the same branch as we did the first time we sent the INVITE.
+        */
+       if (sipmethod == SIP_CANCEL || (sipmethod == SIP_INVITE && !ast_strlen_zero(p->options->auth))) {
                p->branch = p->invite_branch;
                build_via(p);
        } else if (newbranch) {
                p->branch = p->invite_branch;
                build_via(p);
        } else if (newbranch) {