]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add switch_channel_set_variable_printf
authorMichael Jerris <mike@jerris.com>
Mon, 29 Sep 2008 17:48:43 +0000 (17:48 +0000)
committerMichael Jerris <mike@jerris.com>
Mon, 29 Sep 2008 17:48:43 +0000 (17:48 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9744 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_channel.h
src/switch_channel.c
src/switch_event.c

index e62a22a1eea5c0510a2bc118fa6493dc1b438bd7..436cfef7085776843dc37018f143f48fa7730a79 100644 (file)
@@ -220,6 +220,7 @@ SWITCH_DECLARE(char *) switch_channel_get_uuid(switch_channel_t *channel);
   \returns SWITCH_STATUS_SUCCESS if successful
 */
 SWITCH_DECLARE(switch_status_t) switch_channel_set_variable(switch_channel_t *channel, const char *varname, const char *value);
+SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_printf(switch_channel_t *channel, const char *varname,  const char *fmt, ...);
 
 SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_partner(switch_channel_t *channel, const char *varname, const char *value);
 SWITCH_DECLARE(const char *) switch_channel_get_variable_partner(switch_channel_t *channel, const char *varname);
index 1fa12c550bb0166ab1d39db9cbaf0c780f67006a..838abe5f7fa7d7be2fd35809ffcb937fba107955 100644 (file)
@@ -578,6 +578,37 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_variable(switch_channel_t *ch
        return SWITCH_STATUS_FALSE;
 }
 
+switch_status_t switch_event_base_add_header(switch_event_t *event, switch_stack_t stack, const char *header_name, char *data);
+
+SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_printf(switch_channel_t *channel, const char *varname,  const char *fmt, ...)
+{
+       int ret = 0;
+       char *data;
+       va_list ap;
+       switch_assert(channel != NULL);
+
+       if (!switch_strlen_zero(varname)) {
+               switch_mutex_lock(channel->profile_mutex);
+               switch_event_del_header(channel->variables, varname);
+
+               va_start(ap, fmt);
+               ret = switch_vasprintf(&data, fmt, ap);
+               va_end(ap);
+
+               if (ret == -1) {
+                       switch_mutex_unlock(channel->profile_mutex);
+                       return SWITCH_STATUS_MEMERR;
+               }
+
+               switch_event_base_add_header(channel->variables, SWITCH_STACK_BOTTOM, varname, data);
+
+               switch_mutex_unlock(channel->profile_mutex);
+               return SWITCH_STATUS_SUCCESS;
+       }
+
+       return SWITCH_STATUS_FALSE;
+}
+
 
 SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_partner(switch_channel_t *channel, const char *varname, const char *value)
 {
index 3a2dac52a5a3fa4f1ea778ddbdfcce02b62ebcc8..6b22128d4d757a3ef75749b879f85ba3e0c9c8cc 100644 (file)
@@ -625,7 +625,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_del_header(switch_event_t *event, c
        return status;
 }
 
-static switch_status_t switch_event_base_add_header(switch_event_t *event, switch_stack_t stack, const char *header_name, char *data)
+switch_status_t switch_event_base_add_header(switch_event_t *event, switch_stack_t stack, const char *header_name, char *data)
 {
        switch_event_header_t *header;
        void *pop;