[asterisk-dev] [Code Review] 3601: accountcode: Slightly change accountcode propagation.

Matt Jordan reviewboard at asterisk.org
Thu Jul 24 09:25:18 CDT 2014


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3601/#review12855
-----------------------------------------------------------

Ship it!


Ship It!

- Matt Jordan


On July 21, 2014, 5:19 p.m., rmudgett wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3601/
> -----------------------------------------------------------
> 
> (Updated July 21, 2014, 5:19 p.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Bugs: AFS-65
>     https://issues.asterisk.org/jira/browse/AFS-65
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> Accountcode propagation:
> 
> The current behavior is to simply set the accountcode of an outgoing
> channel to the accountcode of the channel initiating the call.  It was
> done this way a long time ago to allow the accountcode set on the SIP/100
> channel to be propagated to a local channel so the dialplan execution on
> the Local;2 channel would have the SIP/100 accountcode available.
> 
> SIP/100 -> Local;1/Local;2 -> SIP/200
> 
> Propagating the SIP/100 accountcode to the local channels is very useful.
> Without any dialplan manipulation, all channels in this call would have
> the same accountcode.
> 
> Using dialplan, you can set a different accountcode on the SIP/200 channel
> either by setting the accountcode on the Local;2 channel or by the Dial
> application's b(pre-dial), M(macro) or U(gosub) options, or by the
> FollowMe application's b(pre-dial) option, or by the Queue application's
> macro or gosub options.  Before Asterisk v12, the altered accountcode on
> SIP/200 will remain until the local channels optimize out and the
> accountcode would change to the SIP/100 accountcode.
> 
> Asterisk v1.8 attempted to add peeraccount support but ultimately had to
> punt on the support.  The peeraccount support was rendered useless because
> of how the CDR code needed to unconditionally force the caller's
> accountcode onto the peer channel's accountcode.  The CEL events were thus
> intentionally made to always use the channel's accountcode as the
> peeraccount value.
> 
> With the arrival of Asterisk v12, the situation has improved somewhat so
> peeraccount support can be made to work.  Using the indicated example, the
> the accountcode values become as follows when the peeraccount is set on
> SIP/100 before calling SIP/200:
> 
> SIP/100 ---> Local;1 ---- Local;2 ---> SIP/200
> acct: 100 \/ acct: 200 \/ acct: 100 \/ acct: 200
> peer: 200 /\ peer: 100 /\ peer: 200 /\ peer: 100
> 
> If a channel already has an accountcode it can only change by the
> following explicit user actions:
> 
> 1) A channel originate method that can specify an accountcode to use.
> 
> 2) The calling channel propagating its non-empty peeraccount or its
> non-empty accountcode if the peeraccount was empty to the outgoing
> channel's accountcode before initiating the dial.  e.g., Dial and
> FollowMe.  The exception to this propagation method is Queue.  Queue will
> only propagate peeraccounts this way only if the outgoing channel does not
> have an accountcode.
> 
> 3) Dialplan using CHANNEL(accountcode).
> 
> 4) Dialplan using CHANNEL(peeraccount) on the other end of a local
> channel pair.
> 
> If a channel does not have an accountcode it can get one from the
> following places:
> 
> 1) The channel driver's configuration at channel creation.
> 
> 2) Explicit user action as already indicated.
> 
> 3) Entering a basic or stasis-mixing bridge from a peer channel's
> peeraccount value.
> 
> You can specify the accountcode for an outgoing channel by setting the
> CHANNEL(peeraccount) before using the Dial, FollowMe, and Queue
> applications.  Queue adds the wrinkle that it will not overwrite an
> existing accountcode on the outgoing channel with the calling channels
> values.
> 
> Accountcode and peeraccount values propagate to an outgoing channel before
> dialing.  Accountcodes also propagate when channels enter or leave a basic
> or stasis-mixing bridge.  The peeraccount value only makes sense for
> mixing bridges with two channels; it is meaningless otherwise.
> 
> * Made peeraccount functional by changing accountcode propagation as
> described above.
> 
> * Fixed CEL extracting the wrong ie value for the peeraccount.  This was
> done intentionally in Asterisk v1.8 when that version had to punt on
> peeraccount.
> 
> * Fixed a few places dealing with accountcodes that were reading from
> channels without the lock held.
> 
> 
> Diffs
> -----
> 
>   /trunk/res/parking/parking_bridge_features.c 419127 
>   /trunk/main/pbx.c 419127 
>   /trunk/main/dial.c 419127 
>   /trunk/main/core_unreal.c 419127 
>   /trunk/main/channel.c 419127 
>   /trunk/main/cel.c 419127 
>   /trunk/main/bridge_basic.c 419127 
>   /trunk/main/bridge.c 419127 
>   /trunk/include/asterisk/channel.h 419127 
>   /trunk/apps/app_queue.c 419127 
>   /trunk/apps/app_followme.c 419127 
>   /trunk/apps/app_dial.c 419127 
>   /trunk/UPGRADE.txt 419127 
>   /trunk/CHANGES 419127 
> 
> Diff: https://reviewboard.asterisk.org/r/3601/diff/
> 
> 
> Testing
> -------
> 
> * Ran tests from https://reviewboard.asterisk.org/r/3832/ all tests tagged
> with accountcode pass.
> 
> * Set the accountcode on the calling channel and let the channel driver
> supply or not the accountcode for the outgoing channel.  The acccountcode
> on the calling channel forces itself on the outgoing channel.  This is the
> same as previous behavior.
> 
> * Set the accountcode and peeraccount code on the calling channel and let
> the channel driver supply or not the acccountcode for the outgoing
> channel.  The outgoing channel's accountcode and peeraccount got the
> calling channel's peeraccount and accountcode values respectively.
> 
> * Let dialplan set accountcodes on channels and performed a DTMF attended
> transfer to create a three party bridge.  When the transferrer channel
> left the three party bridge, the remaining two channels got the
> peeraccount updated to the other party.  Unfortunately, you only see the
> updated peeraccount values in the CEL log when the channels leave the
> bridge.
> 
> Throughout each of these tests, the CEL log had the expected peeraccount
> value.  Some interpolation is needed in the CEL log for complicated
> accountcode manipulation because there aren't enough events to indicate
> when the account codes change.  Note the peeraccount value is meaningless
> if the bridge does not contain two parties.
> 
> 
> Thanks,
> 
> rmudgett
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140724/8e20c218/attachment-0001.html>


More information about the asterisk-dev mailing list