diff options
Diffstat (limited to 'net/quic/quic_sent_packet_manager.cc')
-rw-r--r-- | net/quic/quic_sent_packet_manager.cc | 28 |
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 |