aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-12 18:46:09 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-12 18:46:09 +0000
commit68f3177af8ca8d64ee134698ab2526fbbfad87e8 (patch)
tree988efe42749422f7dbd6f60f287590f0f239c3ec
parent2a91bdfba98299c7c89b8ed8ba9b2cbabc07a07d (diff)
Backport fix so that outbound CANCEL requests have same branch as challenged INVITEs.
There already was code present to be sure that a CANCEL will contain the same branch-id as the INVITE it is cancelling. However, for INVITES which are challenged downstream, this mechanism did not work properly. Now this is taken care of. This is a backport of a fix already present in all 1.6.X branches and in trunk. It also fixes ABE-1907. git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@211807 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_sip.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 455516e4c..5bb560691 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -6264,7 +6264,11 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
seqno = p->ocseq;
}
- if (sipmethod == SIP_CANCEL) {
+ /* 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 && p->options && !ast_strlen_zero(p->options->auth))) {
p->branch = p->invite_branch;
build_via(p);
} else if (newbranch) {