mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-16 23:08:32 +00:00
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
This commit is contained in:
@@ -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) {
|
if ((state & AST_EXTENSION_RINGING) && sip_cfg.notifyringing) {
|
||||||
const char *local_display = exten;
|
const char *local_display = exten;
|
||||||
char *local_target = ast_strdupa(mto);
|
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
|
/* 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
|
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))) {
|
if ((caller = ast_channel_callback(find_calling_channel, NULL, p, 0))) {
|
||||||
char *cid_num;
|
char *cid_num;
|
||||||
|
char *connected_num;
|
||||||
int need;
|
int need;
|
||||||
|
|
||||||
ast_channel_lock(caller);
|
ast_channel_lock(caller);
|
||||||
cid_num = S_COR(ast_channel_caller(caller)->id.number.valid,
|
cid_num = S_COR(ast_channel_caller(caller)->id.number.valid,
|
||||||
ast_channel_caller(caller)->id.number.str, "");
|
ast_channel_caller(caller)->id.number.str, "");
|
||||||
need = strlen(cid_num) + strlen(p->fromdomain) + sizeof("sip:@");
|
need = strlen(cid_num) + strlen(p->fromdomain) + sizeof("sip:@");
|
||||||
local_target = alloca(need);
|
remote_target = alloca(need);
|
||||||
snprintf(local_target, need, "sip:%s@%s", cid_num, p->fromdomain);
|
snprintf(remote_target, need, "sip:%s@%s", cid_num, p->fromdomain);
|
||||||
local_display = ast_strdupa(S_COR(ast_channel_caller(caller)->id.name.valid,
|
|
||||||
|
remote_display = ast_strdupa(S_COR(ast_channel_caller(caller)->id.name.valid,
|
||||||
ast_channel_caller(caller)->id.name.str, ""));
|
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);
|
ast_channel_unlock(caller);
|
||||||
caller = ast_channel_unref(caller);
|
caller = ast_channel_unref(caller);
|
||||||
}
|
}
|
||||||
@@ -13121,10 +13135,10 @@ static void state_notify_build_xml(int state, int full, const char *exten, const
|
|||||||
"<target uri=\"%s\"/>\n"
|
"<target uri=\"%s\"/>\n"
|
||||||
"</remote>\n"
|
"</remote>\n"
|
||||||
"<local>\n"
|
"<local>\n"
|
||||||
"<identity>%s</identity>\n"
|
"<identity display=\"%s\">%s</identity>\n"
|
||||||
"<target uri=\"%s\"/>\n"
|
"<target uri=\"%s\"/>\n"
|
||||||
"</local>\n",
|
"</local>\n",
|
||||||
local_display, local_target, local_target, mto, mto);
|
remote_display, remote_target, remote_target, local_display, local_target, local_target);
|
||||||
} else {
|
} else {
|
||||||
ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n", exten);
|
ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n", exten);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user