Allow printing full packets in rtc_eventlog2text.
Add command line option to print packet contents as hex in rtc_eventlog2text.
Bug: None
Change-Id: I690706cfba883ca2248332622f2c9133b7ddaf6a
Reviewed-on: https://webrtc-review.googlesource.com/20863
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20590}
diff --git a/logging/rtc_event_log/rtc_event_log2text.cc b/logging/rtc_event_log/rtc_event_log2text.cc
index 91f7b18..9292fd3 100644
--- a/logging/rtc_event_log/rtc_event_log2text.cc
+++ b/logging/rtc_event_log/rtc_event_log2text.cc
@@ -10,6 +10,7 @@
#include <string.h>
+#include <iomanip> // setfill, setw
#include <iostream>
#include <map>
#include <sstream>
@@ -60,6 +61,10 @@
DEFINE_bool(ana, true, "Use --noana to exclude ANA events.");
DEFINE_bool(probe, true, "Use --noprobe to exclude probe events.");
+DEFINE_bool(print_full_packets,
+ false,
+ "Print the full RTP headers and RTCP packets in hex.");
+
// TODO(terelius): Allow a list of SSRCs.
DEFINE_string(ssrc,
"",
@@ -301,7 +306,9 @@
return;
std::cout << log_timestamp << "\t"
<< "RTCP_NEWFB" << StreamInfo(direction, media_type)
- << "\tssrc=" << transport_feedback.sender_ssrc() << std::endl;
+ << "\tsender_ssrc=" << transport_feedback.sender_ssrc()
+ << "\tmedia_ssrc=" << transport_feedback.media_ssrc()
+ << std::endl;
break;
}
default:
@@ -489,6 +496,18 @@
static_cast<int>(parsed_header.extension.audioLevel);
}
std::cout << std::endl;
+ if (FLAG_print_full_packets) {
+ // TODO(terelius): Rewrite this file to use printf instead of cout.
+ std::cout << "\t\t" << std::hex;
+ char prev_fill = std::cout.fill('0');
+ for (size_t i = 0; i < header_length; i++) {
+ std::cout << std::setw(2) << static_cast<unsigned>(header[i]);
+ if (i % 4 == 3)
+ std::cout << " "; // Separator between 32-bit words.
+ }
+ std::cout.fill(prev_fill);
+ std::cout << std::dec << std::endl;
+ }
}
event_recognized = true;
break;
@@ -508,6 +527,7 @@
ptrdiff_t remaining_blocks_size = packet_end - next_block;
RTC_DCHECK_GT(remaining_blocks_size, 0);
if (!rtcp_block.Parse(next_block, remaining_blocks_size)) {
+ RTC_LOG(LS_WARNING) << "Failed to parse RTCP";
break;
}
@@ -541,6 +561,19 @@
default:
break;
}
+ if (FLAG_print_full_packets) {
+ std::cout << "\t\t" << std::hex;
+ char prev_fill = std::cout.fill('0');
+ for (const uint8_t* p = next_block; p < rtcp_block.NextPacket();
+ p++) {
+ std::cout << std::setw(2) << static_cast<unsigned>(*p);
+ ptrdiff_t chars_printed = p - next_block;
+ if (chars_printed % 4 == 3)
+ std::cout << " "; // Separator between 32-bit words.
+ }
+ std::cout.fill(prev_fill);
+ std::cout << std::dec << std::endl;
+ }
}
}
event_recognized = true;
@@ -566,8 +599,8 @@
parsed_stream.GetLossBasedBweUpdate(i, &bitrate_bps, &fraction_loss,
&total_packets);
std::cout << parsed_stream.GetTimestamp(i) << "\tBWE(LOSS_BASED)"
- << "\tbitrate_bps=" << bitrate_bps
- << "\tfraction_loss=" << fraction_loss
+ << "\tbitrate_bps=" << bitrate_bps << "\tfraction_loss="
+ << static_cast<unsigned>(fraction_loss)
<< "\ttotal_packets=" << total_packets << std::endl;
}
event_recognized = true;