Revision
17017
Author
anthm
Date
2010-03-16 17:49:54 -0500 (Tue, 16 Mar 2010)

Log Message

fix logic err that would not permit many acl entries in sofia

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_rtp.h (17016 => 17017)


--- freeswitch/trunk/src/include/switch_rtp.h	2010-03-16 19:37:59 UTC (rev 17016)
+++ freeswitch/trunk/src/include/switch_rtp.h	2010-03-16 22:49:54 UTC (rev 17017)
@@ -409,7 +409,7 @@
   \param te the payload type
 */
 SWITCH_DECLARE(void) switch_rtp_set_telephony_event(switch_rtp_t *rtp_session, switch_payload_t te);
-
+SWITCH_DECLARE(void) switch_rtp_set_telephony_recv_event(switch_rtp_t *rtp_session, switch_payload_t te);
 /*! 
   \brief Set the payload type for comfort noise
   \param rtp_session the RTP session to modify

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (17016 => 17017)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2010-03-16 19:37:59 UTC (rev 17016)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2010-03-16 22:49:54 UTC (rev 17017)
@@ -5784,7 +5784,7 @@
 
 		for (x = 0; x < profile->acl_count; x++) {
 			last_acl = profile->acl[x];
-			if (!(ok = switch_check_network_list_ip_token(network_ip, last_acl, &token))) {
+			if ((ok = switch_check_network_list_ip_token(network_ip, last_acl, &token))) {
 				break;
 			}
 		}

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (17016 => 17017)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	2010-03-16 19:37:59 UTC (rev 17016)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	2010-03-16 22:49:54 UTC (rev 17017)
@@ -3507,10 +3507,17 @@
 				}
 
 				if (!te && !strcasecmp(rm_encoding, "telephone-event")) {
-					te = tech_pvt->te = (switch_payload_t) map->rm_pt;
-					switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Set 2833 dtmf payload to %u\n", te);
-					if (tech_pvt->rtp_session) {
-						switch_rtp_set_telephony_event(tech_pvt->rtp_session, tech_pvt->te);
+					if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND) {
+						switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Set 2833 dtmf recv payload to %u\n", te);
+						if (tech_pvt->rtp_session) {
+							switch_rtp_set_telephony_recv_event(tech_pvt->rtp_session, (switch_payload_t) map->rm_pt);
+						}
+					} else {
+						te = tech_pvt->te = (switch_payload_t) map->rm_pt;
+						switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Set 2833 dtmf send payload to %u\n", te);
+						if (tech_pvt->rtp_session) {
+							switch_rtp_set_telephony_event(tech_pvt->rtp_session, tech_pvt->te);
+						}
 					}
 				}
 

Modified: freeswitch/trunk/src/switch_rtp.c (17016 => 17017)


--- freeswitch/trunk/src/switch_rtp.c	2010-03-16 19:37:59 UTC (rev 17016)
+++ freeswitch/trunk/src/switch_rtp.c	2010-03-16 22:49:54 UTC (rev 17017)
@@ -193,6 +193,7 @@
 	struct switch_rtp_vad_data vad_data;
 	struct switch_rtp_rfc2833_data dtmf_data;
 	switch_payload_t te;
+	switch_payload_t recv_te;
 	switch_payload_t cng_pt;
 	switch_mutex_t *flag_mutex;
 	switch_mutex_t *read_mutex;
@@ -1122,8 +1123,8 @@
 
 	rtp_session->pool = pool;
 	rtp_session->te = 101;
+	rtp_session->recv_te = 101;
 
-
 	switch_mutex_init(&rtp_session->flag_mutex, SWITCH_MUTEX_NESTED, pool);
 	switch_mutex_init(&rtp_session->read_mutex, SWITCH_MUTEX_NESTED, pool);
 	switch_mutex_init(&rtp_session->write_mutex, SWITCH_MUTEX_NESTED, pool);
@@ -1336,6 +1337,14 @@
 	}
 }
 
+
+SWITCH_DECLARE(void) switch_rtp_set_telephony_recv_event(switch_rtp_t *rtp_session, switch_payload_t te)
+{
+	if (te > 95) {
+		rtp_session->recv_te = te;
+	}
+}
+
 SWITCH_DECLARE(void) switch_rtp_set_cng_pt(switch_rtp_t *rtp_session, switch_payload_t pt)
 {
 	rtp_session->cng_pt = pt;
@@ -1784,7 +1793,7 @@
 
 	if (*bytes) {
 		rtp_session->stats.inbound.raw_bytes += *bytes;
-		if (rtp_session->te && rtp_session->recv_msg.header.pt == rtp_session->te) {
+		if (rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
 			rtp_session->stats.inbound.dtmf_packet_count++;
 		} else if (rtp_session->cng_pt && (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13)) {
 			rtp_session->stats.inbound.cng_packet_count++;
@@ -1796,13 +1805,13 @@
 		rtp_session->stats.inbound.packet_count++;
 	}
 
-	if (rtp_session->te && rtp_session->recv_msg.header.pt == rtp_session->te) {
+	if (rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
 		return SWITCH_STATUS_SUCCESS;
 	}
 
 
 	if (rtp_session->jb && rtp_session->recv_msg.header.version == 2 && *bytes) {
-		if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->te) {
+		if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te) {
 			stfu_n_reset(rtp_session->jb);
 		}
 
@@ -1974,7 +1983,7 @@
 			goto recvfrom;
 		}
 
-		if (bytes && rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->te) {
+		if (bytes && rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te) {
 			rtp_flush_read_buffer(rtp_session, SWITCH_RTP_FLUSH_ONCE);
 		}
 
@@ -2166,7 +2175,7 @@
 
 			stat = srtp_unprotect(rtp_session->recv_ctx, &rtp_session->recv_msg.header, &sbytes);
 
-			if (stat && rtp_session->recv_msg.header.pt != rtp_session->te && rtp_session->recv_msg.header.pt != rtp_session->cng_pt) {
+			if (stat && rtp_session->recv_msg.header.pt != rtp_session->recv_te && rtp_session->recv_msg.header.pt != rtp_session->cng_pt) {
 				if (++rtp_session->srtp_errs >= MAX_SRTP_ERRS) {
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
 									  "Error: SRTP unprotect failed with code %d%s\n", stat,
@@ -2201,7 +2210,7 @@
 		   doing it right. Nice guys finish last!
 		 */
 		if (bytes && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) &&
-			!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833) && rtp_session->recv_msg.header.pt == rtp_session->te) {
+			!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833) && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
 			switch_size_t len = bytes - rtp_header_len;
 			unsigned char *packet = (unsigned char *) rtp_session->recv_msg.body;
 			int end;
@@ -2517,7 +2526,7 @@
 	frame->packetlen = bytes;
 	frame->source = __FILE__;
 	switch_set_flag(frame, SFF_RAW_RTP);
-	if (frame->payload == rtp_session->te) {
+	if (frame->payload == rtp_session->recv_te) {
 		switch_set_flag(frame, SFF_RFC2833);
 	}
 	frame->timestamp = ntohl(rtp_session->recv_msg.header.ts);