[asterisk-bugs] [JIRA] (ASTERISK-26464) Pickup() semantics changed between 1.4 and 1.8
Asterisk Team (JIRA)
noreply at issues.asterisk.org
Thu Oct 13 06:10:01 CDT 2016
[ https://issues.asterisk.org/jira/browse/ASTERISK-26464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=232696#comment-232696 ]
Asterisk Team commented on ASTERISK-26464:
------------------------------------------
Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution.
A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report.
Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process].
> Pickup() semantics changed between 1.4 and 1.8
> ----------------------------------------------
>
> Key: ASTERISK-26464
> URL: https://issues.asterisk.org/jira/browse/ASTERISK-26464
> Project: Asterisk
> Issue Type: Bug
> Security Level: None
> Components: Applications/app_directed_pickup
> Reporter: Walter Doekes
>
> Imagine this dialplan:
> {noformat}
> [incoming]
> exten => 200,1,Goto(outgoing,call,1)
> exten => *200,1,Goto(pickup,both,1)
> [outgoing]
> exten => call,1,Dial(SIP/alice)
> [pickup]
> exten => both,1,Pickup(call at incoming)
> exten => both,n,PickupOld1v4(call at outgoing)
> {noformat}
> Bob calls Alice by calling '200' ({{core show channels}}):
> {noformat}
> SIP/bob-0000000 call at outgoing:1 Ring Dial(SIP/alice)
> SIP/alice-00000 call at incoming:1 Ringing AppDial((Outgoing Line))
> ^
> |
> {noformat}
> There is no call at incoming, yet that's what exten+context contain. (I'm not sure if this is a bug or a feature, but it's how it is and tampering with that would probably inflict all sorts of havoc.)
> So, when Charlie tries to pick up the call using {{Pickup()}}, we have to use the odd {{call at incoming}} identifier instead of {{call at outgoing}}.
> This was unintentionally changed in commit {{cba19c8a671}} (in 2009, merged into what became Asterisk 1.8) when this code got changed:
> {noformat}
> --- a/apps/app_directed_pickup.c
> +++ b/apps/app_directed_pickup.c
> ...
> -static int find_by_exten(struct ast_channel *c, void *data)
> -{
> - struct pickup_criteria *info = data;
> -
> - return (!strcasecmp(c->macroexten, info->exten) || !strcasecmp(c->exten, info->exten)) &&
> - !strcasecmp(c->dialcontext, info->context) &&
> - can_pickup(c);
> -}
> ...
> - target = ast_channel_search_locked(find_by_exten, &search);
> + if (!(iter = ast_channel_iterator_by_exten_new(0, exten, context))) {
> ...
> {noformat}
> Unlike the find_by_exten above, the new iterator uses 'context':
> {noformat}
> --- a/main/channel.c
> +++ b/main/channel.c
> ...
> + if (i->context && strcasecmp(chan->context, i->context) &&
> + strcasecmp(chan->macrocontext, i->context)) {
> ...
> {noformat}
> The check that used the 'dialcontext' now uses the checks used by ast_channel_iterator_by_exten_new; which is 'context'.
> This breaks Pickup semantics between pre-1.8 (e.g. Asterisk 1.4) and 1.8 and higher.
> ----
> While I don't think it makes sense to change {{Pickup()}} again, I've filed this ticket for future reference: for those still migrating from Asterisk 1.4 upwards, this could pose an upgrade hurdle.
> On the other hand, I don't really see how the *new* semantics are worth anything. Who would use Pickup referencing exten+context where the combination doesn't exist in the dialplan, unless they're intimately familiar with the inner workings?
> Attached a patch that adds {{PickupOld1v4()}} with the old semantics.
--
This message was sent by Atlassian JIRA
(v6.2#6252)
More information about the asterisk-bugs
mailing list