OLD | NEW |
(Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "net/tools/quic/test_tools/packet_reordering_writer.h" |
| 6 |
| 7 namespace net { |
| 8 namespace test { |
| 9 |
| 10 PacketReorderingWriter::PacketReorderingWriter() {} |
| 11 |
| 12 PacketReorderingWriter::~PacketReorderingWriter() {} |
| 13 |
| 14 WriteResult PacketReorderingWriter::WritePacket(const char* buffer, |
| 15 size_t buf_len, |
| 16 const IPAddress& self_address, |
| 17 const IPEndPoint& peer_address, |
| 18 PerPacketOptions* options) { |
| 19 if (!delay_next_) { |
| 20 WriteResult wr = QuicPacketWriterWrapper::WritePacket( |
| 21 buffer, buf_len, self_address, peer_address, options); |
| 22 --num_packets_to_wait_; |
| 23 if (num_packets_to_wait_ == 0) { |
| 24 // It's time to write the delayed packet. |
| 25 QuicPacketWriterWrapper::WritePacket( |
| 26 delayed_data_.data(), delayed_data_.length(), delayed_self_address_, |
| 27 delayed_peer_address_, delayed_options_.get()); |
| 28 } |
| 29 return wr; |
| 30 } |
| 31 // Still have packet to wait. |
| 32 DCHECK_LT(0u, num_packets_to_wait_) << "Only allow one packet to be delayed"; |
| 33 delayed_data_ = std::string(buffer, buf_len); |
| 34 delayed_self_address_ = self_address; |
| 35 delayed_peer_address_ = peer_address; |
| 36 if (options != nullptr) { |
| 37 delayed_options_.reset(options->Clone()); |
| 38 } |
| 39 delay_next_ = false; |
| 40 return WriteResult(WRITE_STATUS_OK, buf_len); |
| 41 } |
| 42 |
| 43 void PacketReorderingWriter::SetDelay(size_t num_packets_to_wait) { |
| 44 DCHECK_GT(num_packets_to_wait, 0u); |
| 45 num_packets_to_wait_ = num_packets_to_wait; |
| 46 delay_next_ = true; |
| 47 } |
| 48 |
| 49 } // namespace test |
| 50 } // namespace net |
OLD | NEW |