From: Ivan Poddubnyi Date: Tue, 29 Dec 2020 18:16:00 +0000 (+0100) Subject: chan_pjsip: Assign SIPDOMAIN after creating a channel X-Git-Tag: 16.16.0-rc1~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97afc9055fbe8ca573a1a3745b7f4facff364d39;p=thirdparty%2Fasterisk.git 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 --- diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index 0e612135a8..f37ec3d712 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -2944,6 +2944,18 @@ static void chan_pjsip_session_end(struct ast_sip_session *session) } } +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) { @@ -2995,6 +3007,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)); diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index e1fc32c6aa..1025e15f2e 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -3739,7 +3739,7 @@ static enum sip_get_destination_result get_destination(struct ast_sip_session *s */ 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) { ast_log(LOG_ERROR, "%s: Unable to retrieve pickup configuration options. Unable to detect call pickup extension\n", ast_sip_session_get_name(session)); @@ -3751,12 +3751,6 @@ static enum sip_get_destination_result get_destination(struct ast_sip_session *s if (!strcmp(session->exten, pickupexten) || 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 * needed: CHANNEL(pjsip,request_uri)