| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ | 5 #ifndef NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ |
| 6 #define NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ | 6 #define NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <list> | 9 #include <list> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 QuicTime time) {} | 65 QuicTime time) {} |
| 66 | 66 |
| 67 virtual void OnIncomingAck( | 67 virtual void OnIncomingAck( |
| 68 const ReceivedPacketInfo& received_info, | 68 const ReceivedPacketInfo& received_info, |
| 69 QuicTime ack_receive_time, | 69 QuicTime ack_receive_time, |
| 70 QuicPacketSequenceNumber largest_observed, | 70 QuicPacketSequenceNumber largest_observed, |
| 71 bool largest_observed_acked, | 71 bool largest_observed_acked, |
| 72 QuicPacketSequenceNumber least_unacked_sent_packet) {} | 72 QuicPacketSequenceNumber least_unacked_sent_packet) {} |
| 73 }; | 73 }; |
| 74 | 74 |
| 75 // Interface which gets callbacks from the QuicSentPacketManager when |
| 76 // network-related state changes. Implementations must not mutate the |
| 77 // state of the packet manager as a result of these callbacks. |
| 78 class NET_EXPORT_PRIVATE NetworkChangeVisitor { |
| 79 public: |
| 80 virtual ~NetworkChangeVisitor() {} |
| 81 |
| 82 // Called when congestion window may have changed. |
| 83 virtual void OnCongestionWindowChange(QuicByteCount congestion_window) = 0; |
| 84 // TODO(jri): Add OnRttStatsChange() to this class as well. |
| 85 }; |
| 86 |
| 75 // Struct to store the pending retransmission information. | 87 // Struct to store the pending retransmission information. |
| 76 struct PendingRetransmission { | 88 struct PendingRetransmission { |
| 77 PendingRetransmission(QuicPacketSequenceNumber sequence_number, | 89 PendingRetransmission(QuicPacketSequenceNumber sequence_number, |
| 78 TransmissionType transmission_type, | 90 TransmissionType transmission_type, |
| 79 const RetransmittableFrames& retransmittable_frames, | 91 const RetransmittableFrames& retransmittable_frames, |
| 80 QuicSequenceNumberLength sequence_number_length) | 92 QuicSequenceNumberLength sequence_number_length) |
| 81 : sequence_number(sequence_number), | 93 : sequence_number(sequence_number), |
| 82 transmission_type(transmission_type), | 94 transmission_type(transmission_type), |
| 83 retransmittable_frames(retransmittable_frames), | 95 retransmittable_frames(retransmittable_frames), |
| 84 sequence_number_length(sequence_number_length) { | 96 sequence_number_length(sequence_number_length) { |
| 85 } | 97 } |
| 86 | 98 |
| 87 QuicPacketSequenceNumber sequence_number; | 99 QuicPacketSequenceNumber sequence_number; |
| 88 TransmissionType transmission_type; | 100 TransmissionType transmission_type; |
| 89 const RetransmittableFrames& retransmittable_frames; | 101 const RetransmittableFrames& retransmittable_frames; |
| 90 QuicSequenceNumberLength sequence_number_length; | 102 QuicSequenceNumberLength sequence_number_length; |
| 91 }; | 103 }; |
| 92 | 104 |
| 93 QuicSentPacketManager(bool is_server, | 105 QuicSentPacketManager(bool is_server, |
| 94 const QuicClock* clock, | 106 const QuicClock* clock, |
| 95 QuicConnectionStats* stats, | 107 QuicConnectionStats* stats, |
| 96 CongestionFeedbackType congestion_type, | 108 CongestionControlType congestion_control_type, |
| 97 LossDetectionType loss_type); | 109 LossDetectionType loss_type); |
| 98 virtual ~QuicSentPacketManager(); | 110 virtual ~QuicSentPacketManager(); |
| 99 | 111 |
| 100 virtual void SetFromConfig(const QuicConfig& config); | 112 virtual void SetFromConfig(const QuicConfig& config); |
| 101 | 113 |
| 102 // Called when a new packet is serialized. If the packet contains | 114 // Called when a new packet is serialized. If the packet contains |
| 103 // retransmittable data, it will be added to the unacked packet map. | 115 // retransmittable data, it will be added to the unacked packet map. |
| 104 void OnSerializedPacket(const SerializedPacket& serialized_packet); | 116 void OnSerializedPacket(const SerializedPacket& serialized_packet); |
| 105 | 117 |
| 106 // Called when a packet is retransmitted with a new sequence number. | 118 // Called when a packet is retransmitted with a new sequence number. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 bool using_pacing() const { return using_pacing_; } | 215 bool using_pacing() const { return using_pacing_; } |
| 204 | 216 |
| 205 void set_debug_delegate(DebugDelegate* debug_delegate) { | 217 void set_debug_delegate(DebugDelegate* debug_delegate) { |
| 206 debug_delegate_ = debug_delegate; | 218 debug_delegate_ = debug_delegate; |
| 207 } | 219 } |
| 208 | 220 |
| 209 QuicPacketSequenceNumber largest_observed() const { | 221 QuicPacketSequenceNumber largest_observed() const { |
| 210 return largest_observed_; | 222 return largest_observed_; |
| 211 } | 223 } |
| 212 | 224 |
| 225 void set_network_change_visitor(NetworkChangeVisitor* visitor) { |
| 226 DCHECK(!network_change_visitor_); |
| 227 DCHECK(visitor); |
| 228 network_change_visitor_ = visitor; |
| 229 } |
| 230 |
| 213 private: | 231 private: |
| 214 friend class test::QuicConnectionPeer; | 232 friend class test::QuicConnectionPeer; |
| 215 friend class test::QuicSentPacketManagerPeer; | 233 friend class test::QuicSentPacketManagerPeer; |
| 216 | 234 |
| 217 // The retransmission timer is a single timer which switches modes depending | 235 // The retransmission timer is a single timer which switches modes depending |
| 218 // upon connection state. | 236 // upon connection state. |
| 219 enum RetransmissionTimeoutMode { | 237 enum RetransmissionTimeoutMode { |
| 220 // A conventional TCP style RTO. | 238 // A conventional TCP style RTO. |
| 221 RTO_MODE, | 239 RTO_MODE, |
| 222 // A tail loss probe. By default, QUIC sends up to two before RTOing. | 240 // A tail loss probe. By default, QUIC sends up to two before RTOing. |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 bool is_server_; | 327 bool is_server_; |
| 310 | 328 |
| 311 // An AckNotifier can register to be informed when ACKs have been received for | 329 // An AckNotifier can register to be informed when ACKs have been received for |
| 312 // all packets that a given block of data was sent in. The AckNotifierManager | 330 // all packets that a given block of data was sent in. The AckNotifierManager |
| 313 // maintains the currently active notifiers. | 331 // maintains the currently active notifiers. |
| 314 AckNotifierManager ack_notifier_manager_; | 332 AckNotifierManager ack_notifier_manager_; |
| 315 | 333 |
| 316 const QuicClock* clock_; | 334 const QuicClock* clock_; |
| 317 QuicConnectionStats* stats_; | 335 QuicConnectionStats* stats_; |
| 318 DebugDelegate* debug_delegate_; | 336 DebugDelegate* debug_delegate_; |
| 337 NetworkChangeVisitor* network_change_visitor_; |
| 319 RttStats rtt_stats_; | 338 RttStats rtt_stats_; |
| 320 scoped_ptr<SendAlgorithmInterface> send_algorithm_; | 339 scoped_ptr<SendAlgorithmInterface> send_algorithm_; |
| 321 scoped_ptr<LossDetectionInterface> loss_algorithm_; | 340 scoped_ptr<LossDetectionInterface> loss_algorithm_; |
| 322 | 341 |
| 323 // The largest sequence number which we have sent and received an ACK for | 342 // The largest sequence number which we have sent and received an ACK for |
| 324 // from the peer. | 343 // from the peer. |
| 325 QuicPacketSequenceNumber largest_observed_; | 344 QuicPacketSequenceNumber largest_observed_; |
| 326 | 345 |
| 327 // Tracks the first RTO packet. If any packet before that packet gets acked, | 346 // Tracks the first RTO packet. If any packet before that packet gets acked, |
| 328 // it indicates the RTO was spurious and should be reversed(F-RTO). | 347 // it indicates the RTO was spurious and should be reversed(F-RTO). |
| (...skipping 13 matching lines...) Expand all Loading... |
| 342 // Sets of packets acked and lost as a result of the last congestion event. | 361 // Sets of packets acked and lost as a result of the last congestion event. |
| 343 SendAlgorithmInterface::CongestionMap packets_acked_; | 362 SendAlgorithmInterface::CongestionMap packets_acked_; |
| 344 SendAlgorithmInterface::CongestionMap packets_lost_; | 363 SendAlgorithmInterface::CongestionMap packets_lost_; |
| 345 | 364 |
| 346 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager); | 365 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager); |
| 347 }; | 366 }; |
| 348 | 367 |
| 349 } // namespace net | 368 } // namespace net |
| 350 | 369 |
| 351 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ | 370 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ |
| OLD | NEW |