MT#55283 add abstract .dict_add_list()

Change-Id: I6e4530701c760101fd4a07c220d7bf85119cf876
pull/1848/head
Richard Fuchs 9 months ago
parent af3459b85e
commit 5ccdb6c804

@ -2243,7 +2243,7 @@ static const char *call_offer_answer_ng(ng_parser_ctx_t *ctx, enum call_opmode o
meta_write_sdp_after(recording, chopper->output, meta_write_sdp_after(recording, chopper->output,
from_ml, opmode); from_ml, opmode);
recording_response(recording, output); recording_response(recording, ctx->parser, output);
} }
dequeue_sdp_fragments(from_ml); dequeue_sdp_fragments(from_ml);
@ -2355,10 +2355,11 @@ static void ng_stats_endpoint(const ng_parser_t *parser, bencode_item_t *dict, c
bencode_dictionary_add_integer(dict, "port", ep->port); bencode_dictionary_add_integer(dict, "port", ep->port);
} }
static void ng_stats_stream_ssrc(bencode_item_t *dict, struct ssrc_ctx *const ssrcs[RTPE_NUM_SSRC_TRACKING], static void ng_stats_stream_ssrc(const ng_parser_t *parser, bencode_item_t *dict,
struct ssrc_ctx *const ssrcs[RTPE_NUM_SSRC_TRACKING],
const char *label) const char *label)
{ {
bencode_item_t *list = bencode_dictionary_add_list(dict, label); bencode_item_t *list = parser->dict_add_list(dict, label);
for (int i = 0; i < RTPE_NUM_SSRC_TRACKING; i++) { for (int i = 0; i < RTPE_NUM_SSRC_TRACKING; i++) {
struct ssrc_ctx *c = ssrcs[i]; struct ssrc_ctx *c = ssrcs[i];
@ -2404,7 +2405,7 @@ static void ng_stats_stream(const ng_parser_t *parser, bencode_item_t *list, con
bencode_dictionary_add_integer(dict, "last kernel packet", atomic64_get_na(&ps->stats_in->last_packet)); bencode_dictionary_add_integer(dict, "last kernel packet", atomic64_get_na(&ps->stats_in->last_packet));
bencode_dictionary_add_integer(dict, "last user packet", atomic64_get_na(&ps->last_packet)); bencode_dictionary_add_integer(dict, "last user packet", atomic64_get_na(&ps->last_packet));
flags = bencode_dictionary_add_list(dict, "flags"); flags = parser->dict_add_list(dict, "flags");
BF_PS("RTP", RTP); BF_PS("RTP", RTP);
BF_PS("RTCP", RTCP); BF_PS("RTCP", RTCP);
@ -2418,8 +2419,8 @@ static void ng_stats_stream(const ng_parser_t *parser, bencode_item_t *list, con
BF_PS("media handover", MEDIA_HANDOVER); BF_PS("media handover", MEDIA_HANDOVER);
BF_PS("ICE", ICE); BF_PS("ICE", ICE);
ng_stats_stream_ssrc(dict, ps->ssrc_in, "ingress SSRCs"); ng_stats_stream_ssrc(parser, dict, ps->ssrc_in, "ingress SSRCs");
ng_stats_stream_ssrc(dict, ps->ssrc_out, "egress SSRCs"); ng_stats_stream_ssrc(parser, dict, ps->ssrc_out, "egress SSRCs");
stats: stats:
if (totals->last_packet < packet_stream_last_packet(ps)) if (totals->last_packet < packet_stream_last_packet(ps))
@ -2456,9 +2457,9 @@ static void ng_stats_media(const ng_parser_t *parser, bencode_item_t *list, cons
if (rtp_pt) if (rtp_pt)
bencode_dictionary_add_str_dup(dict, "codec", &rtp_pt->encoding_with_params); bencode_dictionary_add_str_dup(dict, "codec", &rtp_pt->encoding_with_params);
streams = bencode_dictionary_add_list(dict, "streams"); streams = parser->dict_add_list(dict, "streams");
flags = bencode_dictionary_add_list(dict, "flags"); flags = parser->dict_add_list(dict, "flags");
BF_M("initialized", INITIALIZED); BF_M("initialized", INITIALIZED);
BF_M("asymmetric", ASYMMETRIC); BF_M("asymmetric", ASYMMETRIC);
@ -2526,8 +2527,8 @@ static void ng_stats_monologue(const ng_parser_t *parser, bencode_item_t *dict,
parser->dict_add_str(sub, "label", &ml->label); parser->dict_add_str(sub, "label", &ml->label);
bencode_dictionary_add_integer(sub, "created", ml->created); bencode_dictionary_add_integer(sub, "created", ml->created);
bencode_item_t *b_subscriptions = bencode_dictionary_add_list(sub, "subscriptions"); bencode_item_t *b_subscriptions = parser->dict_add_list(sub, "subscriptions");
bencode_item_t *b_subscribers = bencode_dictionary_add_list(sub, "subscribers"); bencode_item_t *b_subscribers = parser->dict_add_list(sub, "subscribers");
for (int i = 0; i < ml->medias->len; i++) for (int i = 0; i < ml->medias->len; i++)
{ {
struct call_media * media = ml->medias->pdata[i]; struct call_media * media = ml->medias->pdata[i];
@ -2562,9 +2563,9 @@ static void ng_stats_monologue(const ng_parser_t *parser, bencode_item_t *dict,
ng_stats_ssrc(parser, ssrc, ml->ssrc_hash); ng_stats_ssrc(parser, ssrc, ml->ssrc_hash);
medias = bencode_dictionary_add_list(sub, "medias"); medias = parser->dict_add_list(sub, "medias");
bencode_item_t *list = bencode_dictionary_add_list(sub, "VSC"); bencode_item_t *list = parser->dict_add_list(sub, "VSC");
for (unsigned int i = 0; i < ml->num_dtmf_triggers; i++) { for (unsigned int i = 0; i < ml->num_dtmf_triggers; i++) {
const struct dtmf_trigger_state *state = &ml->dtmf_trigger_state[i]; const struct dtmf_trigger_state *state = &ml->dtmf_trigger_state[i];
if (state->trigger.len == 0) if (state->trigger.len == 0)
@ -2652,7 +2653,7 @@ static void ng_stats_ssrc(const ng_parser_t *parser, bencode_item_t *dict, struc
interval /= 10; interval /= 10;
bencode_dictionary_add_integer(progdict, "interval", interval); bencode_dictionary_add_integer(progdict, "interval", interval);
time_t next_step = sb->reported.tv_sec; time_t next_step = sb->reported.tv_sec;
bencode_item_t *entlist = bencode_dictionary_add_list(progdict, "entries"); bencode_item_t *entlist = parser->dict_add_list(progdict, "entries");
for (; listent; listent = listent->next) { for (; listent; listent = listent->next) {
sb = listent->data; sb = listent->data;
@ -2790,7 +2791,7 @@ const char *call_list_ng(ng_parser_ctx_t *ctx) {
if (limit < 0) { if (limit < 0) {
return "invalid limit, must be >= 0"; return "invalid limit, must be >= 0";
} }
calls = bencode_dictionary_add_list(output, "calls"); calls = ctx->parser->dict_add_list(output, "calls");
ng_list_calls(calls, limit); ng_list_calls(calls, limit);
@ -3752,10 +3753,10 @@ const char *call_subscribe_request_ng(ng_parser_ctx_t *ctx) {
} }
bencode_item_t *tag_medias = NULL, *media_labels = NULL; bencode_item_t *tag_medias = NULL, *media_labels = NULL;
if (flags.siprec) { if (flags.siprec) {
tag_medias = bencode_dictionary_add_list(output, "tag-medias"); tag_medias = ctx->parser->dict_add_list(output, "tag-medias");
media_labels = ctx->parser->dict_add_dict(output, "media-labels"); media_labels = ctx->parser->dict_add_dict(output, "media-labels");
} }
bencode_item_t *from_list = bencode_dictionary_add_list(output, "from-tags"); bencode_item_t *from_list = ctx->parser->dict_add_list(output, "from-tags");
for (__auto_type l = srms.head; l; l = l->next) { for (__auto_type l = srms.head; l; l = l->next) {
struct media_subscription *ms = l->data; struct media_subscription *ms = l->data;
struct call_monologue *source_ml = ms->monologue; struct call_monologue *source_ml = ms->monologue;
@ -3765,7 +3766,7 @@ const char *call_subscribe_request_ng(ng_parser_ctx_t *ctx) {
ctx->parser->dict_add_str(tag_label, "tag", &source_ml->tag); ctx->parser->dict_add_str(tag_label, "tag", &source_ml->tag);
if (source_ml->label.len) if (source_ml->label.len)
ctx->parser->dict_add_str(tag_label, "label", &source_ml->label); ctx->parser->dict_add_str(tag_label, "label", &source_ml->label);
bencode_item_t *medias = bencode_dictionary_add_list(tag_label, "medias"); bencode_item_t *medias = ctx->parser->dict_add_list(tag_label, "medias");
for (unsigned int i = 0; i < source_ml->medias->len; i++) { for (unsigned int i = 0; i < source_ml->medias->len; i++) {
struct call_media *media = source_ml->medias->pdata[i]; struct call_media *media = source_ml->medias->pdata[i];
if (!media) if (!media)

@ -145,6 +145,7 @@ const ng_parser_t ng_parser_native = {
.dict_add_string = bencode_dictionary_add_string, .dict_add_string = bencode_dictionary_add_string,
.dict_add_str = bencode_dictionary_add_str, .dict_add_str = bencode_dictionary_add_str,
.dict_add_dict = bencode_dictionary_add_dictionary, .dict_add_dict = bencode_dictionary_add_dictionary,
.dict_add_list = bencode_dictionary_add_list,
}; };
const ng_parser_t ng_parser_json = { const ng_parser_t ng_parser_json = {
.collapse = bencode_collapse_str_json, .collapse = bencode_collapse_str_json,
@ -160,6 +161,7 @@ const ng_parser_t ng_parser_json = {
.dict_add_string = bencode_dictionary_add_string, .dict_add_string = bencode_dictionary_add_string,
.dict_add_str = bencode_dictionary_add_str, .dict_add_str = bencode_dictionary_add_str,
.dict_add_dict = bencode_dictionary_add_dictionary, .dict_add_dict = bencode_dictionary_add_dictionary,
.dict_add_list = bencode_dictionary_add_list,
}; };

@ -57,7 +57,7 @@ static void rec_pcap_init(call_t *);
static void sdp_after_pcap(struct recording *, GString *str, struct call_monologue *, enum call_opmode opmode); static void sdp_after_pcap(struct recording *, GString *str, struct call_monologue *, enum call_opmode opmode);
static void dump_packet_pcap(struct media_packet *mp, const str *s); static void dump_packet_pcap(struct media_packet *mp, const str *s);
static void finish_pcap(call_t *, bool discard); static void finish_pcap(call_t *, bool discard);
static void response_pcap(struct recording *, bencode_item_t *); static void response_pcap(struct recording *, const ng_parser_t *, bencode_item_t *);
// proc methods // proc methods
static void proc_init(call_t *); static void proc_init(call_t *);
@ -755,11 +755,11 @@ static void finish_pcap(call_t *call, bool discard) {
rec_pcap_meta_discard_file(call); rec_pcap_meta_discard_file(call);
} }
static void response_pcap(struct recording *recording, bencode_item_t *output) { static void response_pcap(struct recording *recording, const ng_parser_t *parser, bencode_item_t *output) {
if (!recording->pcap.recording_path) if (!recording->pcap.recording_path)
return; return;
bencode_item_t *recordings = bencode_dictionary_add_list(output, "recordings"); bencode_item_t *recordings = parser->dict_add_list(output, "recordings");
bencode_list_add_string(recordings, recording->pcap.recording_path); bencode_list_add_string(recordings, recording->pcap.recording_path);
} }

@ -126,6 +126,7 @@ struct ng_parser {
void (*dict_add_string)(bencode_item_t *, const char *, const char *); void (*dict_add_string)(bencode_item_t *, const char *, const char *);
void (*dict_add_str)(bencode_item_t *, const char *, const str *); void (*dict_add_str)(bencode_item_t *, const char *, const str *);
bencode_item_t *(*dict_add_dict)(bencode_item_t *, const char *); bencode_item_t *(*dict_add_dict)(bencode_item_t *, const char *);
bencode_item_t *(*dict_add_list)(bencode_item_t *, const char *);
}; };
struct ng_parser_ctx { struct ng_parser_ctx {
const ng_parser_t *parser; const ng_parser_t *parser;

@ -70,7 +70,7 @@ struct recording_method {
void (*dump_packet)(struct media_packet *, const str *s); void (*dump_packet)(struct media_packet *, const str *s);
void (*finish)(call_t *, bool discard); void (*finish)(call_t *, bool discard);
void (*response)(struct recording *, bencode_item_t *); void (*response)(struct recording *, const ng_parser_t *, bencode_item_t *);
void (*init_stream_struct)(struct packet_stream *); void (*init_stream_struct)(struct packet_stream *);
void (*setup_stream)(struct packet_stream *); void (*setup_stream)(struct packet_stream *);

Loading…
Cancel
Save