<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="https://reviewboard.asterisk.org/r/2002/">https://reviewboard.asterisk.org/r/2002/</a>
</td>
</tr>
</table>
<br />
<p>Ship it!</p>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Looks good!</pre>
<br />
<p>- Matt</p>
<br />
<p>On June 26th, 2012, 6:38 p.m., rmudgett wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/media/rb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for Asterisk Developers and kobaz.</div>
<div>By rmudgett.</div>
<p style="color: grey;"><i>Updated June 26, 2012, 6:38 p.m.</i></p>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This feature originated with https://reviewboard.asterisk.org/r/1230/ by kobaz.
See
https://wiki.asterisk.org/wiki/display/AST/Asterisk+11+Projects
https://wiki.asterisk.org/wiki/display/AST/Hangup+handlers
Hangup handlers are an alternative to the h extension. They can be used
in addition to the h extension. The idea is to attach a Gosub routine to
a channel that will execute when the call hangs up. Whereas which h
extension gets executed depends on the location of dialplan execution when
the call hangs up, hangup handlers are attached to the call channel. You
can attach multiple handlers that will execute in the order of most
recently added first.
Call transfers, call pickup, and call parking can result in channels on
both sides of a bridge containing hangup handlers.
Hangup handlers can also be attached to any call leg because of pre-dial
routines.
When hangup handlers are executed
Any hangup handlers associated with a channel are always executed when the
channel is hung up.
Manipulating hangup handlers on a channel
Hangup handlers pass the saved handler string to the Gosub application to
execute. The syntax is intentionally the same as the Gosub application.
If context or exten are not supplied then the current values from the
channel pushing the hangup handler are inserted before storing on the
hangup handler stack.
Push a hangup handler onto a channel:
same => n,Set(CHANNEL(hangup_handler_push)=[[context,]exten,]priority[(arg1[,...][,argN])]);
Pop a hangup handler off a channel and optionally push a replacement:
same => n,Set(CHANNEL(hangup_handler_pop)=[[[context,]exten,]priority[(arg1[,...][,argN])]]);
Pop all hangup handlers off a channel and optionally push a replacement:
same => n,Set(CHANNEL(hangup_handler_wipe)=[[[context,]exten,]priority[(arg1[,...][,argN])]]);
Cascading hangup handlers
same => n,Set(CHANNEL(hangup_handler_push)=hdlr3,s,1(args));
same => n,Set(CHANNEL(hangup_handler_push)=hdlr2,s,1(args));
same => n,Set(CHANNEL(hangup_handler_push)=hdlr1,s,1(args));
AMI events
The hangup handler AMI events are output as part of the AMI dialplan
permission class.
* The AMI event HangupHandlerPush is generated whenever a hangup handler
is pushed on the stack by the CHANNEL() function.
* The AMI event HangupHandlerPop is generated whenever a hangup handler is
popped off the stack by the CHANNEL() function.
* The AMI event HangupHandlerRun is generated as a hangup handler is about
to be executed.
CLI commands
Single channel:
core show hanguphandlers <chan>
Output:
Channel Handler
<chan-name> <first handler to execute>
<second handler to execute>
<third handler to execute>
All channels:
core show hanguphandlers all
Output:
Channel Handler
<chan1-name> <first handler to execute>
<second handler to execute>
<third handler to execute>
<chan2-name> <first handler to execute>
<chan3-name> <first handler to execute>
<second handler to execute>
</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Attached hangup handlers to channels and done the following kinds of calls:
Simple A to B call.
DTMF attended transfer
DTMF blind transfer
Hangup handlers were executed when expected.</pre>
</td>
</tr>
</table>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19549">ASTERISK-19549</a>
</div>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>/trunk/.cleancount <span style="color: grey">(369418)</span></li>
<li>/trunk/CHANGES <span style="color: grey">(369418)</span></li>
<li>/trunk/apps/app_dial.c <span style="color: grey">(369418)</span></li>
<li>/trunk/apps/app_followme.c <span style="color: grey">(369418)</span></li>
<li>/trunk/apps/app_queue.c <span style="color: grey">(369418)</span></li>
<li>/trunk/channels/chan_local.c <span style="color: grey">(369418)</span></li>
<li>/trunk/configs/cdr.conf.sample <span style="color: grey">(369418)</span></li>
<li>/trunk/funcs/func_channel.c <span style="color: grey">(369418)</span></li>
<li>/trunk/include/asterisk/channel.h <span style="color: grey">(369418)</span></li>
<li>/trunk/include/asterisk/pbx.h <span style="color: grey">(369418)</span></li>
<li>/trunk/main/autoservice.c <span style="color: grey">(369418)</span></li>
<li>/trunk/main/channel.c <span style="color: grey">(369418)</span></li>
<li>/trunk/main/channel_internal_api.c <span style="color: grey">(369418)</span></li>
<li>/trunk/main/features.c <span style="color: grey">(369418)</span></li>
<li>/trunk/main/pbx.c <span style="color: grey">(369418)</span></li>
</ul>
<p><a href="https://reviewboard.asterisk.org/r/2002/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>