Revision
14251
Author
brian
Date
2009-07-14 14:49:34 -0500 (Tue, 14 Jul 2009)

Log Message

 MODSOFIA-17

Modified Paths

Diff

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


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2009-07-14 19:32:42 UTC (rev 14250)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2009-07-14 19:49:34 UTC (rev 14251)
@@ -4856,13 +4856,16 @@
 			}
 
 			if (url) {
-				if (strchr(url, '>')) {
-					tech_pvt->reply_contact = switch_core_session_sprintf(session, "%s;transport=%s", url,
-																		  sofia_glue_transport2str(transport));
-				} else {
-					tech_pvt->reply_contact = switch_core_session_sprintf(session, "<%s;transport=%s>", url,
-																		  sofia_glue_transport2str(transport));
-				}
+				const char *brackets = NULL;
+				const char *proto = NULL;
+				
+				brackets = strchr(url, '>');
+				proto = switch_stristr("transport=", url);
+				tech_pvt->reply_contact = switch_core_session_sprintf(session, "%s%s%s%s%s",
+																	  brackets ? "" : "<", url,
+																	  proto ? "" : ";transport=",
+																	  proto ? "" : sofia_glue_transport2str(transport),
+																	  brackets ? "" : ">");
 			} else {
 				switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 			}
@@ -4876,13 +4879,16 @@
 			}			
 			
 			if (url) {
-				if (strchr(url, '>')) {
-					tech_pvt->reply_contact = switch_core_session_sprintf(session, "%s;transport=%s", url,
-																		  sofia_glue_transport2str(transport));
-				} else {
-					tech_pvt->reply_contact = switch_core_session_sprintf(session, "<%s;transport=%s>", url,
-																		  sofia_glue_transport2str(transport));
-				}
+				const char *brackets = NULL;
+				const char *proto = NULL;
+				
+				brackets = strchr(url, '>');
+				proto = switch_stristr("transport=", url);
+				tech_pvt->reply_contact = switch_core_session_sprintf(session, "%s%s%s%s%s",
+																	  brackets ? "" : "<", url,
+																	  proto ? "" : ";transport=",
+																	  proto ? "" : sofia_glue_transport2str(transport),
+																	  brackets ? "" : ">");
 			} else {
 				switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 			}