diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 46070d45f7..9671c569a4 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -1604,11 +1604,12 @@ SWITCH_STANDARD_API(session_displace_function) return SWITCH_STATUS_SUCCESS; } -#define BREAK_SYNTAX "" +#define BREAK_SYNTAX " [all]" SWITCH_STANDARD_API(break_function) { switch_core_session_t *psession = NULL; - + char *mycmd, *flag; + if (session) { return SWITCH_STATUS_FALSE; } @@ -1618,11 +1619,22 @@ SWITCH_STANDARD_API(break_function) return SWITCH_STATUS_SUCCESS; } - if (!(psession = switch_core_session_locate(cmd))) { + mycmd = strdup(cmd); + switch_assert(mycmd); + + if ((flag = strchr(mycmd, ' '))) { + *flag++ = '\0'; + } + + if (!(psession = switch_core_session_locate(mycmd))) { stream->write_function(stream, "-ERR No Such Channel!\n"); return SWITCH_STATUS_SUCCESS; } + if (flag && !strcasecmp(flag, "all")) { + switch_core_session_flush_private_events(session); + } + switch_channel_set_flag(switch_core_session_get_channel(psession), CF_BREAK); switch_core_session_rwunlock(psession);