add optional prefix arg to set_user FSCORE-429

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14789 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2009-09-08 19:05:32 +00:00
parent c6dbca5425
commit 8c7652c345
2 changed files with 44 additions and 7 deletions

View 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);

View 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;