<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>
        "NAT",
        "RECORD_START",
        "RECORD_STOP",
<span style="color: #00A000">+        "PLAYBACK_START",</span>
<span style="color: #00A000">+        "PLAYBACK_STOP",</span>
        "CALL_UPDATE",
        "FAILURE",
        "SOCKET_DATA",
<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->event_id == SWITCH_EVENT_REQUEST_PARAMS ||
                event->event_id == SWITCH_EVENT_CHANNEL_DATA ||
                event->event_id == SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE ||
<span style="color: #00A000">+                event->event_id == SWITCH_EVENT_CHANNEL_DESTROY ||</span>
                event->event_id == SWITCH_EVENT_SESSION_HEARTBEAT ||
                event->event_id == SWITCH_EVENT_API ||
                event->event_id == SWITCH_EVENT_RECORD_START ||
                event->event_id == SWITCH_EVENT_RECORD_STOP ||
<span style="color: #00A000">+                event->event_id == SWITCH_EVENT_PLAYBACK_START ||</span>
<span style="color: #00A000">+                event->event_id == SWITCH_EVENT_PLAYBACK_STOP ||</span>
                event->event_id == SWITCH_EVENT_CALL_UPDATE ||
                event->event_id == SWITCH_EVENT_MEDIA_BUG_START ||
                event->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>
        "NAT",
        "RECORD_START",
        "RECORD_STOP",
<span style="color: #00A000">+        "PLAYBACK_START",</span>
<span style="color: #00A000">+        "PLAYBACK_STOP",</span>
        "CALL_UPDATE",
        "FAILURE",
        "SOCKET_DATA",
<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(&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, "Record-File-Path", file);</span>
<span style="color: #A00000">-                switch_event_fire(&event);</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
        if (fill_cng || waste_resources) {
                switch_core_codec_destroy(&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, "record_samples", "%d", fh->samples_out);
<span style="color: #00A000">+        if (switch_event_create(&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, "Record-File-Path", file);</span>
<span style="color: #00A000">+                switch_event_fire(&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, ',', 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 < 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], '='))) {</span>
<span style="color: #00A000">+                                *var = '\0';</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 && *var && val && *val) {</span>
<span style="color: #00A000">+                                        if ((var = switch_core_session_sprintf(session, "playback_variable_%s", 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, '{'))) {</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, '{', '}')) && *(e + 1) == '\0') {</span>
<span style="color: #00A000">+                                        *tmp = '\0';</span>
<span style="color: #00A000">+                                        *e = '\0';</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 = &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(&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, "Playback-File-Path", file);</span>
<span style="color: #00A000">+                        add_playback_vars_to_event(session, event, playback_vars); </span>
<span style="color: #00A000">+                        switch_event_fire(&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, "playback_samples", "%d", fh->samples_in);
<span style="color: #00A000">+                if (switch_event_create(&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, "Playback-File-Path", 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, "Playback-Status", "break");</span>
<span style="color: #00A000">+                        } else {</span>
<span style="color: #00A000">+                                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-Status", "done");</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(&event);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+</span>
                switch_core_session_io_write_lock(session);
                switch_channel_set_private(channel, "__fh", 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>