From cc2366bca04631ac828710e08325db779a143ddf Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Thu, 29 Mar 2012 23:22:01 +0000 Subject: Improve accuracy of identifying information sent in dialog-info SIP NOTIFY requests. This change makes use of connected party information in addition to caller ID in order to populate local and remote XML elements in the dialog-info NOTIFYs. (closes issue ASTERISK-16735) Reported by: Maciej Krajewski Tested by: Maciej Krajewski Patches: local_remote_hint2.diff uploaded by Mark Michelson (license 5049) ........ Merged revisions 360862 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 360863 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@360872 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'channels') diff --git a/channels/chan_sip.c b/channels/chan_sip.c index df36ce0e9..a9d767ecd 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13081,6 +13081,8 @@ static void state_notify_build_xml(int state, int full, const char *exten, const if ((state & AST_EXTENSION_RINGING) && sip_cfg.notifyringing) { const char *local_display = exten; char *local_target = ast_strdupa(mto); + const char *remote_display = exten; + char *remote_target = ast_strdupa(mfrom); /* There are some limitations to how this works. The primary one is that the callee must be dialing the same extension that is being monitored. Simply dialing @@ -13090,16 +13092,28 @@ static void state_notify_build_xml(int state, int full, const char *exten, const if ((caller = ast_channel_callback(find_calling_channel, NULL, p, 0))) { char *cid_num; + char *connected_num; int need; ast_channel_lock(caller); cid_num = S_COR(ast_channel_caller(caller)->id.number.valid, ast_channel_caller(caller)->id.number.str, ""); need = strlen(cid_num) + strlen(p->fromdomain) + sizeof("sip:@"); - local_target = alloca(need); - snprintf(local_target, need, "sip:%s@%s", cid_num, p->fromdomain); - local_display = ast_strdupa(S_COR(ast_channel_caller(caller)->id.name.valid, + remote_target = alloca(need); + snprintf(remote_target, need, "sip:%s@%s", cid_num, p->fromdomain); + + remote_display = ast_strdupa(S_COR(ast_channel_caller(caller)->id.name.valid, ast_channel_caller(caller)->id.name.str, "")); + + connected_num = S_COR(ast_channel_connected(caller)->id.number.valid, + ast_channel_connected(caller)->id.number.str, ""); + need = strlen(connected_num) + strlen(p->fromdomain) + sizeof("sip:@"); + local_target = alloca(need); + snprintf(local_target, need, "sip:%s@%s", connected_num, p->fromdomain); + + local_display = ast_strdupa(S_COR(ast_channel_connected(caller)->id.name.valid, + ast_channel_connected(caller)->id.name.str, "")); + ast_channel_unlock(caller); caller = ast_channel_unref(caller); } @@ -13121,10 +13135,10 @@ static void state_notify_build_xml(int state, int full, const char *exten, const "\n" "\n" "\n" - "%s\n" + "%s\n" "\n" "\n", - local_display, local_target, local_target, mto, mto); + remote_display, remote_target, remote_target, local_display, local_target, local_target); } else { ast_str_append(tmp, 0, "\n", exten); } -- cgit v1.2.3