| Index: trunk/src/net/quic/quic_connection.h
|
| ===================================================================
|
| --- trunk/src/net/quic/quic_connection.h (revision 204061)
|
| +++ trunk/src/net/quic/quic_connection.h (working copy)
|
| @@ -431,6 +431,15 @@
|
| // Make sure an ack we got from our peer is sane.
|
| bool ValidateAckFrame(const QuicAckFrame& incoming_ack);
|
|
|
| + // These two are called by OnAckFrame to update the appropriate internal
|
| + // state.
|
| + //
|
| + // Updates internal state based on incoming_ack.received_info
|
| + void UpdatePacketInformationReceivedByPeer(
|
| + const QuicAckFrame& incoming_ack);
|
| + // Updates internal state based in incoming_ack.sent_info
|
| + void UpdatePacketInformationSentByPeer(const QuicAckFrame& incoming_ack);
|
| +
|
| QuicConnectionHelperInterface* helper() { return helper_.get(); }
|
|
|
| protected:
|
| @@ -461,32 +470,21 @@
|
| struct RetransmissionInfo {
|
| explicit RetransmissionInfo(QuicPacketSequenceNumber sequence_number)
|
| : sequence_number(sequence_number),
|
| + scheduled_time(QuicTime::Zero()),
|
| number_nacks(0),
|
| number_retransmissions(0) {
|
| }
|
|
|
| QuicPacketSequenceNumber sequence_number;
|
| + QuicTime scheduled_time;
|
| size_t number_nacks;
|
| size_t number_retransmissions;
|
| };
|
|
|
| - struct RetransmissionTime {
|
| - RetransmissionTime(QuicPacketSequenceNumber sequence_number,
|
| - const QuicTime& scheduled_time,
|
| - bool for_fec)
|
| - : sequence_number(sequence_number),
|
| - scheduled_time(scheduled_time),
|
| - for_fec(for_fec) { }
|
| -
|
| - QuicPacketSequenceNumber sequence_number;
|
| - QuicTime scheduled_time;
|
| - bool for_fec;
|
| - };
|
| -
|
| - class RetransmissionTimeComparator {
|
| + class RetransmissionInfoComparator {
|
| public:
|
| - bool operator()(const RetransmissionTime& lhs,
|
| - const RetransmissionTime& rhs) const {
|
| + bool operator()(const RetransmissionInfo& lhs,
|
| + const RetransmissionInfo& rhs) const {
|
| DCHECK(lhs.scheduled_time.IsInitialized() &&
|
| rhs.scheduled_time.IsInitialized());
|
| return lhs.scheduled_time > rhs.scheduled_time;
|
| @@ -499,9 +497,9 @@
|
| typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap;
|
| typedef base::hash_map<QuicPacketSequenceNumber,
|
| RetransmissionInfo> RetransmissionMap;
|
| - typedef std::priority_queue<RetransmissionTime,
|
| - std::vector<RetransmissionTime>,
|
| - RetransmissionTimeComparator>
|
| + typedef std::priority_queue<RetransmissionInfo,
|
| + std::vector<RetransmissionInfo>,
|
| + RetransmissionInfoComparator>
|
| RetransmissionTimeouts;
|
|
|
| // Selects and updates the version of the protocol being used by selecting a
|
| @@ -511,11 +509,9 @@
|
| // Sends a version negotiation packet to the peer.
|
| void SendVersionNegotiationPacket();
|
|
|
| - void SetupRetransmission(QuicPacketSequenceNumber sequence_number);
|
| + void MaybeSetupRetransmission(QuicPacketSequenceNumber sequence_number);
|
| bool IsRetransmission(QuicPacketSequenceNumber sequence_number);
|
|
|
| - void SetupAbandonFecTimer(QuicPacketSequenceNumber sequence_number);
|
| -
|
| // Drop packet corresponding to |sequence_number| by deleting entries from
|
| // |unacked_packets_| and |retransmission_map_|, if present. We need to drop
|
| // all packets with encryption level NONE after the default level has been set
|
| @@ -530,25 +526,10 @@
|
| // revive and process the packet.
|
| void MaybeProcessRevivedPacket();
|
|
|
| - void HandleAckForSentPackets(const QuicAckFrame& incoming_ack,
|
| - SequenceNumberSet* acked_packets);
|
| - void HandleAckForSentFecPackets(const QuicAckFrame& incoming_ack,
|
| - SequenceNumberSet* acked_packets);
|
| -
|
| - // These two are called by OnAckFrame.
|
| - //
|
| - // Updates internal state based on incoming_ack.received_info
|
| - void UpdatePacketInformationReceivedByPeer(
|
| - const QuicAckFrame& incoming_ack);
|
| - // Updates internal state based on incoming_ack.sent_info
|
| - void UpdatePacketInformationSentByPeer(const QuicAckFrame& incoming_ack);
|
| -
|
| void UpdateOutgoingAck();
|
|
|
| void MaybeSendAckInResponseToPacket();
|
|
|
| - void MaybeAbandonFecPacket(QuicPacketSequenceNumber sequence_number);
|
| -
|
| // Get the FEC group associate with the last processed packet or NULL, if the
|
| // group has already been deleted.
|
| QuicFecGroup* GetFecGroup();
|
| @@ -591,12 +572,6 @@
|
| // to this map, which contains owning pointers to the contained frames.
|
| UnackedPacketMap unacked_packets_;
|
|
|
| - // Pending fec packets that have not been acked yet. These packets need to be
|
| - // cleared out of the cgst_window after a timeout since FEC packets are never
|
| - // retransmitted.
|
| - // Ask: What should be the timeout for these packets?
|
| - UnackedPacketMap unacked_fec_packets_;
|
| -
|
| // Heap of packets that we might need to retransmit, and the time at
|
| // which we should retransmit them. Every time a packet is sent it is added
|
| // to this heap which is O(log(number of pending packets to be retransmitted))
|
|
|