diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-10-29 20:13:23 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-10-29 20:13:23 +0000 |
commit | ad6d79e68b80de4184c7e51627a677a507b29add (patch) | |
tree | 0a372cee2b1a1b5778c1fc800f2dc7bcb4fa325d | |
parent | c3322f662bffd6ed77c36d74ba06353b85aa5003 (diff) |
Adding the more flexible QUEUE_MEMBER function to replace the QUEUE_MEMBER_COUNT function.
A deprecation notice will be issued the first time QUEUE_MEMBER_COUNT is used.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@87395 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | UPGRADE.txt | 5 | ||||
-rw-r--r-- | apps/app_queue.c | 82 |
2 files changed, 85 insertions, 2 deletions
diff --git a/UPGRADE.txt b/UPGRADE.txt index 3036d0e0b..48c4eb5cd 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -79,6 +79,11 @@ Applications: these functions in any location where you desire to ensure that only one channel is executing that path at any one time. +Dialplan Functions: + +* QUEUE_MEMBER_COUNT() has been deprecated in favor of the QUEUE_MEMBER() function. For + more information, issue a "show function QUEUE_MEMBER" from the CLI. + CDR: * The cdr_sqlite module has been marked as deprecated in favor of diff --git a/apps/app_queue.c b/apps/app_queue.c index d62acb490..5ac4c26fb 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -4033,6 +4033,67 @@ static int queue_function_qac(struct ast_channel *chan, const char *cmd, char *d struct call_queue *q, tmpq; struct member *m; struct ao2_iterator mem_iter; + char *queuename, *option; + + buf[0] = '\0'; + + if (ast_strlen_zero(data)) { + ast_log(LOG_ERROR, "%s requires an argument: queuename\n", cmd); + return -1; + } + + queuename = data; + if ((option = strchr(data, ','))) + *option++ = '\0'; + else + option = "logged"; + + ast_copy_string(tmpq.name, queuename, sizeof(tmpq.name)); + + if ((q = ao2_find(queues, &tmpq, OBJ_POINTER))) { + ao2_lock(q); + if(!strcasecmp(option, "logged")) { + mem_iter = ao2_iterator_init(q->members, 0); + while ((m = ao2_iterator_next(&mem_iter))) { + /* Count the agents who are logged in and presently answering calls */ + if ((m->status != AST_DEVICE_UNAVAILABLE) && (m->status != AST_DEVICE_INVALID)) { + count++; + } + ao2_ref(m, -1); + } + } else if(!strcasecmp(option, "free")) { + mem_iter = ao2_iterator_init(q->members, 0); + while ((m = ao2_iterator_next(&mem_iter))) { + /* Count the agents who are logged in and presently answering calls */ + if ((m->status == AST_DEVICE_NOT_INUSE) && (!m->paused)) { + count++; + } + ao2_ref(m, -1); + } + } else /* must be "count" */ + count = q->membercount; + ao2_unlock(q); + queue_unref(q); + } else + ast_log(LOG_WARNING, "queue %s was not found\n", data); + + snprintf(buf, len, "%d", count); + + return 0; +} + +static int queue_function_qac_dep(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) +{ + int count = 0; + struct call_queue *q, tmpq; + struct member *m; + struct ao2_iterator mem_iter; + static int depflag = 1; + if(depflag) + { + depflag = 0; + ast_log(LOG_NOTICE, "The function QUEUE_MEMBER_COUNT has been deprecated in favor of the QUEUE_MEMBER function and will not be in further releases.\n"); + } buf[0] = '\0'; @@ -4063,6 +4124,7 @@ static int queue_function_qac(struct ast_channel *chan, const char *cmd, char *d return 0; } + static int queue_function_queuewaitingcount(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) { int count = 0; @@ -4156,12 +4218,26 @@ static struct ast_custom_function queuevar_function = { }; static struct ast_custom_function queuemembercount_function = { + .name = "QUEUE_MEMBER", + .synopsis = "Count number of members answering a queue", + .syntax = "QUEUE_MEMBER(<queuename>, <option>)", + .desc = +"Returns the number of members currently associated with the specified queue.\n" +"One of three options may be passed to determine the count returned:\n" + "\"logged\" - Returns the number of logged-in members for the specified queue\n" + "\"free\" - Returns the number of logged-in members for the specified queue available to take a call\n" + "\"count\" - Returns the total number of members for the specified queue\n", + .read = queue_function_qac, +}; + +static struct ast_custom_function queuemembercount_dep = { .name = "QUEUE_MEMBER_COUNT", .synopsis = "Count number of members answering a queue", .syntax = "QUEUE_MEMBER_COUNT(<queuename>)", .desc = -"Returns the number of members currently associated with the specified queue.\n", - .read = queue_function_qac, +"Returns the number of members currently associated with the specified queue.\n\n" +"This function has been deprecated in favor of the QUEUE_MEMBER function\n", + .read = queue_function_qac_dep, }; static struct ast_custom_function queuewaitingcount_function = { @@ -5132,6 +5208,7 @@ static int unload_module(void) res |= ast_unregister_application(app); res |= ast_custom_function_unregister(&queuevar_function); res |= ast_custom_function_unregister(&queuemembercount_function); + res |= ast_custom_function_unregister(&queuemembercount_dep); res |= ast_custom_function_unregister(&queuememberlist_function); res |= ast_custom_function_unregister(&queuewaitingcount_function); @@ -5190,6 +5267,7 @@ static int load_module(void) res |= ast_manager_register("QueueLog", EVENT_FLAG_AGENT, manager_queue_log_custom, "Adds custom entry in queue_log"); res |= ast_custom_function_register(&queuevar_function); res |= ast_custom_function_register(&queuemembercount_function); + res |= ast_custom_function_register(&queuemembercount_dep); res |= ast_custom_function_register(&queuememberlist_function); res |= ast_custom_function_register(&queuewaitingcount_function); if (!(device_state_sub = ast_event_subscribe(AST_EVENT_DEVICE_STATE, device_state_cb, NULL, AST_EVENT_IE_END))) |