diff options
Diffstat (limited to 'net/quic/quic_received_packet_manager.cc')
-rw-r--r-- | net/quic/quic_received_packet_manager.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/net/quic/quic_received_packet_manager.cc b/net/quic/quic_received_packet_manager.cc index 15030a4..98136f8 100644 --- a/net/quic/quic_received_packet_manager.cc +++ b/net/quic/quic_received_packet_manager.cc @@ -7,11 +7,13 @@ #include "base/logging.h" #include "base/stl_util.h" #include "net/base/linked_hash_map.h" +#include "net/quic/crypto/crypto_protocol.h" #include "net/quic/quic_connection_stats.h" using std::make_pair; using std::max; using std::min; +using std::numeric_limits; namespace net { @@ -128,11 +130,10 @@ AdvanceFirstGapAndGarbageCollectEntropyMap() { } QuicReceivedPacketManager::QuicReceivedPacketManager( - CongestionFeedbackType congestion_type, QuicConnectionStats* stats) : peer_least_packet_awaiting_ack_(0), time_largest_observed_(QuicTime::Zero()), - receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)), + receive_algorithm_(ReceiveAlgorithmInterface::Create(kTCP)), stats_(stats) { ack_frame_.largest_observed = 0; ack_frame_.entropy_hash = 0; @@ -178,6 +179,9 @@ void QuicReceivedPacketManager::RecordPacketReceived( receive_algorithm_->RecordIncomingPacket( bytes, sequence_number, receipt_time); + received_packet_times_.push_back( + std::make_pair(sequence_number, receipt_time)); + ack_frame_.revived_packets.erase(sequence_number); } @@ -216,6 +220,15 @@ void QuicReceivedPacketManager::UpdateReceivedPacketInfo( ack_frame->delta_time_largest_observed = approximate_now.Subtract(time_largest_observed_); + + // Remove all packets that are too far from largest_observed to express. + received_packet_times_.remove_if( + [this] (std::pair<QuicPacketSequenceNumber, QuicTime> p) + { return ack_frame_.largest_observed - p.first >= + numeric_limits<uint8>::max();}); + + ack_frame->received_packet_times = received_packet_times_; + received_packet_times_.clear(); } bool QuicReceivedPacketManager::GenerateCongestionFeedback( |