diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-09-23 15:38:06 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-09-23 15:38:06 +0000 |
commit | feee386259cf4442d733b3c92e0f90acf8255acc (patch) | |
tree | c70e148f8cbeeada7878370c6fdc8653869f6099 | |
parent | f65b7ed7c9ce17ef72317b777571b97125f3085a (diff) |
Merged revisions 144025 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r144025 | mmichelson | 2008-09-23 10:37:00 -0500 (Tue, 23 Sep 2008) | 16 lines
When a promiscuous redirect contained both a user and
host portion in the Contact URI and specifies a
transport, the parsing done in parse_moved_contact
resulted in a malformed URI.
This commit fixes the parsing so that a proper
Dial string may be formed when the forwarded
call is placed.
(closes issue #13523)
Reported by: mattdarnell
Patches:
13523v2.patch uploaded by putnopvut (license 60)
Tested by: mattdarnell
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@144026 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_sip.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 31a3a6604..6440c23ef 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -14595,6 +14595,7 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req) p->socket.type = transport; if (ast_test_flag(&p->flags[0], SIP_PROMISCREDIR)) { + char *host = NULL; if (!strncasecmp(s, "sip:", 4)) s += 4; else if (!strncasecmp(s, "sips:", 5)) @@ -14602,9 +14603,16 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req) e = strchr(s, '/'); if (e) *e = '\0'; - ast_debug(2, "Found promiscuous redirection to 'SIP/::::%s@%s'\n", get_transport(transport), s); - if (p->owner) - ast_string_field_build(p->owner, call_forward, "SIP/::::%s@%s", get_transport(transport), s); + if ((host = strchr(s, '@'))) { + *host++ = '\0'; + ast_debug(2, "Found promiscuous redirection to 'SIP/%s::::%s@%s'\n", s, get_transport(transport), host); + if (p->owner) + ast_string_field_build(p->owner, call_forward, "SIP/%s::::%s@%s", s, get_transport(transport), host); + } else { + ast_debug(2, "Found promiscuous redirection to 'SIP/::::%s@%s'\n", get_transport(transport), s); + if (p->owner) + ast_string_field_build(p->owner, call_forward, "SIP/::::%s@%s", get_transport(transport), s); + } } else { e = strchr(tmp, '@'); if (e) { |