[Freeswitch-svn] [commit] r11146 - freeswitch/trunk/src/mod/endpoints/mod_sofia

FreeSWITCH SVN anthm at freeswitch.org
Mon Jan 12 11:36:04 PST 2009


Author: anthm
Date: Mon Jan 12 13:36:04 2009
New Revision: 11146

Log:
make rtp bug compensation configurable

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	Mon Jan 12 13:36:04 2009
@@ -433,6 +433,7 @@
 	sofia_presence_type_t pres_type;
 	sofia_media_options_t media_options;
 	uint32_t force_subscription_expires;
+	switch_rtp_bug_flag_t auto_rtp_bugs;
 };
 
 struct private_object {

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	Mon Jan 12 13:36:04 2009
@@ -1208,6 +1208,31 @@
 	}
 }
 
+static void parse_rtp_bugs(sofia_profile_t *profile, const char *str)
+{
+	if (switch_stristr("clear", str)) {
+		profile->auto_rtp_bugs = 0;
+	}
+
+	if (switch_stristr("CISCO_SKIP_MARK_BIT_2833", str)) {
+		profile->auto_rtp_bugs |= RTP_BUG_CISCO_SKIP_MARK_BIT_2833;
+	}
+
+	if (switch_stristr("~CISCO_SKIP_MARK_BIT_2833", str)) {
+		profile->auto_rtp_bugs &= ~RTP_BUG_CISCO_SKIP_MARK_BIT_2833;
+	}
+	
+	if (switch_stristr("SONUS_SEND_INVALID_TIMESTAMP_2833", str)) {
+		profile->auto_rtp_bugs |= RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
+	}
+
+	if (switch_stristr("~SONUS_SEND_INVALID_TIMESTAMP_2833", str)) {
+		profile->auto_rtp_bugs &= ~RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
+	}
+
+
+}
+
 switch_status_t reconfig_sofia(sofia_profile_t *profile)
 {
 	switch_xml_t cfg, xml = NULL, xprofile, profiles, gateways_tag, domain_tag, domains_tag, aliases_tag, alias_tag, settings, param;
@@ -1250,6 +1275,8 @@
 					char *val = (char *) switch_xml_attr_soft(param, "value");
 					if (!strcasecmp(var, "debug")) {
 						profile->debug = atoi(val);
+					} else if (!strcasecmp(var, "auto-rtp-bugs")) {
+						parse_rtp_bugs(profile, val);
 					} else if (!strcasecmp(var, "user-agent-string")) { 
 						profile->user_agent = switch_core_strdup(profile->pool, val);
 					} else if (!strcasecmp(var, "dtmf-type")) {
@@ -1639,6 +1666,8 @@
 					goto done;
 				}
 
+				profile->auto_rtp_bugs = RTP_BUG_CISCO_SKIP_MARK_BIT_2833 | RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
+
 				profile->pool = pool;
 				profile->user_agent = SOFIA_USER_AGENT;
 
@@ -1694,6 +1723,8 @@
 						if (switch_true(val)) {
 							profile->rport_level = 2;
 						}
+					} else if (!strcasecmp(var, "auto-rtp-bugs")) {
+						parse_rtp_bugs(profile, val);
 					} else if (!strcasecmp(var, "dbname")) {
 						profile->dbname = switch_core_strdup(profile->pool, val);
 					} else if (!strcasecmp(var, "presence-hosts")) {

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	Mon Jan 12 13:36:04 2009
@@ -2275,19 +2275,25 @@
 	}
 
 	if ((tech_pvt->origin = switch_core_session_strdup(session, (char *) sdp->sdp_origin->o_username))) {
-		if (strstr(tech_pvt->origin, "CiscoSystemsSIP-GW-UserAgent")) {
-			tech_pvt->rtp_bugs |= RTP_BUG_CISCO_SKIP_MARK_BIT_2833;
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Activate Buggy RFC2833 Mode!\n");
-		}
 
-		if (strstr(tech_pvt->origin, "Sonus_UAC")) {
-			tech_pvt->rtp_bugs |= RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, 
-							  "Hello,\nI see you have a Sonus!\n"
-							  "FYI, Sonus cannot follow the RFC on the proper way to send DTMF.\n"
-							  "Sadly, my creator had to spend several hours figuring this out so I thought you'd like to know that!\n"
-							  "Don't worry, DTMF will work but you may want to ask them to fix it......\n"
-							  );
+		if (tech_pvt->profile->auto_rtp_bugs & RTP_BUG_CISCO_SKIP_MARK_BIT_2833) {
+
+			if (strstr(tech_pvt->origin, "CiscoSystemsSIP-GW-UserAgent")) {
+				tech_pvt->rtp_bugs |= RTP_BUG_CISCO_SKIP_MARK_BIT_2833;
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Activate Buggy RFC2833 Mode!\n");
+			}
+		}
+		
+		if (tech_pvt->profile->auto_rtp_bugs & RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833) {
+			if (strstr(tech_pvt->origin, "Sonus_UAC")) {
+				tech_pvt->rtp_bugs |= RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833;
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, 
+								  "Hello,\nI see you have a Sonus!\n"
+								  "FYI, Sonus cannot follow the RFC on the proper way to send DTMF.\n"
+								  "Sadly, my creator had to spend several hours figuring this out so I thought you'd like to know that!\n"
+								  "Don't worry, DTMF will work but you may want to ask them to fix it......\n"
+								  );
+			}
 		}
 	}
 



More information about the Freeswitch-svn mailing list