fix a bunch of stuff

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7854 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale
2008-03-11 03:45:16 +00:00
parent dc5c28e1f9
commit 74a3d8ab95
17 changed files with 139 additions and 65 deletions
+15 -4
View File
@@ -93,6 +93,7 @@ static void switch_core_standard_on_ring(switch_core_session_t *session)
if ((extension = dialplan_interface->hunt_function(session, dparg, NULL)) != 0) {
switch_channel_set_caller_extension(session->channel, extension);
switch_channel_set_state(session->channel, CS_EXECUTE);
goto end;
}
}
@@ -112,12 +113,14 @@ static void switch_core_standard_on_ring(switch_core_session_t *session)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Route, Aborting\n");
switch_channel_hangup(session->channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
}
end:
if (expanded && dpstr && expanded != dpstr) {
free(expanded);
}
}
static void switch_core_standard_on_execute(switch_core_session_t *session)
@@ -294,7 +297,7 @@ void switch_core_state_machine_init(switch_memory_pool_t *pool)
#define STATE_MACRO(__STATE, __STATE_STR) do { \
midstate = state; \
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) State %s\n", switch_channel_get_name(session->channel), __STATE_STR); \
if (!driver_state_handler->on_##__STATE || (driver_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
if (!driver_state_handler->on_##__STATE || ( driver_state_handler->on_##__STATE(session) == SWITCH_STATUS_SUCCESS \
&& midstate == switch_channel_get_state(session->channel))) { \
while (do_extra_handlers && (application_state_handler = switch_channel_get_state_handler(session->channel, index++)) != 0) { \
if (!application_state_handler || !application_state_handler->on_##__STATE \
@@ -325,6 +328,7 @@ void switch_core_state_machine_init(switch_memory_pool_t *pool)
switch_core_standard_on_##__STATE(session); \
} \
} \
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) State end %s %s %s\n", switch_channel_get_name(session->channel), __STATE_STR, switch_channel_state_name(midstate), switch_channel_state_name(switch_channel_get_state(session->channel))); \
} while (silly)
SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
@@ -430,9 +434,14 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
}
goto done;
case CS_INIT: /* Basic setup tasks */
switch_core_session_signal_lock(session);
STATE_MACRO(init, "INIT");
switch_core_session_signal_unlock(session);
assert(driver_state_handler->on_init);
//switch_core_session_signal_lock(session);
if (0) STATE_MACRO(init, "INIT");
//switch_core_session_signal_unlock(session);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) State INIT\n", switch_channel_get_name(session->channel));
driver_state_handler->on_init(session);
assert( switch_channel_get_state(session->channel) != CS_INIT);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) State INIT-END\n", switch_channel_get_name(session->channel));
break;
case CS_RING: /* Look for a dialplan and find something to do */
switch_core_session_signal_lock(session);
@@ -480,6 +489,8 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
if (endstate == CS_NEW) {
switch_yield(1000);
} else {
assert( switch_channel_get_state(session->channel) != CS_INIT);
assert( switch_channel_get_running_state(session->channel) != CS_INIT);
switch_thread_cond_wait(session->cond, session->mutex);
}
}