Index: media/cast/transport/rtcp/rtcp_builder.cc |
diff --git a/media/cast/transport/rtcp/rtcp_builder.cc b/media/cast/transport/rtcp/rtcp_builder.cc |
index 705582e7affaf12c43038500e5f2b577b265de78..eaa5df90bb5b0cce24a523f915611025b9a114bb 100644 |
--- a/media/cast/transport/rtcp/rtcp_builder.cc |
+++ b/media/cast/transport/rtcp/rtcp_builder.cc |
@@ -9,7 +9,6 @@ |
#include <vector> |
#include "base/logging.h" |
-#include "media/cast/rtcp/rtcp_utility.h" |
#include "media/cast/transport/cast_transport_defines.h" |
#include "media/cast/transport/pacing/paced_sender.h" |
#include "net/base/big_endian.h" |
@@ -21,9 +20,16 @@ namespace media { |
namespace cast { |
namespace transport { |
+namespace { |
+// RFC 3550 page 44, including end null. |
+static const size_t kRtcpCnameSize = 256; |
+static const uint32 kCast = ('C' << 24) + ('A' << 16) + ('S' << 8) + 'T'; |
+static const uint8 kSenderLogSubtype = 1; |
+}; |
+ |
RtcpBuilder::RtcpBuilder(PacedPacketSender* outgoing_transport, |
- uint32 sending_ssrc, |
- const std::string& c_name) |
+ uint32 sending_ssrc, |
+ const std::string& c_name) |
: ssrc_(sending_ssrc), |
c_name_(c_name), |
transport_(outgoing_transport) { |
@@ -33,9 +39,9 @@ RtcpBuilder::RtcpBuilder(PacedPacketSender* outgoing_transport, |
RtcpBuilder::~RtcpBuilder() {} |
void RtcpBuilder::SendRtcpFromRtpSender(uint32 packet_type_flags, |
- const RtcpSenderInfo* sender_info, |
- const RtcpDlrrReportBlock* dlrr, |
- RtcpSenderLogMessage* sender_log) { |
+ const RtcpSenderInfo* sender_info, |
+ const RtcpDlrrReportBlock* dlrr, |
+ RtcpSenderLogMessage* sender_log) { |
if (packet_type_flags & kRtcpRr || |
packet_type_flags & kRtcpPli || |
packet_type_flags & kRtcpRrtr || |
@@ -48,7 +54,7 @@ void RtcpBuilder::SendRtcpFromRtpSender(uint32 packet_type_flags, |
} |
std::vector<uint8> packet; |
- packet.reserve(kIpPacketSize); |
+ packet.reserve(kMaxIpPacketSize); |
if (packet_type_flags & kRtcpSr) { |
DCHECK(sender_info) << "Invalid argument"; |
BuildSR(*sender_info, NULL, &packet); |
@@ -66,7 +72,7 @@ void RtcpBuilder::SendRtcpFromRtpSender(uint32 packet_type_flags, |
BuildSenderLog(sender_log, &packet); |
} |
if (packet.empty()) |
- return; // Sanity don't send empty packets. |
+ return; // Sanity - don't send empty packets. |
transport_->SendRtcpPacket(packet); |
} |
@@ -76,8 +82,8 @@ void RtcpBuilder::BuildSR(const RtcpSenderInfo& sender_info, |
std::vector<uint8>* packet) const { |
// Sender report. |
size_t start_size = packet->size(); |
- DCHECK_LT(start_size + 52, kIpPacketSize) << "Not enough buffer space"; |
- if (start_size + 52 > kIpPacketSize) return; |
+ DCHECK_LT(start_size + 52, kMaxIpPacketSize) << "Not enough buffer space"; |
+ if (start_size + 52 > kMaxIpPacketSize) return; |
uint16 number_of_rows = (report_block) ? 12 : 6; |
packet->resize(start_size + 28); |
@@ -101,8 +107,8 @@ void RtcpBuilder::BuildSR(const RtcpSenderInfo& sender_info, |
void RtcpBuilder::AddReportBlocks(const RtcpReportBlock& report_block, |
std::vector<uint8>* packet) const { |
size_t start_size = packet->size(); |
- DCHECK_LT(start_size + 24, kIpPacketSize) << "Not enough buffer space"; |
- if (start_size + 24 > kIpPacketSize) return; |
+ DCHECK_LT(start_size + 24, kMaxIpPacketSize) << "Not enough buffer space"; |
+ if (start_size + 24 > kMaxIpPacketSize) return; |
packet->resize(start_size + 24); |
@@ -128,9 +134,9 @@ void RtcpBuilder::AddReportBlocks(const RtcpReportBlock& report_block, |
void RtcpBuilder::BuildSdec(std::vector<uint8>* packet) const { |
size_t start_size = packet->size(); |
- DCHECK_LT(start_size + 12 + c_name_.length(), kIpPacketSize) |
+ DCHECK_LT(start_size + 12 + c_name_.length(), kMaxIpPacketSize) |
<< "Not enough buffer space"; |
- if (start_size + 12 > kIpPacketSize) return; |
+ if (start_size + 12 > kMaxIpPacketSize) return; |
// SDES Source Description. |
packet->resize(start_size + 10); |
@@ -171,8 +177,8 @@ void RtcpBuilder::BuildSdec(std::vector<uint8>* packet) const { |
void RtcpBuilder::BuildBye(std::vector<uint8>* packet) const { |
size_t start_size = packet->size(); |
- DCHECK_LT(start_size + 8, kIpPacketSize) << "Not enough buffer space"; |
- if (start_size + 8 > kIpPacketSize) return; |
+ DCHECK_LT(start_size + 8, kMaxIpPacketSize) << "Not enough buffer space"; |
+ if (start_size + 8 > kMaxIpPacketSize) return; |
packet->resize(start_size + 8); |
@@ -201,10 +207,10 @@ void RtcpBuilder::BuildBye(std::vector<uint8>* packet) const { |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
*/ |
void RtcpBuilder::BuildDlrrRb(const RtcpDlrrReportBlock* dlrr, |
- std::vector<uint8>* packet) const { |
+ std::vector<uint8>* packet) const { |
size_t start_size = packet->size(); |
- DCHECK_LT(start_size + 24, kIpPacketSize) << "Not enough buffer space"; |
- if (start_size + 24 > kIpPacketSize) return; |
+ DCHECK_LT(start_size + 24, kMaxIpPacketSize) << "Not enough buffer space"; |
+ if (start_size + 24 > kMaxIpPacketSize) return; |
packet->resize(start_size + 24); |
@@ -222,11 +228,11 @@ void RtcpBuilder::BuildDlrrRb(const RtcpDlrrReportBlock* dlrr, |
} |
void RtcpBuilder::BuildSenderLog(RtcpSenderLogMessage* sender_log_message, |
- std::vector<uint8>* packet) const { |
+ std::vector<uint8>* packet) const { |
DCHECK(sender_log_message); |
DCHECK(packet); |
size_t start_size = packet->size(); |
- size_t remaining_space = kIpPacketSize - start_size; |
+ size_t remaining_space = kMaxIpPacketSize - start_size; |
DCHECK_GE(remaining_space, kRtcpCastLogHeaderSize + kRtcpSenderFrameLogSize) |
<< "Not enough buffer space"; |
if (remaining_space < kRtcpCastLogHeaderSize + kRtcpSenderFrameLogSize) |