Revision
15284
Author
anthm
Date
2009-10-29 20:06:51 -0500 (Thu, 29 Oct 2009)

Log Message

filter out unwanted media on rtp

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_utils.h (15283 => 15284)


--- freeswitch/trunk/src/include/switch_utils.h	2009-10-30 00:19:27 UTC (rev 15283)
+++ freeswitch/trunk/src/include/switch_utils.h	2009-10-30 01:06:51 UTC (rev 15284)
@@ -186,6 +186,9 @@
 */
 SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct sockaddr *sa, socklen_t salen);
 
+SWITCH_DECLARE(int) get_addr_int(switch_sockaddr_t *sa);
+SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2);
+
 /*!
   \brief get the port number of an ip address
   \param sa the struct sockaddr * to get the port from

Modified: freeswitch/trunk/src/switch_rtp.c (15283 => 15284)


--- freeswitch/trunk/src/switch_rtp.c	2009-10-30 00:19:27 UTC (rev 15283)
+++ freeswitch/trunk/src/switch_rtp.c	2009-10-30 01:06:51 UTC (rev 15284)
@@ -1934,11 +1934,13 @@
 			
 			}
 		}
-
-
-		if (bytes && ((rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt) || rtp_session->recv_msg.header.pt == 13)) {
+		
+		if (bytes && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_AUTOADJ) && 
+			(!switch_cmp_addr(rtp_session->from_addr, rtp_session->remote_addr) || 
+			 ((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;
+			goto recvfrom;			 
+			
 		}
 
 		if (bytes && 

Modified: freeswitch/trunk/src/switch_utils.c (15283 => 15284)


--- freeswitch/trunk/src/switch_utils.c	2009-10-30 00:19:27 UTC (rev 15283)
+++ freeswitch/trunk/src/switch_utils.c	2009-10-30 01:06:51 UTC (rev 15284)
@@ -1338,10 +1338,28 @@
 
 #endif
 
+SWITCH_DECLARE(int) get_addr_int(switch_sockaddr_t *sa)
+{
+	struct sockaddr_in *s = (struct sockaddr_in *)&sa->sa;
+
+	return ntohs(s->sin_addr.s_addr);
+}
+
+
+SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2)
+{
+	struct sockaddr_in *s1 = (struct sockaddr_in *)&sa1->sa;
+	struct sockaddr_in *s2 = (struct sockaddr_in *)&sa2->sa;
+
+	return (ntohs(s1->sin_addr.s_addr) == ntohs(s2->sin_addr.s_addr) && ntohs(s1->sin_port) == ntohs(s2->sin_port));
+}
+
+
 SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct sockaddr *sa, socklen_t salen)
 {
 	switch_assert(buf);
 	*buf = '\0';
+
 	if (sa) {
 		getnameinfo(sa, salen, buf, (socklen_t)len, NULL, 0, NI_NUMERICHOST);
 	}