char *app_name = switch_event_get_header(event, "execute-app-name");
char *app_arg = switch_event_get_header(event, "execute-app-arg");
char *loop_h = switch_event_get_header(event, "loops");
+ char *hold_bleg = switch_event_get_header(event, "hold-bleg");
int loops = 1;
if (loop_h) {
if ((application_interface = switch_loadable_module_get_application_interface(app_name))) {
if (application_interface->application_function) {
int x;
+ const char *b_uuid = NULL;
+ switch_core_session_t *b_session = NULL;
+
switch_channel_clear_flag(channel, CF_STOP_BROADCAST);
switch_channel_set_flag(channel, CF_BROADCAST);
+ if (hold_bleg && switch_true(hold_bleg)) {
+ if ((b_uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) {
+ const char *stream;
+
+ if (!(stream = switch_channel_get_variable_partner(channel, SWITCH_HOLD_MUSIC_VARIABLE))) {
+ stream = switch_channel_get_variable(channel, SWITCH_HOLD_MUSIC_VARIABLE);
+ }
+ if (stream) {
+ switch_ivr_broadcast(b_uuid, hold_bleg, SMF_ECHO_ALEG | SMF_LOOP);
+ } else {
+ b_uuid = NULL;
+ }
+ }
+ }
for (x = 0; x < loops || loops < 0; x++) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Command Execute %s(%s)\n",
switch_channel_get_name(channel), app_name, app_arg);
break;
}
}
+ if (b_uuid) {
+ if ((b_session = switch_core_session_locate(b_uuid))) {
+ switch_channel_t *b_channel = switch_core_session_get_channel(b_session);
+ switch_channel_stop_broadcast(b_channel);
+ switch_channel_wait_for_flag(b_channel, CF_BROADCAST, SWITCH_FALSE, 5000);
+ switch_core_session_rwunlock(b_session);
+ }
+ }
switch_channel_clear_flag(channel, CF_BROADCAST);
}
}
if (!switch_strlen_zero(app)) {
md->map[key].app = switch_core_session_strdup(session, app);
md->map[key].flags = exec_b ? SMF_ECHO_BLEG : SMF_ECHO_ALEG;
+ md->map[key].flags |= SMF_HOLD_BLEG;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Bound: %d %s\n", key, app);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound: %d\n", key);
if ((flags & SMF_LOOP)) {
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "loops", "%d", -1);
}
+ if ((flags & SMF_HOLD_BLEG)) {
+ switch_event_add_header(event, SWITCH_STACK_BOTTOM, "hold-bleg", "%s", "true");
+ }
switch_core_session_queue_private_event(other_session, &event);
}