[Freeswitch-svn] [commit] r5777 - in freeswitch/trunk/src: . include
Author: anthm Date: Mon Oct 1 20:09:49 2007 New Revision: 5777 Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/switch_ivr_bridge.c freeswitch/trunk/src/switch_ivr_play_say.c Log: add read_frame_callback to input args in the core Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Mon Oct 1 20:09:49 2007 @@ -1082,11 +1082,14 @@ typedef switch_status_t (*switch_input_callback_function_t) (switch_core_session_t *session, void *input, switch_input_type_t input_type, void *buf, unsigned int buflen); +typedef switch_status_t (*switch_read_frame_callback_function_t) (switch_core_session_t *session, switch_frame_t *frame, void *user_data); typedef struct switch_say_interface switch_say_interface_t; typedef struct { switch_input_callback_function_t input_callback; void *buf; uint32_t buflen; + switch_read_frame_callback_function_t read_frame_callback; + void *user_data; } switch_input_args_t; typedef switch_status_t (*switch_say_callback_t) (switch_core_session_t *session, char *tosay, switch_say_type_t type, switch_say_method_t method, switch_input_args_t *args); Modified: freeswitch/trunk/src/switch_ivr_bridge.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_bridge.c (original) +++ freeswitch/trunk/src/switch_ivr_bridge.c Mon Oct 1 20:09:49 2007 @@ -119,13 +119,14 @@ if (switch_channel_has_dtmf(chan_a)) { char dtmf[128]; switch_channel_dequeue_dtmf(chan_a, dtmf, sizeof(dtmf)); - switch_core_session_send_dtmf(session_b, dtmf); if (input_callback) { if (input_callback(session_a, dtmf, SWITCH_INPUT_TYPE_DTMF, user_data, 0) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s ended call via DTMF\n", switch_channel_get_name(chan_a)); + switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK); break; } } + switch_core_session_send_dtmf(session_b, dtmf); } if (switch_core_session_dequeue_event(session_a, &event) == SWITCH_STATUS_SUCCESS) { @@ -219,7 +220,6 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "BRIDGE THREAD DONE [%s]\n", switch_channel_get_name(chan_a)); switch_channel_clear_flag(chan_a, CF_BRIDGED); switch_core_session_rwunlock(session_b); - return NULL; } @@ -245,7 +245,7 @@ if (!switch_channel_test_flag(channel, CF_TRANSFER)) { switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); - } + } return SWITCH_STATUS_FALSE; } Modified: freeswitch/trunk/src/switch_ivr_play_say.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_play_say.c (original) +++ freeswitch/trunk/src/switch_ivr_play_say.c Mon Oct 1 20:09:49 2007 @@ -449,6 +449,12 @@ break; } + if (args && (args->read_frame_callback)) { + if (args->read_frame_callback(session, read_frame, args->user_data) != SWITCH_STATUS_SUCCESS) { + break; + } + } + if (fh->thresh) { int16_t *fdata = (int16_t *) read_frame->data; uint32_t samples = read_frame->datalen / sizeof(*fdata); @@ -564,6 +570,12 @@ continue; } + if (args && (args->read_frame_callback)) { + if (args->read_frame_callback(session, read_frame, args->user_data) != SWITCH_STATUS_SUCCESS) { + break; + } + } + if ((write_frame.datalen = (uint32_t) switch_buffer_read_loop(audio_buffer, write_frame.data, read_frame->codec->implementation->bytes_per_frame)) <= 0) { break; @@ -997,6 +1009,12 @@ if (!SWITCH_READ_ACCEPTABLE(status)) { break; } + + if (args && (args->read_frame_callback)) { + if (args->read_frame_callback(session, read_frame, args->user_data) != SWITCH_STATUS_SUCCESS) { + break; + } + } } } @@ -1266,6 +1284,12 @@ if (!SWITCH_READ_ACCEPTABLE(status)) { break; } + + if (args && (args->read_frame_callback)) { + if (args->read_frame_callback(session, read_frame, args->user_data) != SWITCH_STATUS_SUCCESS) { + break; + } + } } continue; } @@ -1323,6 +1347,12 @@ if (!SWITCH_READ_ACCEPTABLE(status)) { break; } + + if (args && (args->read_frame_callback)) { + if (args->read_frame_callback(session, read_frame, args->user_data) != SWITCH_STATUS_SUCCESS) { + break; + } + } } }
participants (1)
-
Freeswitch SVN