SBF_EXEC_BLEG = (1 << 3),
SBF_EXEC_OPPOSITE = (1 << 4),
SBF_EXEC_SAME = (1 << 5),
- SBF_ONCE = (1 << 6)
+ SBF_ONCE = (1 << 6),
+ SBF_EXEC_INLINE = (1 << 7)
} switch_bind_flag_enum_t;
typedef uint32_t switch_bind_flag_t;
SMF_FORCE = (1 << 3),
SMF_LOOP = (1 << 4),
SMF_HOLD_BLEG = (1 << 5),
- SMF_IMMEDIATE = (1 << 6)
+ SMF_IMMEDIATE = (1 << 6),
+ SMF_EXEC_INLINE = (1 << 7)
} switch_media_flag_enum_t;
typedef uint32_t switch_media_flag_t;
}
-#define BIND_SYNTAX "<key> [a|b|ab] [a|b|o|s|1] <app>"
+#define BIND_SYNTAX "<key> [a|b|ab] [a|b|o|s|i|1] <app>"
SWITCH_STANDARD_APP(dtmf_bind_function)
{
char *argv[4] = { 0 };
}
}
+ if (strchr(argv[2], 'i')) {
+ bind_flags |= SBF_EXEC_INLINE;
+ }
+
if (strchr(argv[2], 'o')) {
if ((bind_flags & SBF_EXEC_BLEG) || (bind_flags & SBF_EXEC_ALEG) || (bind_flags & SBF_EXEC_SAME)) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Cannot bind execute to multiple legs\n");
} else {
flags |= SMF_ECHO_ALEG;
}
+ } else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_INLINE)) {
+ flags |= SMF_EXEC_INLINE;
} else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_ALEG)) {
flags |= SMF_ECHO_ALEG;
} else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_BLEG)) {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hold-bleg", "true");
}
- switch_core_session_queue_private_event(other_session, &event);
+ if ((flags & SMF_EXEC_INLINE)) {
+ switch_core_session_execute_application(other_session, app, path);
+ } else {
+ switch_core_session_queue_private_event(other_session, &event);
+ }
}
switch_core_session_rwunlock(other_session);