CtRiX is fast

git-svn-id: http://svn.openzap.org/svn/openzap/trunk@472 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
Anthony Minessale 2008-05-08 20:27:31 +00:00
parent 965e37759a
commit e1a86feba8
1 changed files with 12 additions and 30 deletions

View File

@ -123,8 +123,8 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
switch_core_session_t **new_session, switch_core_session_t **new_session,
switch_memory_pool_t **pool, switch_memory_pool_t **pool,
switch_originate_flag_t flags); switch_originate_flag_t flags);
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id); static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id); static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig); static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
@ -359,7 +359,7 @@ static switch_status_t channel_on_init(switch_core_session_t *session)
switch_set_flag_locked(tech_pvt, TFLAG_IO); switch_set_flag_locked(tech_pvt, TFLAG_IO);
/* Move Channel's State Machine to ROUTING */ /* Move channel's state machine to ROUTING */
switch_channel_set_state(channel, CS_ROUTING); switch_channel_set_state(channel, CS_ROUTING);
switch_mutex_lock(globals.mutex); switch_mutex_lock(globals.mutex);
globals.calls++; globals.calls++;
@ -510,27 +510,6 @@ static switch_status_t channel_on_soft_execute(switch_core_session_t *session)
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static switch_status_t channel_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
{
private_t *tech_pvt = NULL;
tech_pvt = switch_core_session_get_private(session);
assert(tech_pvt != NULL);
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t channel_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
{
private_t *tech_pvt = NULL;
tech_pvt = switch_core_session_get_private(session);
assert(tech_pvt != NULL);
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf) static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
{ {
private_t *tech_pvt = NULL; private_t *tech_pvt = NULL;
@ -545,7 +524,7 @@ static switch_status_t channel_send_dtmf(switch_core_session_t *session, const s
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id) static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
{ {
switch_channel_t *channel = NULL; switch_channel_t *channel = NULL;
private_t *tech_pvt = NULL; private_t *tech_pvt = NULL;
@ -553,7 +532,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
zap_wait_flag_t wflags = ZAP_READ; zap_wait_flag_t wflags = ZAP_READ;
char dtmf[128] = ""; char dtmf[128] = "";
zap_status_t status; zap_status_t status;
int total_to = timeout; int total_to;
int chunk, do_break = 0; int chunk, do_break = 0;
channel = switch_core_session_get_channel(session); channel = switch_core_session_get_channel(session);
@ -566,9 +545,14 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
assert(tech_pvt->zchan != NULL); assert(tech_pvt->zchan != NULL);
chunk = tech_pvt->zchan->effective_interval * 2; chunk = tech_pvt->zchan->effective_interval * 2;
total_to = chunk * 2;
top: top:
if (switch_channel_test_flag(channel, CF_SUSPEND)) {
do_break = 1;
}
if (switch_test_flag(tech_pvt, TFLAG_BREAK)) { if (switch_test_flag(tech_pvt, TFLAG_BREAK)) {
switch_clear_flag_locked(tech_pvt, TFLAG_BREAK); switch_clear_flag_locked(tech_pvt, TFLAG_BREAK);
do_break = 1; do_break = 1;
@ -597,7 +581,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
} }
if (status == ZAP_TIMEOUT) { if (status == ZAP_TIMEOUT) {
if (timeout > 0 && !switch_test_flag(tech_pvt, TFLAG_HOLD)) { if (!switch_test_flag(tech_pvt, TFLAG_HOLD)) {
total_to -= chunk; total_to -= chunk;
if (total_to <= 0) { if (total_to <= 0) {
goto fail; goto fail;
@ -646,7 +630,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
} }
static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id) static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
{ {
switch_channel_t *channel = NULL; switch_channel_t *channel = NULL;
private_t *tech_pvt = NULL; private_t *tech_pvt = NULL;
@ -835,8 +819,6 @@ switch_io_routines_t openzap_io_routines = {
/*.read_frame */ channel_read_frame, /*.read_frame */ channel_read_frame,
/*.write_frame */ channel_write_frame, /*.write_frame */ channel_write_frame,
/*.kill_channel */ channel_kill_channel, /*.kill_channel */ channel_kill_channel,
/*.waitfor_read */ channel_waitfor_read,
/*.waitfor_write */ channel_waitfor_write,
/*.send_dtmf */ channel_send_dtmf, /*.send_dtmf */ channel_send_dtmf,
/*.receive_message*/ channel_receive_message /*.receive_message*/ channel_receive_message
}; };