From 671c163a60e30579fa9a4ca3104503402f9f75e9 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 1 Aug 2024 13:00:09 -0400 Subject: [PATCH] MT#55283 add dict_contains() method Change-Id: I908075e8e3ef9578abc426987e34c9d776203184 --- daemon/call_interfaces.c | 2 +- daemon/control_ng.c | 12 ++++++++++++ include/control_ng.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 89dd7b6e9..26fe6e7fd 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2627,7 +2627,7 @@ static void ng_stats_ssrc(const ng_parser_t *parser, bencode_item_t *dict, struc struct ssrc_entry_call *se = l->data; char *tmp = bencode_buffer_alloc(dict->buffer, 12); snprintf(tmp, 12, "%" PRIu32, se->h.ssrc); - if (bencode_dictionary_get(dict, tmp)) + if (parser->dict_contains(dict, tmp)) continue; if (!se->stats_blocks.length || !se->lowest_mos || !se->highest_mos) continue; diff --git a/daemon/control_ng.c b/daemon/control_ng.c index c4bbd821c..1d8b656fc 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -142,6 +142,9 @@ static void bencode_pretty_print(bencode_item_t *el, GString *s); static parser_arg __bencode_dictionary_get_expect(bencode_item_t *arg, const char *ele, bencode_type_t type) { return (parser_arg) bencode_dictionary_get_expect(arg, ele, type); } +static bool __bencode_dictionary_contains(bencode_item_t *d, const char *ele) { + return bencode_dictionary_get(d, ele) != NULL; +} static bool json_is_dict(JsonNode *n) { return json_node_get_node_type(n) == JSON_NODE_OBJECT; @@ -245,6 +248,13 @@ static parser_arg json_dict_get_expect(JsonNode *dict, const char *entry, bencod abort(); } } +static bool json_dict_contains(JsonNode *on, const char *ele) { + JsonObject *o = json_node_get_object(on); + if (!o) + return false; + JsonNode *n = json_object_get_member(o, ele); + return n != NULL; +} static void json_dict_iter_fn(JsonObject *o, const char *key, JsonNode *val, void *arg) { void **ptrs = arg; void (*callback)(ng_parser_ctx_t *, str *key, JsonNode *value, helper_arg) = ptrs[1]; @@ -324,6 +334,7 @@ const ng_parser_t ng_parser_native = { .dict_get_str = bencode_dictionary_get_str, .dict_get_int_str = bencode_dictionary_get_int_str, .dict_get_expect = __bencode_dictionary_get_expect, + .dict_contains = __bencode_dictionary_contains, .dict_add = bencode_dictionary_add, .dict_add_string = bencode_dictionary_add_string, .dict_add_str = bencode_dictionary_add_str, @@ -352,6 +363,7 @@ const ng_parser_t ng_parser_json = { .dict_get_str = json_dict_get_str, .dict_get_int_str = json_dict_get_int_str, .dict_get_expect = json_dict_get_expect, + .dict_contains = json_dict_contains, .dict_add = bencode_dictionary_add, .dict_add_string = bencode_dictionary_add_string, .dict_add_str = bencode_dictionary_add_str, diff --git a/include/control_ng.h b/include/control_ng.h index 6aafdf3be..da353cf7e 100644 --- a/include/control_ng.h +++ b/include/control_ng.h @@ -133,6 +133,7 @@ struct ng_parser { char *(*dict_get_str)(parser_arg, const char *, str *); long long (*dict_get_int_str)(parser_arg, const char *, long long def); parser_arg (*dict_get_expect)(parser_arg, const char *, bencode_type_t); + bool (*dict_contains)(parser_arg, const char *); bencode_item_t *(*dict_add)(parser_arg, const char *, parser_arg); void (*dict_add_string)(parser_arg, const char *, const char *); void (*dict_add_str)(parser_arg, const char *, const str *);