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 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) { |
(...skipping 118 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 |