mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-13 12:40:17 +00:00
[Core] Add new switch_channel_set_variable_strip_quotes API, cleanup mod_sofia.
This commit is contained in:
parent
c1b00d945b
commit
c58b659f3f
@ -278,6 +278,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_get_log_tags(switch_channel_t *ch
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_var_check(switch_channel_t *channel,
|
||||
const char *varname, const char *value, switch_bool_t var_check);
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_strip_quotes_var_check(switch_channel_t *channel,
|
||||
const char *varname, const char *value, switch_bool_t var_check);
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_add_variable_var_check(switch_channel_t *channel,
|
||||
const char *varname, const char *value, switch_bool_t var_check, switch_stack_t stack);
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_printf(switch_channel_t *channel, const char *varname, const char *fmt, ...);
|
||||
@ -295,6 +297,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_transfer_variable_prefix(switch_c
|
||||
|
||||
#define switch_channel_set_variable_safe(_channel, _var, _val) switch_channel_set_variable_var_check(_channel, _var, _val, SWITCH_FALSE)
|
||||
#define switch_channel_set_variable(_channel, _var, _val) switch_channel_set_variable_var_check(_channel, _var, _val, SWITCH_TRUE)
|
||||
#define switch_channel_set_variable_strip_quotes(_channel, _var, _val) switch_channel_set_variable_strip_quotes_var_check(_channel, _var, _val, SWITCH_TRUE)
|
||||
#define switch_channel_set_variable_partner(_channel, _var, _val) switch_channel_set_variable_partner_var_check(_channel, _var, _val, SWITCH_TRUE)
|
||||
|
||||
|
||||
|
@ -201,24 +201,6 @@ static const char *_url_set_chanvars(switch_core_session_t *session, url_t *url,
|
||||
return uri;
|
||||
}
|
||||
|
||||
static char *strip_quotes(const char *in)
|
||||
{
|
||||
char *t = (char *) in;
|
||||
char *r = (char *) in;
|
||||
|
||||
if (t && *t == '"') {
|
||||
t++;
|
||||
|
||||
if (end_of(t) == '"') {
|
||||
r = strdup(t);
|
||||
switch_assert(r);
|
||||
end_of(r) = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static void extract_header_vars(sofia_profile_t *profile, sip_t const *sip,
|
||||
switch_core_session_t *session, nua_handle_t *nh)
|
||||
{
|
||||
@ -324,12 +306,8 @@ static void extract_header_vars(sofia_profile_t *profile, sip_t const *sip,
|
||||
}
|
||||
|
||||
if (sip->sip_from) {
|
||||
char *p = strip_quotes(sip->sip_from->a_display);
|
||||
switch_channel_set_variable_strip_quotes(channel, "sip_from_display", sip->sip_from->a_display);
|
||||
|
||||
if (p) {
|
||||
switch_channel_set_variable(channel, "sip_from_display", p);
|
||||
}
|
||||
if (p != sip->sip_from->a_display) free(p);
|
||||
if ((full = sip_header_as_string(nua_handle_get_home(nh), (void *) sip->sip_from))) {
|
||||
switch_channel_set_variable(channel, "sip_full_from", full);
|
||||
su_free(nua_handle_get_home(nh), full);
|
||||
@ -337,13 +315,7 @@ static void extract_header_vars(sofia_profile_t *profile, sip_t const *sip,
|
||||
}
|
||||
|
||||
if (sip->sip_to) {
|
||||
char *p = strip_quotes(sip->sip_to->a_display);
|
||||
|
||||
if (p) {
|
||||
switch_channel_set_variable(channel, "sip_to_display", p);
|
||||
}
|
||||
|
||||
if (p != sip->sip_to->a_display) free(p);
|
||||
switch_channel_set_variable_strip_quotes(channel, "sip_to_display", sip->sip_to->a_display);
|
||||
|
||||
if ((full = sip_header_as_string(nua_handle_get_home(nh), (void *) sip->sip_to))) {
|
||||
switch_channel_set_variable(channel, "sip_full_to", full);
|
||||
|
@ -1496,6 +1496,48 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_var_check(switch_cha
|
||||
return status;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_strip_quotes_var_check(switch_channel_t *channel,
|
||||
const char *varname, const char *value, switch_bool_t var_check)
|
||||
{
|
||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
switch_mutex_lock(channel->profile_mutex);
|
||||
if (channel->variables && !zstr(varname)) {
|
||||
if (zstr(value)) {
|
||||
switch_event_del_header(channel->variables, varname);
|
||||
} else {
|
||||
int ok = 1;
|
||||
char *t = (char *)value;
|
||||
char *r = (char *)value;
|
||||
|
||||
if (t && *t == '"') {
|
||||
t++;
|
||||
if (end_of(t) == '"') {
|
||||
r = strdup(t);
|
||||
switch_assert(r);
|
||||
end_of(r) = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
if (var_check) {
|
||||
ok = !switch_string_var_check_const(r);
|
||||
}
|
||||
if (ok) {
|
||||
switch_event_add_header_string(channel->variables, SWITCH_STACK_BOTTOM, varname, r);
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_CRIT, "Invalid data (${%s} contains a variable)\n", varname);
|
||||
}
|
||||
|
||||
if (r != value) free(r);
|
||||
}
|
||||
status = SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
switch_mutex_unlock(channel->profile_mutex);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_add_variable_var_check(switch_channel_t *channel,
|
||||
const char *varname, const char *value, switch_bool_t var_check, switch_stack_t stack)
|
||||
|
Loading…
x
Reference in New Issue
Block a user