|
|
|
|
@ -1977,18 +1977,21 @@ static void json_build_ssrc_iter(const ng_parser_t *parser, parser_arg dict, hel
|
|
|
|
|
struct call_media *md = arg.md;
|
|
|
|
|
|
|
|
|
|
uint32_t ssrc = parser_get_ll(dict, "ssrc");
|
|
|
|
|
struct ssrc_entry_call *se = get_ssrc(ssrc, &md->ssrc_hash);
|
|
|
|
|
if (!se)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
atomic_set_na(&se->input_ctx.stats->ext_seq, parser_get_ll(dict, "in_srtp_index"));
|
|
|
|
|
atomic_set_na(&se->input_ctx.stats->rtcp_seq, parser_get_ll(dict, "in_srtcp_index"));
|
|
|
|
|
payload_tracker_add(&se->input_ctx.tracker, parser_get_ll(dict, "in_payload_type"));
|
|
|
|
|
atomic_set_na(&se->output_ctx.stats->ext_seq, parser_get_ll(dict, "out_srtp_index"));
|
|
|
|
|
atomic_set_na(&se->output_ctx.stats->rtcp_seq, parser_get_ll(dict, "out_srtcp_index"));
|
|
|
|
|
payload_tracker_add(&se->output_ctx.tracker, parser_get_ll(dict, "out_payload_type"));
|
|
|
|
|
struct ssrc_entry_call *se_in = get_ssrc(ssrc, &md->ssrc_hash_in);
|
|
|
|
|
struct ssrc_entry_call *se_out = get_ssrc(ssrc, &md->ssrc_hash_out);
|
|
|
|
|
|
|
|
|
|
obj_put(&se->h);
|
|
|
|
|
if (se_in) {
|
|
|
|
|
atomic_set_na(&se_in->input_ctx.stats->ext_seq, parser_get_ll(dict, "in_srtp_index"));
|
|
|
|
|
atomic_set_na(&se_in->input_ctx.stats->rtcp_seq, parser_get_ll(dict, "in_srtcp_index"));
|
|
|
|
|
payload_tracker_add(&se_in->input_ctx.tracker, parser_get_ll(dict, "in_payload_type"));
|
|
|
|
|
obj_put(&se_in->h);
|
|
|
|
|
}
|
|
|
|
|
if (se_out) {
|
|
|
|
|
atomic_set_na(&se_out->output_ctx.stats->ext_seq, parser_get_ll(dict, "out_srtp_index"));
|
|
|
|
|
atomic_set_na(&se_out->output_ctx.stats->rtcp_seq, parser_get_ll(dict, "out_srtcp_index"));
|
|
|
|
|
payload_tracker_add(&se_out->output_ctx.tracker, parser_get_ll(dict, "out_payload_type"));
|
|
|
|
|
obj_put(&se_out->h);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int json_build_ssrc(struct call_media *md, parser_arg arg) {
|
|
|
|
|
@ -2715,10 +2718,11 @@ static str redis_encode_json(ng_parser_ctx_t *ctx, call_t *c, void **to_free) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SSRC table dump
|
|
|
|
|
LOCK(&media->ssrc_hash.lock);
|
|
|
|
|
// XXX needs fixing
|
|
|
|
|
LOCK(&media->ssrc_hash_in.lock);
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "ssrc_table-%u", media->unique_id);
|
|
|
|
|
parser_arg list = parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (GList *m = media->ssrc_hash.nq.head; m; m = m->next) {
|
|
|
|
|
for (GList *m = media->ssrc_hash_in.nq.head; m; m = m->next) {
|
|
|
|
|
struct ssrc_entry_call *se = m->data;
|
|
|
|
|
inner = parser->list_add_dict(list);
|
|
|
|
|
|
|
|
|
|
|