Revision
14349
Author
mikej
Date
2009-07-24 12:39:12 -0500 (Fri, 24 Jul 2009)

Log Message

mod_xml_rpc: add virtual-host (default to true) and default-domain params (MDXMLINT-45)

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (14348 => 14349)


--- freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c	2009-07-24 17:06:22 UTC (rev 14348)
+++ freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c	2009-07-24 17:39:12 UTC (rev 14349)
@@ -57,25 +57,30 @@
 	char *realm;
 	char *user;
 	char *pass;
+	char *default_domain;
+	switch_bool_t virtual_host;
 	TServer abyssServer;
 } globals;
 
 SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_realm, globals.realm);
 SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_user, globals.user);
 SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_pass, globals.pass);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_default_domain, globals.default_domain);
 
 static switch_status_t do_config(void)
 {
 	char *cf = "xml_rpc.conf";
 	switch_xml_t cfg, xml, settings, param;
-	char *realm, *user, *pass;
+	char *realm, *user, *pass, *default_domain;
 
-	realm = user = pass = NULL;
+	default_domain = realm = user = pass = NULL;
 	if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
 		return SWITCH_STATUS_TERM;
 	}
 
+	globals.virtual_host = SWITCH_TRUE;
+
 	if ((settings = switch_xml_child(cfg, "settings"))) {
 		for (param = switch_xml_child(settings, "param"); param; param = param->next) {
 			char *var = (char *) switch_xml_attr_soft(param, "name");
@@ -89,6 +94,10 @@
 				pass = val;
 			} else if (!strcasecmp(var, "http-port")) {
 				globals.port = (uint16_t) atoi(val);
+			} else if (!strcasecmp(var, "default-domain")) {
+				default_domain = val;
+			} else if (!strcasecmp(var, "virtual-host")) {
+				globals.virtual_host = switch_true(val);
 			}
 		}
 	}
@@ -103,6 +112,9 @@
 			set_global_pass(pass);
 		}
 	}
+	if (default_domain) {
+		set_global_default_domain(default_domain);
+	}
 	switch_xml_free(xml);
 
 	return SWITCH_STATUS_SUCCESS;
@@ -150,13 +162,13 @@
 }
 
 static abyss_bool user_attributes (const char *user, const char *domain_name,
-                                   char **ppasswd, char **pvm_passwd,
-                                   char **palias, char **pallowed_commands)
+                                   const char **ppasswd, const char **pvm_passwd,
+                                   const char **palias, const char **pallowed_commands)
 {
-	char *passwd;
-	char *vm_passwd;
-	char *alias;
-	char *allowed_commands;
+	const char *passwd;
+	const char *vm_passwd;
+	const char *alias;
+	const char *allowed_commands;
 	switch_event_t *params;
 	switch_xml_t x_domain, x_domain_root, x_user, x_params, x_param;
 
@@ -318,9 +330,15 @@
 				}
 				
 				if (!domain_name) {
-					domain_name = (char *) r->requestInfo.host;
-					if (!strncasecmp(domain_name, "www.", 3)) {
-						domain_name += 4;
+					if (globals.virtual_host) {
+						domain_name = (char *) r->requestInfo.host;
+						if (!strncasecmp(domain_name, "www.", 3)) {
+							domain_name += 4;
+						}
+					} else if (globals.default_domain) {
+						domain_name = globals.default_domain;
+					} else {
+						domain_name = switch_core_get_variable("domain");
 					}
 				}