From 2d1b11cb727d36ca2c66e945ac771b1a79ef93f9 Mon Sep 17 00:00:00 2001 From: Grzegorz Sluja <grzegorz.sluja@iopsys.eu> Date: Fri, 7 Oct 2022 08:53:57 +0000 Subject: [PATCH] Use correct URI schema in Referred-By and Refer-To header fields in call transfer --- channels/chan_pjsip.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index c35c20a342..633027b02e 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -2175,7 +2175,16 @@ static void transfer_refer(struct ast_sip_session *session, const char *target) chan_name, target, replaces); } - snprintf(referto, sizeof(referto), "<sip:%s@%s%s>", target, session->endpoint->fromdomain, replaces); + if (PJSIP_URI_SCHEME_IS_SIP(session->request_uri)) + snprintf(referto, sizeof(referto), "<sip:%s@%s%s>", target, session->endpoint->fromdomain, replaces); + else if (PJSIP_URI_SCHEME_IS_SIPS(session->request_uri)) + snprintf(referto, sizeof(referto), "<sips:%s@%s%s>", target, session->endpoint->fromdomain, replaces); + else if (PJSIP_URI_SCHEME_IS_TEL(session->request_uri)) + snprintf(referto, sizeof(referto), "<tel:%s@%s%s>", target, session->endpoint->fromdomain, replaces); + else { + ast_log(LOG_ERROR, "Unsupported URI for Refer-To header. Refer will not be sent!\n"); + goto failure; + } ast_debug(1, "Refer-To: %s\n", referto); if (pjsip_xfer_initiate(sub, pj_cstr(&tmp, referto), &packet) != PJ_SUCCESS) { @@ -2203,7 +2212,16 @@ static void transfer_refer(struct ast_sip_session *session, const char *target) if (!ast_strlen_zero(ref_by_val)) { ast_sip_add_header(packet, "Referred-By", ref_by_val); } else { - snprintf(local_info, sizeof(local_info), "%s@%s", session->endpoint->contact_user, session->endpoint->fromdomain); + if (PJSIP_URI_SCHEME_IS_SIP(session->request_uri)) + snprintf(local_info, sizeof(local_info), "<sip:%s@%s>", session->endpoint->contact_user, session->endpoint->fromdomain); + else if (PJSIP_URI_SCHEME_IS_SIPS(session->request_uri)) + snprintf(local_info, sizeof(local_info), "<sips:%s@%s>", session->endpoint->contact_user, session->endpoint->fromdomain); + else if (PJSIP_URI_SCHEME_IS_TEL(session->request_uri)) + snprintf(local_info, sizeof(local_info), "<tel:%s@%s>", session->endpoint->contact_user, session->endpoint->fromdomain); + else { + ast_log(LOG_ERROR, "Unsupported URI for Referred-By header. Refer will not be sent!\n"); + goto failure; + } ast_sip_add_header(packet, "Referred-By", local_info); } -- GitLab