From 46ed7afdd9ca476015d69f37753b24599062c007 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Wed, 11 Nov 2015 16:52:45 -0600 Subject: rtp_engine.c: Eliminate rtcp_report_to_json() RAII_VAR usage. Change-Id: I58a22c2ca82e91d7537409b7b3af2d735827a54d --- main/rtp_engine.c | 60 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/main/rtp_engine.c b/main/rtp_engine.c index b12761bc4..67349cefa 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -2501,10 +2501,10 @@ static struct ast_json *rtcp_report_to_json(struct stasis_message *msg, const struct stasis_message_sanitizer *sanitize) { struct rtcp_message_payload *payload = stasis_message_data(msg); - RAII_VAR(struct ast_json *, json_rtcp_report, NULL, ast_json_unref); - RAII_VAR(struct ast_json *, json_rtcp_report_blocks, NULL, ast_json_unref); - RAII_VAR(struct ast_json *, json_rtcp_sender_info, NULL, ast_json_unref); - RAII_VAR(struct ast_json *, json_channel, NULL, ast_json_unref); + struct ast_json *json_rtcp_report = NULL; + struct ast_json *json_rtcp_report_blocks; + struct ast_json *json_rtcp_sender_info = NULL; + struct ast_json *json_channel = NULL; int i; json_rtcp_report_blocks = ast_json_array_create(); @@ -2515,20 +2515,19 @@ static struct ast_json *rtcp_report_to_json(struct stasis_message *msg, for (i = 0; i < payload->report->reception_report_count && payload->report->report_block[i]; i++) { struct ast_json *json_report_block; char str_lsr[32]; + snprintf(str_lsr, sizeof(str_lsr), "%u", payload->report->report_block[i]->lsr); json_report_block = ast_json_pack("{s: i, s: i, s: i, s: i, s: i, s: s, s: i}", - "source_ssrc", payload->report->report_block[i]->source_ssrc, - "fraction_lost", payload->report->report_block[i]->lost_count.fraction, - "packets_lost", payload->report->report_block[i]->lost_count.packets, - "highest_seq_no", payload->report->report_block[i]->highest_seq_no, - "ia_jitter", payload->report->report_block[i]->ia_jitter, - "lsr", str_lsr, - "dlsr", payload->report->report_block[i]->dlsr); - if (!json_report_block) { - return NULL; - } - - if (ast_json_array_append(json_rtcp_report_blocks, json_report_block)) { + "source_ssrc", payload->report->report_block[i]->source_ssrc, + "fraction_lost", payload->report->report_block[i]->lost_count.fraction, + "packets_lost", payload->report->report_block[i]->lost_count.packets, + "highest_seq_no", payload->report->report_block[i]->highest_seq_no, + "ia_jitter", payload->report->report_block[i]->ia_jitter, + "lsr", str_lsr, + "dlsr", payload->report->report_block[i]->dlsr); + if (!json_report_block + || ast_json_array_append(json_rtcp_report_blocks, json_report_block)) { + ast_json_unref(json_rtcp_report_blocks); return NULL; } } @@ -2536,25 +2535,27 @@ static struct ast_json *rtcp_report_to_json(struct stasis_message *msg, if (payload->report->type == AST_RTP_RTCP_SR) { char sec[32]; char usec[32]; + snprintf(sec, sizeof(sec), "%lu", (unsigned long)payload->report->sender_information.ntp_timestamp.tv_sec); snprintf(usec, sizeof(usec), "%lu", (unsigned long)payload->report->sender_information.ntp_timestamp.tv_usec); json_rtcp_sender_info = ast_json_pack("{s: s, s: s, s: i, s: i, s: i}", - "ntp_timestamp_sec", sec, - "ntp_timestamp_usec", usec, - "rtp_timestamp", payload->report->sender_information.rtp_timestamp, - "packets", payload->report->sender_information.packet_count, - "octets", payload->report->sender_information.octet_count); + "ntp_timestamp_sec", sec, + "ntp_timestamp_usec", usec, + "rtp_timestamp", payload->report->sender_information.rtp_timestamp, + "packets", payload->report->sender_information.packet_count, + "octets", payload->report->sender_information.octet_count); if (!json_rtcp_sender_info) { + ast_json_unref(json_rtcp_report_blocks); return NULL; } } json_rtcp_report = ast_json_pack("{s: i, s: i, s: i, s: o, s: o}", - "ssrc", payload->report->ssrc, - "type", payload->report->type, - "report_count", payload->report->reception_report_count, - "sender_information", json_rtcp_sender_info ? ast_json_ref(json_rtcp_sender_info) : ast_json_ref(ast_json_null()), - "report_blocks", ast_json_ref(json_rtcp_report_blocks)); + "ssrc", payload->report->ssrc, + "type", payload->report->type, + "report_count", payload->report->reception_report_count, + "sender_information", json_rtcp_sender_info ?: ast_json_null(), + "report_blocks", json_rtcp_report_blocks); if (!json_rtcp_report) { return NULL; } @@ -2562,14 +2563,15 @@ static struct ast_json *rtcp_report_to_json(struct stasis_message *msg, if (payload->snapshot) { json_channel = ast_channel_snapshot_to_json(payload->snapshot, sanitize); if (!json_channel) { + ast_json_unref(json_rtcp_report); return NULL; } } return ast_json_pack("{s: o, s: o, s: o}", - "channel", payload->snapshot ? ast_json_ref(json_channel) : ast_json_ref(ast_json_null()), - "rtcp_report", ast_json_ref(json_rtcp_report), - "blob", ast_json_deep_copy(payload->blob)); + "channel", payload->snapshot ? json_channel : ast_json_null(), + "rtcp_report", json_rtcp_report, + "blob", ast_json_deep_copy(payload->blob) ?: ast_json_null()); } static void rtp_rtcp_report_dtor(void *obj) -- cgit v1.2.3