[asterisk-commits] kharwell: branch certified-11.2 r402456 - in /certified/branches/11.2: ./ cha...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Nov 4 15:17:21 CST 2013
Author: kharwell
Date: Mon Nov 4 15:17:18 2013
New Revision: 402456
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=402456
Log:
chan_sip: notify dialog info ignores presentation indicator in callerid
The presentation indicator in a callerid (e.g. set by dialplan function
Set(CALLERID(name-pres)= ...)) is not checked when SIP Dialog Info Notifies
are generated during extension monitoring. Added a check to make sure the
name and/or number presentations on the callee (remote identity) are set to
allow. If they are restricted then "anonymous" is used instead.
(closes issue AST-1175)
Reported by: Thomas Arimont
Review: https://reviewboard.asterisk.org/r/2976/
........
Merged revisions 402450 from http://svn.asterisk.org/svn/asterisk/branches/11
Modified:
certified/branches/11.2/ (props changed)
certified/branches/11.2/channels/chan_sip.c
Propchange: certified/branches/11.2/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.
Modified: certified/branches/11.2/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/certified/branches/11.2/channels/chan_sip.c?view=diff&rev=402456&r1=402455&r2=402456
==============================================================================
--- certified/branches/11.2/channels/chan_sip.c (original)
+++ certified/branches/11.2/channels/chan_sip.c Mon Nov 4 15:17:18 2013
@@ -6100,6 +6100,7 @@
dialog->chanvars = copy_vars(peer->chanvars);
if (peer->fromdomainport)
dialog->fromdomainport = peer->fromdomainport;
+ dialog->callingpres = peer->callingpres;
return 0;
}
@@ -14480,29 +14481,51 @@
callee = find_ringing_channel(data->device_state_info, p);
if (callee) {
+ static char *anonymous = "anonymous";
+ static char *invalid = "anonymous.invalid";
char *cid_num;
char *connected_num;
int need;
+ int cid_num_restricted, connected_num_restricted;
ast_channel_lock(callee);
+
+ cid_num_restricted = (ast_channel_caller(callee)->id.number.presentation &
+ AST_PRES_RESTRICTION) == AST_PRES_RESTRICTED;
cid_num = S_COR(ast_channel_caller(callee)->id.number.valid,
- ast_channel_caller(callee)->id.number.str, "");
- need = strlen(cid_num) + strlen(p->fromdomain) + sizeof("sip:@");
+ S_COR(cid_num_restricted, anonymous,
+ ast_channel_caller(callee)->id.number.str), "");
+
+ need = strlen(cid_num) + (cid_num_restricted ? strlen(invalid) :
+ strlen(p->fromdomain)) + sizeof("sip:@");
local_target = ast_alloca(need);
- snprintf(local_target, need, "sip:%s@%s", cid_num, p->fromdomain);
+
+ snprintf(local_target, need, "sip:%s@%s", cid_num,
+ cid_num_restricted ? invalid : p->fromdomain);
ast_xml_escape(S_COR(ast_channel_caller(callee)->id.name.valid,
- ast_channel_caller(callee)->id.name.str, ""),
+ S_COR((ast_channel_caller(callee)->id.name.presentation &
+ AST_PRES_RESTRICTION) == AST_PRES_RESTRICTED, anonymous,
+ ast_channel_caller(callee)->id.name.str), ""),
local_display, sizeof(local_display));
+ connected_num_restricted = (ast_channel_connected(callee)->id.number.presentation &
+ AST_PRES_RESTRICTION) == AST_PRES_RESTRICTED;
connected_num = S_COR(ast_channel_connected(callee)->id.number.valid,
- ast_channel_connected(callee)->id.number.str, "");
- need = strlen(connected_num) + strlen(p->fromdomain) + sizeof("sip:@");
+ S_COR(connected_num_restricted, anonymous,
+ ast_channel_connected(callee)->id.number.str), "");
+
+ need = strlen(connected_num) + (connected_num_restricted ? strlen(invalid) :
+ strlen(p->fromdomain)) + sizeof("sip:@");
remote_target = ast_alloca(need);
- snprintf(remote_target, need, "sip:%s@%s", connected_num, p->fromdomain);
+
+ snprintf(remote_target, need, "sip:%s@%s", connected_num,
+ connected_num_restricted ? invalid : p->fromdomain);
ast_xml_escape(S_COR(ast_channel_connected(callee)->id.name.valid,
- ast_channel_connected(callee)->id.name.str, ""),
+ S_COR((ast_channel_connected(callee)->id.name.presentation &
+ AST_PRES_RESTRICTION) == AST_PRES_RESTRICTED, anonymous,
+ ast_channel_connected(callee)->id.name.str), ""),
remote_display, sizeof(remote_display));
ast_channel_unlock(callee);
More information about the asterisk-commits
mailing list