diff --git a/src/include/switch_channel.h b/src/include/switch_channel.h index 5529d9af66..f21d36d63a 100644 --- a/src/include/switch_channel.h +++ b/src/include/switch_channel.h @@ -246,9 +246,11 @@ SWITCH_DECLARE(const char *) switch_channel_get_variable_partner(switch_channel_ #define switch_channel_set_variable_partner(_channel, _var, _val) switch_channel_set_variable_partner_var_check(_channel, _var, _val, SWITCH_TRUE) -SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_var_check(switch_channel_t *channel, const char *varname, const char *value, switch_bool_t var_check, switch_bool_t nolocal); +SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_var_check(switch_channel_t *channel, const char *varname, const char *value, switch_bool_t var_check); + +#define switch_channel_export_variable(_channel, _varname, _value) switch_channel_export_variable_var_check(_channel, _varname, _value, SWITCH_TRUE) +SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_printf(switch_channel_t *channel, const char *varname, const char *fmt, ...); -#define switch_channel_export_variable(_channel, _varname, _value, _nolocal) switch_channel_export_variable_var_check(_channel, _varname, _value, SWITCH_TRUE, _nolocal) /*! \brief Retrieve a variable from a given channel diff --git a/src/switch_channel.c b/src/switch_channel.c index ba9429721a..345d4e791a 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -737,34 +737,49 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_profile_var(switch_channel_t return status; } -SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_var_check(switch_channel_t *channel, const char *varname, const char *value, switch_bool_t var_check, switch_bool_t nolocal) +SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_var_check(switch_channel_t *channel, const char *varname, const char *value, switch_bool_t var_check) { - const char *exports, *exports_varname = varname; - switch_status_t status; + const char *exports; + switch_status_t status = SWITCH_STATUS_FALSE; exports = switch_channel_get_variable(channel, SWITCH_EXPORT_VARS_VARIABLE); - - if (nolocal) { - exports_varname = switch_mprintf("nolocal:%s", varname); - } - - if ((status = switch_channel_set_variable_var_check(channel, exports_varname, value, var_check)) != SWITCH_STATUS_SUCCESS) { - goto done; + + if ((status = switch_channel_set_variable_var_check(channel, varname, value, var_check)) != SWITCH_STATUS_SUCCESS) { + return status; } if (varname && value) { if (exports) { - switch_channel_set_variable_printf(channel, SWITCH_EXPORT_VARS_VARIABLE, "%s,%s", exports, exports_varname); + switch_channel_set_variable_printf(channel, SWITCH_EXPORT_VARS_VARIABLE, "%s,%s", exports, varname); } else { - switch_channel_set_variable(channel, SWITCH_EXPORT_VARS_VARIABLE, exports_varname); + switch_channel_set_variable(channel, SWITCH_EXPORT_VARS_VARIABLE, varname); } } -done: - if (exports_varname != varname) { - free((char*)exports_varname); + return status; +} + +SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_printf(switch_channel_t *channel, const char *varname, const char *fmt, ...) +{ + switch_status_t status = SWITCH_STATUS_FALSE; + char *data = NULL; + va_list ap; + int ret; + + switch_assert(channel != NULL); + + va_start(ap, fmt); + ret = switch_vasprintf(&data, fmt, ap); + va_end(ap); + + if (ret == -1) { + return SWITCH_STATUS_FALSE; } + status = switch_channel_export_variable(channel, varname, data); + + free(data); + return status; }