From 6e8508f2a078963594129a83b15b4f919c496d61 Mon Sep 17 00:00:00 2001 From: Andy Newlands Date: Tue, 8 Nov 2016 12:49:06 +0000 Subject: [PATCH] FS-9319 [mod_dptools] Support "both" in clear_digit_action Add support for "both" as target parameter to clear_digit_action. CDA previously only supported target values of: "", "self" or "peer" CDA Behaviour now corresponds with documentation. For example, the follow will work as expected: FS-9319 #resolve --- src/mod/applications/mod_dptools/mod_dptools.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index 28b1de428f..43ec372a85 100644 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -286,7 +286,7 @@ SWITCH_STANDARD_APP(clear_digit_action_function) switch_ivr_dmachine_t *dmachine; char *realm = NULL; char *target_str; - switch_digit_action_target_t target = DIGIT_TARGET_SELF; + switch_digit_action_target_t t, target = DIGIT_TARGET_SELF; if (zstr((char *)data)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "clear_digit_action called with no args"); @@ -300,16 +300,27 @@ SWITCH_STANDARD_APP(clear_digit_action_function) target = str2target(target_str); } +clear_next: + if (target == DIGIT_TARGET_BOTH) { + t = DIGIT_TARGET_PEER; + } else { + t = target; + } - if ((dmachine = switch_core_session_get_dmachine(session, target))) { + if ((dmachine = switch_core_session_get_dmachine(session, t))) { if (zstr(realm) || !strcasecmp(realm, "all")) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: Clearing all realms\n", switch_ivr_dmachine_get_name(dmachine)); - switch_core_session_set_dmachine(session, NULL, target); + switch_core_session_set_dmachine(session, NULL, t); switch_ivr_dmachine_destroy(&dmachine); } else { switch_ivr_dmachine_clear_realm(dmachine, realm); } } + + if (target == DIGIT_TARGET_BOTH) { + target = DIGIT_TARGET_SELF; + goto clear_next; + } } #define DIGIT_ACTION_SET_REALM_USAGE "[,]"