<h1>Project "FreeSWITCH Source" received a push.</h1>

<h2>branch: master updated</h2>
<pre>
       via: bc397ab6000d8e8acaeecf351a3281428226d0d9 (commit)
      from: 687d39f259cf62bea5c6508acd76d8732dcc0e11 (commit)


</pre>= COMMIT LOG ===========================================================
<div class="highlight"><pre>committer: Anthony Minessale
comments: 
FS-2971

<span style="color: #000080; font-weight: bold">diff --git a/libs/esl/src/esl_event.c b/libs/esl/src/esl_event.c</span>
<span style="color: #000080; font-weight: bold">index db7c581..9bd78a8 100644</span>
<span style="color: #A00000">--- a/libs/esl/src/esl_event.c</span>
<span style="color: #00A000">+++ b/libs/esl/src/esl_event.c</span>
<span style="color: #800080; font-weight: bold">@@ -131,6 +131,8 @@ static const char *EVENT_NAMES[] = {</span>
         &quot;NAT&quot;,
         &quot;RECORD_START&quot;,
         &quot;RECORD_STOP&quot;,
<span style="color: #00A000">+        &quot;PLAYBACK_START&quot;,</span>
<span style="color: #00A000">+        &quot;PLAYBACK_STOP&quot;,</span>
         &quot;CALL_UPDATE&quot;,
         &quot;FAILURE&quot;,
         &quot;SOCKET_DATA&quot;,
<span style="color: #000080; font-weight: bold">diff --git a/libs/esl/src/include/esl_event.h b/libs/esl/src/include/esl_event.h</span>
<span style="color: #000080; font-weight: bold">index 0e6d3e3..7e619f4 100644</span>
<span style="color: #A00000">--- a/libs/esl/src/include/esl_event.h</span>
<span style="color: #00A000">+++ b/libs/esl/src/include/esl_event.h</span>
<span style="color: #800080; font-weight: bold">@@ -119,6 +119,8 @@ typedef enum {</span>
         ESL_EVENT_NAT,
         ESL_EVENT_RECORD_START,
         ESL_EVENT_RECORD_STOP,
<span style="color: #00A000">+        ESL_EVENT_PLAYBACK_START,</span>
<span style="color: #00A000">+        ESL_EVENT_PLAYBACK_STOP,</span>
         ESL_EVENT_CALL_UPDATE,
         ESL_EVENT_FAILURE,
         ESL_EVENT_SOCKET_DATA,
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_types.h b/src/include/switch_types.h</span>
<span style="color: #000080; font-weight: bold">index 3972404..4253d0e 100644</span>
<span style="color: #A00000">--- a/src/include/switch_types.h</span>
<span style="color: #00A000">+++ b/src/include/switch_types.h</span>
<span style="color: #800080; font-weight: bold">@@ -1504,6 +1504,8 @@ typedef enum {</span>
         SWITCH_EVENT_NAT,
         SWITCH_EVENT_RECORD_START,
         SWITCH_EVENT_RECORD_STOP,
<span style="color: #00A000">+        SWITCH_EVENT_PLAYBACK_START,</span>
<span style="color: #00A000">+        SWITCH_EVENT_PLAYBACK_STOP,</span>
         SWITCH_EVENT_CALL_UPDATE,
         SWITCH_EVENT_FAILURE,
         SWITCH_EVENT_SOCKET_DATA,
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_channel.c b/src/switch_channel.c</span>
<span style="color: #000080; font-weight: bold">index 9e3064b..179f63d 100644</span>
<span style="color: #A00000">--- a/src/switch_channel.c</span>
<span style="color: #00A000">+++ b/src/switch_channel.c</span>
<span style="color: #800080; font-weight: bold">@@ -2042,10 +2042,13 @@ SWITCH_DECLARE(void) switch_channel_event_set_extended_data(switch_channel_t *ch</span>
                 event-&gt;event_id == SWITCH_EVENT_REQUEST_PARAMS ||
                 event-&gt;event_id == SWITCH_EVENT_CHANNEL_DATA ||
                 event-&gt;event_id == SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE ||
<span style="color: #00A000">+                event-&gt;event_id == SWITCH_EVENT_CHANNEL_DESTROY ||</span>
                 event-&gt;event_id == SWITCH_EVENT_SESSION_HEARTBEAT ||
                 event-&gt;event_id == SWITCH_EVENT_API ||
                 event-&gt;event_id == SWITCH_EVENT_RECORD_START ||
                 event-&gt;event_id == SWITCH_EVENT_RECORD_STOP || 
<span style="color: #00A000">+                event-&gt;event_id == SWITCH_EVENT_PLAYBACK_START ||</span>
<span style="color: #00A000">+                event-&gt;event_id == SWITCH_EVENT_PLAYBACK_STOP ||</span>
                 event-&gt;event_id == SWITCH_EVENT_CALL_UPDATE || 
                 event-&gt;event_id == SWITCH_EVENT_MEDIA_BUG_START || 
                 event-&gt;event_id == SWITCH_EVENT_MEDIA_BUG_STOP || 
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_event.c b/src/switch_event.c</span>
<span style="color: #000080; font-weight: bold">index b626d5b..56ee9e9 100644</span>
<span style="color: #A00000">--- a/src/switch_event.c</span>
<span style="color: #00A000">+++ b/src/switch_event.c</span>
<span style="color: #800080; font-weight: bold">@@ -189,6 +189,8 @@ static char *EVENT_NAMES[] = {</span>
         &quot;NAT&quot;,
         &quot;RECORD_START&quot;,
         &quot;RECORD_STOP&quot;,
<span style="color: #00A000">+        &quot;PLAYBACK_START&quot;,</span>
<span style="color: #00A000">+        &quot;PLAYBACK_STOP&quot;,</span>
         &quot;CALL_UPDATE&quot;,
         &quot;FAILURE&quot;,
         &quot;SOCKET_DATA&quot;,
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c</span>
<span style="color: #000080; font-weight: bold">index dc263e9..98dfd0f 100644</span>
<span style="color: #A00000">--- a/src/switch_ivr_play_say.c</span>
<span style="color: #00A000">+++ b/src/switch_ivr_play_say.c</span>
<span style="color: #800080; font-weight: bold">@@ -746,12 +746,6 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se</span>
 
         }
 
<span style="color: #A00000">-        if (switch_event_create(&amp;event, SWITCH_EVENT_RECORD_STOP) == SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #A00000">-                switch_channel_event_set_data(channel, event);</span>
<span style="color: #A00000">-                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, &quot;Record-File-Path&quot;, file);</span>
<span style="color: #A00000">-                switch_event_fire(&amp;event);</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
         if (fill_cng || waste_resources) {
                 switch_core_codec_destroy(&amp;write_codec);
         }
<span style="color: #800080; font-weight: bold">@@ -766,6 +760,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se</span>
 
         switch_channel_set_variable_printf(channel, &quot;record_samples&quot;, &quot;%d&quot;, fh-&gt;samples_out);
 
<span style="color: #00A000">+        if (switch_event_create(&amp;event, SWITCH_EVENT_RECORD_STOP) == SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                switch_channel_event_set_data(channel, event);</span>
<span style="color: #00A000">+                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, &quot;Record-File-Path&quot;, file);</span>
<span style="color: #00A000">+                switch_event_fire(&amp;event);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
         switch_core_session_reset(session, SWITCH_TRUE, SWITCH_TRUE);
         return status;
 }
<span style="color: #800080; font-weight: bold">@@ -951,6 +951,38 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_release_file_handle(switch_core_sessi</span>
 #define FILE_BLOCKSIZE 1024 * 8
 #define FILE_BUFSIZE 1024 * 64
 
<span style="color: #00A000">+static void add_playback_vars_to_event(switch_core_session_t *session, switch_event_t *event, char *vars)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        char *tmp;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (!session || !event || !vars)</span>
<span style="color: #00A000">+                return;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if ((tmp = switch_core_session_strdup(session, vars))) {</span>
<span style="color: #00A000">+                char *argv[128] = { 0 };</span>
<span style="color: #00A000">+                int argc, i;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                if (!(argc = switch_separate_string(tmp, &#39;,&#39;, argv, (sizeof(argv) / sizeof(argv[0])))))</span>
<span style="color: #00A000">+                        return;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                for (i = 0; i &lt; argc; i++) {</span>
<span style="color: #00A000">+                        char *var, *val;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                        if ((var = strchr(argv[i], &#39;=&#39;))) {</span>
<span style="color: #00A000">+                                *var = &#39;\0&#39;;</span>
<span style="color: #00A000">+                                val = var+1;</span>
<span style="color: #00A000">+                                var = argv[i];</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                                if (var &amp;&amp; *var &amp;&amp; val &amp;&amp; *val) {</span>
<span style="color: #00A000">+                                        if ((var = switch_core_session_sprintf(session, &quot;playback_variable_%s&quot;, var))) {</span>
<span style="color: #00A000">+                                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, var, val);</span>
<span style="color: #00A000">+                                        }</span>
<span style="color: #00A000">+                                }</span>
<span style="color: #00A000">+                        }</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
 SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *session, switch_file_handle_t *fh, const char *file, switch_input_args_t *args)
 {
         switch_channel_t *channel = switch_core_session_get_channel(session);
<span style="color: #800080; font-weight: bold">@@ -990,6 +1022,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess</span>
         int timeout_samples = 0;
         const char *var;
         int more_data = 0;
<span style="color: #00A000">+        char *playback_vars, *tmp;</span>
<span style="color: #00A000">+        switch_event_t *event;</span>
 
         if (switch_channel_pre_answer(channel) != SWITCH_STATUS_SUCCESS) {
                 return SWITCH_STATUS_FALSE;
<span style="color: #800080; font-weight: bold">@@ -1138,6 +1172,19 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess</span>
                         }
                 }
 
<span style="color: #00A000">+                /* Try to parse extra parameters for this playback (parameters within {} at the end of the filename */</span>
<span style="color: #00A000">+                playback_vars = NULL;</span>
<span style="color: #00A000">+                if ((tmp = strchr(file, &#39;{&#39;))) {</span>
<span style="color: #00A000">+                        char *tfile, *e;</span>
<span style="color: #00A000">+                        </span>
<span style="color: #00A000">+                        if ((tfile = switch_core_session_strdup(session, tmp))) {</span>
<span style="color: #00A000">+                                if ((e = switch_find_end_paren(tfile, &#39;{&#39;, &#39;}&#39;)) &amp;&amp; *(e + 1) == &#39;\0&#39;) {</span>
<span style="color: #00A000">+                                        *tmp = &#39;\0&#39;;</span>
<span style="color: #00A000">+                                        *e = &#39;\0&#39;;</span>
<span style="color: #00A000">+                                        playback_vars = tfile+1;</span>
<span style="color: #00A000">+                                }</span>
<span style="color: #00A000">+                        }</span>
<span style="color: #00A000">+                }</span>
 
                 if (!fh) {
                         fh = &amp;lfh;
<span style="color: #800080; font-weight: bold">@@ -1293,6 +1340,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess</span>
 
                 ilen = samples;
 
<span style="color: #00A000">+                if (switch_event_create(&amp;event, SWITCH_EVENT_PLAYBACK_START) == SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        switch_channel_event_set_data(channel, event);</span>
<span style="color: #00A000">+                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, &quot;Playback-File-Path&quot;, file);</span>
<span style="color: #00A000">+                        add_playback_vars_to_event(session, event, playback_vars); </span>
<span style="color: #00A000">+                        switch_event_fire(&amp;event);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+</span>
                 for (;;) {
                         int do_speed = 1;
                         int last_speed = -1;
<span style="color: #800080; font-weight: bold">@@ -1586,6 +1640,18 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess</span>
                 }
                 switch_channel_set_variable_printf(channel, &quot;playback_samples&quot;, &quot;%d&quot;, fh-&gt;samples_in);
 
<span style="color: #00A000">+                if (switch_event_create(&amp;event, SWITCH_EVENT_PLAYBACK_STOP) == SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        switch_channel_event_set_data(channel, event);</span>
<span style="color: #00A000">+                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, &quot;Playback-File-Path&quot;, file);</span>
<span style="color: #00A000">+                        if (status == SWITCH_STATUS_BREAK) {</span>
<span style="color: #00A000">+                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, &quot;Playback-Status&quot;, &quot;break&quot;);</span>
<span style="color: #00A000">+                        } else {</span>
<span style="color: #00A000">+                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, &quot;Playback-Status&quot;, &quot;done&quot;);</span>
<span style="color: #00A000">+                        }</span>
<span style="color: #00A000">+                        add_playback_vars_to_event(session, event, playback_vars); </span>
<span style="color: #00A000">+                        switch_event_fire(&amp;event);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+</span>
                 switch_core_session_io_write_lock(session);
                 switch_channel_set_private(channel, &quot;__fh&quot;, NULL);
                 switch_core_session_io_rwunlock(session);
</pre></div>
========================================================================<pre>

Summary of changes:
 libs/esl/src/esl_event.c         |    2 +
 libs/esl/src/include/esl_event.h |    2 +
 src/include/switch_types.h       |    2 +
 src/switch_channel.c             |    3 +
 src/switch_event.c               |    2 +
 src/switch_ivr_play_say.c        |   78 +++++++++++++++++++++++++++++++++++---
 6 files changed, 83 insertions(+), 6 deletions(-)
</pre>
<p>this email was generated because of /git/your-repo.git/hooks/post-receive by the file /git-core/contrib/hooks/post-receive-email<br />
For more info, see <a href="http://blog.chomperstomp.com/?p=630">http://blog.chomperstomp.com/?p=630</a>
-- <br />
FreeSWITCH Source</p>