diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index d2fd2cc5b..04069a781 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -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, from_ml, opmode); - recording_response(recording, output); + recording_response(recording, ctx->parser, output); } 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); } -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) { - 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++) { 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 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("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("ICE", ICE); - ng_stats_stream_ssrc(dict, ps->ssrc_in, "ingress SSRCs"); - ng_stats_stream_ssrc(dict, ps->ssrc_out, "egress SSRCs"); + ng_stats_stream_ssrc(parser, dict, ps->ssrc_in, "ingress SSRCs"); + ng_stats_stream_ssrc(parser, dict, ps->ssrc_out, "egress SSRCs"); stats: 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) 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("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); bencode_dictionary_add_integer(sub, "created", ml->created); - bencode_item_t *b_subscriptions = bencode_dictionary_add_list(sub, "subscriptions"); - bencode_item_t *b_subscribers = bencode_dictionary_add_list(sub, "subscribers"); + bencode_item_t *b_subscriptions = parser->dict_add_list(sub, "subscriptions"); + bencode_item_t *b_subscribers = parser->dict_add_list(sub, "subscribers"); for (int i = 0; i < ml->medias->len; 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); - 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++) { const struct dtmf_trigger_state *state = &ml->dtmf_trigger_state[i]; 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; bencode_dictionary_add_integer(progdict, "interval", interval); 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) { sb = listent->data; @@ -2790,7 +2791,7 @@ const char *call_list_ng(ng_parser_ctx_t *ctx) { if (limit < 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); @@ -3752,10 +3753,10 @@ const char *call_subscribe_request_ng(ng_parser_ctx_t *ctx) { } bencode_item_t *tag_medias = NULL, *media_labels = NULL; 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"); } - 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) { struct media_subscription *ms = l->data; 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); if (source_ml->label.len) 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++) { struct call_media *media = source_ml->medias->pdata[i]; if (!media) diff --git a/daemon/control_ng.c b/daemon/control_ng.c index 6ecccf83f..5910b2648 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -145,6 +145,7 @@ const ng_parser_t ng_parser_native = { .dict_add_string = bencode_dictionary_add_string, .dict_add_str = bencode_dictionary_add_str, .dict_add_dict = bencode_dictionary_add_dictionary, + .dict_add_list = bencode_dictionary_add_list, }; const ng_parser_t ng_parser_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_str = bencode_dictionary_add_str, .dict_add_dict = bencode_dictionary_add_dictionary, + .dict_add_list = bencode_dictionary_add_list, }; diff --git a/daemon/recording.c b/daemon/recording.c index cda295f6e..0ff38bc59 100644 --- a/daemon/recording.c +++ b/daemon/recording.c @@ -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 dump_packet_pcap(struct media_packet *mp, const str *s); 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 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); } -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) 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); } diff --git a/include/control_ng.h b/include/control_ng.h index 4eaed282f..03a7736a7 100644 --- a/include/control_ng.h +++ b/include/control_ng.h @@ -126,6 +126,7 @@ struct ng_parser { void (*dict_add_string)(bencode_item_t *, const char *, const char *); 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_list)(bencode_item_t *, const char *); }; struct ng_parser_ctx { const ng_parser_t *parser; diff --git a/include/recording.h b/include/recording.h index b69607349..fa09d03ff 100644 --- a/include/recording.h +++ b/include/recording.h @@ -70,7 +70,7 @@ struct recording_method { void (*dump_packet)(struct media_packet *, const str *s); 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 (*setup_stream)(struct packet_stream *);