aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-14 23:04:39 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-14 23:04:39 +0000
commit102944b1911266370ab0bb8ca8972cc73e4cb112 (patch)
treecc33ade330575af5c11580ad7e6025e83b0c2b7e
parentb0108d7b5515f128b4ed25ea2adc30c36a03775d (diff)
Consider both tags as possible matches (bug #2422)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3778 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xchannels/chan_sip.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 57edf1648..d8b6dfc89 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2392,10 +2392,11 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si
struct sip_pvt *p;
char *callid;
char tmp[256] = "";
+ char tmp2[256] = "";
char iabuf[INET_ADDRSTRLEN];
char *cmd;
char *tag = "", *c;
- int themisfrom;
+ char *tag2 = ""
callid = get_header(req, "Call-ID");
if (pedanticsipchecking) {
@@ -2412,15 +2413,7 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si
c = strchr(tmp, ' ');
if (c)
*c = '\0';
- if (!strcasecmp(cmd, "SIP/2.0")) {
- themisfrom = 0;
- } else {
- themisfrom = 1;
- }
- if (themisfrom)
- strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
- else
- strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
+ strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
tag = strstr(tmp, "tag=");
if (tag) {
tag += 4;
@@ -2428,6 +2421,14 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si
if (c)
*c = '\0';
}
+ strncpy(tmp2, get_header(req, "To"), sizeof(tmp2) - 1);
+ tag2 = strstr(tmp2, "tag=");
+ if (tag2) {
+ tag2 += 4;
+ c = strchr(tag2, ';');
+ if (c)
+ *c = '\0';
+ }
}
@@ -2439,7 +2440,7 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si
p = iflist;
while(p) {
if (!strcmp(p->callid, callid) &&
- (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
+ (!pedanticsipchecking || !tag || !tag2 || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag) || !strcmp(p->theirtag, tag2))) {
/* Found the call */
ast_mutex_lock(&p->lock);
ast_mutex_unlock(&iflock);