<h1>Project "FreeSWITCH Source" received a push.</h1>
<h2>branch: master updated</h2>
<pre>
via: 53aeb1c1a71e6546950721d9f79f4a6131eb3071 (commit)
via: 2d6161e889fdaf8b03608fefdd7ef480a56ddf8b (commit)
via: e88b9639624cef4f35901146241f515730b3b118 (commit)
via: 86d5e441da872719faf72e24afdda85d8491406b (commit)
via: 9470e70057c549598d6d5e768d6cb08a2ba82104 (commit)
via: 1f1541b474c549d6a13b6a943d13f046d463751a (commit)
via: 766f2d61651f161b074fad2f987b4f10532a9a7a (commit)
via: 1623e5d2952d63e2e49d454cd6fdf921a8516227 (commit)
via: 256a82dbf2d7f4b4e1d7527f1e6a15d8d0d38a21 (commit)
via: c8f5c66c3520ecda8f8dbc07dc01f1d4035058e4 (commit)
via: 02082c930cc08cd65b3ac51d2e8231e502bd8f31 (commit)
via: 89253a139117b32fa0a6dc101e53e9b830361048 (commit)
via: 15e65cfafb8a46caca8bb8a63d55edf817f17f2d (commit)
via: 92a9bacc44576e7b1d41c48752af597801e41d21 (commit)
via: 8f483f41c78ae3dd1bad7c3378733f04438f6af1 (commit)
via: 0f39c8f9c3d8e8bce05c551e0168e476ce29437a (commit)
via: 6d7e019b5c0244f53c16361d2667049b430adb55 (commit)
via: 128d53c2e6a73a6136efcfffa4e880e6635e43f1 (commit)
via: 4cbdfbe481d7f9b448663418dccc88b017f9ce69 (commit)
via: e719ae662b7cb08ebd7f8e732a140e9aeb502960 (commit)
via: 439df43cae04a053a1c22befdd7f1009f6cb6dfa (commit)
via: d395b654fb0abab4889d5b8c239728683e772959 (commit)
via: acd56d2fe2a0458801010cc6b03c524023cbc597 (commit)
from: 4371d3c804d890315ca623e2930286154d80a9a8 (commit)
</pre>= COMMIT LOG ===========================================================
<div class="highlight"><pre>committer: Leon de Rooij
comments:
Merge branch 'master' of ssh://git.freeswitch.org/freeswitch
</pre></div>
<div class="highlight"><pre>committer: Marc Olivier Chouinard
comments:
switch_xml: Fix a lock on reloadxml when stderr write is blocked. Also remove an error parsing print since reason generated were wrong and duplicate.
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_xml.c b/src/switch_xml.c</span>
<span style="color: #000080; font-weight: bold">index fe6a199..964a769 100644</span>
<span style="color: #A00000">--- a/src/switch_xml.c</span>
<span style="color: #00A000">+++ b/src/switch_xml.c</span>
<span style="color: #800080; font-weight: bold">@@ -1286,9 +1286,7 @@ static int preprocess_glob(const char *cwd, const char *pattern, int write_fd, i</span>
        }
        if (glob(pattern, GLOB_NOCHECK, NULL, &glob_data) != 0) {
<span style="color: #A00000">-                if (stderr) {</span>
<span style="color: #A00000">-                        fprintf(stderr, "Error including %s\n", pattern);</span>
<span style="color: #A00000">-                }</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error including %s\n", pattern);</span>
                goto end;
        }
<span style="color: #800080; font-weight: bold">@@ -1299,11 +1297,9 @@ static int preprocess_glob(const char *cwd, const char *pattern, int write_fd, i</span>
                        *e = '\0';
                }
                if (preprocess(dir_path, glob_data.gl_pathv[n], write_fd, rlevel) < 0) {
<span style="color: #A00000">-                        const char *reason = strerror(errno);</span>
                        if (rlevel > 100) {
<span style="color: #A00000">-                                reason = "Maximum recursion limit reached";</span>
<span style="color: #00A000">+                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error including %s (Maximum recursion limit reached)\n", pattern);</span>
                        }
<span style="color: #A00000">-                        fprintf(stderr, "Error including %s (%s)\n", pattern, reason);</span>
                }
                free(dir_path);
        }
</pre></div>
<div class="highlight"><pre>committer: Jeff Lenk
comments:
vs2010 reswig
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx</span>
<span style="color: #000080; font-weight: bold">index 9ebd6ff..808d548 100644</span>
<span style="color: #A00000">--- a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx</span>
<span style="color: #00A000">+++ b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx</span>
<span style="color: #800080; font-weight: bold">@@ -8947,6 +8947,22 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_feed(void * jarg1, void * jarg</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_feed_dtmf(void * jarg1, void * jarg2, void * jarg3) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ;</span>
<span style="color: #00A000">+ switch_asr_flag_t *arg3 = (switch_asr_flag_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_dtmf_t *)jarg2; </span>
<span style="color: #00A000">+ arg3 = (switch_asr_flag_t *)jarg3; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_feed_dtmf(arg1,(switch_dtmf_t const *)arg2,arg3);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_check_results(void * jarg1, void * jarg2) {
int jresult ;
switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;
<span style="color: #800080; font-weight: bold">@@ -9007,6 +9023,46 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_unload_grammar(void * jarg1, c</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_enable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_enable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_disable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_disable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_disable_all_grammars(void * jarg1) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_disable_all_grammars(arg1);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_pause(void * jarg1) {
int jresult ;
switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;
<span style="color: #800080; font-weight: bold">@@ -18313,6 +18369,94 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_next_get(void * jarg1)</span>
}
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_enable_grammar_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *,char const *) = (switch_status_t (*)(switch_asr_handle_t *,char const *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_enable_grammar = arg2;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_enable_grammar_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *,char const *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *,char const *)) ((arg1)->asr_enable_grammar);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_grammar_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *,char const *) = (switch_status_t (*)(switch_asr_handle_t *,char const *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_disable_grammar = arg2;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_grammar_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *,char const *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *,char const *)) ((arg1)->asr_disable_grammar);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_all_grammars_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *) = (switch_status_t (*)(switch_asr_handle_t *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_disable_all_grammars = arg2;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_all_grammars_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *)) ((arg1)->asr_disable_all_grammars);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_feed_dtmf_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_feed_dtmf = arg2;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_feed_dtmf_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *)) ((arg1)->asr_feed_dtmf);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_asr_interface() {
void * jresult ;
switch_asr_interface *result = 0 ;
<span style="color: #800080; font-weight: bold">@@ -26320,6 +26464,46 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_unload_grammar(void *</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_enable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_enable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_disable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_disable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_disable_all_grammars(void * jarg1) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_disable_all_grammars(arg1);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_param_detect_speech(void * jarg1, char * jarg2, char * jarg3) {
int jresult ;
switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
<span style="color: #800080; font-weight: bold">@@ -26336,6 +26520,18 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_param_detect_speech(void * jarg</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_start_input_timers(void * jarg1) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_start_input_timers(arg1);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_record_session(void * jarg1, char * jarg2, unsigned long jarg3, void * jarg4) {
int jresult ;
switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/languages/mod_managed/managed/swig.2010.cs b/src/mod/languages/mod_managed/managed/swig.2010.cs</span>
<span style="color: #000080; font-weight: bold">index 059fb89..61c0a4e 100644</span>
<span style="color: #A00000">--- a/src/mod/languages/mod_managed/managed/swig.2010.cs</span>
<span style="color: #00A000">+++ b/src/mod/languages/mod_managed/managed/swig.2010.cs</span>
<span style="color: #800080; font-weight: bold">@@ -2000,6 +2000,11 @@ public class freeswitch {</span>
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_feed_dtmf(switch_asr_handle ah, switch_dtmf_t dtmf, SWIGTYPE_p_unsigned_long flags) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_feed_dtmf(switch_asr_handle.getCPtr(ah), switch_dtmf_t.getCPtr(dtmf), SWIGTYPE_p_unsigned_long.getCPtr(flags));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_core_asr_check_results(switch_asr_handle ah, SWIGTYPE_p_unsigned_long flags) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_check_results(switch_asr_handle.getCPtr(ah), SWIGTYPE_p_unsigned_long.getCPtr(flags));
return ret;
<span style="color: #800080; font-weight: bold">@@ -2020,6 +2025,21 @@ public class freeswitch {</span>
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_enable_grammar(switch_asr_handle ah, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_enable_grammar(switch_asr_handle.getCPtr(ah), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_disable_grammar(switch_asr_handle ah, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_disable_grammar(switch_asr_handle.getCPtr(ah), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_disable_all_grammars(switch_asr_handle ah) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_disable_all_grammars(switch_asr_handle.getCPtr(ah));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_core_asr_pause(switch_asr_handle ah) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_pause(switch_asr_handle.getCPtr(ah));
return ret;
<span style="color: #800080; font-weight: bold">@@ -4070,11 +4090,31 @@ public class freeswitch {</span>
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_enable_grammar(SWIGTYPE_p_switch_core_session session, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_enable_grammar(SWIGTYPE_p_switch_core_session.getCPtr(session), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_disable_grammar(SWIGTYPE_p_switch_core_session session, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_disable_grammar(SWIGTYPE_p_switch_core_session.getCPtr(session), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_disable_all_grammars(SWIGTYPE_p_switch_core_session session) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_disable_all_grammars(SWIGTYPE_p_switch_core_session.getCPtr(session));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_ivr_set_param_detect_speech(SWIGTYPE_p_switch_core_session session, string name, string val) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_set_param_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session), name, val);
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_start_input_timers(SWIGTYPE_p_switch_core_session session) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_start_input_timers(SWIGTYPE_p_switch_core_session.getCPtr(session));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_ivr_record_session(SWIGTYPE_p_switch_core_session session, string file, uint limit, switch_file_handle fh) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_record_session(SWIGTYPE_p_switch_core_session.getCPtr(session), file, limit, switch_file_handle.getCPtr(fh));
return ret;
<span style="color: #800080; font-weight: bold">@@ -7907,6 +7947,9 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_feed")]
public static extern int switch_core_asr_feed(HandleRef jarg1, HandleRef jarg2, uint jarg3, HandleRef jarg4);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_feed_dtmf")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_feed_dtmf(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_check_results")]
public static extern int switch_core_asr_check_results(HandleRef jarg1, HandleRef jarg2);
<span style="color: #800080; font-weight: bold">@@ -7919,6 +7962,15 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_unload_grammar")]
public static extern int switch_core_asr_unload_grammar(HandleRef jarg1, string jarg2);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_enable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_enable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_disable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_disable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_disable_all_grammars")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_disable_all_grammars(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_pause")]
public static extern int switch_core_asr_pause(HandleRef jarg1);
<span style="color: #800080; font-weight: bold">@@ -10196,6 +10248,30 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_next_get")]
public static extern IntPtr switch_asr_interface_next_get(HandleRef jarg1);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_enable_grammar_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_enable_grammar_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_enable_grammar_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_enable_grammar_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_grammar_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_disable_grammar_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_grammar_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_disable_grammar_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_all_grammars_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_disable_all_grammars_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_all_grammars_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_disable_all_grammars_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_feed_dtmf_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_feed_dtmf_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_feed_dtmf_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_feed_dtmf_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_new_switch_asr_interface")]
public static extern IntPtr new_switch_asr_interface();
<span style="color: #800080; font-weight: bold">@@ -12140,9 +12216,21 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_unload_grammar")]
public static extern int switch_ivr_detect_speech_unload_grammar(HandleRef jarg1, string jarg2);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_enable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_enable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_disable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_disable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_disable_all_grammars")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_disable_all_grammars(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_set_param_detect_speech")]
public static extern int switch_ivr_set_param_detect_speech(HandleRef jarg1, string jarg2, string jarg3);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_start_input_timers")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_start_input_timers(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_record_session")]
public static extern int switch_ivr_record_session(HandleRef jarg1, string jarg2, uint jarg3, HandleRef jarg4);
<span style="color: #800080; font-weight: bold">@@ -14967,6 +15055,36 @@ namespace FreeSWITCH.Native {</span>
using System;
using System.Runtime.InteropServices;
<span style="color: #00A000">+public class SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t {</span>
<span style="color: #00A000">+ private HandleRef swigCPtr;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ internal SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) {</span>
<span style="color: #00A000">+ swigCPtr = new HandleRef(this, cPtr);</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ protected SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t() {</span>
<span style="color: #00A000">+ swigCPtr = new HandleRef(null, IntPtr.Zero);</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t obj) {</span>
<span style="color: #00A000">+ return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;</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">+ * This file was automatically generated by SWIG (http://www.swig.org).</span>
<span style="color: #00A000">+ * Version 2.0.1</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * Do not make changes to this file unless you know what you are doing--modify</span>
<span style="color: #00A000">+ * the SWIG interface file instead.</span>
<span style="color: #00A000">+ * ----------------------------------------------------------------------------- */</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+namespace FreeSWITCH.Native {</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+using System;</span>
<span style="color: #00A000">+using System.Runtime.InteropServices;</span>
<span style="color: #00A000">+</span>
public class SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t {
private HandleRef swigCPtr;
<span style="color: #800080; font-weight: bold">@@ -19993,6 +20111,50 @@ public class switch_asr_interface : IDisposable {</span>
}
}
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t asr_enable_grammar {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_enable_grammar_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_enable_grammar_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t asr_disable_grammar {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_disable_grammar_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_disable_grammar_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t asr_disable_all_grammars {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_disable_all_grammars_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_disable_all_grammars_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t asr_feed_dtmf {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_feed_dtmf_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_feed_dtmf_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public switch_asr_interface() : this(freeswitchPINVOKE.new_switch_asr_interface(), true) {
}
<span style="color: #800080; font-weight: bold">@@ -28589,7 +28751,8 @@ public enum switch_rtp_bug_flag_t {</span>
RTP_BUG_IGNORE_MARK_BIT = (1 << 2),
RTP_BUG_SEND_LINEAR_TIMESTAMPS = (1 << 3),
RTP_BUG_START_SEQ_AT_ZERO = (1 << 4),
<span style="color: #A00000">- RTP_BUG_NEVER_SEND_MARKER = (1 << 5)</span>
<span style="color: #00A000">+ RTP_BUG_NEVER_SEND_MARKER = (1 << 5),</span>
<span style="color: #00A000">+ RTP_BUG_IGNORE_DTMF_DURATION = (1 << 6)</span>
}
}
<span style="color: #800080; font-weight: bold">@@ -30446,7 +30609,7 @@ public enum switch_status_t {</span>
SWITCH_STATUS_FALSE,
SWITCH_STATUS_TIMEOUT,
SWITCH_STATUS_RESTART,
<span style="color: #A00000">- SWITCH_STATUS_TERM,</span>
<span style="color: #00A000">+ SWITCH_STATUS_INTR,</span>
SWITCH_STATUS_NOTIMPL,
SWITCH_STATUS_MEMERR,
SWITCH_STATUS_NOOP,
<span style="color: #800080; font-weight: bold">@@ -30463,6 +30626,7 @@ public enum switch_status_t {</span>
SWITCH_STATUS_TOO_SMALL,
SWITCH_STATUS_FOUND,
SWITCH_STATUS_CONTINUE,
<span style="color: #00A000">+ SWITCH_STATUS_TERM,</span>
SWITCH_STATUS_NOT_INITALIZED
}
</pre></div>
<div class="highlight"><pre>committer: Michael Jerris
comments:
add more details to xml_curl errors
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c b/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c</span>
<span style="color: #000080; font-weight: bold">index 9bf837e..bc143d7 100644</span>
<span style="color: #A00000">--- a/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c</span>
<span style="color: #00A000">+++ b/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c</span>
<span style="color: #800080; font-weight: bold">@@ -293,12 +293,12 @@ static switch_xml_t xml_url_fetch(const char *section, const char *tag_name, con</span>
        }
        if (config_data.err) {
<span style="color: #A00000">-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error encountered!\n");</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error encountered! [%s]\ndata: [%s]\n", binding->url, data);</span>
                xml = NULL;
        } else {
                if (httpRes == 200) {
                        if (!(xml = switch_xml_parse_file(filename))) {
<span style="color: #A00000">-                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Parsing Result!\n");</span>
<span style="color: #00A000">+                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Parsing Result! [%s]\ndata: [%s]\n", binding->url, data);</span>
                        }
                } else {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Received HTTP error %ld trying to fetch %s\ndata: [%s]\n", httpRes, binding->url,
</pre></div>
<div class="highlight"><pre>committer: Brian West
comments:
swigall
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.cxx</span>
<span style="color: #000080; font-weight: bold">index 3ee6ff6..e91de6d 100644</span>
<span style="color: #A00000">--- a/src/mod/languages/mod_managed/freeswitch_wrap.cxx</span>
<span style="color: #00A000">+++ b/src/mod/languages/mod_managed/freeswitch_wrap.cxx</span>
<span style="color: #800080; font-weight: bold">@@ -9238,6 +9238,22 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_feed(void * jarg1, void * jarg</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_feed_dtmf(void * jarg1, void * jarg2, void * jarg3) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ;</span>
<span style="color: #00A000">+ switch_asr_flag_t *arg3 = (switch_asr_flag_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_dtmf_t *)jarg2; </span>
<span style="color: #00A000">+ arg3 = (switch_asr_flag_t *)jarg3; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_feed_dtmf(arg1,(switch_dtmf_t const *)arg2,arg3);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_check_results(void * jarg1, void * jarg2) {
int jresult ;
switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;
<span style="color: #800080; font-weight: bold">@@ -9298,6 +9314,46 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_unload_grammar(void * jarg1, c</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_enable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_enable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_disable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_disable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_disable_all_grammars(void * jarg1) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_handle_t *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_core_asr_disable_all_grammars(arg1);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_pause(void * jarg1) {
int jresult ;
switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ;
<span style="color: #800080; font-weight: bold">@@ -18820,6 +18876,98 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_next_get(void * jarg1)</span>
}
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_enable_grammar_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *,char const *) = (switch_status_t (*)(switch_asr_handle_t *,char const *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_enable_grammar = arg2;</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">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_enable_grammar_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *,char const *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *,char const *)) ((arg1)->asr_enable_grammar);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_grammar_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *,char const *) = (switch_status_t (*)(switch_asr_handle_t *,char const *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_disable_grammar = arg2;</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">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_grammar_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *,char const *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *,char const *)) ((arg1)->asr_disable_grammar);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_all_grammars_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *) = (switch_status_t (*)(switch_asr_handle_t *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_disable_all_grammars = arg2;</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">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_disable_all_grammars_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *)) ((arg1)->asr_disable_all_grammars);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_feed_dtmf_set(void * jarg1, void * jarg2) {</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*arg2)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *)) 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (switch_status_t (*)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *))jarg2; </span>
<span style="color: #00A000">+ if (arg1) (arg1)->asr_feed_dtmf = arg2;</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">+SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_feed_dtmf_get(void * jarg1) {</span>
<span style="color: #00A000">+ void * jresult ;</span>
<span style="color: #00A000">+ switch_asr_interface *arg1 = (switch_asr_interface *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t (*result)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *) = 0 ;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_asr_interface *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t (*)(switch_asr_handle_t *,switch_dtmf_t const *,switch_asr_flag_t *)) ((arg1)->asr_feed_dtmf);</span>
<span style="color: #00A000">+ jresult = (void *)result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_asr_interface() {
void * jresult ;
switch_asr_interface *result = 0 ;
<span style="color: #800080; font-weight: bold">@@ -27013,6 +27161,46 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_unload_grammar(void *</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_enable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_enable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_disable_grammar(void * jarg1, char * jarg2) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ char *arg2 = (char *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ arg2 = (char *)jarg2; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_disable_grammar(arg1,(char const *)arg2);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_disable_all_grammars(void * jarg1) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_disable_all_grammars(arg1);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_param_detect_speech(void * jarg1, char * jarg2, char * jarg3) {
int jresult ;
switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
<span style="color: #800080; font-weight: bold">@@ -27029,6 +27217,18 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_param_detect_speech(void * jarg</span>
}
<span style="color: #00A000">+SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_start_input_timers(void * jarg1) {</span>
<span style="color: #00A000">+ int jresult ;</span>
<span style="color: #00A000">+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;</span>
<span style="color: #00A000">+ switch_status_t result;</span>
<span style="color: #00A000">+ </span>
<span style="color: #00A000">+ arg1 = (switch_core_session_t *)jarg1; </span>
<span style="color: #00A000">+ result = (switch_status_t)switch_ivr_detect_speech_start_input_timers(arg1);</span>
<span style="color: #00A000">+ jresult = result; </span>
<span style="color: #00A000">+ return jresult;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_record_session(void * jarg1, char * jarg2, unsigned long jarg3, void * jarg4) {
int jresult ;
switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/languages/mod_managed/managed/swig.cs b/src/mod/languages/mod_managed/managed/swig.cs</span>
<span style="color: #000080; font-weight: bold">index 48d585e..1f02c3f 100644</span>
<span style="color: #A00000">--- a/src/mod/languages/mod_managed/managed/swig.cs</span>
<span style="color: #00A000">+++ b/src/mod/languages/mod_managed/managed/swig.cs</span>
<span style="color: #800080; font-weight: bold">@@ -1990,6 +1990,11 @@ public class freeswitch {</span>
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_feed_dtmf(switch_asr_handle ah, switch_dtmf_t dtmf, SWIGTYPE_p_unsigned_long flags) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_feed_dtmf(switch_asr_handle.getCPtr(ah), switch_dtmf_t.getCPtr(dtmf), SWIGTYPE_p_unsigned_long.getCPtr(flags));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_core_asr_check_results(switch_asr_handle ah, SWIGTYPE_p_unsigned_long flags) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_check_results(switch_asr_handle.getCPtr(ah), SWIGTYPE_p_unsigned_long.getCPtr(flags));
return ret;
<span style="color: #800080; font-weight: bold">@@ -2010,6 +2015,21 @@ public class freeswitch {</span>
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_enable_grammar(switch_asr_handle ah, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_enable_grammar(switch_asr_handle.getCPtr(ah), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_disable_grammar(switch_asr_handle ah, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_disable_grammar(switch_asr_handle.getCPtr(ah), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_core_asr_disable_all_grammars(switch_asr_handle ah) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_disable_all_grammars(switch_asr_handle.getCPtr(ah));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_core_asr_pause(switch_asr_handle ah) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_pause(switch_asr_handle.getCPtr(ah));
return ret;
<span style="color: #800080; font-weight: bold">@@ -4060,11 +4080,31 @@ public class freeswitch {</span>
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_enable_grammar(SWIGTYPE_p_switch_core_session session, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_enable_grammar(SWIGTYPE_p_switch_core_session.getCPtr(session), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_disable_grammar(SWIGTYPE_p_switch_core_session session, string name) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_disable_grammar(SWIGTYPE_p_switch_core_session.getCPtr(session), name);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_disable_all_grammars(SWIGTYPE_p_switch_core_session session) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_disable_all_grammars(SWIGTYPE_p_switch_core_session.getCPtr(session));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_ivr_set_param_detect_speech(SWIGTYPE_p_switch_core_session session, string name, string val) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_set_param_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session), name, val);
return ret;
}
<span style="color: #00A000">+ public static switch_status_t switch_ivr_detect_speech_start_input_timers(SWIGTYPE_p_switch_core_session session) {</span>
<span style="color: #00A000">+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_start_input_timers(SWIGTYPE_p_switch_core_session.getCPtr(session));</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public static switch_status_t switch_ivr_record_session(SWIGTYPE_p_switch_core_session session, string file, uint limit, switch_file_handle fh) {
switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_record_session(SWIGTYPE_p_switch_core_session.getCPtr(session), file, limit, switch_file_handle.getCPtr(fh));
return ret;
<span style="color: #800080; font-weight: bold">@@ -7893,6 +7933,9 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_feed")]
public static extern int switch_core_asr_feed(HandleRef jarg1, HandleRef jarg2, uint jarg3, HandleRef jarg4);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_feed_dtmf")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_feed_dtmf(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_check_results")]
public static extern int switch_core_asr_check_results(HandleRef jarg1, HandleRef jarg2);
<span style="color: #800080; font-weight: bold">@@ -7905,6 +7948,15 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_unload_grammar")]
public static extern int switch_core_asr_unload_grammar(HandleRef jarg1, string jarg2);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_enable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_enable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_disable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_disable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_disable_all_grammars")]</span>
<span style="color: #00A000">+ public static extern int switch_core_asr_disable_all_grammars(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_pause")]
public static extern int switch_core_asr_pause(HandleRef jarg1);
<span style="color: #800080; font-weight: bold">@@ -10182,6 +10234,30 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_next_get")]
public static extern IntPtr switch_asr_interface_next_get(HandleRef jarg1);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_enable_grammar_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_enable_grammar_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_enable_grammar_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_enable_grammar_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_grammar_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_disable_grammar_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_grammar_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_disable_grammar_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_all_grammars_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_disable_all_grammars_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_disable_all_grammars_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_disable_all_grammars_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_feed_dtmf_set")]</span>
<span style="color: #00A000">+ public static extern void switch_asr_interface_asr_feed_dtmf_set(HandleRef jarg1, HandleRef jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_feed_dtmf_get")]</span>
<span style="color: #00A000">+ public static extern IntPtr switch_asr_interface_asr_feed_dtmf_get(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_new_switch_asr_interface")]
public static extern IntPtr new_switch_asr_interface();
<span style="color: #800080; font-weight: bold">@@ -12126,9 +12202,21 @@ class freeswitchPINVOKE {</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_unload_grammar")]
public static extern int switch_ivr_detect_speech_unload_grammar(HandleRef jarg1, string jarg2);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_enable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_enable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_disable_grammar")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_disable_grammar(HandleRef jarg1, string jarg2);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_disable_all_grammars")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_disable_all_grammars(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_set_param_detect_speech")]
public static extern int switch_ivr_set_param_detect_speech(HandleRef jarg1, string jarg2, string jarg3);
<span style="color: #00A000">+ [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_start_input_timers")]</span>
<span style="color: #00A000">+ public static extern int switch_ivr_detect_speech_start_input_timers(HandleRef jarg1);</span>
<span style="color: #00A000">+</span>
[DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_record_session")]
public static extern int switch_ivr_record_session(HandleRef jarg1, string jarg2, uint jarg3, HandleRef jarg4);
<span style="color: #800080; font-weight: bold">@@ -14943,6 +15031,36 @@ namespace FreeSWITCH.Native {</span>
using System;
using System.Runtime.InteropServices;
<span style="color: #00A000">+public class SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t {</span>
<span style="color: #00A000">+ private HandleRef swigCPtr;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ internal SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) {</span>
<span style="color: #00A000">+ swigCPtr = new HandleRef(this, cPtr);</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ protected SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t() {</span>
<span style="color: #00A000">+ swigCPtr = new HandleRef(null, IntPtr.Zero);</span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t obj) {</span>
<span style="color: #00A000">+ return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;</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">+ * This file was automatically generated by SWIG (http://www.swig.org).</span>
<span style="color: #00A000">+ * Version 1.3.35</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * Do not make changes to this file unless you know what you are doing--modify</span>
<span style="color: #00A000">+ * the SWIG interface file instead.</span>
<span style="color: #00A000">+ * ----------------------------------------------------------------------------- */</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+namespace FreeSWITCH.Native {</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+using System;</span>
<span style="color: #00A000">+using System.Runtime.InteropServices;</span>
<span style="color: #00A000">+</span>
public class SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t {
private HandleRef swigCPtr;
<span style="color: #800080; font-weight: bold">@@ -19959,6 +20077,50 @@ public class switch_asr_interface : IDisposable {</span>
}
}
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t asr_enable_grammar {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_enable_grammar_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_enable_grammar_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t asr_disable_grammar {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_disable_grammar_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_disable_grammar_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t asr_disable_all_grammars {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_disable_all_grammars_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_disable_all_grammars_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t asr_feed_dtmf {</span>
<span style="color: #00A000">+ set {</span>
<span style="color: #00A000">+ freeswitchPINVOKE.switch_asr_interface_asr_feed_dtmf_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t.getCPtr(value));</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ get {</span>
<span style="color: #00A000">+ IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_feed_dtmf_get(swigCPtr);</span>
<span style="color: #00A000">+ SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__switch_dtmf_t_p_unsigned_long__switch_status_t(cPtr, false);</span>
<span style="color: #00A000">+ return ret;</span>
<span style="color: #00A000">+ } </span>
<span style="color: #00A000">+ }</span>
<span style="color: #00A000">+</span>
public switch_asr_interface() : this(freeswitchPINVOKE.new_switch_asr_interface(), true) {
}
</pre></div>
<div class="highlight"><pre>committer: Travis Cross
comments:
lower log-level of a mod_spy message
When a session loses a race to bridge a call, the CHANNEL_BRIDGE event
handler is still run, yet session_locate is going to return null as it
won't get a read-lock on the peer's session. Since this is a normal
and common condition, let's log this as a debug message rather than as
an error condition.
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_spy/mod_spy.c b/src/mod/applications/mod_spy/mod_spy.c</span>
<span style="color: #000080; font-weight: bold">index e0a9317..1797539 100644</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_spy/mod_spy.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_spy/mod_spy.c</span>
<span style="color: #800080; font-weight: bold">@@ -201,7 +201,7 @@ static void event_handler(switch_event_t *event)</span>
                }
                if (!(peer_session = switch_core_session_locate(peer_uuid))) {
<span style="color: #A00000">-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't locate peer session for uuid %s\n", peer_uuid);</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Can't locate peer session for uuid %s\n", peer_uuid);</span>
                        return;
                }
</pre></div>
<div class="highlight"><pre>committer: Travis Cross
comments:
fix typo: cant -> can't
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_spy/mod_spy.c b/src/mod/applications/mod_spy/mod_spy.c</span>
<span style="color: #000080; font-weight: bold">index 9986703..e0a9317 100644</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_spy/mod_spy.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_spy/mod_spy.c</span>
<span style="color: #800080; font-weight: bold">@@ -201,14 +201,14 @@ static void event_handler(switch_event_t *event)</span>
                }
                if (!(peer_session = switch_core_session_locate(peer_uuid))) {
<span style="color: #A00000">-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cant locate peer session for uuid %s\n", peer_uuid);</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't locate peer session for uuid %s\n", peer_uuid);</span>
                        return;
                }
                peer_channel = switch_core_session_get_channel(peer_session);
                
                if (switch_event_create(&peer_event, SWITCH_EVENT_CHANNEL_BRIDGE) != SWITCH_STATUS_SUCCESS) {
<span style="color: #A00000">-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cant create bridge event for peer channel %s\n", peer_uuid);</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't create bridge event for peer channel %s\n", peer_uuid);</span>
                        goto end;
                }
<span style="color: #800080; font-weight: bold">@@ -249,7 +249,7 @@ SWITCH_STANDARD_APP(userspy_function)</span>
                        status = switch_core_hash_insert(globals.spy_hash, argv[0], (void *) uuid);
                        if ((status != SWITCH_STATUS_SUCCESS)) {
<span style="color: #A00000">-                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Cant insert to spy hash\n");</span>
<span style="color: #00A000">+                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Can't insert to spy hash\n");</span>
                                switch_channel_hangup(channel, SWITCH_CAUSE_SERVICE_NOT_IMPLEMENTED);
                                switch_thread_rwlock_unlock(globals.spy_hash_lock);
                                return;
</pre></div>
<div class="highlight"><pre>committer: Brian West
comments:
Merge branch 'openmethods-merged-dtmf-20110126' of git://scm.dashjr.org/var/scmroot/git/freeswitch
</pre></div>
<div class="highlight"><pre>committer: Jeff Lenk
comments:
OPENZAP-140 VS2010 build cleanup
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/msvc/testboost/testboost.2010.vcxproj b/libs/freetdm/msvc/testboost/testboost.2010.vcxproj</span>
<span style="color: #000080; font-weight: bold">index 6206148..314440b 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/msvc/testboost/testboost.2010.vcxproj</span>
<span style="color: #00A000">+++ b/libs/freetdm/msvc/testboost/testboost.2010.vcxproj</span>
<span style="color: #800080; font-weight: bold">@@ -105,7 +105,7 @@</span>
<DisableSpecificWarnings>4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<span style="color: #A00000">- <AdditionalDependencies>..\..\debug\freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<span style="color: #800080; font-weight: bold">@@ -162,7 +162,7 @@</span>
<DisableSpecificWarnings>4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<span style="color: #A00000">- <AdditionalDependencies>freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<span style="color: #800080; font-weight: bold">@@ -199,7 +199,7 @@</span>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX64</TargetMachine>
<span style="color: #A00000">- <AdditionalDependencies>freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<AdditionalLibraryDirectories>../../$(PlatformName)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/msvc/testboost/testsangomaboost.2010.vcxproj b/libs/freetdm/msvc/testboost/testsangomaboost.2010.vcxproj</span>
<span style="color: #000080; font-weight: bold">index 5994da6..4077a60 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/msvc/testboost/testsangomaboost.2010.vcxproj</span>
<span style="color: #00A000">+++ b/libs/freetdm/msvc/testboost/testsangomaboost.2010.vcxproj</span>
<span style="color: #800080; font-weight: bold">@@ -105,7 +105,7 @@</span>
<DisableSpecificWarnings>4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<span style="color: #A00000">- <AdditionalDependencies>..\..\debug\freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<span style="color: #800080; font-weight: bold">@@ -162,7 +162,7 @@</span>
<DisableSpecificWarnings>4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<span style="color: #A00000">- <AdditionalDependencies>freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<span style="color: #800080; font-weight: bold">@@ -199,7 +199,7 @@</span>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX64</TargetMachine>
<span style="color: #A00000">- <AdditionalDependencies>freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<AdditionalLibraryDirectories>../../$(PlatformName)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.2010.vcxproj b/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.2010.vcxproj</span>
<span style="color: #000080; font-weight: bold">index 78689c3..684e432 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.2010.vcxproj</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.2010.vcxproj</span>
<span style="color: #800080; font-weight: bold">@@ -61,11 +61,11 @@</span>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<span style="color: #A00000">- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir></span>
<span style="color: #A00000">- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir></span>
<span style="color: #00A000">+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir></span>
<span style="color: #00A000">+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir></span>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<span style="color: #A00000">- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir></span>
<span style="color: #A00000">- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir></span>
<span style="color: #00A000">+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir></span>
<span style="color: #00A000">+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir></span>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
<span style="color: #800080; font-weight: bold">@@ -102,7 +102,7 @@</span>
<DisableSpecificWarnings>4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<span style="color: #A00000">- <AdditionalDependencies>freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<span style="color: #800080; font-weight: bold">@@ -151,7 +151,7 @@</span>
<DisableSpecificWarnings>4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<span style="color: #A00000">- <AdditionalDependencies>freetdm.lib;%(AdditionalDependencies)</AdditionalDependencies></span>
<span style="color: #00A000">+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies></span>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.2010.vcxproj b/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.2010.vcxproj</span>
<span style="color: #000080; font-weight: bold">index 40d0a73..a21be22 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.2010.vcxproj</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.2010.vcxproj</span>
<span style="color: #800080; font-weight: bold">@@ -61,14 +61,14 @@</span>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<span style="color: #A00000">- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir></span>
<span style="color: #A00000">- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir></span>
<span style="color: #00A000">+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir></span>
<span style="color: #00A000">+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir></span>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<span style="color: #A00000">- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir></span>
<span style="color: #A00000">- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir></span>
<span style="color: #00A000">+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir></span>
<span style="color: #00A000">+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir></span>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
</pre></div>
<div class="highlight"><pre>committer: Daniel Swarbrick
comments:
mostly complete implementation of channel list via SNMP
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB b/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB</span>
<span style="color: #000080; font-weight: bold">index 11c3999..8448526 100644</span>
<span style="color: #A00000">--- a/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB</span>
<span style="color: #00A000">+++ b/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB</span>
<span style="color: #800080; font-weight: bold">@@ -3,11 +3,14 @@ FREESWITCH-MIB DEFINITIONS ::= BEGIN</span>
IMPORTS
OBJECT-TYPE, MODULE-IDENTITY,
Integer32, Gauge32, Counter32, Counter64, TimeTicks,
<span style="color: #A00000">- enterprises,</span>
<span style="color: #00A000">+ enterprises</span>
FROM SNMPv2-SMI
<span style="color: #A00000">- DisplayString</span>
<span style="color: #00A000">+ DisplayString, DateAndTime</span>
FROM SNMPv2-TC
<span style="color: #00A000">+</span>
<span style="color: #00A000">+ InetAddressType, InetAddress</span>
<span style="color: #00A000">+ FROM INET-ADDRESS-MIB</span>
;
<span style="color: #800080; font-weight: bold">@@ -109,13 +112,27 @@ maxSessionsPerSecond OBJECT-TYPE</span>
ChannelEntry ::= SEQUENCE {
<span style="color: #A00000">- chanUUID DisplayString,</span>
<span style="color: #A00000">- chanDirection DisplayString,</span>
<span style="color: #A00000">- chanCreated DisplayString,</span>
<span style="color: #A00000">- chanName DisplayString,</span>
<span style="color: #A00000">- chanState DisplayString,</span>
<span style="color: #A00000">- chanCIDName DisplayString,</span>
<span style="color: #A00000">- chanCIDNum DisplayString</span>
<span style="color: #00A000">+ chanIndex Integer32,</span>
<span style="color: #00A000">+ chanUUID DisplayString,</span>
<span style="color: #00A000">+ chanDirection DisplayString,</span>
<span style="color: #00A000">+ chanCreated DateAndTime,</span>
<span style="color: #00A000">+ chanName DisplayString,</span>
<span style="color: #00A000">+ chanState DisplayString,</span>
<span style="color: #00A000">+ chanCIDName DisplayString,</span>
<span style="color: #00A000">+ chanCIDNum DisplayString,</span>
<span style="color: #00A000">+ chanInetAddressType InetAddressType,</span>
<span style="color: #00A000">+ chanInetAddress InetAddress,</span>
<span style="color: #00A000">+ chanDest DisplayString,</span>
<span style="color: #00A000">+ chanApplication DisplayString,</span>
<span style="color: #00A000">+ chanAppData DisplayString,</span>
<span style="color: #00A000">+ chanDialplan DisplayString,</span>
<span style="color: #00A000">+ chanContext DisplayString,</span>
<span style="color: #00A000">+ chanReadCodec DisplayString,</span>
<span style="color: #00A000">+ chanReadRate Gauge32,</span>
<span style="color: #00A000">+ chanReadBitRate Gauge32,</span>
<span style="color: #00A000">+ chanWriteCodec DisplayString,</span>
<span style="color: #00A000">+ chanWriteRate Gauge32,</span>
<span style="color: #00A000">+ chanWriteBitRate Gauge32</span>
}
channelList OBJECT-TYPE
<span style="color: #800080; font-weight: bold">@@ -135,60 +152,172 @@ channelEntry OBJECT-TYPE</span>
INDEX { chanIndex }
::= { channelList 1 }
<span style="color: #00A000">+chanIndex OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX Integer32</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel SNMP index."</span>
<span style="color: #00A000">+ ::= { channelEntry 1 }</span>
<span style="color: #00A000">+</span>
chanUUID OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
<span style="color: #A00000">- "The channel UUID."</span>
<span style="color: #A00000">- ::= { channelEntry 1 }</span>
<span style="color: #00A000">+ "Channel UUID."</span>
<span style="color: #00A000">+ ::= { channelEntry 2 }</span>
chanDirection OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
<span style="color: #A00000">- "The channel direction."</span>
<span style="color: #A00000">- ::= { channelEntry 2 }</span>
<span style="color: #00A000">+ "Channel direction."</span>
<span style="color: #00A000">+ ::= { channelEntry 3 }</span>
chanCreated OBJECT-TYPE
<span style="color: #A00000">- SYNTAX DisplayString</span>
<span style="color: #00A000">+ SYNTAX DateAndTime</span>
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Channel creation timestamp."
<span style="color: #A00000">- ::= { channelEntry 3 }</span>
<span style="color: #00A000">+ ::= { channelEntry 4 }</span>
chanName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
<span style="color: #A00000">- "The channel name."</span>
<span style="color: #A00000">- ::= { channelEntry 4 }</span>
<span style="color: #00A000">+ "Channel name."</span>
<span style="color: #00A000">+ ::= { channelEntry 5 }</span>
chanState OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
<span style="color: #A00000">- "The channel state."</span>
<span style="color: #A00000">- ::= { channelEntry 5 }</span>
<span style="color: #00A000">+ "Channel state."</span>
<span style="color: #00A000">+ ::= { channelEntry 6 }</span>
chanCIDName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
<span style="color: #A00000">- "The channel caller ID name."</span>
<span style="color: #A00000">- ::= { channelEntry 6 }</span>
<span style="color: #00A000">+ "Channel caller ID name."</span>
<span style="color: #00A000">+ ::= { channelEntry 7 }</span>
chanCIDNum OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
<span style="color: #A00000">- "The channel caller ID number."</span>
<span style="color: #A00000">- ::= { channelEntry 7 }</span>
<span style="color: #00A000">+ "Channel caller ID number."</span>
<span style="color: #00A000">+ ::= { channelEntry 8 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanInetAddressType OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX InetAddressType</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel originator's IP address type (IPv4 or IPv6)."</span>
<span style="color: #00A000">+ ::= { channelEntry 9 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanInetAddress OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX InetAddress</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel originator's IP address."</span>
<span style="color: #00A000">+ ::= { channelEntry 10 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanDest OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel destination."</span>
<span style="color: #00A000">+ ::= { channelEntry 11 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanApplication OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel application."</span>
<span style="color: #00A000">+ ::= { channelEntry 12 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanAppData OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel application data."</span>
<span style="color: #00A000">+ ::= { channelEntry 13 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanDialplan OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel dialplan."</span>
<span style="color: #00A000">+ ::= { channelEntry 14 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanContext OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel dialplan context."</span>
<span style="color: #00A000">+ ::= { channelEntry 15 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanReadCodec OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel read codec."</span>
<span style="color: #00A000">+ ::= { channelEntry 16 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanReadRate OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX Gauge32</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel read samples per second."</span>
<span style="color: #00A000">+ ::= { channelEntry 17 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanReadBitRate OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX Gauge32</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel read bits per second."</span>
<span style="color: #00A000">+ ::= { channelEntry 18 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanWriteCodec OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX DisplayString</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel write codec."</span>
<span style="color: #00A000">+ ::= { channelEntry 19 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanWriteRate OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX Gauge32</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel write samples per second."</span>
<span style="color: #00A000">+ ::= { channelEntry 20 }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+chanWriteBitRate OBJECT-TYPE</span>
<span style="color: #00A000">+ SYNTAX Gauge32</span>
<span style="color: #00A000">+ MAX-ACCESS read-only</span>
<span style="color: #00A000">+ STATUS current</span>
<span style="color: #00A000">+ DESCRIPTION</span>
<span style="color: #00A000">+ "Channel write bits per second."</span>
<span style="color: #00A000">+ ::= { channelEntry 21 }</span>
END
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/event_handlers/mod_snmp/subagent.c b/src/mod/event_handlers/mod_snmp/subagent.c</span>
<span style="color: #000080; font-weight: bold">index 7b9faa7..43975ee 100644</span>
<span style="color: #A00000">--- a/src/mod/event_handlers/mod_snmp/subagent.c</span>
<span style="color: #00A000">+++ b/src/mod/event_handlers/mod_snmp/subagent.c</span>
<span style="color: #800080; font-weight: bold">@@ -42,6 +42,17 @@ netsnmp_handler_registration *ch_reginfo;</span>
uint32_t idx;
<span style="color: #00A000">+static void time_t_to_datetime(time_t epoch, char *buf, switch_size_t buflen)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        struct tm *dt;</span>
<span style="color: #00A000">+        uint16_t year;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        dt = gmtime(&epoch);</span>
<span style="color: #00A000">+        year = dt->tm_year + 1900;</span>
<span style="color: #00A000">+        switch_snprintf(buf, buflen, "%c%c%c%c%c%c%c%c+%c%c", year >> 8, year & 0xff, dt->tm_mon + 1, dt->tm_mday, dt->tm_hour, dt->tm_min, dt->tm_sec, 0, 0, 0);</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
static int sql_count_callback(void *pArg, int argc, char **argv, char **columnNames)
{
        uint32_t *count = (uint32_t *) pArg;
<span style="color: #800080; font-weight: bold">@@ -69,11 +80,31 @@ static int channelList_callback(void *pArg, int argc, char **argv, char **column</span>
        entry->idx = idx++;
        strncpy(entry->uuid, argv[0], sizeof(entry->uuid));
        strncpy(entry->direction, argv[1], sizeof(entry->direction));
<span style="color: #A00000">-        strncpy(entry->created, argv[2], sizeof(entry->created));</span>
<span style="color: #00A000">+        entry->created_epoch = atoi(argv[3]);</span>
        strncpy(entry->name, argv[4], sizeof(entry->name));
        strncpy(entry->state, argv[5], sizeof(entry->state));
        strncpy(entry->cid_name, argv[6], sizeof(entry->cid_name));
        strncpy(entry->cid_num, argv[7], sizeof(entry->cid_num));
<span style="color: #00A000">+        strncpy(entry->dest, argv[9], sizeof(entry->dest));</span>
<span style="color: #00A000">+        strncpy(entry->application, argv[10], sizeof(entry->application));</span>
<span style="color: #00A000">+        strncpy(entry->application_data, argv[11], sizeof(entry->application_data));</span>
<span style="color: #00A000">+        strncpy(entry->dialplan, argv[12], sizeof(entry->dialplan));</span>
<span style="color: #00A000">+        strncpy(entry->context, argv[13], sizeof(entry->context));</span>
<span style="color: #00A000">+        strncpy(entry->read_codec, argv[14], sizeof(entry->read_codec));</span>
<span style="color: #00A000">+        entry->read_rate = atoi(argv[15]);</span>
<span style="color: #00A000">+        entry->read_bitrate = atoi(argv[16]);</span>
<span style="color: #00A000">+        strncpy(entry->write_codec, argv[17], sizeof(entry->write_codec));</span>
<span style="color: #00A000">+        entry->write_rate = atoi(argv[18]);</span>
<span style="color: #00A000">+        entry->write_bitrate = atoi(argv[19]);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        memset(&entry->ip_addr, 0, sizeof(entry->ip_addr));</span>
<span style="color: #00A000">+        if (strchr(argv[8], ':')) {</span>
<span style="color: #00A000">+                switch_inet_pton(AF_INET6, argv[8], &entry->ip_addr);</span>
<span style="color: #00A000">+                entry->addr_family = AF_INET6;</span>
<span style="color: #00A000">+        } else {</span>
<span style="color: #00A000">+                switch_inet_pton(AF_INET, argv[8], &entry->ip_addr);</span>
<span style="color: #00A000">+                entry->addr_family = AF_INET;</span>
<span style="color: #00A000">+        }</span>
        netsnmp_tdata_row_add_index(row, ASN_INTEGER, &entry->idx, sizeof(entry->idx));
        netsnmp_tdata_add_row(ch_table, row);
<span style="color: #800080; font-weight: bold">@@ -128,9 +159,9 @@ void init_subagent(switch_memory_pool_t *pool)</span>
        netsnmp_register_scalar_group(netsnmp_create_handler_registration("systemStats", handle_systemStats, systemStats_oid, OID_LENGTH(systemStats_oid), HANDLER_CAN_RONLY), 1, 7);
        ch_table_info = switch_core_alloc(pool, sizeof(netsnmp_table_registration_info));
<span style="color: #A00000">-        netsnmp_table_helper_add_index(ch_table_info, ASN_INTEGER);</span>
<span style="color: #A00000">-        ch_table_info->min_column = 1;</span>
<span style="color: #A00000">-        ch_table_info->max_column = 7;</span>
<span style="color: #00A000">+        netsnmp_table_helper_add_indexes(ch_table_info, ASN_INTEGER, 0);</span>
<span style="color: #00A000">+        ch_table_info->min_column = CH_INDEX;</span>
<span style="color: #00A000">+        ch_table_info->max_column = CH_WRITE_BITRATE;</span>
        ch_table = netsnmp_tdata_create_table("channelList", 0);
        ch_reginfo = netsnmp_create_handler_registration("channelList", handle_channelList, channelList_oid, OID_LENGTH(channelList_oid), HANDLER_CAN_RONLY);
        netsnmp_tdata_register(ch_reginfo, ch_table, ch_table_info);
<span style="color: #800080; font-weight: bold">@@ -191,15 +222,15 @@ int handle_systemStats(netsnmp_mib_handler *handler, netsnmp_handler_registratio</span>
                        break;
                case SS_SESSIONS_SINCE_STARTUP:
                        int_val = switch_core_session_id() - 1;
<span style="color: #A00000">-                        snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &int_val, sizeof(int_val));</span>
<span style="color: #00A000">+                        snmp_set_var_typed_integer(requests->requestvb, ASN_COUNTER, int_val);</span>
                        break;
                case SS_CURRENT_SESSIONS:
                        int_val = switch_core_session_count();
<span style="color: #A00000">-                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));</span>
<span style="color: #00A000">+                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);</span>
                        break;
                case SS_MAX_SESSIONS:
                        switch_core_session_ctl(SCSC_MAX_SESSIONS, &int_val);
<span style="color: #A00000">-                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));</span>
<span style="color: #00A000">+                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);</span>
                        break;
                case SS_CURRENT_CALLS:
                        {
<span style="color: #800080; font-weight: bold">@@ -213,17 +244,17 @@ int handle_systemStats(netsnmp_mib_handler *handler, netsnmp_handler_registratio</span>
                        gethostname(hostname, sizeof(hostname));
                        sprintf(sql, "SELECT COUNT(*) FROM calls WHERE hostname='%s'", hostname);
                        switch_cache_db_execute_sql_callback(dbh, sql, sql_count_callback, &int_val, NULL);
<span style="color: #A00000">-                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));</span>
<span style="color: #00A000">+                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);</span>
                        switch_cache_db_release_db_handle(&dbh);
                        }
                        break;
                case SS_SESSIONS_PER_SECOND:
                        switch_core_session_ctl(SCSC_LAST_SPS, &int_val);
<span style="color: #A00000">-                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));</span>
<span style="color: #00A000">+                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);</span>
                        break;
                case SS_MAX_SESSIONS_PER_SECOND:
                        switch_core_session_ctl(SCSC_SPS, &int_val);
<span style="color: #A00000">-                        snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE, (u_char *) &int_val, sizeof(int_val));</span>
<span style="color: #00A000">+                        snmp_set_var_typed_integer(requests->requestvb, ASN_GAUGE, int_val);</span>
                        break;
                default:
                        snmp_log(LOG_WARNING, "Unregistered OID-suffix requested (%d)\n", (int) subid);
<span style="color: #800080; font-weight: bold">@@ -246,6 +277,7 @@ int handle_channelList(netsnmp_mib_handler *handler, netsnmp_handler_registratio</span>
        netsnmp_request_info *request;
        netsnmp_table_request_info *table_info;
        chan_entry_t *entry;
<span style="color: #00A000">+        char dt_str[12];</span>
        switch (reqinfo->mode) {
        case MODE_GET:
<span style="color: #800080; font-weight: bold">@@ -254,6 +286,9 @@ int handle_channelList(netsnmp_mib_handler *handler, netsnmp_handler_registratio</span>
                        entry = (chan_entry_t *) netsnmp_tdata_extract_entry(request);
                        switch (table_info->colnum) {
<span style="color: #00A000">+                        case CH_INDEX:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, entry->idx);</span>
<span style="color: #00A000">+                                break;</span>
                        case CH_UUID:
                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->uuid, strlen(entry->uuid));
                                break;
<span style="color: #800080; font-weight: bold">@@ -261,7 +296,8 @@ int handle_channelList(netsnmp_mib_handler *handler, netsnmp_handler_registratio</span>
                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->direction, strlen(entry->direction));
                                break;
                        case CH_CREATED:
<span style="color: #A00000">-                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->created, strlen(entry->created));</span>
<span style="color: #00A000">+                                time_t_to_datetime(entry->created_epoch, (char *) &dt_str, sizeof(dt_str));</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) &dt_str, sizeof(dt_str));</span>
                                break;
                        case CH_NAME:
                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->name, strlen(entry->name));
<span style="color: #800080; font-weight: bold">@@ -275,6 +311,53 @@ int handle_channelList(netsnmp_mib_handler *handler, netsnmp_handler_registratio</span>
                        case CH_CID_NUM:
                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->cid_num, strlen(entry->cid_num));
                                break;
<span style="color: #00A000">+                        case CH_IP_ADDR_TYPE:</span>
<span style="color: #00A000">+                                if (entry->addr_family == AF_INET6) {</span>
<span style="color: #00A000">+                                        snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, INETADDRESSTYPE_IPV6);</span>
<span style="color: #00A000">+                                } else {</span>
<span style="color: #00A000">+                                        snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, INETADDRESSTYPE_IPV4);</span>
<span style="color: #00A000">+                                }</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_IP_ADDR:</span>
<span style="color: #00A000">+                                if (entry->addr_family == AF_INET6) {</span>
<span style="color: #00A000">+                                        snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) &entry->ip_addr.v6, sizeof(entry->ip_addr.v6));</span>
<span style="color: #00A000">+                                } else {</span>
<span style="color: #00A000">+                                        snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) &entry->ip_addr.v4, sizeof(entry->ip_addr.v4));</span>
<span style="color: #00A000">+                                }</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_DEST:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->dest, strlen(entry->dest));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_APPLICATION:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->application, strlen(entry->application));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_APPLICATION_DATA:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->application_data, strlen(entry->application_data));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_DIALPLAN:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->dialplan, strlen(entry->dialplan));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_CONTEXT:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->context, strlen(entry->context));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_READ_CODEC:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->read_codec, strlen(entry->read_codec));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_READ_RATE:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_GAUGE, (u_char *) &entry->read_rate, sizeof(entry->read_rate));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_READ_BITRATE:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_GAUGE, (u_char *) &entry->read_bitrate, sizeof(entry->read_bitrate));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_WRITE_CODEC:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, (u_char *) entry->write_codec, strlen(entry->write_codec));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_WRITE_RATE:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_GAUGE, (u_char *) &entry->write_rate, sizeof(entry->write_rate));</span>
<span style="color: #00A000">+                                break;</span>
<span style="color: #00A000">+                        case CH_WRITE_BITRATE:</span>
<span style="color: #00A000">+                                snmp_set_var_typed_value(request->requestvb, ASN_GAUGE, (u_char *) &entry->write_bitrate, sizeof(entry->write_bitrate));</span>
<span style="color: #00A000">+                                break;</span>
                        default:
                                snmp_log(LOG_WARNING, "Unregistered OID-suffix requested (%d)\n", table_info->colnum);
                                netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/event_handlers/mod_snmp/subagent.h b/src/mod/event_handlers/mod_snmp/subagent.h</span>
<span style="color: #000080; font-weight: bold">index 0070b2c..5da87a6 100644</span>
<span style="color: #A00000">--- a/src/mod/event_handlers/mod_snmp/subagent.h</span>
<span style="color: #00A000">+++ b/src/mod/event_handlers/mod_snmp/subagent.h</span>
<span style="color: #800080; font-weight: bold">@@ -15,23 +15,58 @@</span>
#define SS_MAX_SESSIONS_PER_SECOND        7
/* .1.3.6.1.4.1.27880.1.9 */
<span style="color: #A00000">-#define CH_UUID                                1</span>
<span style="color: #A00000">-#define CH_DIRECTION                        2</span>
<span style="color: #A00000">-#define CH_CREATED                        3</span>
<span style="color: #A00000">-#define CH_NAME                                4</span>
<span style="color: #A00000">-#define CH_STATE                        5</span>
<span style="color: #A00000">-#define CH_CID_NAME                        6</span>
<span style="color: #A00000">-#define CH_CID_NUM                        7</span>
<span style="color: #00A000">+#define CH_INDEX                        1</span>
<span style="color: #00A000">+#define CH_UUID                                2</span>
<span style="color: #00A000">+#define CH_DIRECTION                        3</span>
<span style="color: #00A000">+#define CH_CREATED                        4</span>
<span style="color: #00A000">+#define CH_NAME                                5</span>
<span style="color: #00A000">+#define CH_STATE                        6</span>
<span style="color: #00A000">+#define CH_CID_NAME                        7</span>
<span style="color: #00A000">+#define CH_CID_NUM                        8</span>
<span style="color: #00A000">+#define CH_IP_ADDR_TYPE                        9</span>
<span style="color: #00A000">+#define CH_IP_ADDR                        10</span>
<span style="color: #00A000">+#define CH_DEST                                11</span>
<span style="color: #00A000">+#define CH_APPLICATION                        12</span>
<span style="color: #00A000">+#define CH_APPLICATION_DATA                13</span>
<span style="color: #00A000">+#define CH_DIALPLAN                        14</span>
<span style="color: #00A000">+#define CH_CONTEXT                        15</span>
<span style="color: #00A000">+#define CH_READ_CODEC                        16</span>
<span style="color: #00A000">+#define CH_READ_RATE                        17</span>
<span style="color: #00A000">+#define CH_READ_BITRATE                        18</span>
<span style="color: #00A000">+#define CH_WRITE_CODEC                        19</span>
<span style="color: #00A000">+#define CH_WRITE_RATE                        20</span>
<span style="color: #00A000">+#define CH_WRITE_BITRATE                21</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/* Why aren't these in net-snmp-includes.h ? */</span>
<span style="color: #00A000">+#define INETADDRESSTYPE_UNKNOWN                0</span>
<span style="color: #00A000">+#define INETADDRESSTYPE_IPV4                1</span>
<span style="color: #00A000">+#define INETADDRESSTYPE_IPV6                2</span>
<span style="color: #00A000">+#define INETADDRESSTYPE_IPV4Z                3</span>
<span style="color: #00A000">+#define INETADDRESSTYPE_IPV6Z                4</span>
<span style="color: #00A000">+#define INETADDRESSTYPE_DNS                16</span>
typedef struct {
        uint32_t idx;
        char uuid[38];
        char direction[32];
<span style="color: #A00000">-        char created[128];</span>
<span style="color: #00A000">+        time_t created_epoch;</span>
        char name[1024];
        char state[64];
        char cid_name[1024];
        char cid_num[256];
<span style="color: #00A000">+        ip_t ip_addr;</span>
<span style="color: #00A000">+        uint8_t addr_family;</span>
<span style="color: #00A000">+        char dest[1024];</span>
<span style="color: #00A000">+        char application[128];</span>
<span style="color: #00A000">+        char application_data[4096];</span>
<span style="color: #00A000">+        char dialplan[128];</span>
<span style="color: #00A000">+        char context[128];</span>
<span style="color: #00A000">+        char read_codec[128];</span>
<span style="color: #00A000">+        uint32_t read_rate;</span>
<span style="color: #00A000">+        uint32_t read_bitrate;</span>
<span style="color: #00A000">+        char write_codec[128];</span>
<span style="color: #00A000">+        uint32_t write_rate;</span>
<span style="color: #00A000">+        uint32_t write_bitrate;</span>
} chan_entry_t;
void init_subagent(switch_memory_pool_t *pool);
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
MERGE: OpenMethods DTMF recognition via ASR modules
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
MERGE: OpenMethods ASR enhancements: multiple concurrent grammars and dialplan access to start-input-timers
<span style="color: #000080; font-weight: bold">diff --cc src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #000080; font-weight: bold">index 5a3be03,fe089a6..928a9b8</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #800080; font-weight: bold">@@@ -95,181 -96,7 +96,181 @@@ SWITCH_STANDARD_DIALPLAN(inline_dialpla</span>
        return extension;
}
+struct action_binding {
+        char *realm;
+        char *input;
+        char *string;
+        char *value;
+        switch_core_session_t *session;
+};
+
+static switch_status_t digit_nomatch_action_callback(switch_ivr_dmachine_match_t *match)
+{
+        switch_core_session_t *session = (switch_core_session_t *) match->user_data;
+        switch_channel_t *channel = switch_core_session_get_channel(session);
+        char str[DMACHINE_MAX_DIGIT_LEN + 2];
+        switch_event_t *event;
+        switch_status_t status;
+
+        switch_channel_set_variable(channel, "last_non_matching_digits", match->match_digits);
+
+        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Digit NOT match binding [%s]\n",
+                                         switch_channel_get_name(channel), match->match_digits);
+
+        if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) {
+                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "digits", match->match_digits);
+
+                if ((status = switch_core_session_queue_event(session, &event)) != SWITCH_STATUS_SUCCESS) {
+                        switch_event_destroy(&event);
+                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s event queue faiure.\n",
+                                                         switch_core_session_get_name(session));
+                }
+        }
+
+        /* send it back around flagged to skip the dmachine */
+        switch_snprintf(str, sizeof(str), "!%s", match->match_digits);
+        
+        switch_channel_queue_dtmf_string(channel, str);
+        
+        return SWITCH_STATUS_SUCCESS;
+}
+
+static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
+{
+        struct action_binding *act = (struct action_binding *) match->user_data;
+        switch_event_t *event;
+        switch_status_t status;
+        int exec = 0;
+        char *string = act->string;
+        switch_channel_t *channel = switch_core_session_get_channel(act->session);
+
+        switch_channel_set_variable(channel, "last_matching_digits", match->match_digits);
+        
+        if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) {
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s]\n",
+                                                 switch_channel_get_name(channel), act->string, act->value);
+
+                if (!strncasecmp(string, "exec:", 5)) {
+                        string += 5;
+                        exec = 1;
+                }
+
+                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, string, act->value);
+                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "digits", match->match_digits);
+
+                if (exec) {
+                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute", exec == 2 ? "non-blocking" : "blocking");
+                }
+
+                if ((status = switch_core_session_queue_event(act->session, &event)) != SWITCH_STATUS_SUCCESS) {
+                        switch_event_destroy(&event);
+                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_WARNING, "%s event queue faiure.\n",
+                                                         switch_core_session_get_name(act->session));
+                }
+        }
+
+        if (exec) {
+                char *cmd = switch_core_session_sprintf(act->session, "%s::%s", string, act->value);
+                switch_ivr_broadcast_in_thread(act->session, cmd, SMF_ECHO_ALEG|SMF_HOLD_BLEG);
+        }
+        
+        return SWITCH_STATUS_SUCCESS;
+}
+
+#define CLEAR_DIGIT_ACTION_USAGE "<realm>|all"
+SWITCH_STANDARD_APP(clear_digit_action_function)
+{
+        //switch_channel_t *channel = switch_core_session_get_channel(session);
+        switch_ivr_dmachine_t *dmachine;
+        char *realm = (char *) data;
+
+        if ((dmachine = switch_core_session_get_dmachine(session))) {
+                if (zstr(realm) || !strcasecmp(realm, "all")) {
+                        switch_core_session_set_dmachine(session, NULL);
+                        switch_ivr_dmachine_destroy(&dmachine);
+                } else {
+                        switch_ivr_dmachine_clear_realm(dmachine, realm);
+                }
+        }
+}
+
+#define DIGIT_ACTION_SET_REALM_USAGE "<realm>"
+SWITCH_STANDARD_APP(digit_action_set_realm_function)
+{
+        switch_ivr_dmachine_t *dmachine;
+        char *realm = (char *) data;
+
+        if (zstr(data)) {
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Syntax Error, USAGE %s\n", DIGIT_ACTION_SET_REALM_USAGE);
+                return;
+        }
+        
+        if ((dmachine = switch_core_session_get_dmachine(session))) {
+                switch_ivr_dmachine_set_realm(dmachine, realm);
+        }
+
+}
+
+#define BIND_DIGIT_ACTION_USAGE "<realm>,<digits|~regex>,<string>,<value>"
+SWITCH_STANDARD_APP(bind_digit_action_function)
+{
+        switch_channel_t *channel = switch_core_session_get_channel(session);
+        switch_ivr_dmachine_t *dmachine;
+        char *mydata;
+        int argc = 0;
+        char *argv[4] = { 0 };
+        struct action_binding *act;
+
+        if (zstr(data)) {
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Syntax Error, USAGE %s\n", BIND_DIGIT_ACTION_USAGE);
+                return;
+        }
+
+        mydata = switch_core_session_strdup(session, data);
+
+        argc = switch_separate_string(mydata, ',', argv, (sizeof(argv) / sizeof(argv[0])));
+        
+        if (argc < 4 || zstr(argv[0]) || zstr(argv[1]) || zstr(argv[2]) || zstr(argv[3])) {
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Syntax Error, USAGE %s\n", BIND_DIGIT_ACTION_USAGE);
+                return;
+        }
+
+        
+        if (!(dmachine = switch_core_session_get_dmachine(session))) {
+                uint32_t digit_timeout = 1500;
+                uint32_t input_timeout = 0;
+                const char *var;
+                uint32_t tmp;
+
+                if ((var = switch_channel_get_variable(channel, "bind_digit_digit_timeout"))) {
+                        tmp = (uint32_t) atol(var);
+                        if (tmp < 0) tmp = 0;
+                        digit_timeout = tmp;
+                }
+                
+                if ((var = switch_channel_get_variable(channel, "bind_digit_input_timeout"))) {
+                        tmp = (uint32_t) atol(var);
+                        if (tmp < 0) tmp = 0;
+                        input_timeout = tmp;
+                }
+                
+                switch_ivr_dmachine_create(&dmachine, "DPTOOLS", NULL, digit_timeout, input_timeout, NULL, digit_nomatch_action_callback, session);
+                switch_core_session_set_dmachine(session, dmachine);
+        }
+
+        
+        act = switch_core_session_alloc(session, sizeof(*act));
+        act->realm = argv[0];
+        act->input = argv[1];
+        act->string = argv[2];
+        act->value = argv[3];
+        act->session = session;
+        
+        switch_ivr_dmachine_bind(dmachine, act->realm, act->input, 0, digit_action_callback, act);
+}
+
+
<span style="color: #A00000">- #define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR pause OR resume OR stop OR param <name> <value>"</span>
<span style="color: #00A000">+ #define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR grammaron/grammaroff <gram_name> OR grammarsalloff OR pause OR resume OR start_input_timers OR stop OR param <name> <value>"</span>
SWITCH_STANDARD_APP(detect_speech_function)
{
        char *argv[4];
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
MERGE: DTMF recognition via ASR modules (implemented in UniMRCP)
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_core.h b/src/include/switch_core.h</span>
<span style="color: #000080; font-weight: bold">index 26a048c..a3d74e9 100644</span>
<span style="color: #A00000">--- a/src/include/switch_core.h</span>
<span style="color: #00A000">+++ b/src/include/switch_core.h</span>
<span style="color: #800080; font-weight: bold">@@ -1715,6 +1715,15 @@ SWITCH_DECLARE(switch_status_t) switch_core_asr_close(switch_asr_handle_t *ah, s</span>
SWITCH_DECLARE(switch_status_t) switch_core_asr_feed(switch_asr_handle_t *ah, void *data, unsigned int len, switch_asr_flag_t *flags);
/*!
<span style="color: #00A000">+ \brief Feed DTMF to an asr handle</span>
<span style="color: #00A000">+ \param ah the handle to feed data to</span>
<span style="color: #00A000">+ \param dtmf a string of DTMF digits</span>
<span style="color: #00A000">+ \param flags flags to influence behaviour</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_feed_dtmf(switch_asr_handle_t *ah, const switch_dtmf_t *dtmf, switch_asr_flag_t *flags);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
\brief Check an asr handle for results
\param ah the handle to check
\param flags flags to influence behaviour
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h</span>
<span style="color: #000080; font-weight: bold">index e0119b4..8303af7 100644</span>
<span style="color: #A00000">--- a/src/include/switch_module_interfaces.h</span>
<span style="color: #00A000">+++ b/src/include/switch_module_interfaces.h</span>
<span style="color: #800080; font-weight: bold">@@ -400,6 +400,8 @@ struct switch_asr_interface {</span>
        switch_status_t (*asr_disable_grammar) (switch_asr_handle_t *ah, const char *name);
        /*! function to disable all grammars to the asr interface */
        switch_status_t (*asr_disable_all_grammars) (switch_asr_handle_t *ah);
<span style="color: #00A000">+        /*! function to feed DTMF to the ASR */</span>
<span style="color: #00A000">+        switch_status_t (*asr_feed_dtmf) (switch_asr_handle_t *ah, const switch_dtmf_t *dtmf, switch_asr_flag_t *flags);</span>
};
/*! an abstract representation of an asr speech interface. */
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #000080; font-weight: bold">index b9cecd1..b3679cf 100644</span>
<span style="color: #A00000">--- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #00A000">+++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #800080; font-weight: bold">@@ -49,6 +49,7 @@</span>
#include "mrcp_resource_loader.h"
#include "mpf_engine.h"
#include "mpf_codec_manager.h"
<span style="color: #00A000">+#include "mpf_dtmf_generator.h"</span>
#include "mpf_rtp_termination_factory.h"
#include "mrcp_sofiasip_client_agent.h"
#include "mrcp_unirtsp_client_agent.h"
<span style="color: #800080; font-weight: bold">@@ -442,6 +443,12 @@ struct recognizer_data {</span>
        int start_of_input;
        /** true, if input timers have started */
        int timers_started;
<span style="color: #00A000">+        /** UniMRCP mpf stream */</span>
<span style="color: #00A000">+        mpf_audio_stream_t *unimrcp_stream;</span>
<span style="color: #00A000">+        /** DTMF generator */</span>
<span style="color: #00A000">+        mpf_dtmf_generator_t *dtmf_generator;</span>
<span style="color: #00A000">+        /** true, if presently transmitting DTMF */</span>
<span style="color: #00A000">+        char dtmf_generator_active;</span>
};
typedef struct recognizer_data recognizer_data_t;
<span style="color: #800080; font-weight: bold">@@ -457,6 +464,7 @@ static switch_status_t recog_asr_disable_grammar(switch_asr_handle_t *ah, const</span>
static switch_status_t recog_asr_disable_all_grammars(switch_asr_handle_t *ah);
static switch_status_t recog_asr_close(switch_asr_handle_t *ah, switch_asr_flag_t *flags);
static switch_status_t recog_asr_feed(switch_asr_handle_t *ah, void *data, unsigned int len, switch_asr_flag_t *flags);
<span style="color: #00A000">+static switch_status_t recog_asr_feed_dtmf(switch_asr_handle_t *ah, const switch_dtmf_t *dtmf, switch_asr_flag_t *flags);</span>
#if 0
static switch_status_t recog_asr_start(switch_asr_handle_t *ah, const char *name);
#endif
<span style="color: #800080; font-weight: bold">@@ -472,6 +480,7 @@ static void recog_asr_float_param(switch_asr_handle_t *ah, char *param, double v</span>
/* recognizer's interface for UniMRCP */
static apt_bool_t recog_message_handler(const mrcp_app_message_t *app_message);
static apt_bool_t recog_on_message_receive(mrcp_application_t *application, mrcp_session_t *session, mrcp_channel_t *channel, mrcp_message_t *message);
<span style="color: #00A000">+static apt_bool_t recog_stream_open(mpf_audio_stream_t *stream, mpf_codec_t *codec);</span>
static apt_bool_t recog_stream_read(mpf_audio_stream_t *stream, mpf_frame_t *frame);
/* recognizer specific speech_channel_funcs */
<span style="color: #800080; font-weight: bold">@@ -3114,6 +3123,9 @@ static switch_status_t recog_asr_close(switch_asr_handle_t *ah, switch_asr_flag_</span>
        speech_channel_destroy(schannel);
        switch_core_hash_destroy(&r->grammars);
        switch_core_hash_destroy(&r->enabled_grammars);
<span style="color: #00A000">+        if (r->dtmf_generator) {</span>
<span style="color: #00A000">+                mpf_dtmf_generator_destroy(r->dtmf_generator);</span>
<span style="color: #00A000">+        }</span>
        /* this lets FreeSWITCH's speech_thread know the handle is closed */
        switch_set_flag(ah, SWITCH_ASR_FLAG_CLOSED);
<span style="color: #800080; font-weight: bold">@@ -3134,6 +3146,39 @@ static switch_status_t recog_asr_feed(switch_asr_handle_t *ah, void *data, unsig</span>
        return speech_channel_write(schannel, data, &slen);
}
<span style="color: #00A000">+/**</span>
<span style="color: #00A000">+ * Process asr_feed_dtmf request from FreeSWITCH</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * @param ah the FreeSWITCH speech recognition handle</span>
<span style="color: #00A000">+ * @return SWITCH_STATUS_SUCCESS if successful </span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_asr_feed_dtmf(switch_asr_handle_t *ah, const switch_dtmf_t *dtmf, switch_asr_flag_t *flags)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;</span>
<span style="color: #00A000">+        recognizer_data_t *r = (recognizer_data_t *) schannel->data;</span>
<span style="color: #00A000">+        char digits[2];</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (!r->dtmf_generator) {</span>
<span style="color: #00A000">+                if (!r->unimrcp_stream) {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Cannot queue DTMF: No UniMRCP stream object open\n", schannel->name);</span>
<span style="color: #00A000">+                        return SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                r->dtmf_generator = mpf_dtmf_generator_create(r->unimrcp_stream, schannel->unimrcp_session->pool);</span>
<span style="color: #00A000">+                if (!r->dtmf_generator) {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Cannot queue DTMF: Failed to create DTMF generator\n", schannel->name);</span>
<span style="color: #00A000">+                        return SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        digits[0] = dtmf->digit;</span>
<span style="color: #00A000">+        digits[1] = '\0';</span>
<span style="color: #00A000">+        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) Queued DTMF: %s\n", schannel->name, digits);</span>
<span style="color: #00A000">+        mpf_dtmf_generator_enqueue(r->dtmf_generator, digits);</span>
<span style="color: #00A000">+        r->dtmf_generator_active = 1;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
#if 0
/**
* Process asr_start request from FreeSWITCH
<span style="color: #800080; font-weight: bold">@@ -3380,6 +3425,23 @@ static apt_bool_t recog_on_message_receive(mrcp_application_t *application, mrcp</span>
}
/**
<span style="color: #00A000">+ * UniMRCP callback requesting open for speech recognition</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * @param stream the UniMRCP stream</span>
<span style="color: #00A000">+ * @param codec the codec</span>
<span style="color: #00A000">+ * @return TRUE</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static apt_bool_t recog_stream_open(mpf_audio_stream_t *stream, mpf_codec_t *codec)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        speech_channel_t *schannel = (speech_channel_t *) stream->obj;</span>
<span style="color: #00A000">+        recognizer_data_t *r = (recognizer_data_t *) schannel->data;</span>
<span style="color: #00A000">+        </span>
<span style="color: #00A000">+        r->unimrcp_stream = stream;</span>
<span style="color: #00A000">+        </span>
<span style="color: #00A000">+        return TRUE;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
* UniMRCP callback requesting next frame for speech recognition
*
* @param stream the UniMRCP stream
<span style="color: #800080; font-weight: bold">@@ -3389,6 +3451,7 @@ static apt_bool_t recog_on_message_receive(mrcp_application_t *application, mrcp</span>
static apt_bool_t recog_stream_read(mpf_audio_stream_t *stream, mpf_frame_t *frame)
{
        speech_channel_t *schannel = (speech_channel_t *) stream->obj;
<span style="color: #00A000">+        recognizer_data_t *r = (recognizer_data_t *) schannel->data;</span>
        switch_size_t to_read = frame->codec_frame.size;
        /* grab the data. pad it if there isn't enough */
<span style="color: #800080; font-weight: bold">@@ -3398,6 +3461,13 @@ static apt_bool_t recog_stream_read(mpf_audio_stream_t *stream, mpf_frame_t *fra</span>
                }
                frame->type |= MEDIA_FRAME_TYPE_AUDIO;
        }
<span style="color: #00A000">+        </span>
<span style="color: #00A000">+        if (r->dtmf_generator_active) {</span>
<span style="color: #00A000">+                if (!mpf_dtmf_generator_put_frame(r->dtmf_generator, frame)) {</span>
<span style="color: #00A000">+                        if (!mpf_dtmf_generator_sending(r->dtmf_generator))</span>
<span style="color: #00A000">+                                r->dtmf_generator_active = 0;</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+        }</span>
        return TRUE;
}
<span style="color: #800080; font-weight: bold">@@ -3421,6 +3491,7 @@ static switch_status_t recog_load(switch_loadable_module_interface_t *module_int</span>
        asr_interface->asr_disable_all_grammars = recog_asr_disable_all_grammars;
        asr_interface->asr_close = recog_asr_close;
        asr_interface->asr_feed = recog_asr_feed;
<span style="color: #00A000">+        asr_interface->asr_feed_dtmf = recog_asr_feed_dtmf;</span>
#if 0
        asr_interface->asr_start = recog_asr_start;
#endif
<span style="color: #800080; font-weight: bold">@@ -3443,7 +3514,7 @@ static switch_status_t recog_load(switch_loadable_module_interface_t *module_int</span>
        globals.recog.dispatcher.on_channel_remove = speech_on_channel_remove;
        globals.recog.dispatcher.on_message_receive = recog_on_message_receive;
        globals.recog.audio_stream_vtable.destroy = NULL;
<span style="color: #A00000">-        globals.recog.audio_stream_vtable.open_rx = NULL;</span>
<span style="color: #00A000">+        globals.recog.audio_stream_vtable.open_rx = recog_stream_open;</span>
        globals.recog.audio_stream_vtable.close_rx = NULL;
        globals.recog.audio_stream_vtable.read_frame = recog_stream_read;
        globals.recog.audio_stream_vtable.open_tx = NULL;
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_core_asr.c b/src/switch_core_asr.c</span>
<span style="color: #000080; font-weight: bold">index 691011a..7f231ef 100644</span>
<span style="color: #A00000">--- a/src/switch_core_asr.c</span>
<span style="color: #00A000">+++ b/src/switch_core_asr.c</span>
<span style="color: #800080; font-weight: bold">@@ -239,6 +239,19 @@ SWITCH_DECLARE(switch_status_t) switch_core_asr_feed(switch_asr_handle_t *ah, vo</span>
        return ah->asr_interface->asr_feed(ah, data, len, flags);
}
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_feed_dtmf(switch_asr_handle_t *ah, const switch_dtmf_t *dtmf, switch_asr_flag_t *flags)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        switch_assert(ah != NULL);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (ah->asr_interface->asr_feed_dtmf) {</span>
<span style="color: #00A000">+                status = ah->asr_interface->asr_feed_dtmf(ah, dtmf, flags);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
SWITCH_DECLARE(switch_status_t) switch_core_asr_check_results(switch_asr_handle_t *ah, switch_asr_flag_t *flags)
{
        switch_assert(ah != NULL);
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c</span>
<span style="color: #000080; font-weight: bold">index 66cd369..5df7af3 100644</span>
<span style="color: #A00000">--- a/src/switch_ivr_async.c</span>
<span style="color: #00A000">+++ b/src/switch_ivr_async.c</span>
<span style="color: #800080; font-weight: bold">@@ -2660,6 +2660,20 @@ static switch_bool_t speech_callback(switch_media_bug_t *bug, void *user_data, s</span>
        return SWITCH_TRUE;
}
<span style="color: #00A000">+static switch_status_t speech_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf, switch_dtmf_direction_t direction)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_channel_t *channel = switch_core_session_get_channel(session);</span>
<span style="color: #00A000">+        struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+        switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (switch_core_asr_feed_dtmf(sth->ah, dtmf, &flags) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Error Feeding DTMF\n");</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
SWITCH_DECLARE(switch_status_t) switch_ivr_stop_detect_speech(switch_core_session_t *session)
{
        switch_channel_t *channel = switch_core_session_get_channel(session);
<span style="color: #800080; font-weight: bold">@@ -2875,6 +2889,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t *</span>
                return status;
        }
<span style="color: #00A000">+        if ((status = switch_core_event_hook_add_recv_dtmf(session, speech_on_dtmf)) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                switch_ivr_stop_detect_speech(session);</span>
<span style="color: #00A000">+                return status;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
        switch_channel_set_private(channel, SWITCH_SPEECH_KEY, sth);
        return SWITCH_STATUS_SUCCESS;
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
MERGE: expose ASR start_input_timers to dialplan via IVR and mod_dptools
<span style="color: #000080; font-weight: bold">diff --cc src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #000080; font-weight: bold">index f573661,2f49630..fe089a6</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #800080; font-weight: bold">@@@ -96,7 -96,7 +96,7 @@@ SWITCH_STANDARD_DIALPLAN(inline_dialpla</span>
        return extension;
}
<span style="color: #A00000">- #define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR grammaron/grammaroff <gram_name> OR grammarsalloff OR pause OR resume OR stop OR param <name> <value>"</span>
-#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume OR start_input_timers"
<span style="color: #00A000">++#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR grammaron/grammaroff <gram_name> OR grammarsalloff OR pause OR resume OR start_input_timers OR stop OR param <name> <value>"</span>
SWITCH_STANDARD_APP(detect_speech_function)
{
        char *argv[4];
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
MERGE: document all of detect_speech's valid syntax
<span style="color: #000080; font-weight: bold">diff --cc src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #000080; font-weight: bold">index e942bc6,6d014fa..f573661</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #800080; font-weight: bold">@@@ -96,7 -96,7 +96,7 @@@ SWITCH_STANDARD_DIALPLAN(inline_dialpla</span>
        return extension;
}
<span style="color: #A00000">- #define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume OR grammaron/grammaroff <gram_name> OR grammarsalloff"</span>
-#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR pause OR resume OR stop OR param <name> <value>"
<span style="color: #00A000">++#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR grammaron/grammaroff <gram_name> OR grammarsalloff OR pause OR resume OR stop OR param <name> <value>"</span>
SWITCH_STANDARD_APP(detect_speech_function)
{
        char *argv[4];
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
expose ASR enable/disable grammar (and disable all grammars) to dialplan via mod_dptools
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #000080; font-weight: bold">index 5a1b8c5..e942bc6 100755</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #800080; font-weight: bold">@@ -28,6 +28,7 @@</span>
* Michael Murdock <mike at mmurdock dot org>
* Neal Horman <neal at wanlink dot com>
* Bret McDanel <trixter AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* mod_dptools.c -- Raw Audio File Streaming Application Module
*
<span style="color: #800080; font-weight: bold">@@ -95,7 +96,7 @@ SWITCH_STANDARD_DIALPLAN(inline_dialplan_hunt)</span>
        return extension;
}
<span style="color: #A00000">-#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume"</span>
<span style="color: #00A000">+#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume OR grammaron/grammaroff <gram_name> OR grammarsalloff"</span>
SWITCH_STANDARD_APP(detect_speech_function)
{
        char *argv[4];
<span style="color: #800080; font-weight: bold">@@ -108,6 +109,12 @@ SWITCH_STANDARD_APP(detect_speech_function)</span>
                        switch_ivr_detect_speech_load_grammar(session, argv[1], argv[2]);
                } else if (!strcasecmp(argv[0], "nogrammar")) {
                        switch_ivr_detect_speech_unload_grammar(session, argv[1]);
<span style="color: #00A000">+                } else if (!strcasecmp(argv[0], "grammaron")) {</span>
<span style="color: #00A000">+                        switch_ivr_detect_speech_enable_grammar(session, argv[1]);</span>
<span style="color: #00A000">+                } else if (!strcasecmp(argv[0], "grammaroff")) {</span>
<span style="color: #00A000">+                        switch_ivr_detect_speech_disable_grammar(session, argv[1]);</span>
<span style="color: #00A000">+                } else if (!strcasecmp(argv[0], "grammarsalloff")) {</span>
<span style="color: #00A000">+                        switch_ivr_detect_speech_disable_all_grammars(session);</span>
                } else if (!strcasecmp(argv[0], "pause")) {
                        switch_ivr_pause_detect_speech(session);
                } else if (!strcasecmp(argv[0], "resume")) {
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
switch_ivr interfaces to enable/disable grammar: switch_ivr_detect_speech_enable_grammar, switch_ivr_detect_speech_disable_grammar, and switch_ivr_detect_speech_disable_all_grammars
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h</span>
<span style="color: #000080; font-weight: bold">index 40ba1dc..8641766 100644</span>
<span style="color: #A00000">--- a/src/include/switch_ivr.h</span>
<span style="color: #00A000">+++ b/src/include/switch_ivr.h</span>
<span style="color: #800080; font-weight: bold">@@ -26,6 +26,7 @@</span>
* Anthony Minessale II <anthm@freeswitch.org>
* Neal Horman <neal at wanlink dot com>
* Bret McDanel <trixter AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* switch_ivr.h -- IVR Library
*
<span style="color: #800080; font-weight: bold">@@ -198,6 +199,29 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_cor</span>
*/
SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *name);
<span style="color: #00A000">+/*!</span>
<span style="color: #00A000">+ \brief Enable a grammar on a background speech detection handle</span>
<span style="color: #00A000">+ \param session The session to change the grammar on</span>
<span style="color: #00A000">+ \param name the grammar name</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS if all is well</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_enable_grammar(switch_core_session_t *session, const char *name);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
<span style="color: #00A000">+ \brief Disable a grammar on a background speech detection handle</span>
<span style="color: #00A000">+ \param session The session to change the grammar on</span>
<span style="color: #00A000">+ \param name the grammar name</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS if all is well</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_disable_grammar(switch_core_session_t *session, const char *name);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
<span style="color: #00A000">+ \brief Disable all grammars on a background speech detection handle</span>
<span style="color: #00A000">+ \param session The session to change the grammar on</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS if all is well</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_disable_all_grammars(switch_core_session_t *session);</span>
<span style="color: #00A000">+</span>
SWITCH_DECLARE(switch_status_t) switch_ivr_set_param_detect_speech(switch_core_session_t *session, const char *name, const char *val);
/*!
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c</span>
<span style="color: #000080; font-weight: bold">index 4fe5732..672750a 100644</span>
<span style="color: #A00000">--- a/src/switch_ivr_async.c</span>
<span style="color: #00A000">+++ b/src/switch_ivr_async.c</span>
<span style="color: #800080; font-weight: bold">@@ -26,6 +26,7 @@</span>
* Anthony Minessale II <anthm@freeswitch.org>
* Michael Jerris <mike@jerris.com>
* Bret McDanel <bret AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* switch_ivr_async.c -- IVR Library (async operations)
*
<span style="color: #800080; font-weight: bold">@@ -2745,6 +2746,57 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_c</span>
        return SWITCH_STATUS_FALSE;
}
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_enable_grammar(switch_core_session_t *session, const char *name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_channel_t *channel = switch_core_session_get_channel(session);</span>
<span style="color: #00A000">+        switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;</span>
<span style="color: #00A000">+        struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);</span>
<span style="color: #00A000">+        switch_status_t status;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (sth) {</span>
<span style="color: #00A000">+                if ((status = switch_core_asr_enable_grammar(sth->ah, name)) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Error enabling Grammar\n");</span>
<span style="color: #00A000">+                        switch_core_asr_close(sth->ah, &flags);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                return status;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_disable_grammar(switch_core_session_t *session, const char *name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_channel_t *channel = switch_core_session_get_channel(session);</span>
<span style="color: #00A000">+        switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;</span>
<span style="color: #00A000">+        struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);</span>
<span style="color: #00A000">+        switch_status_t status;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (sth) {</span>
<span style="color: #00A000">+                if ((status = switch_core_asr_disable_grammar(sth->ah, name)) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Error disabling Grammar\n");</span>
<span style="color: #00A000">+                        switch_core_asr_close(sth->ah, &flags);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                return status;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_disable_all_grammars(switch_core_session_t *session)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_channel_t *channel = switch_core_session_get_channel(session);</span>
<span style="color: #00A000">+        switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;</span>
<span style="color: #00A000">+        struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);</span>
<span style="color: #00A000">+        switch_status_t status;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (sth) {</span>
<span style="color: #00A000">+                if ((status = switch_core_asr_disable_all_grammars(sth->ah)) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Error disabling all Grammars\n");</span>
<span style="color: #00A000">+                        switch_core_asr_close(sth->ah, &flags);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                return status;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t *session,
                                                                                                                 const char *mod_name,
                                                                                                                 const char *grammar, const char *name, const char *dest, switch_asr_handle_t *ah)
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
Implement UniMRCP asr_enable_grammar, asr_disable_grammar, and asr_disable_all_grammars which allow for multiple grammar recognition
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #000080; font-weight: bold">index a27ddf0..b9cecd1 100644</span>
<span style="color: #A00000">--- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #00A000">+++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #800080; font-weight: bold">@@ -434,8 +434,8 @@ static const char *grammar_type_to_mime(grammar_type_t type, profile_t *profile)</span>
struct recognizer_data {
        /** the available grammars */
        switch_hash_t *grammars;
<span style="color: #A00000">-        /** the last grammar used (for pause/resume) */</span>
<span style="color: #A00000">-        grammar_t *last_grammar;</span>
<span style="color: #00A000">+        /** the enabled grammars */</span>
<span style="color: #00A000">+        switch_hash_t *enabled_grammars;</span>
        /** recognize result */
        char *result;
        /** true, if voice has started */
<span style="color: #800080; font-weight: bold">@@ -452,6 +452,9 @@ static switch_status_t recog_shutdown();</span>
static switch_status_t recog_asr_open(switch_asr_handle_t *ah, const char *codec, int rate, const char *dest, switch_asr_flag_t *flags);
static switch_status_t recog_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name);
static switch_status_t recog_asr_unload_grammar(switch_asr_handle_t *ah, const char *name);
<span style="color: #00A000">+static switch_status_t recog_asr_enable_grammar(switch_asr_handle_t *ah, const char *name);</span>
<span style="color: #00A000">+static switch_status_t recog_asr_disable_grammar(switch_asr_handle_t *ah, const char *name);</span>
<span style="color: #00A000">+static switch_status_t recog_asr_disable_all_grammars(switch_asr_handle_t *ah);</span>
static switch_status_t recog_asr_close(switch_asr_handle_t *ah, switch_asr_flag_t *flags);
static switch_status_t recog_asr_feed(switch_asr_handle_t *ah, void *data, unsigned int len, switch_asr_flag_t *flags);
#if 0
<span style="color: #800080; font-weight: bold">@@ -472,9 +475,12 @@ static apt_bool_t recog_on_message_receive(mrcp_application_t *application, mrcp</span>
static apt_bool_t recog_stream_read(mpf_audio_stream_t *stream, mpf_frame_t *frame);
/* recognizer specific speech_channel_funcs */
<span style="color: #A00000">-static switch_status_t recog_channel_start(speech_channel_t *schannel, const char *name);</span>
<span style="color: #00A000">+static switch_status_t recog_channel_start(speech_channel_t *schannel);</span>
static switch_status_t recog_channel_load_grammar(speech_channel_t *schannel, const char *name, grammar_type_t type, const char *data);
static switch_status_t recog_channel_unload_grammar(speech_channel_t *schannel, const char *name);
<span style="color: #00A000">+static switch_status_t recog_channel_enable_grammar(speech_channel_t *schannel, const char *name);</span>
<span style="color: #00A000">+static switch_status_t recog_channel_disable_grammar(speech_channel_t *schannel, const char *name);</span>
<span style="color: #00A000">+static switch_status_t recog_channel_disable_all_grammars(speech_channel_t *schannel);</span>
static switch_status_t recog_channel_check_results(speech_channel_t *schannel);
static switch_status_t recog_channel_set_start_of_input(speech_channel_t *schannel);
static switch_status_t recog_channel_start_input_timers(speech_channel_t *schannel);
<span style="color: #800080; font-weight: bold">@@ -2056,19 +2062,24 @@ static const char *grammar_type_to_mime(grammar_type_t type, profile_t *profile)</span>
* Start RECOGNIZE request
*
* @param schannel the channel to start
<span style="color: #A00000">- * @param name the name of the grammar to use or NULL if to reuse the last grammar</span>
* @return SWITCH_STATUS_SUCCESS if successful
*/
<span style="color: #A00000">-static switch_status_t recog_channel_start(speech_channel_t *schannel, const char *name)</span>
<span style="color: #00A000">+static switch_status_t recog_channel_start(speech_channel_t *schannel)</span>
{
        switch_status_t status = SWITCH_STATUS_SUCCESS;
<span style="color: #00A000">+        switch_hash_index_t *egk;</span>
        mrcp_message_t *mrcp_message;
        mrcp_recog_header_t *recog_header;
        mrcp_generic_header_t *generic_header;
        recognizer_data_t *r;
        char *start_input_timers;
        const char *mime_type;
<span style="color: #A00000">-        grammar_t *grammar = NULL;</span>
<span style="color: #00A000">+        char *key;</span>
<span style="color: #00A000">+        switch_size_t len;</span>
<span style="color: #00A000">+        grammar_t *grammar;</span>
<span style="color: #00A000">+        switch_size_t grammar_uri_count = 0;</span>
<span style="color: #00A000">+        switch_size_t grammar_uri_list_len = 0;</span>
<span style="color: #00A000">+        char *grammar_uri_list = NULL;</span>
        switch_mutex_lock(schannel->mutex);
        if (schannel->state != SPEECH_CHANNEL_READY) {
<span style="color: #800080; font-weight: bold">@@ -2089,21 +2100,55 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel, const cha</span>
        start_input_timers = (char *) switch_core_hash_find(schannel->params, "start-input-timers");
        r->timers_started = zstr(start_input_timers) || strcasecmp(start_input_timers, "false");
<span style="color: #A00000">-        /* get the cached grammar */</span>
<span style="color: #A00000">-        if (zstr(name)) {</span>
<span style="color: #A00000">-                grammar = r->last_grammar;</span>
<span style="color: #A00000">-        } else {</span>
<span style="color: #A00000">-                grammar = (grammar_t *) switch_core_hash_find(r->grammars, name);</span>
<span style="color: #A00000">-                r->last_grammar = grammar;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-        if (grammar == NULL) {</span>
<span style="color: #A00000">-                if (name) {</span>
<span style="color: #A00000">-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Undefined grammar, %s\n", schannel->name, name);</span>
<span style="color: #A00000">-                } else {</span>
<span style="color: #A00000">-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) No grammar specified\n", schannel->name);</span>
<span style="color: #00A000">+        /* count enabled grammars */</span>
<span style="color: #00A000">+        for (egk = switch_hash_first(NULL, r->enabled_grammars); egk; egk = switch_hash_next(egk)) {</span>
<span style="color: #00A000">+                // NOTE: This postponed type check is necessary to allow a non-URI-list grammar to execute alone</span>
<span style="color: #00A000">+                if (grammar_uri_count == 1 && grammar->type != GRAMMAR_TYPE_URI)</span>
<span style="color: #00A000">+                        goto no_grammar_alone;</span>
<span style="color: #00A000">+                ++grammar_uri_count;</span>
<span style="color: #00A000">+                switch_hash_this(egk, (void *) &key, NULL, (void *) &grammar);</span>
<span style="color: #00A000">+                if (grammar->type != GRAMMAR_TYPE_URI && grammar_uri_count != 1) {</span>
<span style="color: #00A000">+                 no_grammar_alone:</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Grammar '%s' can only be used alone (not a URI list)\n", schannel->name, key);</span>
<span style="color: #00A000">+                        status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+                        goto done;</span>
                }
<span style="color: #00A000">+                len = strlen(grammar->data);</span>
<span style="color: #00A000">+                if (!len)</span>
<span style="color: #00A000">+                        continue;</span>
<span style="color: #00A000">+                grammar_uri_list_len += len;</span>
<span style="color: #00A000">+                if (grammar->data[len - 1] != '\n')</span>
<span style="color: #00A000">+                        grammar_uri_list_len += 2;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        switch (grammar_uri_count) {</span>
<span style="color: #00A000">+        case 0:</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) No grammar specified\n", schannel->name);</span>
                status = SWITCH_STATUS_FALSE;
                goto done;
<span style="color: #00A000">+        case 1:</span>
<span style="color: #00A000">+                /* grammar should already be the unique grammar */</span>
<span style="color: #00A000">+                break;</span>
<span style="color: #00A000">+        default:</span>
<span style="color: #00A000">+                /* get the enabled grammars list */</span>
<span style="color: #00A000">+                grammar_uri_list = switch_core_alloc(schannel->memory_pool, grammar_uri_list_len + 1);</span>
<span style="color: #00A000">+                grammar_uri_list_len = 0;</span>
<span style="color: #00A000">+                for (egk = switch_hash_first(NULL, r->enabled_grammars); egk; egk = switch_hash_next(egk)) {</span>
<span style="color: #00A000">+                        switch_hash_this(egk, (void *) &key, NULL, (void *) &grammar);</span>
<span style="color: #00A000">+                        len = strlen(grammar->data);</span>
<span style="color: #00A000">+                        if (!len)</span>
<span style="color: #00A000">+                                continue;</span>
<span style="color: #00A000">+                        memcpy(&(grammar_uri_list[grammar_uri_list_len]), grammar->data, len);</span>
<span style="color: #00A000">+                        grammar_uri_list_len += len;</span>
<span style="color: #00A000">+                        if (grammar_uri_list[grammar_uri_list_len - 1] != '\n')</span>
<span style="color: #00A000">+                        {</span>
<span style="color: #00A000">+                                grammar_uri_list_len += 2;</span>
<span style="color: #00A000">+                                grammar_uri_list[grammar_uri_list_len - 2] = '\r';</span>
<span style="color: #00A000">+                                grammar_uri_list[grammar_uri_list_len - 1] = '\n';</span>
<span style="color: #00A000">+                        }</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                grammar_uri_list[grammar_uri_list_len++] = '\0';</span>
<span style="color: #00A000">+                grammar = NULL;</span>
        }
        /* create MRCP message */
<span style="color: #800080; font-weight: bold">@@ -2121,7 +2166,7 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel, const cha</span>
        }
        /* set Content-Type */
<span style="color: #A00000">-        mime_type = grammar_type_to_mime(grammar->type, schannel->profile);</span>
<span style="color: #00A000">+        mime_type = grammar_type_to_mime(grammar ? grammar->type : GRAMMAR_TYPE_URI, schannel->profile);</span>
        if (zstr(mime_type)) {
                status = SWITCH_STATUS_FALSE;
                goto done;
<span style="color: #800080; font-weight: bold">@@ -2130,7 +2175,7 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel, const cha</span>
        mrcp_generic_header_property_add(mrcp_message, GENERIC_HEADER_CONTENT_TYPE);
        /* set Content-ID for inline grammars */
<span style="color: #A00000">-        if (grammar->type != GRAMMAR_TYPE_URI) {</span>
<span style="color: #00A000">+        if (grammar && grammar->type != GRAMMAR_TYPE_URI) {</span>
                apt_string_assign(&generic_header->content_id, grammar->name, mrcp_message->pool);
                mrcp_generic_header_property_add(mrcp_message, GENERIC_HEADER_CONTENT_ID);
        }
<span style="color: #800080; font-weight: bold">@@ -2152,7 +2197,7 @@ static switch_status_t recog_channel_start(speech_channel_t *schannel, const cha</span>
        recog_channel_set_params(schannel, mrcp_message, generic_header, recog_header);
        /* set message body */
<span style="color: #A00000">-        apt_string_assign(&mrcp_message->body, grammar->data, mrcp_message->pool);</span>
<span style="color: #00A000">+        apt_string_assign(&mrcp_message->body, grammar ? grammar->data : grammar_uri_list, mrcp_message->pool);</span>
        /* Empty audio queue and send RECOGNIZE to MRCP server */
        audio_queue_clear(schannel->audio_queue);
<span style="color: #800080; font-weight: bold">@@ -2287,6 +2332,7 @@ static switch_status_t recog_channel_unload_grammar(speech_channel_t *schannel,</span>
        } else {
                recognizer_data_t *r = (recognizer_data_t *) schannel->data;
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) Unloading grammar %s\n", schannel->name, grammar_name);
<span style="color: #00A000">+                switch_core_hash_delete(r->enabled_grammars, grammar_name);</span>
                switch_core_hash_delete(r->grammars, grammar_name);
        }
<span style="color: #800080; font-weight: bold">@@ -2294,6 +2340,77 @@ static switch_status_t recog_channel_unload_grammar(speech_channel_t *schannel,</span>
}
/**
<span style="color: #00A000">+ * Enable speech recognition grammar</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * @param schannel the recognizer channel</span>
<span style="color: #00A000">+ * @param grammar_name the name of the grammar to enable</span>
<span style="color: #00A000">+ * @return SWITCH_STATUS_SUCCESS if successful</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_channel_enable_grammar(speech_channel_t *schannel, const char *grammar_name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (zstr(grammar_name)) {</span>
<span style="color: #00A000">+                status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+        } else {</span>
<span style="color: #00A000">+                recognizer_data_t *r = (recognizer_data_t *) schannel->data;</span>
<span style="color: #00A000">+                grammar_t *grammar;</span>
<span style="color: #00A000">+                grammar = (grammar_t *) switch_core_hash_find(r->grammars, grammar_name);</span>
<span style="color: #00A000">+                if (grammar == NULL)</span>
<span style="color: #00A000">+                {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Undefined grammar, %s\n", schannel->name, grammar_name);</span>
<span style="color: #00A000">+                        status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                else {</span>
<span style="color: #00A000">+                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) Enabling grammar %s\n", schannel->name, grammar_name);</span>
<span style="color: #00A000">+                        switch_core_hash_insert(r->enabled_grammars, grammar_name, grammar);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
<span style="color: #00A000">+ * Disable speech recognition grammar</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * @param schannel the recognizer channel</span>
<span style="color: #00A000">+ * @param grammar_name the name of the grammar to disable</span>
<span style="color: #00A000">+ * @return SWITCH_STATUS_SUCCESS if successful</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_channel_disable_grammar(speech_channel_t *schannel, const char *grammar_name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (zstr(grammar_name)) {</span>
<span style="color: #00A000">+                status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+        } else {</span>
<span style="color: #00A000">+                recognizer_data_t *r = (recognizer_data_t *) schannel->data;</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) Disabling grammar %s\n", schannel->name, grammar_name);</span>
<span style="color: #00A000">+                switch_core_hash_delete(r->enabled_grammars, grammar_name);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
<span style="color: #00A000">+ * Disable all speech recognition grammars</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * @param schannel the recognizer channel</span>
<span style="color: #00A000">+ * @return SWITCH_STATUS_SUCCESS if successful</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_channel_disable_all_grammars(speech_channel_t *schannel)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        recognizer_data_t *r = (recognizer_data_t *) schannel->data;</span>
<span style="color: #00A000">+        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) Disabling all grammars\n", schannel->name);</span>
<span style="color: #00A000">+        switch_core_hash_destroy(&r->enabled_grammars);</span>
<span style="color: #00A000">+        switch_core_hash_init(&r->enabled_grammars, schannel->memory_pool);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
* Check if recognition is complete
*
* @return SWITCH_STATUS_SUCCESS if results available or start of input
<span style="color: #800080; font-weight: bold">@@ -2740,6 +2857,7 @@ static switch_status_t recog_asr_open(switch_asr_handle_t *ah, const char *codec</span>
        schannel->data = r;
        memset(r, 0, sizeof(recognizer_data_t));
        switch_core_hash_init(&r->grammars, ah->memory_pool);
<span style="color: #00A000">+        switch_core_hash_init(&r->enabled_grammars, ah->memory_pool);</span>
        /* Open the channel */
        if (zstr(profile_name)) {
<span style="color: #800080; font-weight: bold">@@ -2892,7 +3010,17 @@ static switch_status_t recog_asr_load_grammar(switch_asr_handle_t *ah, const cha</span>
        start_recognize = (char *) switch_core_hash_find(schannel->params, "start-recognize");
        if (zstr(start_recognize) || strcasecmp(start_recognize, "false"))
<span style="color: #A00000">-                status = recog_channel_start(schannel, name);</span>
<span style="color: #00A000">+        {</span>
<span style="color: #00A000">+                if (recog_channel_disable_all_grammars(schannel) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+                        goto done;</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                if (recog_channel_enable_grammar(schannel, name) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                        status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+                        goto done;</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+                status = recog_channel_start(schannel);</span>
<span style="color: #00A000">+        }</span>
done:
<span style="color: #800080; font-weight: bold">@@ -2921,6 +3049,57 @@ static switch_status_t recog_asr_unload_grammar(switch_asr_handle_t *ah, const c</span>
}
/**
<span style="color: #00A000">+ * Process asr_enable_grammar request from FreeSWITCH.</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * FreeSWITCH sends this request to enable recognition on this grammar.</span>
<span style="color: #00A000">+ * @param ah the FreeSWITCH speech recognition handle</span>
<span style="color: #00A000">+ * @param name the grammar name.</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_asr_enable_grammar(switch_asr_handle_t *ah, const char *name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;</span>
<span style="color: #00A000">+        if (zstr(name) || speech_channel_stop(schannel) != SWITCH_STATUS_SUCCESS || recog_channel_enable_grammar(schannel, name) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
<span style="color: #00A000">+ * Process asr_disable_grammar request from FreeSWITCH.</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * FreeSWITCH sends this request to disable recognition on this grammar.</span>
<span style="color: #00A000">+ * @param ah the FreeSWITCH speech recognition handle</span>
<span style="color: #00A000">+ * @param name the grammar name.</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_asr_disable_grammar(switch_asr_handle_t *ah, const char *name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;</span>
<span style="color: #00A000">+        if (zstr(name) || speech_channel_stop(schannel) != SWITCH_STATUS_SUCCESS || recog_channel_disable_grammar(schannel, name) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
<span style="color: #00A000">+ * Process asr_disable_all_grammars request from FreeSWITCH.</span>
<span style="color: #00A000">+ *</span>
<span style="color: #00A000">+ * FreeSWITCH sends this request to disable recognition of all grammars.</span>
<span style="color: #00A000">+ * @param ah the FreeSWITCH speech recognition handle</span>
<span style="color: #00A000">+ * @param name the grammar name.</span>
<span style="color: #00A000">+ */</span>
<span style="color: #00A000">+static switch_status_t recog_asr_disable_all_grammars(switch_asr_handle_t *ah)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;</span>
<span style="color: #00A000">+        if (speech_channel_stop(schannel) != SWITCH_STATUS_SUCCESS || recog_channel_disable_all_grammars(schannel) != SWITCH_STATUS_SUCCESS) {</span>
<span style="color: #00A000">+                status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/**</span>
* Process asr_close request from FreeSWITCH
*
* @param ah the FreeSWITCH speech recognition handle
<span style="color: #800080; font-weight: bold">@@ -2934,6 +3113,7 @@ static switch_status_t recog_asr_close(switch_asr_handle_t *ah, switch_asr_flag_</span>
        speech_channel_stop(schannel);
        speech_channel_destroy(schannel);
        switch_core_hash_destroy(&r->grammars);
<span style="color: #00A000">+        switch_core_hash_destroy(&r->enabled_grammars);</span>
        /* this lets FreeSWITCH's speech_thread know the handle is closed */
        switch_set_flag(ah, SWITCH_ASR_FLAG_CLOSED);
<span style="color: #800080; font-weight: bold">@@ -2958,14 +3138,13 @@ static switch_status_t recog_asr_feed(switch_asr_handle_t *ah, void *data, unsig</span>
/**
* Process asr_start request from FreeSWITCH
* @param ah the FreeSWITCH speech recognition handle
<span style="color: #A00000">- * @param name name of the grammar to use</span>
* @return SWITCH_STATUS_SUCCESS if successful
*/
<span style="color: #A00000">-static switch_status_t recog_asr_start(switch_asr_handle_t *ah, const char *name)</span>
<span style="color: #00A000">+static switch_status_t recog_asr_start(switch_asr_handle_t *ah)</span>
{
        switch_status_t status;
        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;
<span style="color: #A00000">-        status = recog_channel_start(schannel, name);</span>
<span style="color: #00A000">+        status = recog_channel_start(schannel);</span>
        return status;
}
#endif
<span style="color: #800080; font-weight: bold">@@ -2978,7 +3157,7 @@ static switch_status_t recog_asr_start(switch_asr_handle_t *ah, const char *name</span>
static switch_status_t recog_asr_resume(switch_asr_handle_t *ah)
{
        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;
<span style="color: #A00000">-        return recog_channel_start(schannel, NULL);</span>
<span style="color: #00A000">+        return recog_channel_start(schannel);</span>
}
/**
<span style="color: #800080; font-weight: bold">@@ -3237,6 +3416,9 @@ static switch_status_t recog_load(switch_loadable_module_interface_t *module_int</span>
        asr_interface->asr_open = recog_asr_open;
        asr_interface->asr_load_grammar = recog_asr_load_grammar;
        asr_interface->asr_unload_grammar = recog_asr_unload_grammar;
<span style="color: #00A000">+        asr_interface->asr_enable_grammar = recog_asr_enable_grammar;</span>
<span style="color: #00A000">+        asr_interface->asr_disable_grammar = recog_asr_disable_grammar;</span>
<span style="color: #00A000">+        asr_interface->asr_disable_all_grammars = recog_asr_disable_all_grammars;</span>
        asr_interface->asr_close = recog_asr_close;
        asr_interface->asr_feed = recog_asr_feed;
#if 0
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
switch_core_asr interfaces for enable_grammar, disable_grammar, and disable_all_grammars
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_core.h b/src/include/switch_core.h</span>
<span style="color: #000080; font-weight: bold">index 650ffc1..26a048c 100644</span>
<span style="color: #A00000">--- a/src/include/switch_core.h</span>
<span style="color: #00A000">+++ b/src/include/switch_core.h</span>
<span style="color: #800080; font-weight: bold">@@ -24,6 +24,7 @@</span>
* Contributor(s):
*
* Anthony Minessale II <anthm@freeswitch.org>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
*
* switch_core.h -- Core Library
<span style="color: #800080; font-weight: bold">@@ -1748,6 +1749,29 @@ SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t</span>
SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *name);
/*!
<span style="color: #00A000">+ \brief Enable a grammar from an asr handle</span>
<span style="color: #00A000">+ \param ah the handle to enable the grammar from</span>
<span style="color: #00A000">+ \param name the name of the grammar to enable</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_enable_grammar(switch_asr_handle_t *ah, const char *name);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
<span style="color: #00A000">+ \brief Disable a grammar from an asr handle</span>
<span style="color: #00A000">+ \param ah the handle to disable the grammar from</span>
<span style="color: #00A000">+ \param name the name of the grammar to disable</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_disable_grammar(switch_asr_handle_t *ah, const char *name);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
<span style="color: #00A000">+ \brief Disable all grammars from an asr handle</span>
<span style="color: #00A000">+ \param ah the handle to disable the grammars from</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_disable_all_grammars(switch_asr_handle_t *ah);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
\brief Pause detection on an asr handle
\param ah the handle to pause
\return SWITCH_STATUS_SUCCESS
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h</span>
<span style="color: #000080; font-weight: bold">index 078b83d..e0119b4 100644</span>
<span style="color: #A00000">--- a/src/include/switch_module_interfaces.h</span>
<span style="color: #00A000">+++ b/src/include/switch_module_interfaces.h</span>
<span style="color: #800080; font-weight: bold">@@ -24,6 +24,7 @@</span>
* Contributor(s):
*
* Anthony Minessale II <anthm@freeswitch.org>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
*
* switch_module_interfaces.h -- Module Interface Definitions
<span style="color: #800080; font-weight: bold">@@ -393,6 +394,12 @@ struct switch_asr_interface {</span>
        switch_mutex_t *reflock;
        switch_loadable_module_interface_t *parent;
        struct switch_asr_interface *next;
<span style="color: #00A000">+        /*! function to enable a grammar to the asr interface */</span>
<span style="color: #00A000">+        switch_status_t (*asr_enable_grammar) (switch_asr_handle_t *ah, const char *name);</span>
<span style="color: #00A000">+        /*! function to disable a grammar to the asr interface */</span>
<span style="color: #00A000">+        switch_status_t (*asr_disable_grammar) (switch_asr_handle_t *ah, const char *name);</span>
<span style="color: #00A000">+        /*! function to disable all grammars to the asr interface */</span>
<span style="color: #00A000">+        switch_status_t (*asr_disable_all_grammars) (switch_asr_handle_t *ah);</span>
};
/*! an abstract representation of an asr speech interface. */
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_core_asr.c b/src/switch_core_asr.c</span>
<span style="color: #000080; font-weight: bold">index fa4446e..691011a 100644</span>
<span style="color: #A00000">--- a/src/switch_core_asr.c</span>
<span style="color: #00A000">+++ b/src/switch_core_asr.c</span>
<span style="color: #800080; font-weight: bold">@@ -27,6 +27,7 @@</span>
* Michael Jerris <mike@jerris.com>
* Paul D. Tinsley <pdt at jackhammer.org>
* Christopher M. Rienzo <chris@rienzo.net>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
*
* switch_core_asr.c -- Main Core Library (Speech Detection Interface)
<span style="color: #800080; font-weight: bold">@@ -160,6 +161,45 @@ SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle</span>
        return status;
}
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_enable_grammar(switch_asr_handle_t *ah, const char *name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        switch_assert(ah != NULL);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (ah->asr_interface->asr_enable_grammar) {</span>
<span style="color: #00A000">+                status = ah->asr_interface->asr_enable_grammar(ah, name);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_disable_grammar(switch_asr_handle_t *ah, const char *name)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        switch_assert(ah != NULL);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (ah->asr_interface->asr_disable_grammar) {</span>
<span style="color: #00A000">+                status = ah->asr_interface->asr_disable_grammar(ah, name);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_core_asr_disable_all_grammars(switch_asr_handle_t *ah)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_status_t status = SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        switch_assert(ah != NULL);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (ah->asr_interface->asr_disable_all_grammars) {</span>
<span style="color: #00A000">+                status = ah->asr_interface->asr_disable_all_grammars(ah);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return status;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
SWITCH_DECLARE(switch_status_t) switch_core_asr_pause(switch_asr_handle_t *ah)
{
        switch_assert(ah != NULL);
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
Allow loading grammars without sending RECOGNIZE with start-recognize=false parameter
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #000080; font-weight: bold">index 41c0ccd..a27ddf0 100644</span>
<span style="color: #A00000">--- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #00A000">+++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c</span>
<span style="color: #800080; font-weight: bold">@@ -26,6 +26,7 @@</span>
*
* Brian West <brian@freeswitch.org>
* Christopher M. Rienzo <chris@rienzo.net>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* mod_unimrcp.c -- UniMRCP module (MRCP client)
*
<span style="color: #800080; font-weight: bold">@@ -2451,6 +2452,8 @@ static switch_status_t recog_channel_set_params(speech_channel_t *schannel, mrcp</span>
                        if (id) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) \"%s\": \"%s\"\n", schannel->name, param_name, param_val);
                                recog_channel_set_header(schannel, id->id, param_val, msg, recog_hdr);
<span style="color: #00A000">+                        } else if (!strcasecmp(param_name, "start-recognize")) {</span>
<span style="color: #00A000">+                                // This parameter is used internally only, not in MRCP headers</span>
                        } else {
                                /* this is probably a vendor-specific MRCP param */
                                apt_str_t apt_param_name = { 0 };
<span style="color: #800080; font-weight: bold">@@ -2782,6 +2785,7 @@ static switch_status_t recog_asr_load_grammar(switch_asr_handle_t *ah, const cha</span>
        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;
        const char *grammar_data = NULL;
        char *grammar_file_data = NULL;
<span style="color: #00A000">+        char *start_recognize;</span>
        switch_file_t *grammar_file = NULL;
        switch_size_t grammar_file_size = 0, to_read = 0;
        grammar_type_t type = GRAMMAR_TYPE_UNKNOWN;
<span style="color: #800080; font-weight: bold">@@ -2886,7 +2890,9 @@ static switch_status_t recog_asr_load_grammar(switch_asr_handle_t *ah, const cha</span>
                goto done;
        }
<span style="color: #A00000">-        status = recog_channel_start(schannel, name);</span>
<span style="color: #00A000">+        start_recognize = (char *) switch_core_hash_find(schannel->params, "start-recognize");</span>
<span style="color: #00A000">+        if (zstr(start_recognize) || strcasecmp(start_recognize, "false"))</span>
<span style="color: #00A000">+                status = recog_channel_start(schannel, name);</span>
done:
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
document all of detect_speech's valid syntax
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #000080; font-weight: bold">index 5a1b8c5..6d014fa 100755</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #800080; font-weight: bold">@@ -28,6 +28,7 @@</span>
* Michael Murdock <mike at mmurdock dot org>
* Neal Horman <neal at wanlink dot com>
* Bret McDanel <trixter AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* mod_dptools.c -- Raw Audio File Streaming Application Module
*
<span style="color: #800080; font-weight: bold">@@ -95,7 +96,7 @@ SWITCH_STANDARD_DIALPLAN(inline_dialplan_hunt)</span>
        return extension;
}
<span style="color: #A00000">-#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume"</span>
<span style="color: #00A000">+#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR pause OR resume OR stop OR param <name> <value>"</span>
SWITCH_STANDARD_APP(detect_speech_function)
{
        char *argv[4];
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
expose ASR start_input_timers to dialplan via mod_dptools
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #000080; font-weight: bold">index 5a1b8c5..2f49630 100755</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_dptools/mod_dptools.c</span>
<span style="color: #800080; font-weight: bold">@@ -28,6 +28,7 @@</span>
* Michael Murdock <mike at mmurdock dot org>
* Neal Horman <neal at wanlink dot com>
* Bret McDanel <trixter AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* mod_dptools.c -- Raw Audio File Streaming Application Module
*
<span style="color: #800080; font-weight: bold">@@ -95,7 +96,7 @@ SWITCH_STANDARD_DIALPLAN(inline_dialplan_hunt)</span>
        return extension;
}
<span style="color: #A00000">-#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume"</span>
<span style="color: #00A000">+#define DETECT_SPEECH_SYNTAX "<mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR pause OR resume OR start_input_timers"</span>
SWITCH_STANDARD_APP(detect_speech_function)
{
        char *argv[4];
<span style="color: #800080; font-weight: bold">@@ -116,6 +117,8 @@ SWITCH_STANDARD_APP(detect_speech_function)</span>
                        switch_ivr_stop_detect_speech(session);
                } else if (!strcasecmp(argv[0], "param")) {
                        switch_ivr_set_param_detect_speech(session, argv[1], argv[2]);
<span style="color: #00A000">+                } else if (!strcasecmp(argv[0], "start_input_timers")) {</span>
<span style="color: #00A000">+                        switch_ivr_detect_speech_start_input_timers(session);</span>
                } else if (argc >= 3) {
                        switch_ivr_detect_speech(session, argv[0], argv[1], argv[2], argv[3], NULL);
                }
</pre></div>
<div class="highlight"><pre>committer: Luke Dashjr
comments:
expose ASR start_input_timers on the IVR abstraction level
<span style="color: #000080; font-weight: bold">diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h</span>
<span style="color: #000080; font-weight: bold">index 40ba1dc..692ad8d 100644</span>
<span style="color: #A00000">--- a/src/include/switch_ivr.h</span>
<span style="color: #00A000">+++ b/src/include/switch_ivr.h</span>
<span style="color: #800080; font-weight: bold">@@ -26,6 +26,7 @@</span>
* Anthony Minessale II <anthm@freeswitch.org>
* Neal Horman <neal at wanlink dot com>
* Bret McDanel <trixter AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* switch_ivr.h -- IVR Library
*
<span style="color: #800080; font-weight: bold">@@ -201,6 +202,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_c</span>
SWITCH_DECLARE(switch_status_t) switch_ivr_set_param_detect_speech(switch_core_session_t *session, const char *name, const char *val);
/*!
<span style="color: #00A000">+ \brief Start input timers on a background speech detection handle</span>
<span style="color: #00A000">+ \param session The session to start the timers on</span>
<span style="color: #00A000">+ \return SWITCH_STATUS_SUCCESS if all is well</span>
<span style="color: #00A000">+*/</span>
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_start_input_timers(switch_core_session_t *session);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*!</span>
\brief Record a session to disk
\param session the session to record
\param file the path to the file
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c</span>
<span style="color: #000080; font-weight: bold">index 4fe5732..ae23d0a 100644</span>
<span style="color: #A00000">--- a/src/switch_ivr_async.c</span>
<span style="color: #00A000">+++ b/src/switch_ivr_async.c</span>
<span style="color: #800080; font-weight: bold">@@ -26,6 +26,7 @@</span>
* Anthony Minessale II <anthm@freeswitch.org>
* Michael Jerris <mike@jerris.com>
* Bret McDanel <bret AT 0xdecafbad dot com>
<span style="color: #00A000">+ * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)</span>
*
* switch_ivr_async.c -- IVR Library (async operations)
*
<span style="color: #800080; font-weight: bold">@@ -2728,6 +2729,18 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_param_detect_speech(switch_core_s</span>
        return status;
}
<span style="color: #00A000">+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_start_input_timers(switch_core_session_t *session)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        switch_channel_t *channel = switch_core_session_get_channel(session);</span>
<span style="color: #00A000">+        struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (sth) {</span>
<span style="color: #00A000">+                switch_core_asr_start_input_timers(sth->ah);</span>
<span style="color: #00A000">+                return SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+        return SWITCH_STATUS_FALSE;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *name)
{
        switch_channel_t *channel = switch_core_session_get_channel(session);
</pre></div>
========================================================================<pre>
Summary of changes:
libs/freetdm/msvc/testboost/testboost.2010.vcxproj | 6 +-
.../msvc/testboost/testsangomaboost.2010.vcxproj | 6 +-
.../ftmod_sangoma_boost.2010.vcxproj | 12 +-
.../ftmod/ftmod_wanpipe/ftmod_wanpipe.2010.vcxproj | 8 +-
src/include/switch_core.h | 33 ++
src/include/switch_ivr.h | 31 ++
src/include/switch_module_interfaces.h | 9 +
src/mod/applications/mod_dptools/mod_dptools.c | 11 +-
src/mod/applications/mod_spy/mod_spy.c | 6 +-
src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c | 313 ++++++++++++++++++--
src/mod/event_handlers/mod_snmp/FREESWITCH-MIB | 175 ++++++++++--
src/mod/event_handlers/mod_snmp/subagent.c | 105 ++++++-
src/mod/event_handlers/mod_snmp/subagent.h | 51 +++-
.../languages/mod_managed/freeswitch_wrap.2010.cxx | 196 ++++++++++++
src/mod/languages/mod_managed/freeswitch_wrap.cxx | 200 +++++++++++++
src/mod/languages/mod_managed/managed/swig.2010.cs | 168 +++++++++++-
src/mod/languages/mod_managed/managed/swig.cs | 162 ++++++++++
src/mod/xml_int/mod_xml_curl/mod_xml_curl.c | 4 +-
src/switch_core_asr.c | 53 ++++
src/switch_ivr_async.c | 83 +++++
src/switch_xml.c | 8 +-
21 files changed, 1541 insertions(+), 99 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>