mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-31 18:55:19 +00:00
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: https://origsvn.digium.com/svn/asterisk/trunk@87395 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -79,6 +79,11 @@ Applications:
|
|||||||
these functions in any location where you desire to ensure that only one
|
these functions in any location where you desire to ensure that only one
|
||||||
channel is executing that path at any one time.
|
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:
|
CDR:
|
||||||
|
|
||||||
* The cdr_sqlite module has been marked as deprecated in favor of
|
* The cdr_sqlite module has been marked as deprecated in favor of
|
||||||
|
|||||||
@@ -4033,6 +4033,67 @@ static int queue_function_qac(struct ast_channel *chan, const char *cmd, char *d
|
|||||||
struct call_queue *q, tmpq;
|
struct call_queue *q, tmpq;
|
||||||
struct member *m;
|
struct member *m;
|
||||||
struct ao2_iterator mem_iter;
|
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';
|
buf[0] = '\0';
|
||||||
|
|
||||||
@@ -4063,6 +4124,7 @@ static int queue_function_qac(struct ast_channel *chan, const char *cmd, char *d
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int queue_function_queuewaitingcount(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
|
static int queue_function_queuewaitingcount(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@@ -4156,12 +4218,26 @@ static struct ast_custom_function queuevar_function = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct ast_custom_function queuemembercount_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",
|
.name = "QUEUE_MEMBER_COUNT",
|
||||||
.synopsis = "Count number of members answering a queue",
|
.synopsis = "Count number of members answering a queue",
|
||||||
.syntax = "QUEUE_MEMBER_COUNT(<queuename>)",
|
.syntax = "QUEUE_MEMBER_COUNT(<queuename>)",
|
||||||
.desc =
|
.desc =
|
||||||
"Returns the number of members currently associated with the specified queue.\n",
|
"Returns the number of members currently associated with the specified queue.\n\n"
|
||||||
.read = queue_function_qac,
|
"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 = {
|
static struct ast_custom_function queuewaitingcount_function = {
|
||||||
@@ -5132,6 +5208,7 @@ static int unload_module(void)
|
|||||||
res |= ast_unregister_application(app);
|
res |= ast_unregister_application(app);
|
||||||
res |= ast_custom_function_unregister(&queuevar_function);
|
res |= ast_custom_function_unregister(&queuevar_function);
|
||||||
res |= ast_custom_function_unregister(&queuemembercount_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(&queuememberlist_function);
|
||||||
res |= ast_custom_function_unregister(&queuewaitingcount_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_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(&queuevar_function);
|
||||||
res |= ast_custom_function_register(&queuemembercount_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(&queuememberlist_function);
|
||||||
res |= ast_custom_function_register(&queuewaitingcount_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)))
|
if (!(device_state_sub = ast_event_subscribe(AST_EVENT_DEVICE_STATE, device_state_cb, NULL, AST_EVENT_IE_END)))
|
||||||
|
|||||||
Reference in New Issue
Block a user