]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3229 --resolve
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 4 Apr 2011 23:50:46 +0000 (18:50 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 4 Apr 2011 23:50:46 +0000 (18:50 -0500)
src/include/switch_types.h
src/mod/applications/mod_dptools/mod_dptools.c
src/switch_ivr_async.c

index 2ab4a18b85cbcb387e6cb20abc3deea234830c99..988d2da64124d6f894259d78657ca6f2a98f672f 100644 (file)
@@ -136,6 +136,7 @@ SWITCH_BEGIN_EXTERN_C
 #define SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE "execute_on_media"
 #define SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE "api_on_answer"
 #define SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE "execute_on_ring"
+#define SWITCH_CHANNEL_EXECUTE_ON_TONE_DETECT_VARIABLE "execute_on_tone_detect"
 #define SWITCH_CALL_TIMEOUT_VARIABLE "call_timeout"
 #define SWITCH_HOLDING_UUID_VARIABLE "holding_uuid"
 #define SWITCH_SOFT_HOLDING_UUID_VARIABLE "soft_holding_uuid"
index c51c5422a570f807e5e1bdade49043741e9cb3ce..5d51ffdb60b36382e2e8cc9a677c4f63bdf9def2 100755 (executable)
@@ -1552,7 +1552,8 @@ SWITCH_STANDARD_APP(tone_detect_session_function)
        int argc;
        char *mydata = NULL;
        time_t to = 0;
-       int hits = 1;
+       int hits = 0;
+       const char *hp = NULL;
 
        if (zstr(data) || !(mydata = switch_core_session_strdup(session, data))) {
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "INVALID ARGS!\n");
@@ -1582,10 +1583,16 @@ SWITCH_STANDARD_APP(tone_detect_session_function)
                }
        }
 
-       if (argv[6]) {
-               hits = atoi(argv[6]);
+       if (argv[4] && argv[5]) {
+               hp = argv[6];
+       } else if (argv[4] && !argv[6]) {
+               hp = argv[4];
+       }
+
+       if (hp) {
+               hits = atoi(hp);
                if (hits < 0) {
-                       hits = 1;
+                       hits = 0;
                }
        }
 
index 3afbfb639742a06a576ea7afde2759e6fedee339..9fb2eea95c3961a7da68c1dbacce21ca5308ab52 100644 (file)
@@ -2392,7 +2392,6 @@ static switch_status_t tone_on_dtmf(switch_core_session_t *session, const switch
 {
        switch_channel_t *channel = switch_core_session_get_channel(session);
        switch_tone_container_t *cont = switch_channel_get_private(channel, "_tone_detect_");
-       switch_event_t *event;
        int i;
 
        if (!cont || !cont->detect_fax || dtmf->digit != 'f') {
@@ -2403,13 +2402,10 @@ static switch_status_t tone_on_dtmf(switch_core_session_t *session, const switch
 
        if (cont->list[i].callback) {
                cont->list[i].callback(cont->session, cont->list[i].app, cont->list[i].data);
-       } else if (cont->list[i].app) {
-               if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", cont->list[i].app);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", cont->list[i].data);
-                       switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lead-frames", "%d", 5);
-                       switch_core_session_queue_private_event(cont->session, &event, SWITCH_FALSE);
+       } else {
+               switch_channel_execute_on(switch_core_session_get_channel(cont->session), SWITCH_CHANNEL_EXECUTE_ON_TONE_DETECT_VARIABLE);
+               if (cont->list[i].app) {
+                       switch_core_session_execute_application_async(cont->session, cont->list[i].app, cont->list[i].data);
                }
        }
                
@@ -2491,13 +2487,10 @@ static switch_bool_t tone_detect_callback(switch_media_bug_t *bug, void *user_da
                                                                cont->list[i].sleep = 0;
                                                                cont->list[i].expires = 0;
                                                        }
-                                               } else if (cont->list[i].app) {
-                                                       if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", cont->list[i].app);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", cont->list[i].data);
-                                                               switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lead-frames", "%d", 5);
-                                                               switch_core_session_queue_private_event(cont->session, &event, SWITCH_FALSE);
+                                               } else {
+                                                       switch_channel_execute_on(switch_core_session_get_channel(cont->session), SWITCH_CHANNEL_EXECUTE_ON_TONE_DETECT_VARIABLE);
+                                                       if (cont->list[i].app) {
+                                                               switch_core_session_execute_application_async(cont->session, cont->list[i].app, cont->list[i].data);
                                                        }
                                                }
 
@@ -2605,6 +2598,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_tone_detect_session(switch_core_sessi
                return SWITCH_STATUS_MEMERR;
        }
 
+       if ((var = switch_channel_get_variable(channel, "tone_detect_hits"))) {
+               int tmp = atoi(var);
+               if (tmp > 0) {
+                       hits = tmp;
+               }
+       }
+
+       if (!hits) hits = 1;
+
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Adding tone spec %s index %d hits %d\n", tone_spec, cont->index, hits);
 
        i = 0;