[Freeswitch-svn] [commit] r3705 - in freeswitch/trunk/src: . include mod/applications/mod_conference mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Mon Dec 18 16:40:05 EST 2006


Author: anthm
Date: Mon Dec 18 16:40:04 2006
New Revision: 3705

Modified:
   freeswitch/trunk/src/include/switch_types.h
   freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
   freeswitch/trunk/src/switch_rtp.c

Log:
add break

Modified: freeswitch/trunk/src/include/switch_types.h
==============================================================================
--- freeswitch/trunk/src/include/switch_types.h	(original)
+++ freeswitch/trunk/src/include/switch_types.h	Mon Dec 18 16:40:04 2006
@@ -500,7 +500,8 @@
 typedef enum {
 	SWITCH_SIG_NONE,
 	SWITCH_SIG_KILL,
-	SWITCH_SIG_XFER
+	SWITCH_SIG_XFER,
+    SWITCH_SIG_BREAK
 } switch_signal_t;
 
 /*!

Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	Mon Dec 18 16:40:04 2006
@@ -1917,9 +1917,9 @@
 		switch_clear_flag(member, MFLAG_RUNNING);
 		switch_set_flag(member, MFLAG_KICKED);
 		switch_mutex_unlock(member->flag_mutex);
-
+        switch_core_session_kill_channel(member->session, SWITCH_SIG_BREAK);
 		stream->write_function(stream, "OK kicked %u\n", id);
-
+        
 		if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
 			switch_channel_t *channel = switch_core_session_get_channel(member->session);
 			switch_channel_event_set_data(channel, event);

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Mon Dec 18 16:40:04 2006
@@ -267,10 +267,10 @@
 	uint32_t codec_ms;
 	switch_caller_profile_t *caller_profile;
 	int32_t timestamp_send;
-	int32_t timestamp_recv;
+	//int32_t timestamp_recv;
 	switch_rtp_t *rtp_session;
 	int ssrc;
-	switch_time_t last_read;
+	//switch_time_t last_read;
 	sofia_profile_t *profile;
 	char *local_sdp_audio_ip;
 	switch_port_t local_sdp_audio_port;
@@ -1531,7 +1531,6 @@
 										switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt = NULL;
-	size_t bytes = 0, samples = 0, frames = 0, ms = 0;
 	switch_channel_t *channel = NULL;
 	int payload = 0;
 	
@@ -1557,20 +1556,16 @@
 	tech_pvt->read_frame.datalen = 0;
 	switch_set_flag_locked(tech_pvt, TFLAG_READING);
 
-
-	bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
-	samples = tech_pvt->read_codec.implementation->samples_per_frame;
-	ms = tech_pvt->read_codec.implementation->microseconds_per_frame;
-	
+#if 0	
 	if (tech_pvt->last_read) {
-#if 0
 		elapsed = (unsigned int)((switch_time_now() - tech_pvt->last_read) / 1000);
 		if (elapsed > 60000) {
 			return SWITCH_STATUS_TIMEOUT;
 		}
-#endif
 	}
+#endif
 
+
 	if (switch_test_flag(tech_pvt, TFLAG_IO)) {
 		switch_status_t status;
 
@@ -1616,23 +1611,16 @@
 
 
 			if (tech_pvt->read_frame.datalen > 0) {
-				tech_pvt->last_read = switch_time_now();
-
-				if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) {
-					bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
-					frames = (tech_pvt->read_frame.datalen / bytes);
-				} else
-					frames = 1;
-
-				samples = frames * tech_pvt->read_codec.implementation->samples_per_frame;
-				ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame;
-				tech_pvt->timestamp_recv += (int32_t) samples;
-				tech_pvt->read_frame.samples = (int) samples;
+                size_t bytes = 0;
+                int frames = 0;
+				//tech_pvt->last_read = switch_time_now();
+                bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
+                frames = (tech_pvt->read_frame.datalen / bytes);
+				tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_frame);
 				break;
 			}
 		}
-
-	} 
+	}
 	
 	switch_clear_flag_locked(tech_pvt, TFLAG_READING);
 
@@ -1724,12 +1712,21 @@
 	tech_pvt = (private_object_t *) switch_core_session_get_private(session);
 	assert(tech_pvt != NULL);
 
-	switch_clear_flag_locked(tech_pvt, TFLAG_IO);
-	switch_set_flag_locked(tech_pvt, TFLAG_HUP);
 
-	if (switch_rtp_ready(tech_pvt->rtp_session)) {
-		switch_rtp_kill_socket(tech_pvt->rtp_session);
-	}
+    switch(sig) {
+    case SWITCH_SIG_BREAK:
+        switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_BREAK);
+        break;
+    case SWITCH_SIG_KILL:
+    default:
+        switch_clear_flag_locked(tech_pvt, TFLAG_IO);
+        switch_set_flag_locked(tech_pvt, TFLAG_HUP);
+
+        if (switch_rtp_ready(tech_pvt->rtp_session)) {
+            switch_rtp_kill_socket(tech_pvt->rtp_session);
+        }
+        break;
+    }
 
 	return SWITCH_STATUS_SUCCESS;
 

Modified: freeswitch/trunk/src/switch_rtp.c
==============================================================================
--- freeswitch/trunk/src/switch_rtp.c	(original)
+++ freeswitch/trunk/src/switch_rtp.c	Mon Dec 18 16:40:04 2006
@@ -776,7 +776,13 @@
 		
 		if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK)) {
 			switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_BREAK);
-			return 0;
+
+            memset(&rtp_session->recv_msg, 0, SWITCH_RTP_CNG_PAYLOAD);
+            rtp_session->recv_msg.header.pt = SWITCH_RTP_CNG_PAYLOAD;
+            *flags |= SFF_CNG;
+            /* Return a CNG frame */
+            *payload_type = SWITCH_RTP_CNG_PAYLOAD;
+            return SWITCH_RTP_CNG_PAYLOAD;
 		}
 
 		if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO)) {
@@ -857,7 +863,7 @@
 		
 		if (status == SWITCH_STATUS_BREAK || bytes == 0) {
 			if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DATAWAIT)) {
-				switch_yield(rtp_session->ms_per_packet);
+				switch_yield(rtp_session->ms_per_packet/2);
 				continue;
 			}
 			return 0;



More information about the Freeswitch-svn mailing list