Revision
15273
Author
anthm
Date
2009-10-29 12:29:05 -0500 (Thu, 29 Oct 2009)

Log Message

add uuid_debug_audio <uuid> <on|off>

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_types.h (15272 => 15273)


--- freeswitch/trunk/src/include/switch_types.h	2009-10-29 15:30:07 UTC (rev 15272)
+++ freeswitch/trunk/src/include/switch_types.h	2009-10-29 17:29:05 UTC (rev 15273)
@@ -513,7 +513,8 @@
 	SWITCH_ZRTP_FLAG_SECURE_SEND = (1 << 23),
 	SWITCH_ZRTP_FLAG_SECURE_RECV = (1 << 24),
 	SWITCH_ZRTP_FLAG_SECURE_MITM_SEND = (1 << 25),
-	SWITCH_ZRTP_FLAG_SECURE_MITM_RECV = (1 << 26)
+	SWITCH_ZRTP_FLAG_SECURE_MITM_RECV = (1 << 26),
+	SWITCH_RTP_FLAG_DEBUG_RTP = (1 << 27)
 } switch_rtp_flag_enum_t;
 typedef uint32_t switch_rtp_flag_t;
 
@@ -666,6 +667,7 @@
 	SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA,
 	SWITCH_MESSAGE_INDICATE_UUID_CHANGE,
 	SWITCH_MESSAGE_INDICATE_WARNING,
+	SWITCH_MESSAGE_INDICATE_DEBUG_AUDIO,
 	SWITCH_MESSAGE_INVALID
 } switch_core_session_message_types_t;
 

Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (15272 => 15273)


--- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c	2009-10-29 15:30:07 UTC (rev 15272)
+++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c	2009-10-29 17:29:05 UTC (rev 15273)
@@ -2105,6 +2105,44 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
+
+#define DEBUG_AUDIO_SYNTAX "<uuid> <on|off>"
+SWITCH_STANDARD_API(uuid_debug_audio_function)
+{
+	char *mycmd = NULL, *argv[2] = { 0 };
+	int argc = 0;
+	switch_status_t status = SWITCH_STATUS_FALSE;
+
+	if (!zstr(cmd) && (mycmd = strdup(cmd))) {
+		argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+	}
+
+	if (zstr(cmd) || argc < 2 || zstr(argv[0]) || zstr(argv[1])) {
+		stream->write_function(stream, "-USAGE: %s\n", DEBUG_AUDIO_SYNTAX);
+	} else {
+		switch_core_session_message_t msg = { 0 };
+		switch_core_session_t *lsession = NULL;
+
+		msg.message_id = SWITCH_MESSAGE_INDICATE_DEBUG_AUDIO;
+		msg.string_arg = argv[1];
+		msg.from = __FILE__;
+
+		if ((lsession = switch_core_session_locate(argv[0]))) {
+			status = switch_core_session_receive_message(lsession, &msg);
+			switch_core_session_rwunlock(lsession);
+		}
+	}
+
+	if (status == SWITCH_STATUS_SUCCESS) {
+		stream->write_function(stream, "+OK Success\n");
+	} else {
+		stream->write_function(stream, "-ERR Operation Failed\n");
+	}
+
+	switch_safe_free(mycmd);
+	return SWITCH_STATUS_SUCCESS;
+}
+
 #define UUID_SYNTAX "<uuid> <other_uuid>"
 SWITCH_STANDARD_API(uuid_bridge_function)
 {
@@ -3711,6 +3749,7 @@
 	SWITCH_ADD_API(commands_api_interface, "uuid_hold", "hold", uuid_hold_function, HOLD_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "uuid_display", "change display", uuid_display_function, DISPLAY_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "uuid_warning", "send popup", uuid_warning_function, WARNING_SYNTAX);
+	SWITCH_ADD_API(commands_api_interface, "uuid_debug_audio", "debug audio", uuid_debug_audio_function, DEBUG_AUDIO_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "uuid_media", "media", uuid_media_function, MEDIA_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "fsctl", "control messages", ctl_function, CTL_SYNTAX);
 	switch_console_set_complete("add fsctl hupall");

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (15272 => 15273)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2009-10-29 15:30:07 UTC (rev 15272)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2009-10-29 17:29:05 UTC (rev 15273)
@@ -1080,6 +1080,17 @@
 
 	/* ones that do not need to lock sofia mutex */
 	switch (msg->message_id) {
+	case SWITCH_MESSAGE_INDICATE_DEBUG_AUDIO:
+		{
+			if (switch_rtp_ready(tech_pvt->rtp_session)) {
+				if (switch_true(msg->string_arg)) {
+					switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_DEBUG_RTP);
+				} else {
+					switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_DEBUG_RTP);
+				}
+			}
+		}
+		goto end;
 	case SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY:
 		if (tech_pvt->rtp_session && switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833)) {
 			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Pass 2833 mode may not work on a transcoded call.\n");

Modified: freeswitch/trunk/src/switch_core_session.c (15272 => 15273)


--- freeswitch/trunk/src/switch_core_session.c	2009-10-29 15:30:07 UTC (rev 15272)
+++ freeswitch/trunk/src/switch_core_session.c	2009-10-29 17:29:05 UTC (rev 15273)
@@ -578,6 +578,7 @@
 	"REQUEST_IMAGE_MEDIA",
 	"UUID_CHANGE",
 	"WARNING",
+	"DEBUG_AUDIO",
 	"INVALID"
 };
 

Modified: freeswitch/trunk/src/switch_rtp.c (15272 => 15273)


--- freeswitch/trunk/src/switch_rtp.c	2009-10-29 15:30:07 UTC (rev 15272)
+++ freeswitch/trunk/src/switch_rtp.c	2009-10-29 17:29:05 UTC (rev 15273)
@@ -1678,6 +1678,20 @@
 	READ_INC(rtp_session);
 
 	if (switch_rtp_ready(rtp_session)) {
+
+		if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DEBUG_RTP)) {
+			switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
+			if (!session) {
+				switch_clear_flag(rtp_session, SWITCH_RTP_FLAG_DEBUG_RTP);
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "RTP HAS NO SESSION!\n");
+			} else {
+				switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), 
+								  SWITCH_LOG_CONSOLE, "%s FLUSH\n",
+								  switch_channel_get_name(switch_core_session_get_channel(session))
+								  );
+			}
+		}
+
 		if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_NOBLOCK)) {
 			was_blocking = 1;
 			switch_set_flag_locked(rtp_session, SWITCH_RTP_FLAG_NOBLOCK);		
@@ -1889,6 +1903,38 @@
 			rtp_flush_read_buffer(rtp_session, SWITCH_RTP_FLUSH_ONCE);
 		}
 
+
+		if (bytes && switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DEBUG_RTP)) {
+			switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
+
+			if (!session) {
+				switch_clear_flag(rtp_session, SWITCH_RTP_FLAG_DEBUG_RTP);
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "RTP HAS NO SESSION!\n");
+			} else {
+				const char *tx_host;
+				const char *old_host;
+				const char *my_host;
+
+				char bufa[30], bufb[30], bufc[30];
+				
+				
+				tx_host = switch_get_addr(bufa, sizeof(bufa), rtp_session->from_addr);
+				old_host = switch_get_addr(bufb, sizeof(bufb), rtp_session->remote_addr);
+				my_host = switch_get_addr(bufc, sizeof(bufc), rtp_session->local_addr);
+
+				switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_CONSOLE,
+								  "%s b=%ld %s:%u %s:%u %s:%u pt=%d ts=%u m=%d\n", 
+								  switch_channel_get_name(switch_core_session_get_channel(session)),
+								  (long)bytes,
+								  my_host, switch_sockaddr_get_port(rtp_session->local_addr),
+								  old_host, rtp_session->remote_port, 
+								  tx_host, switch_sockaddr_get_port(rtp_session->from_addr),
+								  rtp_session->recv_msg.header.pt, ntohl(rtp_session->recv_msg.header.ts), rtp_session->recv_msg.header.m);
+			
+			}
+		}
+
+
 		if (bytes && ((rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt) || rtp_session->recv_msg.header.pt == 13)) {
 			bytes = 0;
 			goto recvfrom;