<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/1871/">https://reviewboard.asterisk.org/r/1871/</a>
     </td>
    </tr>
   </table>
   <br />


<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.</div>
<div>By Russell Bryant.</div>





<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 patch adds two new dialplan functions: FEATURE() and FEATUREMAP().
FEATURE() is indended to be used to allow customizing general feature
settings on a per-channel basis.  It currently allows you to set a
custom parkingtime for a channel.

FEATUREMAP() is similar, but allows customizing the built-in feature
mappings on a per-channel basis.  Currently you can customize the digit
string for activating blind or attended transfers.

More options and feature mappings could be added to this over time as
desired.
</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;">Using the following dialplan:

1) Dial 101, make sure normal transfers work (I tested transferring to 100).
2) Dial 102, make sure transfers using channel specific feature mappings work.
3) Dial 101, transfer to parking and observe normal parkingtime.
4) Dial 103, transfer to parking and verify that the custom parkingtime is used.



[featuretest]

include =&gt; parkedcalls

; Dummy extension for a Local channel.  We&#39;ll call this and transfer it.
exten =&gt; foo,1,Answer()
    same =&gt; n(wait),Wait(300)
    same =&gt; n,Goto(wait)

; Transfer target.
exten =&gt; 100,1,Answer()
    same =&gt; n(wait),Wait(300)
    same =&gt; n,Goto(wait)

; Call this and make sure blindxfer and atxfer still work using default mappings.
exten =&gt; 101,1,Answer()
    same =&gt; n,Verbose(0,Regular transfer test.)
    same =&gt; n,Verbose(0,Blind Transfer: ${FEATUREMAP(blindxfer)})
    same =&gt; n,Verbose(0,Attended Transfer: ${FEATUREMAP(atxfer)})
    same =&gt; n,Dial(Local/foo@featuretest,,tT)

; Call this and make sure blindxfer and atxfer work with custom mappings.
exten =&gt; 102,1,Answer()
    same =&gt; n,Verbose(0,Custom transfer test.)
    same =&gt; n,Verbose(0,Setting blindxfer to &#39;77&#39; and atxfer to &#39;88&#39;)
    same =&gt; n,Set(FEATUREMAP(blindxfer)=77)
    same =&gt; n,Set(FEATUREMAP(atxfer)=88)
    same =&gt; n,Verbose(0,Blind Transfer: ${FEATUREMAP(blindxfer)})
    same =&gt; n,Verbose(0,Attended Transfer: ${FEATUREMAP(atxfer)})
    same =&gt; n,Dial(Local/foo@featuretest,,tT)

; Test setting a parkingtime.  Start with calling &#39;101&#39; and then parking.
; Then, call this and verify that the new parkingtime is used.
exten =&gt; 103,1,Answer()
    same =&gt; n,Verbose(0,Test custom parkingtime.)
    same =&gt; n,Verbose(0,Blind Transfer: ${FEATUREMAP(blindxfer)})
    same =&gt; n,Dial(Local/foo@featuretest,,tTU(setparkingtime^3))


; GoSub routine for setting parkingtime on a dialed channel.
[setparkingtime]

exten =&gt; s,1,Verbose(0,Setting custom parkingtime to &#39;${ARG1}&#39;)
    same =&gt; n,Verbose(0,Old value: ${FEATURE(parkingtime)})
    same =&gt; n,Set(FEATURE(parkingtime)=${ARG1})
    same =&gt; n,Verbose(0,New value: ${FEATURE(parkingtime)})
    same =&gt; n,Return()
</pre>
  </td>
 </tr>
</table>




<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>/trunk/include/asterisk/features.h <span style="color: grey">(362142)</span></li>

 <li>/trunk/main/features.c <span style="color: grey">(362142)</span></li>

</ul>

<p><a href="https://reviewboard.asterisk.org/r/1871/diff/" style="margin-left: 3em;">View Diff</a></p>




  </td>
 </tr>
</table>




  </div>
 </body>
</html>