| 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_);
 | 
|  
 | 
| 
 |