mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
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:
committed by
George Joseph
parent
134d2e729d
commit
f2aa6c7017
@@ -2980,6 +2980,18 @@ static void chan_pjsip_session_end(struct ast_sip_session *session)
|
|||||||
SCOPE_EXIT_RTN();
|
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 */
|
/*! \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)
|
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",
|
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));
|
ast_sip_session_get_name(session));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_sipdomain_variable(session);
|
||||||
|
|
||||||
/* channel gets created on incoming request, but we wait to call start
|
/* channel gets created on incoming request, but we wait to call start
|
||||||
so other supplements have a chance to run */
|
so other supplements have a chance to run */
|
||||||
SCOPE_EXIT_RTN_VALUE(0, "%s\n", ast_sip_session_get_name(session));
|
SCOPE_EXIT_RTN_VALUE(0, "%s\n", ast_sip_session_get_name(session));
|
||||||
|
@@ -3733,7 +3733,7 @@ static enum sip_get_destination_result get_destination(struct ast_sip_session *s
|
|||||||
*/
|
*/
|
||||||
AST_SIP_USER_OPTIONS_TRUNCATE_CHECK(session->exten);
|
AST_SIP_USER_OPTIONS_TRUNCATE_CHECK(session->exten);
|
||||||
|
|
||||||
pickup_cfg = ast_get_chan_features_pickup_config(session->channel);
|
pickup_cfg = ast_get_chan_features_pickup_config(NULL); /* session->channel doesn't exist yet, using NULL */
|
||||||
if (!pickup_cfg) {
|
if (!pickup_cfg) {
|
||||||
ast_log(LOG_ERROR, "%s: Unable to retrieve pickup configuration options. Unable to detect call pickup extension\n",
|
ast_log(LOG_ERROR, "%s: Unable to retrieve pickup configuration options. Unable to detect call pickup extension\n",
|
||||||
ast_sip_session_get_name(session));
|
ast_sip_session_get_name(session));
|
||||||
@@ -3745,12 +3745,6 @@ static enum sip_get_destination_result get_destination(struct ast_sip_session *s
|
|||||||
|
|
||||||
if (!strcmp(session->exten, pickupexten) ||
|
if (!strcmp(session->exten, pickupexten) ||
|
||||||
ast_exists_extension(NULL, session->endpoint->context, session->exten, 1, NULL)) {
|
ast_exists_extension(NULL, session->endpoint->context, session->exten, 1, NULL)) {
|
||||||
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);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save off the INVITE Request-URI in case it is
|
* Save off the INVITE Request-URI in case it is
|
||||||
* needed: CHANNEL(pjsip,request_uri)
|
* needed: CHANNEL(pjsip,request_uri)
|
||||||
|
Reference in New Issue
Block a user