endpoint_interface = get_current_endpoint_interface_of_this_session;
driver_state_handler = get_current_state_handler_of_this_endpoint_interface;
LOCK_SESSION;
WHILE (state = swtich_channel_get_state(session->channel) != CS_DOWN) THEN; // 循环检查当前channel的状态
midstate = state;
IF (state != running_state) THEN;
set_running_state(state)
SWITCH (state) THEN;
case CS_NEW: // Just created, waiting for first instructions
case CS_DOWN:
case CS_HANGUP: // Deactivate and end the thread
case CS_INIT: STATE_MACRO("INIT");
case CS_ROUTING: STATE_MACRO("ROUTING");
case CS_RESET: STATE_MACRO("RESET");
case CS_EXECUTE: STATE_MACRO("EXECUTE");
case CS_EXCHANGE_MEDIA: STATE_MACRO("EXCHANGE_MEDIA");
case CS_SOFT_EXECUTE: STATE_MACRO("SOFT_EXECUTE");
case CS_PARK: STATE_MACRO("PARK");
case CS_CONSUME_MEDIA: STATE_MACRO("CONSUME_MEDIA");
case CS_HIBERNATE: STATE_MACRO("HIBERNATE");
case CS_DOWN: abort();
END_SWITCH;
endstate = running_state
IF (endstate == switch_channel_get_running_state(session->channel)) THEN;
wait_for_state_changed_condition等待下一个状态变化的条件通知
END_IF;
END_IF;
END_WHILE;
UNLOCK_SESSION;
session->thread_running = 0;
driver_state_handler = get_current_state_handler_of_this_endpoint_interface;
LOCK_SESSION;
WHILE (state = swtich_channel_get_state(session->channel) != CS_DOWN) THEN; // 循环检查当前channel的状态
midstate = state;
IF (state != running_state) THEN;
set_running_state(state)
SWITCH (state) THEN;
case CS_NEW: // Just created, waiting for first instructions
case CS_DOWN:
case CS_HANGUP: // Deactivate and end the thread
case CS_INIT: STATE_MACRO("INIT");
case CS_ROUTING: STATE_MACRO("ROUTING");
case CS_RESET: STATE_MACRO("RESET");
case CS_EXECUTE: STATE_MACRO("EXECUTE");
case CS_EXCHANGE_MEDIA: STATE_MACRO("EXCHANGE_MEDIA");
case CS_SOFT_EXECUTE: STATE_MACRO("SOFT_EXECUTE");
case CS_PARK: STATE_MACRO("PARK");
case CS_CONSUME_MEDIA: STATE_MACRO("CONSUME_MEDIA");
case CS_HIBERNATE: STATE_MACRO("HIBERNATE");
case CS_DOWN: abort();
END_SWITCH;
endstate = running_state
IF (endstate == switch_channel_get_running_state(session->channel)) THEN;
wait_for_state_changed_condition等待下一个状态变化的条件通知
END_IF;
END_IF;
END_WHILE;
UNLOCK_SESSION;
session->thread_running = 0;