MT#55283 add .dict_add_dict_dup method

Change-Id: I9942965d7579a3d3a00147ef185c183ad0ea93c4
pull/1848/head
Richard Fuchs 2 years ago
parent 8aba2b3e6f
commit 93653fe562

@ -2511,9 +2511,9 @@ static void ng_stats_monologue(const ng_parser_t *parser, bencode_item_t *dict,
if (ml->tag.len) if (ml->tag.len)
sub = parser->dict_add_dict(dict, ml->tag.s); sub = parser->dict_add_dict(dict, ml->tag.s);
else { else {
char *buf = bencode_buffer_alloc(dict->buffer, 32); char buf[32];
snprintf(buf, 32, "<untagged %u>", ml->unique_id); snprintf(buf, sizeof(buf), "<untagged %u>", ml->unique_id);
sub = parser->dict_add_dict(dict, buf); sub = parser->dict_add_dict_dup(dict, buf);
} }
parser->dict_add_str(sub, "tag", &ml->tag); parser->dict_add_str(sub, "tag", &ml->tag);
@ -2625,14 +2625,14 @@ static void ng_stats_ssrc(const ng_parser_t *parser, bencode_item_t *dict, struc
for (GList *l = ll; l; l = l->next) { for (GList *l = ll; l; l = l->next) {
struct ssrc_entry_call *se = l->data; struct ssrc_entry_call *se = l->data;
char *tmp = bencode_buffer_alloc(dict->buffer, 12); char tmp[12];
snprintf(tmp, 12, "%" PRIu32, se->h.ssrc); snprintf(tmp, sizeof(tmp), "%" PRIu32, se->h.ssrc);
if (parser->dict_contains(dict, tmp)) if (parser->dict_contains(dict, tmp))
continue; continue;
if (!se->stats_blocks.length || !se->lowest_mos || !se->highest_mos) if (!se->stats_blocks.length || !se->lowest_mos || !se->highest_mos)
continue; continue;
bencode_item_t *ent = parser->dict_add_dict(dict, tmp); bencode_item_t *ent = parser->dict_add_dict_dup(dict, tmp);
parser->dict_add_int(ent, "cumulative loss", se->packets_lost); parser->dict_add_int(ent, "cumulative loss", se->packets_lost);

@ -145,6 +145,12 @@ static parser_arg __bencode_dictionary_get_expect(bencode_item_t *arg, const cha
static bool __bencode_dictionary_contains(bencode_item_t *d, const char *ele) { static bool __bencode_dictionary_contains(bencode_item_t *d, const char *ele) {
return bencode_dictionary_get(d, ele) != NULL; return bencode_dictionary_get(d, ele) != NULL;
} }
static bencode_item_t *__bencode_dictionary_add_dictionary_dup(bencode_item_t *n, const char *e) {
size_t len = strlen(e) + 1;
char *s = bencode_buffer_alloc(n->buffer, len);
memcpy(s, e, len);
return bencode_dictionary_add_dictionary(n, s);
}
static bool json_is_dict(JsonNode *n) { static bool json_is_dict(JsonNode *n) {
return json_node_get_node_type(n) == JSON_NODE_OBJECT; return json_node_get_node_type(n) == JSON_NODE_OBJECT;
@ -341,6 +347,7 @@ const ng_parser_t ng_parser_native = {
.dict_add_str_dup = bencode_dictionary_add_str_dup, .dict_add_str_dup = bencode_dictionary_add_str_dup,
.dict_add_int = bencode_dictionary_add_integer, .dict_add_int = bencode_dictionary_add_integer,
.dict_add_dict = bencode_dictionary_add_dictionary, .dict_add_dict = bencode_dictionary_add_dictionary,
.dict_add_dict_dup = __bencode_dictionary_add_dictionary_dup,
.dict_add_list = bencode_dictionary_add_list, .dict_add_list = bencode_dictionary_add_list,
.list = __bencode_list, .list = __bencode_list,
.list_add = bencode_list_add, .list_add = bencode_list_add,
@ -371,6 +378,7 @@ const ng_parser_t ng_parser_json = {
.dict_add_str_dup = bencode_dictionary_add_str_dup, .dict_add_str_dup = bencode_dictionary_add_str_dup,
.dict_add_int = bencode_dictionary_add_integer, .dict_add_int = bencode_dictionary_add_integer,
.dict_add_dict = bencode_dictionary_add_dictionary, .dict_add_dict = bencode_dictionary_add_dictionary,
.dict_add_dict_dup = __bencode_dictionary_add_dictionary_dup,
.dict_add_list = bencode_dictionary_add_list, .dict_add_list = bencode_dictionary_add_list,
.list = __bencode_list, .list = __bencode_list,
.list_add = bencode_list_add, .list_add = bencode_list_add,

@ -140,6 +140,7 @@ struct ng_parser {
void (*dict_add_str_dup)(parser_arg, const char *, const str *); void (*dict_add_str_dup)(parser_arg, const char *, const str *);
void (*dict_add_int)(parser_arg, const char *, long long); void (*dict_add_int)(parser_arg, const char *, long long);
bencode_item_t *(*dict_add_dict)(parser_arg, const char *); bencode_item_t *(*dict_add_dict)(parser_arg, const char *);
bencode_item_t *(*dict_add_dict_dup)(parser_arg, const char *);
bencode_item_t *(*dict_add_list)(parser_arg, const char *); bencode_item_t *(*dict_add_list)(parser_arg, const char *);
parser_arg (*list)(ng_parser_ctx_t *); parser_arg (*list)(ng_parser_ctx_t *);
bencode_item_t *(*list_add)(parser_arg, parser_arg); bencode_item_t *(*list_add)(parser_arg, parser_arg);

Loading…
Cancel
Save