From: Alexei Gradinari Date: Thu, 26 May 2022 21:29:29 +0000 (-0400) Subject: res_pjsip_dialog_info_body_generator: Set LOCAL target URI as local URI X-Git-Tag: 16.27.0-rc1~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ec5eb5ae66871d99feb93a3dd4d371f62e40642;p=thirdparty%2Fasterisk.git res_pjsip_dialog_info_body_generator: Set LOCAL target URI as local URI The change "Add LOCAL/REMOTE tags in dialog-info+xml" set both "local" Identity Element URI and Target Element URI to the same value - the channel Caller Number. For Identity Element it's ok to set as Caller ID. But Local Target URI should be set as local URI. In this case the Local Target URI can be used for Directed Call Pickup by Polycom ip-phones (parameter useLocalTargetUriforLegacyPickup). Also XML sanitized Display names. ASTERISK-24601 Change-Id: If130a2f2f3b2339b14dca0ec0ebeea3a87b34343 --- diff --git a/res/res_pjsip_dialog_info_body_generator.c b/res/res_pjsip_dialog_info_body_generator.c index 88aa6c2dd2..972b908749 100644 --- a/res/res_pjsip_dialog_info_body_generator.c +++ b/res/res_pjsip_dialog_info_body_generator.c @@ -234,7 +234,10 @@ static int dialog_info_generate_body_content(void *body, void *data) pj_strdup2(state_data->pool, &remote_identity_node->content, remote_target); if (!ast_strlen_zero(remote_cid_name)) { - ast_sip_presence_xml_create_attr(state_data->pool, remote_identity_node, "display", remote_cid_name); + char display_sanitized[PJSIP_MAX_URL_SIZE]; + + ast_sip_sanitize_xml(remote_cid_name, display_sanitized, sizeof(display_sanitized)); + ast_sip_presence_xml_create_attr(state_data->pool, remote_identity_node, "display", display_sanitized); } ast_sip_presence_xml_create_attr(state_data->pool, remote_target_node, "uri", remote_target); } @@ -247,9 +250,13 @@ static int dialog_info_generate_body_content(void *body, void *data) /* If a channel is not available we fall back to the sanitized local URI instead */ pj_strdup2(state_data->pool, &local_identity_node->content, S_OR(local_target, sanitized)); if (!ast_strlen_zero(local_cid_name)) { - ast_sip_presence_xml_create_attr(state_data->pool, local_identity_node, "display", local_cid_name); + char display_sanitized[PJSIP_MAX_URL_SIZE]; + + ast_sip_sanitize_xml(local_cid_name, display_sanitized, sizeof(display_sanitized)); + ast_sip_presence_xml_create_attr(state_data->pool, local_identity_node, "display", display_sanitized); } - ast_sip_presence_xml_create_attr(state_data->pool, local_target_node, "uri", S_OR(local_target, sanitized)); + + ast_sip_presence_xml_create_attr(state_data->pool, local_target_node, "uri", sanitized); } }