]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
more dmachine improvements
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 15 Oct 2010 23:00:49 +0000 (18:00 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 15 Oct 2010 23:00:49 +0000 (18:00 -0500)
src/include/switch_ivr.h
src/include/switch_types.h
src/switch_ivr_async.c

index fb023848eca77b6ca187f1706b31aab1fc93793d..34c5db8e42bcbd0bdd712610c7990b3761f64de7 100644 (file)
@@ -845,6 +845,8 @@ SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_exists(const char *uuid);
 
 
 
+SWITCH_DECLARE(void) switch_ivr_dmachine_set_match_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t match_callback);
+SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t nonmatch_callback);
 SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p, 
                                                                                                                   const char *name,
                                                                                                                   switch_memory_pool_t *pool,
index cf27cb747ed792cf13257932327e3a9bccac9877..c3622e31959065cf5906462138f22e7181a8a0fd 100644 (file)
@@ -840,6 +840,7 @@ typedef enum {
        SWITCH_STATUS_IGNORE,
        SWITCH_STATUS_TOO_SMALL,
        SWITCH_STATUS_FOUND,
+       SWITCH_STATUS_CONTINUE,
        SWITCH_STATUS_NOT_INITALIZED
 } switch_status_t;
 
index dae7ee07e659e7ac3dd07f4216c31d2526ddbef6..467ea93e59caf2beaca88cfa114f4c297411bfbd 100644 (file)
@@ -72,6 +72,21 @@ struct switch_ivr_dmachine {
        void *user_data;
 };
 
+
+SWITCH_DECLARE(void) switch_ivr_dmachine_set_match_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t match_callback)
+{
+
+       dmachine->match_callback = match_callback;
+
+}
+
+SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t nonmatch_callback)
+{
+
+       dmachine->nonmatch_callback = nonmatch_callback;
+
+}
+
 SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p, 
                                                                                                                   const char *name,
                                                                                                                   switch_memory_pool_t *pool,
@@ -366,12 +381,16 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t *
                dmachine->match.type = DM_MATCH_POSITIVE;
                
                if (dmachine->last_matching_binding->callback) {
-                       dmachine->last_matching_binding->callback(&dmachine->match);
+                       if (dmachine->last_matching_binding->callback(&dmachine->match) == SWITCH_STATUS_CONTINUE) {
+                               r = SWITCH_STATUS_SUCCESS;
+                       }
                }
 
                if (dmachine->match_callback) {
                        dmachine->match.user_data = dmachine->user_data;
-                       dmachine->match_callback(&dmachine->match);
+                       if (dmachine->match_callback(&dmachine->match) == SWITCH_STATUS_CONTINUE) {
+                               r = SWITCH_STATUS_SUCCESS;
+                       }
                }
                clear++;
        } else if (is_timeout) {
@@ -390,7 +409,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t *
                
                if (dmachine->nonmatch_callback) {
                        dmachine->match.user_data = dmachine->user_data;
-                       dmachine->nonmatch_callback(&dmachine->match);
+                       if (dmachine->nonmatch_callback(&dmachine->match) == SWITCH_STATUS_CONTINUE) {
+                               r = SWITCH_STATUS_SUCCESS;
+                       }
                }
                
                clear++;