Index: webrtc/test/direct_transport.cc |
diff --git a/webrtc/test/direct_transport.cc b/webrtc/test/direct_transport.cc |
index 35f3f92bfc51b1a139b24d5592dea851db05f663..bfe03e169bb690c86038c13526193f0e44ca300a 100644 |
--- a/webrtc/test/direct_transport.cc |
+++ b/webrtc/test/direct_transport.cc |
@@ -24,30 +24,42 @@ DirectTransport::DirectTransport( |
: DirectTransport(task_queue, |
FakeNetworkPipe::Config(), |
send_call, |
- payload_type_map) { |
-} |
+ payload_type_map, |
+ std::unique_ptr<test::RtpFileWriter>()) {} |
DirectTransport::DirectTransport( |
SingleThreadedTaskQueueForTesting* task_queue, |
const FakeNetworkPipe::Config& config, |
Call* send_call, |
- const std::map<uint8_t, MediaType>& payload_type_map) |
+ const std::map<uint8_t, MediaType>& payload_type_map, |
+ std::unique_ptr<test::RtpFileWriter> rtp_file_writer) |
: DirectTransport( |
task_queue, |
config, |
send_call, |
- std::unique_ptr<Demuxer>(new DemuxerImpl(payload_type_map))) { |
-} |
+ std::unique_ptr<Demuxer>(new DemuxerImpl(payload_type_map)), |
+ std::move(rtp_file_writer)) {} |
-DirectTransport::DirectTransport(SingleThreadedTaskQueueForTesting* task_queue, |
- const FakeNetworkPipe::Config& config, |
- Call* send_call, |
- std::unique_ptr<Demuxer> demuxer) |
+DirectTransport::DirectTransport( |
+ SingleThreadedTaskQueueForTesting* task_queue, |
+ const FakeNetworkPipe::Config& config, |
+ Call* send_call, |
+ std::unique_ptr<Demuxer> demuxer, |
+ std::unique_ptr<test::RtpFileWriter> rtp_file_writer) |
: send_call_(send_call), |
clock_(Clock::GetRealTimeClock()), |
task_queue_(task_queue), |
- fake_network_(clock_, config, std::move(demuxer)) { |
+ fake_network_(clock_, config, std::move(demuxer)), |
+ receiver_(nullptr), |
+ start_ms_(rtc::TimeMillis()), |
+ rtp_file_writer_(std::move(rtp_file_writer)) { |
RTC_DCHECK(task_queue); |
+ |
+ if (rtp_file_writer_.get()) { |
+ // Set us up as proxy receiver so that we can dump rtp packets. |
+ fake_network_.SetReceiver(this); |
+ } |
+ |
if (send_call_) { |
send_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp); |
send_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); |
@@ -73,7 +85,12 @@ void DirectTransport::StopSending() { |
void DirectTransport::SetReceiver(PacketReceiver* receiver) { |
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_); |
- fake_network_.SetReceiver(receiver); |
+ if (rtp_file_writer_.get()) { |
+ // Will be called from DeliverPacket() in this instance instead. |
+ receiver_ = receiver; |
+ } else { |
+ fake_network_.SetReceiver(receiver_); |
+ } |
} |
bool DirectTransport::SendRtp(const uint8_t* data, |
@@ -97,6 +114,25 @@ int DirectTransport::GetAverageDelayMs() { |
return fake_network_.AverageDelay(); |
} |
+PacketReceiver::DeliveryStatus DirectTransport::DeliverPacket( |
+ MediaType media_type, |
+ const uint8_t* packet, |
+ size_t length, |
+ const PacketTime& packet_time) { |
+ if (rtp_file_writer_.get()) { |
+ RtpPacket rtp_packet; |
+ memcpy(rtp_packet.data, packet, length); |
+ rtp_packet.length = length; |
+ rtp_packet.original_length = length; |
+ rtp_packet.time_ms = rtc::TimeMillis() - start_ms_; |
+ rtp_file_writer_->WritePacket(&rtp_packet); |
+ } |
+ |
+ if (!receiver_) |
+ return PacketReceiver::DELIVERY_PACKET_ERROR; |
+ return receiver_->DeliverPacket(media_type, packet, length, packet_time); |
+} |
+ |
void DirectTransport::SendPackets() { |
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_); |