]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add switch_channel_export_variable
authorMathieu Rene <mrene@avgs.ca>
Thu, 1 Apr 2010 19:49:32 +0000 (15:49 -0400)
committerMathieu Rene <mrene@avgs.ca>
Thu, 1 Apr 2010 19:49:32 +0000 (15:49 -0400)
src/include/switch_channel.h
src/switch_channel.c

index 1f7f733aefb64cdba9902eccd07cf96ac682ecc9..5529d9af66045869f5c22b7ec887d2545831d78e 100644 (file)
@@ -245,6 +245,11 @@ SWITCH_DECLARE(const char *) switch_channel_get_variable_partner(switch_channel_
 #define switch_channel_set_variable(_channel, _var, _val) switch_channel_set_variable_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)
 
+
+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);
+
+#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
   \param channel channel to retrieve variable from
index fe661d4d66faf8171de95e03d7bb13a214013093..ba9429721a2ceea74e71640bb7c19fcb51886de1 100644 (file)
@@ -737,6 +737,37 @@ 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)
+{
+       const char *exports, *exports_varname = varname;
+       switch_status_t status;
+
+       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 (varname && value) {
+               if (exports) {
+                       switch_channel_set_variable_printf(channel, SWITCH_EXPORT_VARS_VARIABLE, "%s,%s", exports, exports_varname);
+               } else {
+                       switch_channel_set_variable(channel, SWITCH_EXPORT_VARS_VARIABLE, exports_varname);
+               }
+       }
+
+done:
+       if (exports_varname != varname) {
+               free((char*)exports_varname);   
+       }
+       
+       return status;
+}
+
 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)
 {