]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add optional prefix arg to set_user FSCORE-429
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 8 Sep 2009 19:05:32 +0000 (19:05 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 8 Sep 2009 19:05:32 +0000 (19:05 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14789 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_dptools/mod_dptools.c
src/switch_ivr.c

index 75466f3f2980e55f4023d140c66796d6a5c82efb..8b6aae0fef94f61915e10a742bac305a1343d0d3 100644 (file)
@@ -404,7 +404,7 @@ SWITCH_STANDARD_APP(three_way_function)
        }
 }
 
-#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);
index fa33ea1decea5722a13b6163b1a070ba22b92466..e136f8472bff31decc6f789975ac7a3ae056c059 100644 (file)
@@ -2113,6 +2113,30 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session, c
        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)
 {
@@ -2121,11 +2145,18 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *sessi
        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 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *sessi
 
        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 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *sessi
                        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 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *sessi
                        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 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *sessi
                        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;