[asterisk-dev] [Code Review] 3362: func_periodic_hook: New function for periodic hooks.

Russell Bryant reviewboard at asterisk.org
Sat Apr 5 08:06:49 CDT 2014


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

(Updated April 5, 2014, 8:06 a.m.)


Status
------

This change has been marked as submitted.


Review request for Asterisk Developers.


Changes
-------

Committed in revision 411768


Repository: Asterisk


Description
-------

    This commit introduces a new dialplan function, PERIODIC_HOOK().
    It allows you run to a dialplan hook on a channel periodically.  The
    original use case that inspired this was the ability to play a beep
    periodically into a call being recorded.  The implementation is much
    more generic though and could be used for many other things.
    
    The implementation makes heavy use of existing Asterisk components.
    It uses a combination of Local channels and ChanSpy() to run some
    custom dialplan and inject any audio it generates into an active call.
    
    The other important bit of the implementation is how it figures out
    when to trigger the beep playback.  This implementation uses the
    audiohook API, even though it's not actually touching the audio in any
    way.  It's a convenient way to get a callback and check if it's time
    to kick off another beep.  It would be nice if this was timer event
    based instead of polling based, but unfortunately I don't see a way to
    do it that won't interfere with other things.


Diffs
-----

  /trunk/funcs/func_periodic_hook.c PRE-CREATION 
  /trunk/CHANGES 411684 

Diff: https://reviewboard.asterisk.org/r/3362/diff/


Testing
-------

Called the following extension (100 at test), both letting it run all the way through, as well as hanging up at various points in the middle.

[hooks]

exten => beep,1,Answer()
    same => n,Verbose(1,Channel name: ${HOOK_CHANNEL})
    same => n,Verbose(1,Hook ID: ${HOOK_ID})
    same => n,Playback(beep)

[test]

exten => 100,1,Answer()
    same => n,Set(BEEP_ID=${PERIODIC_HOOK(hooks,beep,5)})
    same => n,Wait(20)
    same => n,Set(PERIODIC_HOOK(${BEEP_ID})=off)
    same => n,Wait(20)
    same => n,Set(PERIODIC_HOOK(${BEEP_ID})=on)
    same => n,Wait(20)
    same => n,Hangup()


Thanks,

Russell Bryant

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140405/73da9992/attachment.html>


More information about the asterisk-dev mailing list