diff options
Diffstat (limited to 'funcs/func_global.c')
-rw-r--r-- | funcs/func_global.c | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/funcs/func_global.c b/funcs/func_global.c index 0a4b89dae..a688ef0a5 100644 --- a/funcs/func_global.c +++ b/funcs/func_global.c @@ -39,7 +39,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/pbx.h" #include "asterisk/channel.h" #include "asterisk/app.h" -#include "asterisk/manager.h" +#include "asterisk/stasis_channels.h" /*** DOCUMENTATION <function name="GLOBAL" language="en_US"> @@ -83,7 +83,25 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") using it in a set of calculations (or you might be surprised by the result).</para> </description> </function> - + <managerEvent language="en_US" name="VarSet"> + <managerEventInstance class="EVENT_FLAG_DIALPLAN"> + <synopsis>Raised when a variable is shared between channels.</synopsis> + <syntax> + <xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" /> + <parameter name="Variable"> + <para>The SHARED variable being set.</para> + <note><para>The variable name will always be enclosed with + <literal>SHARED()</literal></para></note> + </parameter> + <parameter name="Value"> + <para>The new value of the variable.</para> + </parameter> + </syntax> + <see-also> + <ref type="function">SHARED</ref> + </see-also> + </managerEventInstance> + </managerEvent> ***/ static void shared_variable_free(void *data); @@ -197,6 +215,8 @@ static int shared_write(struct ast_channel *chan, const char *cmd, char *data, c AST_APP_ARG(chan); ); struct ast_channel *c_ref = NULL; + int len; + RAII_VAR(char *, shared_buffer, NULL, ast_free); if (ast_strlen_zero(data)) { ast_log(LOG_WARNING, "SHARED() requires an argument: SHARED(<var>[,<chan>])\n"); @@ -215,6 +235,15 @@ static int shared_write(struct ast_channel *chan, const char *cmd, char *data, c chan = c_ref; } + len = 9 + strlen(args.var); /* SHARED() + var */ + shared_buffer = ast_malloc(len); + if (!shared_buffer) { + if (c_ref) { + ast_channel_unref(c_ref); + } + return -1; + } + ast_channel_lock(chan); if (!(varstore = ast_channel_datastore_find(chan, &shared_variable_info, NULL))) { @@ -255,13 +284,9 @@ static int shared_write(struct ast_channel *chan, const char *cmd, char *data, c var = ast_var_assign(args.var, S_OR(value, "")); AST_LIST_INSERT_HEAD(varshead, var, entries); - manager_event(EVENT_FLAG_DIALPLAN, "VarSet", - "Channel: %s\r\n" - "Variable: SHARED(%s)\r\n" - "Value: %s\r\n" - "Uniqueid: %s\r\n", - chan ? ast_channel_name(chan) : "none", args.var, value, - chan ? ast_channel_uniqueid(chan) : "none"); + + sprintf(shared_buffer, "SHARED(%s)", args.var); + ast_channel_publish_varset(chan, shared_buffer, value); ast_channel_unlock(chan); |