[asterisk-commits] mmichelson: branch 1.6.0 r199975 - /branches/1.6.0/channels/chan_sip.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jun 10 15:21:01 CDT 2009
Author: mmichelson
Date: Wed Jun 10 15:20:53 2009
New Revision: 199975
URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=199975
Log:
The 1.6.0 branch was missing all invite_branch logic. It has now been added.
Modified:
branches/1.6.0/channels/chan_sip.c
Modified: branches/1.6.0/channels/chan_sip.c
URL: http://svn.asterisk.org/svn-view/asterisk/branches/1.6.0/channels/chan_sip.c?view=diff&rev=199975&r1=199974&r2=199975
==============================================================================
--- branches/1.6.0/channels/chan_sip.c (original)
+++ branches/1.6.0/channels/chan_sip.c Wed Jun 10 15:20:53 2009
@@ -1254,6 +1254,7 @@
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 */
@@ -7805,8 +7806,15 @@
p->ocseq++;
seqno = p->ocseq;
}
-
- if (newbranch) {
+
+ /* 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 ^= ast_random();
build_via(p);
}
@@ -9134,6 +9142,7 @@
req.method = sipmethod;
if (init) {/* Bump branch even on initial requests */
p->branch ^= ast_random();
+ p->invite_branch = p->branch;
build_via(p);
}
if (init > 1)
More information about the asterisk-commits
mailing list