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

Freeswitch SVN anthm at freeswitch.org
Thu Jul 17 10:32:01 EDT 2008


Author: anthm
Date: Thu Jul 17 10:32:01 2008
New Revision: 9069

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

Log:
use a variable, realm or to host to find gateway when it's not obvious

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	Thu Jul 17 10:32:01 2008
@@ -600,7 +600,7 @@
 #define sofia_glue_find_profile(x) sofia_glue_find_profile__(__FILE__, __SWITCH_FUNC__, __LINE__,  x)
 
 switch_status_t sofia_reg_add_gateway(char *key, sofia_gateway_t *gateway);
-sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, char *key);
+sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, const char *key);
 #define sofia_reg_find_gateway(x) sofia_reg_find_gateway__(__FILE__, __SWITCH_FUNC__, __LINE__,  x)
 
 void sofia_reg_release_gateway__(const char *file, const char *func, int line, sofia_gateway_t *gateway);

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	Thu Jul 17 10:32:01 2008
@@ -965,22 +965,6 @@
 		gw_name = switch_channel_get_variable(channel, "sip_use_gateway");
 	}
 
-	if (!gateway) {
-		if (gw_name) {
-			var_gateway = sofia_reg_find_gateway((char *)gw_name);
-		}
-
-#if __FINISHED__
-		if (!var_gateway) {
-			// look for it in the params of the contact or req uri etc.
-		}
-#endif
-
-		if (var_gateway) {
-			gateway = var_gateway;
-		}
-	}
-
 
 	if (sip->sip_www_authenticate) {
 		authenticate = sip->sip_www_authenticate;
@@ -1000,6 +984,36 @@
 		}
 	}
 
+	if (!gateway) {
+		if (gw_name) {
+			var_gateway = sofia_reg_find_gateway((char *)gw_name);
+		}
+
+
+		if (!var_gateway && realm) {
+			char rb[512] = "";
+			char *p = (char *) realm;
+			while((*p == '"')) {
+				p++;
+			}
+			switch_set_string(rb, p);
+			if ((p = strchr(rb, '"'))) {
+				*p = '\0';
+			}
+			var_gateway = sofia_reg_find_gateway(rb);
+		}
+
+		if (!var_gateway && sip && sip->sip_to) {
+			var_gateway = sofia_reg_find_gateway(sip->sip_to->a_url->url_host);
+		}
+		
+		if (var_gateway) {
+			gateway = var_gateway;
+		}
+	}
+
+
+
 	if (!(scheme && realm)) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No scheme and realm!\n");
 		goto end;
@@ -1398,7 +1412,7 @@
 }
 
 
-sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, char *key)
+sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, const char *key)
 {
 	sofia_gateway_t *gateway = NULL;
 



More information about the Freeswitch-svn mailing list