diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index 843ef61b4834bef841cc73905be96e7360b2ac45..5383c93cc53474d8224cda86bba642046f9b5071 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -2174,7 +2174,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) { @@ -2202,7 +2211,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); }