From faeaff33bb0de3f94c781de2f90afd10c81f22dc Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Wed, 29 Aug 2007 16:39:40 +0000 Subject: Merged revisions 81349 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r81349 | mmichelson | 2007-08-29 11:35:29 -0500 (Wed, 29 Aug 2007) | 12 lines This patch, in essence, will correctly pause a realtime queue member and reflect those changes in the realtime engine. (issue #10424, reported by irroot, patch by me) This patch creates a new function called update_realtime_member_field, which is a generic function which will allow any one field of a realtime queue member to be updated. This patch only uses this function to update the paused status of a queue member, but it lays the foundation for persisting the state of a realtime member the same way that static members' state is maintained when using the persistentmembers setting ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81350 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_queue.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'apps') diff --git a/apps/app_queue.c b/apps/app_queue.c index b57db57da..828a72be5 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1265,6 +1265,25 @@ static struct call_queue *load_realtime_queue(const char *queuename) return q; } +static int update_realtime_member_field(struct member *mem, const char *queue_name, const char *field, const char *value) +{ + struct ast_variable *var; + int ret = -1; + + if(!(var = ast_load_realtime("queue_members", "interface", mem->interface, "queue_name", queue_name, NULL))) + return ret; + while (var) { + if(!strcmp(var->name, "uniqueid")) + break; + var = var->next; + } + if(var && !ast_strlen_zero(var->value)) { + if ((ast_update_realtime("queue_members", "uniqueid", var->value, field, value, NULL)) > -1) + ret = 0; + } + return ret; +} + static void update_realtime_members(struct call_queue *q) { struct ast_config *member_config = NULL; @@ -3173,6 +3192,9 @@ static int set_member_paused(const char *queuename, const char *interface, int p if (queue_persistent_members) dump_queue_members(q); + if(mem->realtime) + update_realtime_member_field(mem, queuename, "paused", paused ? "1" : "0"); + ast_queue_log(q->name, "NONE", mem->membername, (paused ? "PAUSE" : "UNPAUSE"), "%s", ""); manager_event(EVENT_FLAG_AGENT, "QueueMemberPaused", -- cgit v1.2.3