chan_pjsip: Set the context and extension on the channel when created
authorMatt Jordan <mjordan@digium.com>
Thu, 11 Jun 2015 23:52:09 +0000 (18:52 -0500)
committerMatt Jordan <mjordan@digium.com>
Fri, 12 Jun 2015 00:07:22 +0000 (19:07 -0500)
Prior to this patch, chan_pjsip was failing to pass the endpoint's
context and the desired extension to the ast_channel_alloc_* routine.
This caused a new channel snapshot to be issued without a context and
extension, which can cause some reporting issues for users of AMI, CEL,
and other APIs. The channel driver would later set the context and
extension on the channel such that the channel would start in the
correct location in the dialplan, but the information reported in the
initial event would be incorrect.

This patch modifies the channel driver such that it now passes the
context and extension directly into the allocation routine. This
provides the information in the new channel snapshot published over
Stasis.

ASTERISK-25156 #close
Reported by: cloos

Change-Id: Ic6f8542836e596db8f662071d118e8f934fdf25e

channels/chan_pjsip.c

index 14ba4a2..b44d3e0 100644 (file)
@@ -388,7 +388,9 @@ static struct ast_channel *chan_pjsip_new(struct ast_sip_session *session, int s
        chan = ast_channel_alloc_with_endpoint(1, state,
                S_COR(session->id.number.valid, session->id.number.str, ""),
                S_COR(session->id.name.valid, session->id.name.str, ""),
-               session->endpoint->accountcode, "", "", assignedids, requestor, 0,
+               session->endpoint->accountcode,
+               exten, session->endpoint->context,
+               assignedids, requestor, 0,
                session->endpoint->persistent, "PJSIP/%s-%08x",
                ast_sorcery_object_get_id(session->endpoint),
                (unsigned) ast_atomic_fetchadd_int((int *) &chan_idx, +1));
@@ -445,8 +447,6 @@ static struct ast_channel *chan_pjsip_new(struct ast_sip_session *session, int s
        ast_party_id_copy(&ast_channel_caller(chan)->id, &session->id);
        ast_party_id_copy(&ast_channel_caller(chan)->ani, &session->id);
 
-       ast_channel_context_set(chan, session->endpoint->context);
-       ast_channel_exten_set(chan, S_OR(exten, "s"));
        ast_channel_priority_set(chan, 1);
 
        ast_channel_callgroup_set(chan, session->endpoint->pickup.callgroup);