Revision
14789
Author
anthm
Date
2009-09-08 14:05:32 -0500 (Tue, 08 Sep 2009)

Log Message

add optional prefix arg to set_user FSCORE-429

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c (14788 => 14789)


--- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c	2009-09-08 15:18:31 UTC (rev 14788)
+++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c	2009-09-08 19:05:32 UTC (rev 14789)
@@ -404,7 +404,7 @@
 	}
 }
 
-#define SET_USER_SYNTAX "<user>@<domain>"
+#define SET_USER_SYNTAX "<user>@<domain> [prefix]"
 SWITCH_STANDARD_APP(set_user_function)
 {
 	switch_ivr_set_user(session, data);

Modified: freeswitch/trunk/src/switch_ivr.c (14788 => 14789)


--- freeswitch/trunk/src/switch_ivr.c	2009-09-08 15:18:31 UTC (rev 14788)
+++ freeswitch/trunk/src/switch_ivr.c	2009-09-08 19:05:32 UTC (rev 14789)
@@ -2113,7 +2113,31 @@
 	return status;
 }
 
+static const char *get_prefixed_str(char *buffer, size_t buffer_size, const char *prefix, size_t prefix_size, const char *str)
+{
+	size_t str_len;
 
+	if (switch_strlen_zero(buffer)) {
+		/*
+		  if buffer is null then it just returns the str without the prefix appended, otherwise buffer contains the prefix followed by the original string
+		*/
+
+		return str;
+	}
+
+	str_len = strlen(str);
+	memcpy(buffer, prefix, prefix_size);
+	
+	if (str_len + prefix_size + 1 > buffer_size) {
+		memcpy(buffer + prefix_size, str, buffer_size-prefix_size - 1);
+		buffer[buffer_size-prefix_size - 1] = '\0';
+	} else {
+		memcpy(buffer + prefix_size, str, str_len + 1);
+	}
+
+	return buffer;
+}
+
 SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *session, const char *data)
 {
 	switch_xml_t x_domain, xml = NULL, x_user, x_param, x_params, x_group = NULL;
@@ -2121,11 +2145,18 @@
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_status_t status = SWITCH_STATUS_FALSE;
 
+	char * prefix_buffer = NULL, *prefix;
+	size_t buffer_size =0;
+	size_t prefix_size=0;
 	if (switch_strlen_zero(data)) {
 		goto error;
 	}
 
 	user = switch_core_session_strdup(session, data);
+	
+	if ((prefix = strchr(user, ' '))){
+		*prefix++ = 0;
+	}
 
 	if (!(domain = strchr(user, '@'))) {
 		goto error;
@@ -2140,8 +2171,14 @@
 
 	status = SWITCH_STATUS_SUCCESS;
 
+	if (!switch_strlen_zero(prefix)) {
+		prefix_size = strlen(prefix);
+		buffer_size = 1024 + prefix_size + 1;
+		prefix_buffer = switch_core_session_alloc(session, buffer_size);
+	}
+
 	if ((number_alias = (char *) switch_xml_attr(x_user, "number-alias"))) {
-		switch_channel_set_variable(channel, "number_alias", number_alias);
+		switch_channel_set_variable(channel, get_prefixed_str(prefix_buffer, buffer_size, prefix, prefix_size, "number_alias"), number_alias);
 	}
 
 	if ((x_params = switch_xml_child(x_domain, "variables"))) {
@@ -2150,7 +2187,7 @@
 			const char *val = switch_xml_attr(x_param, "value");
 
 			if (var && val) {
-				switch_channel_set_variable(channel, var, val);
+				switch_channel_set_variable(channel, get_prefixed_str(prefix_buffer, buffer_size, prefix, prefix_size, var), val);
 			}
 		}
 	}
@@ -2161,7 +2198,7 @@
 			const char *val = switch_xml_attr(x_param, "value");
 
 			if (var && val) {
-				switch_channel_set_variable(channel, var, val);
+				switch_channel_set_variable(channel, get_prefixed_str(prefix_buffer, buffer_size, prefix, prefix_size, var), val);
 			}
 		}
 	}
@@ -2172,13 +2209,13 @@
 			const char *val = switch_xml_attr(x_param, "value");
 
 			if (var && val) {
-				switch_channel_set_variable(channel, var, val);
+				switch_channel_set_variable(channel, get_prefixed_str(prefix_buffer, buffer_size, prefix, prefix_size, var), val);
 			}
 		}
 	}
 
-	switch_channel_set_variable(channel, "user_name", user);
-	switch_channel_set_variable(channel, "domain_name", domain);
+	switch_channel_set_variable(channel, get_prefixed_str(prefix_buffer,buffer_size,prefix,prefix_size,"user_name") , user);
+	switch_channel_set_variable(channel, get_prefixed_str(prefix_buffer,buffer_size,prefix,prefix_size,"domain_name") , domain);
 
 	goto done;