From 95bc5d2bef142efc7788d8dee3717905a261f1ce Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 20 Dec 2014 18:29:44 -0600 Subject: [PATCH] FS-7093 %FEATURE #resolve #comment added to master --- .../applications/mod_commands/mod_commands.c | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index eab0b242cd..64f087969f 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -2948,7 +2948,89 @@ SWITCH_STANDARD_API(uuid_chat) return SWITCH_STATUS_SUCCESS; } +#define UUID_DROP_DTMF_SYNTAX " [on | off ] [ mask_digits | mask_file ]" +SWITCH_STANDARD_API(uuid_drop_dtmf) +{ + switch_core_session_t *tsession = NULL; + char *uuid = NULL, *action = NULL, *mask_action = NULL, *mask_arg = NULL; + char *argv[5] = { 0 }; + char *dup; + int argc = 0; + if (zstr(cmd)) { + stream->write_function(stream, "-USAGE: %s\n", UUID_DROP_DTMF_SYNTAX); + return SWITCH_STATUS_SUCCESS; + } + + dup = strdup(cmd); + argc = switch_split(dup, ' ', argv); + + + if (argv[0]) { + uuid = argv[0]; + } + + if (argv[1]) { + action = argv[1]; + } + + if (argv[2]) { + mask_action = argv[2]; + } + + if (argv[3]) { + mask_arg = argv[3]; + } + + if (zstr(uuid)) { + stream->write_function(stream, "-USAGE: %s\n", UUID_DROP_DTMF_SYNTAX); + } else { + if ((tsession = switch_core_session_locate(uuid))) { + switch_channel_t *channel = switch_core_session_get_channel(tsession); + int is_on = 0; + const char *file, *digits; + + if (!zstr(mask_action) && !zstr(mask_arg)) { + if (!strcasecmp(mask_action, "mask_digits")) { + switch_channel_set_variable(channel, "drop_dtmf_masking_digits", mask_arg); + } else if (!strcasecmp(mask_action, "mask_file")) { + switch_channel_set_variable(channel, "drop_dtmf_masking_file", mask_arg); + } else { + stream->write_function(stream, "-USAGE: %s\n", UUID_DROP_DTMF_SYNTAX); + goto end; + } + } + + if (!zstr(action)) { + if (!strcasecmp(action, "on")) { + switch_channel_set_flag(channel, CF_DROP_DTMF); + switch_channel_set_variable(channel, "drop_dtmf", "true"); + } else { + switch_channel_clear_flag(channel, CF_DROP_DTMF); + switch_channel_set_variable(channel, "drop_dtmf", "false"); + } + } + + is_on = switch_channel_test_flag(channel, CF_DROP_DTMF); + file = switch_channel_get_variable_dup(channel, "drop_dtmf_masking_file", SWITCH_FALSE, -1); + digits = switch_channel_get_variable_dup(channel, "drop_dtmf_masking_digits", SWITCH_FALSE, -1); + + stream->write_function(stream, "+OK %s is %s DTMF. mask_file: %s mask_digits: %s\n", uuid, is_on ? "dropping" : "not dropping", + file ? file : "NONE", + digits ? digits : "NONE"); + + switch_core_session_rwunlock(tsession); + } else { + stream->write_function(stream, "-ERR No such channel %s!\n", uuid); + } + } + + end: + + switch_safe_free(dup); + return SWITCH_STATUS_SUCCESS; + +} #define UUID_DEFLECT_SYNTAX " " SWITCH_STANDARD_API(uuid_deflect) @@ -6700,6 +6782,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) SWITCH_ADD_API(commands_api_interface, "uuid_deflect", "Send a deflect", uuid_deflect, UUID_DEFLECT_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_displace", "Displace audio", session_displace_function, " [start|stop] [] [mux]"); SWITCH_ADD_API(commands_api_interface, "uuid_display", "Update phone display", uuid_display_function, DISPLAY_SYNTAX); + SWITCH_ADD_API(commands_api_interface, "uuid_drop_dtmf", "Drop all DTMF or replace it with a mask", uuid_drop_dtmf, UUID_DROP_DTMF_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_dump", "Dump session vars", uuid_dump_function, DUMP_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_exists", "Check if a uuid exists", uuid_exists_function, EXISTS_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_fileman", "Manage session audio", uuid_fileman_function, FILEMAN_SYNTAX); @@ -6872,6 +6955,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) switch_console_set_complete("add uuid_deflect ::console::list_uuid"); switch_console_set_complete("add uuid_displace ::console::list_uuid"); switch_console_set_complete("add uuid_display ::console::list_uuid"); + switch_console_set_complete("add uuid_drop_dtmf ::console::list_uuid"); switch_console_set_complete("add uuid_dump ::console::list_uuid"); switch_console_set_complete("add uuid_answer ::console::list_uuid"); switch_console_set_complete("add uuid_ring_ready ::console::list_uuid queued");