Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 112598) +++ apps/app_queue.c (working copy) @@ -1408,6 +1408,8 @@ int pos = 0; int inserted = 0; enum queue_member_status stat; + char timebuf[20] = "0"; + char priobuf[5] = "0"; if (!(q = load_realtime_queue(queuename))) return res; @@ -1456,6 +1458,27 @@ S_OR(qe->chan->cid.cid_num, "unknown"), /* XXX somewhere else it is */ S_OR(qe->chan->cid.cid_name, "unknown"), q->name, qe->pos, q->count, qe->chan->uniqueid ); + + /* Add to realtime caller list. + * Position is not stored, as it changes often, but + * can be calculated from started time and priority + */ + + if (ast_check_realtime("queue_callers")) { + snprintf(timebuf, sizeof(timebuf), "%ld", (long)(qe->start)); + snprintf(priobuf, sizeof(priobuf), "%d", qe->prio); + ast_store_realtime("queue_callers", + "queue",q->name, + "uniqueid",qe->chan->uniqueid, + "channel",qe->chan->name, + "priority",priobuf, + "callerid_name",qe->chan->cid.cid_name, + "callerid_num",qe->chan->cid.cid_num, + "accountcode",qe->chan->accountcode, + "started",timebuf, + NULL); + } + if (option_debug) ast_log(LOG_DEBUG, "Queue '%s' Join, Channel '%s', Position '%d'\n", q->name, qe->chan->name, qe->pos ); } @@ -1654,6 +1677,12 @@ manager_event(EVENT_FLAG_CALL, "Leave", "Channel: %s\r\nQueue: %s\r\nCount: %d\r\nUniqueid: %s\r\n", qe->chan->name, q->name, q->count, qe->chan->uniqueid); + + /* Remove from realtime caller list */ + if (ast_check_realtime("queue_callers")) { + ast_destroy_realtime("queue_callers","uniqueid",qe->chan->uniqueid,NULL); + } + if (option_debug) ast_log(LOG_DEBUG, "Queue '%s' Leave, Channel '%s'\n", q->name, qe->chan->name ); /* Take us out of the queue */ @@ -4895,6 +4924,10 @@ clear_and_free_interfaces(); + if (ast_check_realtime("queue_callers")) { + ast_destroy_realtime("queue_callers", "1", "1", NULL); + } + return res; } @@ -4908,6 +4941,10 @@ if (queue_persistent_members) reload_queue_members(); + if (ast_check_realtime("queue_callers")) { + ast_destroy_realtime("queue_callers", "1", "1", NULL); + } + ast_mutex_init(&device_state.lock); ast_cond_init(&device_state.cond, NULL); ast_pthread_create(&device_state.thread, NULL, device_state_thread, NULL);