chan_pjsip: Assign SIPDOMAIN after creating a channel

session->channel doesn't exist until chan_pjsip creates it, so intead of
setting a channel variable every new incoming call sets one and the same
global variable.

This patch moves the code to chan_pjsip so that SIPDOMAIN is set on
a newly created channel, it also removes a misleading reference to
channel->session used to fetch call pickup configuraion.

ASTERISK-29240

Change-Id: I90c9bbbed01f5d8863585631a29322ae4e046755
This commit is contained in:
Ivan Poddubnyi
2020-12-29 19:16:00 +01:00
committed by George Joseph
parent 134d2e729d
commit f2aa6c7017
2 changed files with 16 additions and 7 deletions

View File

@@ -2980,6 +2980,18 @@ static void chan_pjsip_session_end(struct ast_sip_session *session)
SCOPE_EXIT_RTN();
}
static void set_sipdomain_variable(struct ast_sip_session *session)
{
pjsip_sip_uri *sip_ruri = pjsip_uri_get_uri(session->request_uri);
size_t size = pj_strlen(&sip_ruri->host) + 1;
char *domain = ast_alloca(size);
ast_copy_pj_str(domain, &sip_ruri->host, size);
pbx_builtin_setvar_helper(session->channel, "SIPDOMAIN", domain);
return;
}
/*! \brief Function called when a request is received on the session */
static int chan_pjsip_incoming_request(struct ast_sip_session *session, struct pjsip_rx_data *rdata)
{
@@ -3031,6 +3043,9 @@ static int chan_pjsip_incoming_request(struct ast_sip_session *session, struct p
SCOPE_EXIT_LOG_RTN_VALUE(-1, LOG_ERROR, "%s: Failed to allocate new PJSIP channel on incoming SIP INVITE\n",
ast_sip_session_get_name(session));
}
set_sipdomain_variable(session);
/* channel gets created on incoming request, but we wait to call start
so other supplements have a chance to run */
SCOPE_EXIT_RTN_VALUE(0, "%s\n", ast_sip_session_get_name(session));