diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index 52db333e6e5911ee3652a537a8c340a6a5eec071..c248670b7d213534d0214049c018cf6baccb39db 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -1458,6 +1458,7 @@ static void set_from_header(struct ast_sip_session *session) pjsip_sip_uri *dlg_info_uri; pjsip_sip_uri *dlg_contact_uri; int restricted; + const char *pjsip_from_domain; if (!session->channel || session->saved_from_hdr) { return; @@ -1501,6 +1502,17 @@ static void set_from_header(struct ast_sip_session *session) pj_strdup2(dlg_pool, &dlg_info_uri->host, session->endpoint->fromdomain); } + /* + * Channel variable for compatibility with chan_sip SIPFROMDOMAIN + */ + ast_channel_lock(session->channel); + pjsip_from_domain = pbx_builtin_getvar_helper(session->channel, "SIPFROMDOMAIN"); + if (!ast_strlen_zero(pjsip_from_domain)) { + ast_debug(3, "From header domain reset by channel variable SIPFROMDOMAIN (%s)\n", pjsip_from_domain); + pj_strdup2(dlg_pool, &dlg_info_uri->host, pjsip_from_domain); + } + ast_channel_unlock(session->channel); + /* We need to save off the non-anonymized From for RPID/PAI generation (for domain) */ session->saved_from_hdr = pjsip_hdr_clone(dlg_pool, dlg_info); ast_sip_add_usereqphone(session->endpoint, dlg_pool, session->saved_from_hdr->uri);