diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index df235c423..26d81ea31 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2351,6 +2351,26 @@ static void ng_stats_endpoint(bencode_item_t *dict, const endpoint_t *ep) { 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], + const char *label) +{ + bencode_item_t *list = bencode_dictionary_add_list(dict, label); + + for (int i = 0; i < RTPE_NUM_SSRC_TRACKING; i++) { + struct ssrc_ctx *c = ssrcs[i]; + if (!c) + break; + + bencode_item_t *ssrc = bencode_list_add_dictionary(list); + + bencode_dictionary_add_integer(ssrc, "SSRC", ssrcs[i]->parent->h.ssrc); + bencode_dictionary_add_integer(ssrc, "bytes", atomic64_get_na(&c->octets)); + bencode_dictionary_add_integer(ssrc, "packets", atomic64_get_na(&c->packets)); + bencode_dictionary_add_integer(ssrc, "last RTP timestamp", atomic64_get_na(&c->last_ts)); + bencode_dictionary_add_integer(ssrc, "last RTP seq", atomic64_get_na(&c->last_seq)); + } +} + #define BF_PS(k, f) if (PS_ISSET(ps, f)) bencode_list_add_string(flags, k) static void ng_stats_stream(bencode_item_t *list, const struct packet_stream *ps, @@ -2392,9 +2412,8 @@ static void ng_stats_stream(bencode_item_t *list, const struct packet_stream *ps BF_PS("media handover", MEDIA_HANDOVER); BF_PS("ICE", ICE); - // XXX convert to list output? - if (ps->ssrc_in[0]) - bencode_dictionary_add_integer(dict, "SSRC", ps->ssrc_in[0]->parent->h.ssrc); + ng_stats_stream_ssrc(dict, ps->ssrc_in, "ingress SSRCs"); + ng_stats_stream_ssrc(dict, ps->ssrc_out, "egress SSRCs"); stats: if (totals->last_packet < atomic64_get(&ps->last_packet))