CF_NOMEDIA = (1 << 13) - Channel has no media
CF_SUSPEND = (1 << 14) - Suspend i/o
CF_EVENT_PARSE = (1 << 15) - Suspend control events
+CF_NO_INDICATE = (1 << 16) - Disable Indications
+CF_REPEAT_STATE = (1 << 17) - Tell the state machine to repeat a state
</pre>
*/
CF_NOMEDIA = (1 << 13),
CF_SUSPEND = (1 << 14),
CF_EVENT_PARSE = (1 << 15),
- CF_NO_INDICATE = (1 << 16)
+ CF_NO_INDICATE = (1 << 16),
+ CF_REPEAT_STATE = (1 << 17)
} switch_channel_flag_t;
const switch_endpoint_interface_t *endpoint_interface;
const switch_state_handler_table_t *driver_state_handler = NULL;
const switch_state_handler_table_t *application_state_handler = NULL;
+
#ifdef CRASH_PROT
switch_thread_id_t thread_id = switch_thread_self();
jmp_buf env;
switch_mutex_lock(session->mutex);
while ((state = switch_channel_get_state(session->channel)) != CS_DONE) {
- if (state != laststate) {
+ uint8_t exception = 0;
+ if (switch_channel_test_flag(session->channel, CF_REPEAT_STATE)) {
+ switch_channel_clear_flag(session->channel, CF_REPEAT_STATE);
+ exception = 1;
+ }
+ if (state != laststate || state == CS_HANGUP || exception) {
int index = 0;
int proceed = 1;
midstate = state;