mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
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/branches/1.4@81349 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1124,6 +1124,25 @@ static struct call_queue *find_queue_by_name_rt(const char *queuename, struct as
|
||||
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;
|
||||
@@ -2963,6 +2982,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",
|
||||
|
Reference in New Issue
Block a user