summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_received_packet_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/quic/quic_received_packet_manager.cc')
-rw-r--r--net/quic/quic_received_packet_manager.cc17
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(