diff --git a/daemon/call.h b/daemon/call.h index fe451b3bf..379a3b8fc 100644 --- a/daemon/call.h +++ b/daemon/call.h @@ -369,6 +369,7 @@ const char *call_offer_ng(bencode_item_t *, struct callmaster *, bencode_item_t const char *call_answer_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); const char *call_delete_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); const char *call_query_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); +const char *call_list_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); void calls_dump_redis(struct callmaster *); diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index ec62ddfc0..ebfbb5c7a 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -845,6 +845,21 @@ stats: ng_stats(bencode_dictionary_add_dictionary(dict, "RTCP"), &totals->totals[1], NULL); } +void ng_list_add_call(gpointer key, gpointer value, gpointer user_data) { + + bencode_item_t *output = (bencode_item_t *) user_data; + + bencode_list_add_str(output, key); +} + +void ng_list_calls( struct callmaster *m, bencode_item_t *output) { + rwlock_lock_r(&m->hashlock); + g_hash_table_foreach (m->callhash, ng_list_add_call, output); + rwlock_unlock_r(&m->hashlock); +} + + + const char *call_query_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) { str callid, fromtag, totag; struct call *call; @@ -864,3 +879,14 @@ const char *call_query_ng(bencode_item_t *input, struct callmaster *m, bencode_i return NULL; } + + +const char *call_list_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) { + bencode_item_t *calls = NULL; + + bencode_dictionary_add_string(output, "result", "ok"); + calls = bencode_dictionary_add_list(output, "calls"); + ng_list_calls(m, calls); + + return NULL; +} diff --git a/daemon/control_ng.c b/daemon/control_ng.c index 2c22a0536..8e9696d3f 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -117,6 +117,8 @@ static void control_ng_incoming(struct obj *obj, str *buf, struct sockaddr_in6 * errstr = call_delete_ng(dict, c->callmaster, resp); else if (!str_cmp(&cmd, "query")) errstr = call_query_ng(dict, c->callmaster, resp); + else if (!str_cmp(&cmd, "list")) + errstr = call_list_ng(dict, c->callmaster, resp); else errstr = "Unrecognized command";