<para>Set or get the value of a global variable specified in <replaceable>varname</replaceable></para>
</description>
</function>
+ <function name="GLOBAL_DELETE" language="en_US">
+ <synopsis>
+ Deletes a specified global variable.
+ </synopsis>
+ <syntax>
+ <parameter name="varname" required="true">
+ <para>Global variable name</para>
+ </parameter>
+ </syntax>
+ <description>
+ <para>Delete the global variable specified in <replaceable>varname</replaceable>.
+ Will succeed if the global variable exists or not.</para>
+ </description>
+ <see-also>
+ <ref type="function">GLOBAL</ref>
+ <ref type="function">DELETE</ref>
+ </see-also>
+ </function>
+ <function name="GLOBAL_EXISTS" language="en_US">
+ <synopsis>
+ Check if a global variable exists or not.
+ </synopsis>
+ <syntax>
+ <parameter name="varname" required="true">
+ <para>Global variable name</para>
+ </parameter>
+ </syntax>
+ <description>
+ <para>Returns <literal>1</literal> if global variable exists or <literal>0</literal> otherwise.</para>
+ </description>
+ <see-also>
+ <ref type="function">VARIABLE_EXISTS</ref>
+ </see-also>
+ </function>
<function name="SHARED" language="en_US">
<synopsis>
Gets or sets the shared variable specified.
.write = global_write,
};
+static int global_delete_write(struct ast_channel *chan, const char *cmd, char *data, const char *value)
+{
+ pbx_builtin_setvar_helper(NULL, data, NULL);
+
+ return 0;
+}
+
+static struct ast_custom_function global_delete_function = {
+ .name = "GLOBAL_DELETE",
+ .write = global_delete_write,
+};
+
+static int global_exists_read(struct ast_channel *chan, const char *cmd, char *data,
+ char *buf, size_t len)
+{
+ const char *var = pbx_builtin_getvar_helper(NULL, data);
+
+ strcpy(buf, var ? "1" : "0");
+
+ return 0;
+}
+
+static struct ast_custom_function global_exists_function = {
+ .name = "GLOBAL_EXISTS",
+ .read = global_exists_read,
+};
+
static int shared_read(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
{
struct ast_datastore *varstore;
int res = 0;
res |= ast_custom_function_unregister(&global_function);
+ res |= ast_custom_function_unregister(&global_delete_function);
+ res |= ast_custom_function_unregister(&global_exists_function);
res |= ast_custom_function_unregister(&shared_function);
return res;
int res = 0;
res |= ast_custom_function_register(&global_function);
+ res |= ast_custom_function_register(&global_delete_function);
+ res |= ast_custom_function_register(&global_exists_function);
res |= ast_custom_function_register(&shared_function);
return res;
<description>
</description>
</function>
+ <function name="DELETE" language="en_US">
+ <synopsis>
+ Deletes a specified channel variable.
+ </synopsis>
+ <syntax>
+ <parameter name="varname" required="true">
+ <para>Channel variable name</para>
+ </parameter>
+ </syntax>
+ <description>
+ <para>Delete the channel variable specified in <replaceable>varname</replaceable>.
+ Will succeed if the channel variable exists or not.</para>
+ </description>
+ <see-also>
+ <ref type="function">GLOBAL_DELETE</ref>
+ </see-also>
+ </function>
+ <function name="VARIABLE_EXISTS" language="en_US">
+ <synopsis>
+ Check if a dialplan variable exists or not.
+ </synopsis>
+ <syntax>
+ <parameter name="varname" required="true">
+ <para>Channel variable name</para>
+ </parameter>
+ </syntax>
+ <description>
+ <para>Returns <literal>1</literal> if channel variable exists or <literal>0</literal> otherwise.</para>
+ </description>
+ <see-also>
+ <ref type="function">GLOBAL_EXISTS</ref>
+ </see-also>
+ </function>
***/
static int isnull(struct ast_channel *chan, const char *cmd, char *data,
return import_helper(chan, cmd, data, NULL, str, len);
}
+static int delete_write(struct ast_channel *chan, const char *cmd, char *data, const char *value)
+{
+ pbx_builtin_setvar_helper(chan, data, NULL);
+
+ return 0;
+}
+
+static int variable_exists_read(struct ast_channel *chan, const char *cmd, char *data,
+ char *buf, size_t len)
+{
+ const char *var = pbx_builtin_getvar_helper(chan, data);
+
+ strcpy(buf, var ? "1" : "0");
+
+ return 0;
+}
+
static struct ast_custom_function isnull_function = {
.name = "ISNULL",
.read = isnull,
.read2 = import_read2,
};
+static struct ast_custom_function delete_function = {
+ .name = "DELETE",
+ .write = delete_write,
+};
+
+static struct ast_custom_function variable_exists_function = {
+ .name = "VARIABLE_EXISTS",
+ .read = variable_exists_read,
+};
+
static int unload_module(void)
{
int res = 0;
res |= ast_custom_function_unregister(&if_function);
res |= ast_custom_function_unregister(&if_time_function);
res |= ast_custom_function_unregister(&import_function);
+ res |= ast_custom_function_unregister(&delete_function);
+ res |= ast_custom_function_unregister(&variable_exists_function);
return res;
}
res |= ast_custom_function_register(&if_function);
res |= ast_custom_function_register(&if_time_function);
res |= ast_custom_function_register(&import_function);
+ res |= ast_custom_function_register(&delete_function);
+ res |= ast_custom_function_register(&variable_exists_function);
return res;
}