<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/1327/">https://reviewboard.asterisk.org/r/1327/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On July 21st, 2011, 10:23 a.m., <b>mjordan</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
<thead>
<tr>
<th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
<a href="https://reviewboard.asterisk.org/r/1327/diff/1/?file=17583#file17583line865" style="color: black; font-weight: bold; text-decoration: underline;">/branches/1.8/apps/app_voicemail.c</a>
<span style="font-weight: normal;">
(Diff revision 1)
</span>
</th>
</tr>
</thead>
<tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
<tr>
<td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">static char vm_password[80] = "vm-password";</pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">865</font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="k">static</span> <span class="kt">char</span> <span class="n">vm_prepend_timeout</span><span class="p">[</span><span class="mi">80</span><span class="p">]</span> <span class="o">=</span> <span class="s">"then-press-pound"</span><span class="p">;</span> <span class="cm">/* Should be substituted for something more appropriate */</span></pre></td>
</tr>
</tbody>
</table>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Two quick comments:
1. The sound 'then-press-pound' may be useful in a number of places in app_voicemail, and not just when prepend times out. You may want to rename the variable and its corresponding configuration value to reflect that.
2. Include the 'vm-prepend-timeout' variable in voicemail.conf.samples for documentation purposes</pre>
</blockquote>
</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">1. Currently all of the other recording messages have their own prompts. The "then-press-pound" bit is only there as a place holder to make sure the user knows they need to press something to end the call. The intention here though is really to play a new audio file specific to cancellation via timeout.
Like I've been saying though, it might be better to drop the whole notion of rejecting time-out and instead give the user a menu prompt to review the recording and then either send it along as is, re-record it, or cancel the whole process.
2. Yes, working on it.</pre>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On July 21st, 2011, 10:23 a.m., <b>mjordan</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
<thead>
<tr>
<th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
<a href="https://reviewboard.asterisk.org/r/1327/diff/1/?file=17584#file17584line1025" style="color: black; font-weight: bold; text-decoration: underline;">/branches/1.8/main/app.c</a>
<span style="font-weight: normal;">
(Diff revision 1)
</span>
</th>
</tr>
</thead>
<tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
<tr>
<td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">int ast_play_and_record_full(struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime, const char *fmt, int *duration, int silencethreshold, int maxsilence, const char *path, const char *acceptdtmf, const char *canceldtmf)</pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1023</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">{</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1025</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">{</span></pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#e9eaa8" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1024</font></th>
<td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">__ast_play_and_record</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span> <span class="n">playfile</span><span class="p">,</span> <span class="n">recordfile</span><span class="p">,</span> <span class="n">maxtime</span><span class="p">,</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">duration</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">S_OR</span><span class="p">(</span><span class="n">acceptdtmf</span><span class="p">,</span> <span class="n">default_acceptdtmf</span><span class="p">),</span> <span class="n">S_OR</span><span class="p">(</span><span class="n">canceldtmf</span><span class="p">,</span> <span class="n">default_canceldtmf</span><span class="p">));</span></pre></td>
<th bgcolor="#e9eaa8" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1026</font></th>
<td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">__ast_play_and_record</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span> <span class="n">playfile</span><span class="p">,</span> <span class="n">recordfile</span><span class="p">,</span> <span class="n">maxtime</span><span class="p">,</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">duration</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">S_OR</span><span class="p">(</span><span class="n">acceptdtmf</span><span class="p">,</span> <span class="n">default_acceptdtmf</span><span class="p">),</span> <span class="n">S_OR</span><span class="p">(</span><span class="n">canceldtmf</span><span class="p">,</span> <span class="n">default_canceldtmf</span><span class="p">)<span class="hl">,</span></span><span class="hl"> </span><span class="mi"><span class="hl">0</span></span><span class="p">);</span></pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1025</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">}</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1027</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">}</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1026</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1028</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1027</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="kt">int</span> <span class="nf">ast_play_and_record</span><span class="p">(</span><span class="k">struct</span> <span class="n">ast_channel</span> <span class="o">*</span><span class="n">chan</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">playfile</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">recordfile</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxtime</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">duration</span><span class="p">,</span> <span class="kt">int</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1029</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="kt">int</span> <span class="nf">ast_play_and_record</span><span class="p">(</span><span class="k">struct</span> <span class="n">ast_channel</span> <span class="o">*</span><span class="n">chan</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">playfile</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">recordfile</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxtime</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">duration</span><span class="p">,</span> <span class="kt">int</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1028</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">{</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1030</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">{</span></pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#e9eaa8" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1029</font></th>
<td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">__ast_play_and_record</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span> <span class="n">playfile</span><span class="p">,</span> <span class="n">recordfile</span><span class="p">,</span> <span class="n">maxtime</span><span class="p">,</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">duration</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">default_acceptdtmf</span><span class="p">,</span> <span class="n">default_canceldtmf</span><span class="p">);</span></pre></td>
<th bgcolor="#e9eaa8" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1031</font></th>
<td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">__ast_play_and_record</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span> <span class="n">playfile</span><span class="p">,</span> <span class="n">recordfile</span><span class="p">,</span> <span class="n">maxtime</span><span class="p">,</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">duration</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">default_acceptdtmf</span><span class="p">,</span> <span class="n">default_canceldtmf</span><span class="p"><span class="hl">,</span></span><span class="hl"> </span><span class="mi"><span class="hl">0</span></span><span class="p">);</span></pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1030</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">}</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1032</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">}</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1031</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1033</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1032</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="kt">int</span> <span class="nf">ast_play_and_prepend</span><span class="p">(</span><span class="k">struct</span> <span class="n">ast_channel</span> <span class="o">*</span><span class="n">chan</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">playfile</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">recordfile</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxtime</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">duration</span><span class="p">,</span> <span class="kt">int</span> <span class="n">beep</span><span class="p">,</span> <span class="kt">int</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxsilence</span><span class="p">)</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1034</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="kt">int</span> <span class="nf">ast_play_and_prepend</span><span class="p">(</span><span class="k">struct</span> <span class="n">ast_channel</span> <span class="o">*</span><span class="n">chan</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">playfile</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">recordfile</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxtime</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">duration</span><span class="p">,</span> <span class="kt">int</span> <span class="n">beep</span><span class="p">,</span> <span class="kt">int</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="kt">int</span> <span class="n">maxsilence</span><span class="p">)</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1033</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">{</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1035</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">{</span></pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#e9eaa8" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1034</font></th>
<td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">__ast_play_and_record</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span> <span class="n">playfile</span><span class="p">,</span> <span class="n">recordfile</span><span class="p">,</span> <span class="n">maxtime</span><span class="p">,</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">duration</span><span class="p">,</span> <span class="n">beep</span><span class="p">,</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">default_acceptdtmf</span><span class="p">,</span> <span class="n">default_canceldtmf</span><span class="p">);</span></pre></td>
<th bgcolor="#e9eaa8" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1036</font></th>
<td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">__ast_play_and_record</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span> <span class="n">playfile</span><span class="p">,</span> <span class="n">recordfile</span><span class="p">,</span> <span class="n">maxtime</span><span class="p">,</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">duration</span><span class="p">,</span> <span class="n">beep</span><span class="p">,</span> <span class="n">silencethreshold</span><span class="p">,</span> <span class="n">maxsilence</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">default_acceptdtmf</span><span class="p">,</span> <span class="n">default_canceldtmf</span><span class="p"><span class="hl">,</span></span><span class="hl"> </span><span class="mi"><span class="hl">1</span></span><span class="p">);</span></pre></td>
</tr>
</tbody>
<tbody>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1035</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">}</span></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1037</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="p">}</span></pre></td>
</tr>
<tr>
<th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">1036</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">1038</font></th>
<td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
</tr>
</tbody>
</table>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I'm not sure we can make the assumption that we only say 'goodbye' during a prepend operation. When a user leaves a voicemail, and presses the '#' key, ast_play_and_record_full is called, which will play the 'good-bye' message for them.
Either this needs to be an option on each of the ast_play_and_record_* methods, and all of the places updated accordingly, or we should defer this change until we can properly pull the 'good-bye' message out of app.c</pre>
</blockquote>
</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Actually I think you have that backwards. All these changes do is skip the playback of the "thank you" message at the end of recording when using the ast_play_and_prepend wrapper. While in prepend mode, __ast_play_and_record accepts any and all DTMF as a confirmation of the recording being finished. For the rest of the recording modes, behavior is completely unchanged.
These changes are necessary to keep the __ast_play_and_record function from saying "thank-you" when reaching the time-out, which is erroneous since that implies the message was accepted when in reality, it will be rejected right afterwards. We can't just rip 'thank you' out of the record feature either because the vanilla record is used all over the place and that thank-you line is expected right now. So this is the minimum impact means of solving the problem since prepend is used in exactly one place right now.</pre>
<br />
<p>- jrose</p>
<br />
<p>On July 21st, 2011, 9:33 a.m., jrose 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, David Vossel and mjordan.</div>
<div>By jrose.</div>
<p style="color: grey;"><i>Updated July 21, 2011, 9:33 a.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;">When recording a prepend message for voicemail, I think the following is the intended behavior:
1. User starts prepend recording
2. User concludes prepend recording with a button in order to finish the recording. Confirm success if the user stops the recording manually.
3. If the user times out instead, confirm a failure and go back to the menu with no changes.
What was happening instead was...
The first time through, things were mostly as above, except if the user timed out, Allison would use the same message as if the call went through.
The recording would not be made in this instance.
However, the second time and above through, a flag saying the call had already been recorded would be raised and this would trigger some file copying events on files that shouldn't have been being copied. If the call timed out again, the prepend message would write over the inbox message and the whole message would be forwarded to the recipient.
This patch changes Allison's prompt for timing out while in voicemail mode when not entering the finished recording mode to say "Sorry, Please Try again" followed by "Press the pound key when finished" (I might be paraphrasing slightly). Technically any DTMF works, but I haven't seen any prompt for that yet and I haven't settled on this as a permanent solution. After this point, when the menu comes back around, we lower the flag for the recording having been made essentially reverting back to the original state of the menu.
If this seems appropriate but less than ideal, I am ready at to begin adding a post-prepend-recording menu that will allow the user to review the complete message as well as accept, re-record it, append it, cancel it, etc. before sending it on. Naturally if something like this were in place, there wouldn't be any need to just outright discard prepend recordings after a time-out. Depending on how many of those options we want to include, that could be some extra voice work, so we might consider holding off on that for now and just going with the patch as is, since this works and it informs the user of what is happening much more clearly than the current means does.
This is actually the second revision of the patch and moves the speech into app_voicemail's forwarding menu code and prepares it for customization. Speech file customization isn't tested yet, but looks right.</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;">Tested prepend with timeout and prepend with confirmation, as well as multiple timeouts and multiple timeouts followed by recording with confirmation. In each case there is no residual backup message, and the call is processed as expected. Also, the prepend message no longer gets tacked onto the original message.</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>/branches/1.8/apps/app_voicemail.c <span style="color: grey">(329012)</span></li>
<li>/branches/1.8/main/app.c <span style="color: grey">(329012)</span></li>
</ul>
<p><a href="https://reviewboard.asterisk.org/r/1327/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>