From 65203b12dd5a3185d02cb6601f91556d5fde4a54 Mon Sep 17 00:00:00 2001 From: Olle Johansson <oej@edvina.net> Date: Fri, 16 Jul 2010 09:25:48 +0000 Subject: [PATCH] Add a dialplan function to check if a queue exists: QUEUE_EXISTS Review: https://reviewboard.asterisk.org/r/777/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@276950 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CHANGES | 1 + apps/app_queue.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/CHANGES b/CHANGES index a68e225973..2ec0534557 100644 --- a/CHANGES +++ b/CHANGES @@ -267,6 +267,7 @@ Queue changes result is that if a member becomes auto-paused, he will be paused in all queues for which he is a member, not just the queue that failed to reach the member. + * Added dialplan function QUEUE_EXISTS to check if a queue exists mISDN channel driver (chan_misdn) changes ---------------------------------------- diff --git a/apps/app_queue.c b/apps/app_queue.c index 11de4d903a..286d7a9494 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -469,6 +469,17 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") <ref type="function">QUEUE_MEMBER_LIST</ref> </see-also> </function> + <function name="QUEUE_EXISTS" language="en_US"> + <synopsis> + Check if a named queue exists on this server + </synopsis> + <syntax> + <parameter name="queuename" /> + </syntax> + <description> + <para>Returns 1 if the specified queue exists, 0 if it does not</para> + </description> + </function> <function name="QUEUE_WAITING_COUNT" language="en_US"> <synopsis> Count number of calls currently waiting in a queue. @@ -5926,6 +5937,29 @@ static int queue_function_var(struct ast_channel *chan, const char *cmd, char *d return 0; } +/*! + * \brief Check if a given queue exists + * + */ +static int queue_function_exists(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) +{ + struct call_queue *q; + + buf[0] = '\0'; + + if (ast_strlen_zero(data)) { + ast_log(LOG_ERROR, "%s requires an argument: queuename\n", cmd); + return -1; + } + q = load_realtime_queue(data); + snprintf(buf, len, "%d", q != NULL? 1 : 0); + if (q) { + queue_t_unref(q, "Done with temporary reference in QUEUE_EXISTS()"); + } + + return 0; +} + /*! * \brief Get number either busy / free / ready or total members of a specific queue * \retval number of members (busy / free / ready / total) @@ -6192,6 +6226,11 @@ static int queue_function_memberpenalty_write(struct ast_channel *chan, const ch return 0; } +static struct ast_custom_function queueexists_function = { + .name = "QUEUE_EXISTS", + .read = queue_function_exists, +}; + static struct ast_custom_function queuevar_function = { .name = "QUEUE_VARIABLES", .read = queue_function_var, @@ -8038,6 +8077,7 @@ static int unload_module(void) res |= ast_unregister_application(app_upqm); res |= ast_unregister_application(app_ql); res |= ast_unregister_application(app); + res |= ast_custom_function_unregister(&queueexists_function); res |= ast_custom_function_unregister(&queuevar_function); res |= ast_custom_function_unregister(&queuemembercount_function); res |= ast_custom_function_unregister(&queuemembercount_dep); @@ -8112,6 +8152,7 @@ static int load_module(void) res |= ast_manager_register_xml("QueueReload", 0, manager_queue_reload); res |= ast_manager_register_xml("QueueReset", 0, manager_queue_reset); res |= ast_custom_function_register(&queuevar_function); + res |= ast_custom_function_register(&queueexists_function); res |= ast_custom_function_register(&queuemembercount_function); res |= ast_custom_function_register(&queuemembercount_dep); res |= ast_custom_function_register(&queuememberlist_function); -- GitLab