Index: remoting/protocol/rtp_reader.cc |
diff --git a/remoting/protocol/rtp_reader.cc b/remoting/protocol/rtp_reader.cc |
index b989c4481db2424e3d4d9835fdd63cf7fafd7bec..7e2125052ca480f0d7d631a5767c79f1e7ba4b10 100644 |
--- a/remoting/protocol/rtp_reader.cc |
+++ b/remoting/protocol/rtp_reader.cc |
@@ -24,15 +24,25 @@ void RtpReader::Init(net::Socket* socket, |
} |
void RtpReader::OnDataReceived(net::IOBuffer* buffer, int data_size) { |
- RtpPacket packet; |
+ RtpPacket* packet = new RtpPacket(); |
int header_size = UnpackRtpHeader(reinterpret_cast<uint8*>(buffer->data()), |
- data_size, packet.mutable_header()); |
+ data_size, packet->mutable_header()); |
if (header_size < 0) { |
LOG(WARNING) << "Received invalid RTP packet."; |
return; |
} |
- packet.mutable_payload()->Append(buffer, buffer->data() + header_size, |
- data_size - header_size); |
+ |
+ int descriptor_size = UnpackVp8Descriptor( |
+ reinterpret_cast<uint8*>(buffer->data()) + header_size, |
+ data_size - header_size, packet->mutable_vp8_descriptor()); |
+ if (descriptor_size < 0) { |
+ LOG(WARNING) << "Received RTP packet with an invalid VP8 descriptor."; |
+ return; |
+ } |
+ |
+ packet->mutable_payload()->Append( |
+ buffer, buffer->data() + header_size + descriptor_size, |
+ data_size - header_size - descriptor_size); |
on_message_callback_->Run(packet); |
} |