Land Recent QUIC Changes.
Made available server_address to QuicDispatcher::CreateQuicSession from
QuicDispatcher::ProcessPacket.
Merge internal change: 57703936
https://codereview.chromium.org/109803003
No functional change. More QuicSentPacketManager and related QUIC
cleanup.
Merge internal change: 57665121
https://codereview.chromium.org/100893003
Move QUIC kMaxPacketSize from 1472 -> 1452 to reflect IPv6 overhead.
Merge internal change: 57626965
https://codereview.chromium.org/109843002
QUIC refactor to simplify retransmission logic.
Merge internal change: 57617695
https://codereview.chromium.org/100863005
Remove unused SetCongestionWindow methods
Merge internal change: 57601594
https://codereview.chromium.org/109833002
QUIC refactor to move more of the AckFrame handling into
QuicSentPacketManager.
Merge internal change: 57561176
https://codereview.chromium.org/100733003
No new functionality. QUIC Refactor to move the functionality of
OnAbandonFecTimeout() OnRetransmissionTimeout() into the
QuicSentPacketManager.
Merge internal change: 57550388
https://codereview.chromium.org/106973007
[email protected]
Review URL: https://codereview.chromium.org/100863006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@239668 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/quic/quic_sent_packet_manager.h b/net/quic/quic_sent_packet_manager.h
index 0458c5d..e4c16be 100644
--- a/net/quic/quic_sent_packet_manager.h
+++ b/net/quic/quic_sent_packet_manager.h
@@ -88,8 +88,10 @@
void OnRetransmittedPacket(QuicPacketSequenceNumber old_sequence_number,
QuicPacketSequenceNumber new_sequence_number);
- // Processes the ReceivedPacketInfo data from the incoming ack.
- void OnPacketAcked(const ReceivedPacketInfo& received_info);
+ // Processes the incoming ack and returns true if the retransmission or ack
+ // alarm should be reset.
+ bool OnIncomingAck(const ReceivedPacketInfo& received_info,
+ QuicTime ack_receive_time);
// Discards any information for the packet corresponding to |sequence_number|.
// If this packet has been retransmitted, information on those packets
@@ -99,14 +101,11 @@
// Discards all information about fec packet |sequence_number|.
void DiscardFecPacket(QuicPacketSequenceNumber sequence_number);
- // Returns true if |sequence_number| is a retransmission of a packet.
- bool IsRetransmission(QuicPacketSequenceNumber sequence_number) const;
-
// Returns true if the non-FEC packet |sequence_number| is unacked.
bool IsUnacked(QuicPacketSequenceNumber sequence_number) const;
- // Returns true if the FEC packet |sequence_number| is unacked.
- bool IsFecUnacked(QuicPacketSequenceNumber sequence_number) const;
+ // Requests retransmission of all unacked packets of |retransmission_type|.
+ void RetransmitUnackedPackets(RetransmissionType retransmission_type);
// Returns true if the unacked packet |sequence_number| has retransmittable
// frames. This will only return false if the packet has been acked, if a
@@ -114,16 +113,6 @@
// retransmitted as with different sequence number.
bool HasRetransmittableFrames(QuicPacketSequenceNumber sequence_number) const;
- // Returns the RetransmittableFrames for |sequence_number|.
- const RetransmittableFrames& GetRetransmittableFrames(
- QuicPacketSequenceNumber sequence_number) const;
-
- // Request that |sequence_number| be retransmitted after the other pending
- // retransmissions. Returns false if there are no retransmittable frames for
- // |sequence_number| and true if it will be retransmitted.
- bool MarkForRetransmission(QuicPacketSequenceNumber sequence_number,
- TransmissionType transmission_type);
-
// Returns true if there are pending retransmissions.
bool HasPendingRetransmissions() const;
@@ -164,13 +153,14 @@
// Called when we have received an ack frame from peer.
// Returns a set containing all the sequence numbers to be nack retransmitted
// as a result of the ack.
- virtual SequenceNumberSet OnIncomingAckFrame(const QuicAckFrame& frame,
- QuicTime ack_receive_time);
+ virtual SequenceNumberSet OnIncomingAckFrame(
+ const ReceivedPacketInfo& received_info,
+ const QuicTime& ack_receive_time);
// Called when a congestion feedback frame is received from peer.
virtual void OnIncomingQuicCongestionFeedbackFrame(
const QuicCongestionFeedbackFrame& frame,
- QuicTime feedback_receive_time);
+ const QuicTime& feedback_receive_time);
// Called when we have sent bytes to the peer. This informs the manager both
// the number of bytes sent and if they were retransmitted.
@@ -183,9 +173,9 @@
// Called when the retransmission timer expires.
virtual void OnRetransmissionTimeout();
- // Called when the least unacked sequence number increases, indicating the
- // consecutive rto count should be reset to 0.
- virtual void OnLeastUnackedIncreased();
+ // Called when the fec timout timer expires. Returns the next timeout of the
+ // FEC timer if it should be reset, and QuicTime::Zero() otherwise.
+ virtual QuicTime OnAbandonFecTimeout();
// Called when a packet is timed out, such as an RTO. Removes the bytes from
// the congestion manager, but does not change the congestion window size.
@@ -220,9 +210,6 @@
// window and will return 0.
QuicByteCount GetCongestionWindow() const;
- // Sets the value of the current congestion window to |window|.
- void SetCongestionWindow(QuicByteCount window);
-
// Enables pacing if it has not already been enabled, and if
// FLAGS_enable_quic_pacing is set.
void MaybeEnablePacing();
@@ -261,6 +248,10 @@
// Process the incoming ack looking for newly ack'd FEC packets.
void HandleAckForSentFecPackets(const ReceivedPacketInfo& received_info);
+ // Update the RTT if the ack is for the largest acked sequence number.
+ void MaybeUpdateRTT(const ReceivedPacketInfo& received_info,
+ const QuicTime& ack_receive_time);
+
// Marks |sequence_number| as having been seen by the peer. Returns an
// iterator to the next remaining unacked packet.
UnackedPacketMap::iterator MarkPacketReceivedByPeer(
@@ -270,6 +261,12 @@
// and the retransmission map.
void DiscardPacket(QuicPacketSequenceNumber sequence_number);
+ // Request that |sequence_number| be retransmitted after the other pending
+ // retransmissions. Returns false if there are no retransmittable frames for
+ // |sequence_number| and true if it will be retransmitted.
+ bool MarkForRetransmission(QuicPacketSequenceNumber sequence_number,
+ TransmissionType transmission_type);
+
// Returns the length of the serialized sequence number for
// the packet |sequence_number|.
QuicSequenceNumberLength GetSequenceNumberLength(
@@ -280,6 +277,10 @@
QuicPacketSequenceNumber GetMostRecentTransmission(
QuicPacketSequenceNumber sequence_number) const;
+ // Clears up to |num_to_clear| previous transmissions in order to make room
+ // in the ack frame for new acks.
+ void ClearPreviousRetransmissions(size_t num_to_clear);
+
void CleanupPacketHistory();
// When new packets are created which may be retransmitted, they are added