<p>Antoni Goldstein has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/11207">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">app_dial.c: RINGTIME, PROGRESSTIME and ms resolution dial timings<br><br>Added RINGTIME, RINGTIME_MS, PROGRESSTIME, PROGRESSTIME_MS variables filled<br>at the earliest received PROGRESS or RINGING.<br>Added millisecond versions of DIALEDTIME and ANSWEREDTIME.<br><br>Added millisecond versions of ast_channel_get_up_time and<br>ast_channel_get_duration in channel.c.<br><br>ASTERISK-28363<br><br>Change-Id: If95f1a7d8c4acbac740037de0c6e3109ff6620b1<br>---<br>M apps/app_dial.c<br>M include/asterisk/channel.h<br>M main/channel.c<br>3 files changed, 84 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/07/11207/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/apps/app_dial.c b/apps/app_dial.c</span><br><span>index 714108b..f6359b9 100644</span><br><span>--- a/apps/app_dial.c</span><br><span>+++ b/apps/app_dial.c</span><br><span>@@ -1184,7 +1184,11 @@</span><br><span>        int is_cc_recall;</span><br><span>    int cc_frame_received = 0;</span><br><span>   int num_ringing = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-    struct timeval start = ast_tvnow();</span><br><span style="color: hsl(120, 100%, 40%);">+   int sent_ring = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    int sent_progress = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        char buf[80];</span><br><span style="color: hsl(120, 100%, 40%);">+ struct timeval start = ast_tvnow(), now, then;</span><br><span style="color: hsl(120, 100%, 40%);">+        int64_t diff;</span><br><span> </span><br><span>    if (single) {</span><br><span>                /* Turn off hold music, etc */</span><br><span>@@ -1466,6 +1470,23 @@</span><br><span>                                                      ast_indicate(in, AST_CONTROL_RINGING);</span><br><span>                                                       pa->sentringing++;</span><br><span>                                                }</span><br><span style="color: hsl(120, 100%, 40%);">+                                             if (!sent_ring) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     ast_channel_lock(in);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ast_channel_stage_snapshot(in);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     now = ast_tvnow();</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    then = ast_channel_creationtime(c);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   diff = ast_tvzero(then) ? 0 : ast_tvdiff_ms(now, then);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     snprintf(buf, sizeof(buf), "%d", diff / 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      pbx_builtin_setvar_helper(in, "RINGTIME", buf);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     snprintf(buf, sizeof(buf), "%d.%03d", diff/1000, diff % 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      pbx_builtin_setvar_helper(in, "RINGTIME_MS", buf);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                                        ast_channel_stage_snapshot_done(in);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  ast_channel_unlock(in);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       sent_ring = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                                                }</span><br><span>                                    }</span><br><span>                                    break;</span><br><span>                               case AST_CONTROL_PROGRESS:</span><br><span>@@ -1480,6 +1501,23 @@</span><br><span>                                                  ast_indicate(in, AST_CONTROL_PROGRESS);</span><br><span>                                              }</span><br><span>                                    }</span><br><span style="color: hsl(120, 100%, 40%);">+                                     if (!sent_progress) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                         ast_channel_lock(in);</span><br><span style="color: hsl(120, 100%, 40%);">+                                         ast_channel_stage_snapshot(in);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                             now = ast_tvnow();</span><br><span style="color: hsl(120, 100%, 40%);">+                                            then = ast_channel_creationtime(c);</span><br><span style="color: hsl(120, 100%, 40%);">+                                           diff = ast_tvzero(then) ? 0 : ast_tvdiff_ms(now, then);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                             snprintf(buf, sizeof(buf), "%d", diff / 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+                                              pbx_builtin_setvar_helper(in, "PROGRESSTIME", buf);</span><br><span style="color: hsl(120, 100%, 40%);">+                                         snprintf(buf, sizeof(buf), "%d.%03d", diff/1000, diff % 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+                                              pbx_builtin_setvar_helper(in, "PROGRESSTIME_MS", buf);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                            ast_channel_stage_snapshot_done(in);</span><br><span style="color: hsl(120, 100%, 40%);">+                                          ast_channel_unlock(in);</span><br><span style="color: hsl(120, 100%, 40%);">+                                               sent_progress = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                                    }</span><br><span>                                    if (!ast_strlen_zero(dtmf_progress)) {</span><br><span>                                               ast_verb(3,</span><br><span>                                                  "Sending DTMF '%s' to the called party as result of receiving a PROGRESS message.\n",</span><br><span>@@ -2073,16 +2111,23 @@</span><br><span> {</span><br><span>       char buf[80];</span><br><span>        time_t end;</span><br><span style="color: hsl(120, 100%, 40%);">+   int64_t diff;</span><br><span>        struct ast_channel *chan = data;</span><br><span> </span><br><span>         time(&end);</span><br><span> </span><br><span>  ast_channel_lock(chan);</span><br><span>      ast_channel_stage_snapshot(chan);</span><br><span style="color: hsl(0, 100%, 40%);">-       snprintf(buf, sizeof(buf), "%d", ast_channel_get_up_time(chan));</span><br><span style="color: hsl(120, 100%, 40%);">+    diff = ast_channel_get_up_time_ms(chan)</span><br><span style="color: hsl(120, 100%, 40%);">+       snprintf(buf, sizeof(buf), "%d", diff/1000);</span><br><span>       pbx_builtin_setvar_helper(chan, "ANSWEREDTIME", buf);</span><br><span style="color: hsl(0, 100%, 40%);">- snprintf(buf, sizeof(buf), "%d", ast_channel_get_duration(chan));</span><br><span style="color: hsl(120, 100%, 40%);">+   snprintf(buf, sizeof(buf), "%d.%03d", diff/1000, diff%1000);</span><br><span style="color: hsl(120, 100%, 40%);">+        pbx_builtin_setvar_helper(chan, "ANSWEREDTIME_MS", buf);</span><br><span style="color: hsl(120, 100%, 40%);">+    diff = ast_channel_get_duration_ms(chan)</span><br><span style="color: hsl(120, 100%, 40%);">+      snprintf(buf, sizeof(buf), "%d", diff/1000);</span><br><span>       pbx_builtin_setvar_helper(chan, "DIALEDTIME", buf);</span><br><span style="color: hsl(120, 100%, 40%);">+ snprintf(buf, sizeof(buf), "%d.%03d", diff/1000, diff%1000);</span><br><span style="color: hsl(120, 100%, 40%);">+        pbx_builtin_setvar_helper(chan, "DIALEDTIME_MS", buf);</span><br><span>     ast_channel_stage_snapshot_done(chan);</span><br><span>       ast_channel_unlock(chan);</span><br><span> }</span><br><span>diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h</span><br><span>index 0ab12e7..5d222c3 100644</span><br><span>--- a/include/asterisk/channel.h</span><br><span>+++ b/include/asterisk/channel.h</span><br><span>@@ -2339,6 +2339,17 @@</span><br><span> void ast_deactivate_generator(struct ast_channel *chan);</span><br><span> </span><br><span> /*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \since 13</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Obtain how long the channel since the channel was created in ms</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param chan The channel object</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 0 if the time value cannot be computed (or you called this really fast)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval The number of milliseconds the channel has been up</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int64_t ast_channel_get_duration_ms(struct ast_channel *chan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span>  * \since 12</span><br><span>  * \brief Obtain how long the channel since the channel was created</span><br><span>  *</span><br><span>@@ -2350,6 +2361,17 @@</span><br><span> int ast_channel_get_duration(struct ast_channel *chan);</span><br><span> </span><br><span> /*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \since 13</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Obtain how long it has been since the channel was answered in ms</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param chan The channel object</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 0 if the channel isn't answered (or you called this really fast)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval The number of milliseconds the channel has been up</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int64_t ast_channel_get_up_time_ms(struct ast_channel *chan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span>  * \since 12</span><br><span>  * \brief Obtain how long it has been since the channel was answered</span><br><span>  *</span><br><span>diff --git a/main/channel.c b/main/channel.c</span><br><span>index 07b1521..e95eac0 100644</span><br><span>--- a/main/channel.c</span><br><span>+++ b/main/channel.c</span><br><span>@@ -2941,24 +2941,34 @@</span><br><span>      return ast_answer(chan);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int ast_channel_get_duration(struct ast_channel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+int64_t ast_channel_get_duration_ms(struct ast_channel *chan)</span><br><span> {</span><br><span>  ast_assert(NULL != chan);</span><br><span> </span><br><span>        if (ast_tvzero(ast_channel_creationtime(chan))) {</span><br><span>            return 0;</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       return (ast_tvdiff_ms(ast_tvnow(), ast_channel_creationtime(chan)) / 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+   return ast_tvdiff_ms(ast_tvnow(), ast_channel_creationtime(chan));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int ast_channel_get_up_time(struct ast_channel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_channel_get_duration(struct ast_channel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return (ast_channel_get_duration_ms(chan) / 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int64_t ast_channel_get_up_time_ms(struct ast_channel *chan)</span><br><span> {</span><br><span>   ast_assert(NULL != chan);</span><br><span> </span><br><span>        if (ast_tvzero(ast_channel_answertime(chan))) {</span><br><span>              return 0;</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       return (ast_tvdiff_ms(ast_tvnow(), ast_channel_answertime(chan)) / 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+     return ast_tvdiff_ms(ast_tvnow(), ast_channel_answertime(chan));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_channel_get_up_time(struct ast_channel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       return (ast_channel_get_up_time_ms(chan) / 1000);</span><br><span> }</span><br><span> </span><br><span> static void deactivate_generator_nolock(struct ast_channel *chan)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/11207">change 11207</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/11207"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-Change-Id: If95f1a7d8c4acbac740037de0c6e3109ff6620b1 </div>
<div style="display:none"> Gerrit-Change-Number: 11207 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Antoni Goldstein <action@gdevel.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>