[Freeswitch-svn] [commit] r5777 - in freeswitch/trunk/src: . include

Freeswitch SVN anthm at freeswitch.org
Mon Oct 1 20:09:49 EDT 2007


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;
+				}
+			}
 		}
 
 	}



More information about the Freeswitch-svn mailing list