Fri, 22 Oct 2010 13:22:33 +0200
Import package vendor original specs for necessary manipulations.
michael@202 | 1 | Index: channels/chan_sip.c |
michael@202 | 2 | diff -Nau channels/chan_sip.c.orig channels/chan_sip.c |
michael@202 | 3 | --- channels/chan_sip.c.orig 2009-04-24 00:48:57.000000000 +0200 |
michael@202 | 4 | +++ channels/chan_sip.c 2009-04-24 00:49:21.000000000 +0200 |
michael@202 | 5 | @@ -18771,6 +18771,7 @@ |
michael@202 | 6 | \todo Fix this function so that we wait for reply to the REFER and |
michael@202 | 7 | react to errors, denials or other issues the other end might have. |
michael@202 | 8 | */ |
michael@202 | 9 | +/* MSvB: Paramater dest may be SIPS encoded, having '@@' before host */ |
michael@202 | 10 | static int sip_sipredirect(struct sip_pvt *p, const char *dest) |
michael@202 | 11 | { |
michael@202 | 12 | char *cdest; |
michael@202 | 13 | @@ -18780,7 +18781,7 @@ |
michael@202 | 14 | cdest = ast_strdupa(dest); |
michael@202 | 15 | |
michael@202 | 16 | extension = strsep(&cdest, "@"); |
michael@202 | 17 | - host = strsep(&cdest, ":"); |
michael@202 | 18 | + host = strsep(&cdest, ":"); /* MSvB: Could begin with '@' if SIPS */ |
michael@202 | 19 | port = strsep(&cdest, ":"); |
michael@202 | 20 | if (ast_strlen_zero(extension)) { |
michael@202 | 21 | ast_log(LOG_ERROR, "Missing mandatory argument: extension\n"); |
michael@202 | 22 | @@ -18813,7 +18814,13 @@ |
michael@202 | 23 | } |
michael@202 | 24 | } |
michael@202 | 25 | |
michael@202 | 26 | - ast_string_field_build(p, our_contact, "Transfer <sip:%s@%s%s%s>", extension, host, port ? ":" : "", port ? port : ""); |
michael@202 | 27 | + if (host && *host == '@') { |
michael@202 | 28 | + ast_log(LOG_DEBUG, "Decoding TLS incapable Asterisk SIP URI to a standard SIPS URI before redirecting via 302 Moved Temporarily\n"); |
michael@202 | 29 | + ast_string_field_build(p, our_contact, "Transfer <sips:%s@%s%s%s>", extension, host + 1, port ? ":" : "", port ? port : ""); |
michael@202 | 30 | + } |
michael@202 | 31 | + else |
michael@202 | 32 | + ast_string_field_build(p, our_contact, "Transfer <sip:%s@%s%s%s>", extension, host, port ? ":" : "", port ? port : ""); |
michael@202 | 33 | + |
michael@202 | 34 | transmit_response_reliable(p, "302 Moved Temporarily", &p->initreq); |
michael@202 | 35 | |
michael@202 | 36 | sip_scheddestroy(p, SIP_TRANS_TIMEOUT); /* Make sure we stop send this reply. */ |