aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-15 19:27:23 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-15 19:27:23 +0000
commitc6a28e3774596324a20c5003dcb0a2311fc1264f (patch)
treead22f56701be987eda1efb55b36489621deecc0a /channels
parent6ed19c1824e4caccb10353537f642b35fb72a219 (diff)
Update mp3 copyright header, fix pedantic + register in SIP (bug #2422)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3786 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_sip.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 19e476e79..a0ace0dce 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2393,11 +2393,9 @@ 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;
- char *tag2 = "";
callid = get_header(req, "Call-ID");
@@ -2415,7 +2413,10 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si
c = strchr(tmp, ' ');
if (c)
*c = '\0';
- strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
+ if (!strcasecmp(cmd, "SIP/2.0"))
+ strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
+ else
+ strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
tag = strstr(tmp, "tag=");
if (tag) {
tag += 4;
@@ -2423,14 +2424,6 @@ 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';
- }
}
@@ -2442,7 +2435,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 || !tag2 || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag) || !strcmp(p->theirtag, tag2))) {
+ (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
/* Found the call */
ast_mutex_lock(&p->lock);
ast_mutex_unlock(&iflock);
@@ -4116,10 +4109,16 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char
if (strchr(r->username, '@')) {
snprintf(from, sizeof(from), "<sip:%s>;tag=as%08x", r->username, p->tag);
- snprintf(to, sizeof(to), "<sip:%s>", r->username);
+ if (!ast_strlen_zero(p->theirtag))
+ snprintf(to, sizeof(to), "<sip:%s>;tag=%s", r->username, p->theirtag);
+ else
+ snprintf(to, sizeof(to), "<sip:%s>", r->username);
} else {
snprintf(from, sizeof(from), "<sip:%s@%s>;tag=as%08x", r->username, p->tohost, p->tag);
- snprintf(to, sizeof(to), "<sip:%s@%s>", r->username, p->tohost);
+ if (!ast_strlen_zero(p->theirtag))
+ snprintf(to, sizeof(to), "<sip:%s@%s>;tag=%s", r->username, p->tohost, p->theirtag);
+ else
+ snprintf(to, sizeof(to), "<sip:%s@%s>", r->username, p->tohost);
}
snprintf(addr, sizeof(addr), "sip:%s", r->hostname);