summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_sent_packet_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/quic/quic_sent_packet_manager.cc')
-rw-r--r--net/quic/quic_sent_packet_manager.cc28
1 files changed, 19 insertions, 9 deletions
diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc
index 66eea78..a9f26b8 100644
--- a/net/quic/quic_sent_packet_manager.cc
+++ b/net/quic/quic_sent_packet_manager.cc
@@ -131,9 +131,15 @@ void QuicSentPacketManager::OnRetransmittedPacket(
void QuicSentPacketManager::OnIncomingAck(
const ReceivedPacketInfo& received_info,
- bool is_truncated_ack) {
- HandleAckForSentPackets(received_info, is_truncated_ack);
- HandleAckForSentFecPackets(received_info);
+ bool is_truncated_ack,
+ SequenceNumberSet* acked_packets) {
+ HandleAckForSentPackets(received_info, is_truncated_ack, acked_packets);
+ HandleAckForSentFecPackets(received_info, acked_packets);
+
+ if (acked_packets->size() > 0) {
+ // The AckNotifierManager should be informed of every ACKed sequence number.
+ ack_notifier_manager_.OnIncomingAck(*acked_packets);
+ }
}
void QuicSentPacketManager::DiscardUnackedPacket(
@@ -143,7 +149,8 @@ void QuicSentPacketManager::DiscardUnackedPacket(
void QuicSentPacketManager::HandleAckForSentPackets(
const ReceivedPacketInfo& received_info,
- bool is_truncated_ack) {
+ bool is_truncated_ack,
+ SequenceNumberSet* acked_packets) {
// Go through the packets we have not received an ack for and see if this
// incoming_ack shows they've been seen by the peer.
UnackedPacketMap::iterator it = unacked_packets_.begin();
@@ -159,11 +166,12 @@ void QuicSentPacketManager::HandleAckForSentPackets(
DVLOG(1) << ENDPOINT <<"Got an ack for packet " << sequence_number;
// If data is associated with the most recent transmission of this
// packet, then inform the caller.
+ QuicPacketSequenceNumber most_recent_transmission =
+ GetMostRecentTransmission(sequence_number);
+ if (HasRetransmittableFrames(most_recent_transmission)) {
+ acked_packets->insert(most_recent_transmission);
+ }
it = MarkPacketReceivedByPeer(sequence_number);
-
- // The AckNotifierManager is informed of every ACKed sequence number.
- ack_notifier_manager_.OnPacketAcked(sequence_number);
-
continue;
}
@@ -373,7 +381,8 @@ void QuicSentPacketManager::DiscardPacket(
}
void QuicSentPacketManager::HandleAckForSentFecPackets(
- const ReceivedPacketInfo& received_info) {
+ const ReceivedPacketInfo& received_info,
+ SequenceNumberSet* acked_packets) {
UnackedFecPacketMap::iterator it = unacked_fec_packets_.begin();
while (it != unacked_fec_packets_.end()) {
QuicPacketSequenceNumber sequence_number = it->first;
@@ -383,6 +392,7 @@ void QuicSentPacketManager::HandleAckForSentFecPackets(
if (!IsAwaitingPacket(received_info, sequence_number)) {
DVLOG(1) << ENDPOINT << "Got an ack for fec packet: " << sequence_number;
+ acked_packets->insert(sequence_number);
unacked_fec_packets_.erase(it++);
} else {
// TODO(rch): treat these packets more consistently. They should