diff options
author | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-23 16:40:15 +0000 |
---|---|---|
committer | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-23 16:40:15 +0000 |
commit | 6ac25ad06a461c575e894a299e790998f13aa9f5 (patch) | |
tree | 02c0655b5cd3568f1ecd0027eacf634686bb0f10 /channels | |
parent | 95537e03ee09bb05d9f90b64209699134d564acc (diff) |
Merged revisions 202672 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r202672 | dvossel | 2009-06-23 11:31:30 -0500 (Tue, 23 Jun 2009) | 18 lines
Merged revisions 202671 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r202671 | dvossel | 2009-06-23 11:28:46 -0500 (Tue, 23 Jun 2009) | 12 lines
MWI NOTIFY contains a wrong URI if Asterisk listens to non-standard port and transport
(closes issue #14659)
Reported by: klaus3000
Patches:
patch_chan_sip_fixMWIuri_1.4.txt uploaded by klaus3000 (license 65)
mwi_port-transport_trunk.diff uploaded by dvossel (license 671)
Tested by: dvossel, klaus3000
Review: https://reviewboard.asterisk.org/r/288/
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@202675 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index bfe649135..2f9a55601 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -9530,14 +9530,29 @@ static int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs, { struct sip_request req; struct ast_str *out = ast_str_alloca(500); + int ourport = ntohs(p->ourip.sin_port); + const char *exten = S_OR(vmexten, default_vmexten); initreqprep(&req, p, SIP_NOTIFY); add_header(&req, "Event", "message-summary"); add_header(&req, "Content-Type", default_notifymime); - ast_str_append(&out, 0, "Messages-Waiting: %s\r\n", newmsgs ? "yes" : "no"); - ast_str_append(&out, 0, "Message-Account: sip:%s@%s\r\n", - S_OR(vmexten, default_vmexten), S_OR(p->fromdomain, ast_inet_ntoa(p->ourip.sin_addr))); + + if (!ast_strlen_zero(p->fromdomain)) { + ast_str_append(&out, 0, "Message-Account: sip:%s@%s\r\n", exten, p->fromdomain); + } else if (!sip_standard_port(p->socket.type, ourport)) { + if (p->socket.type == SIP_TRANSPORT_UDP) { + ast_str_append(&out, 0, "Message-Account: sip:%s@%s:%d\r\n", exten, ast_inet_ntoa(p->ourip.sin_addr), ourport); + } else { + ast_str_append(&out, 0, "Message-Account: sip:%s@%s:%d;transport=%s\r\n", exten, ast_inet_ntoa(p->ourip.sin_addr), ourport, get_transport(p->socket.type)); + } + } else { + if (p->socket.type == SIP_TRANSPORT_UDP) { + ast_str_append(&out, 0, "Message-Account: sip:%s@%s\r\n", exten, ast_inet_ntoa(p->ourip.sin_addr)); + } else { + ast_str_append(&out, 0, "Message-Account: sip:%s@%s;transport=%s\r\n", exten, ast_inet_ntoa(p->ourip.sin_addr), get_transport(p->socket.type)); + } + } /* Cisco has a bug in the SIP stack where it can't accept the (0/0) notification. This can temporarily be disabled in sip.conf with the "buggymwi" option */ |