OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 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_CORE_FRAMES_QUIC_ACK_FRAME_H_ | 5 #ifndef NET_QUIC_CORE_FRAMES_QUIC_ACK_FRAME_H_ |
6 #define NET_QUIC_CORE_FRAMES_QUIC_ACK_FRAME_H_ | 6 #define NET_QUIC_CORE_FRAMES_QUIC_ACK_FRAME_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/strings/string_piece.h" | 10 #include "base/strings/string_piece.h" |
11 #include "net/base/net_export.h" | |
12 #include "net/quic/core/interval_set.h" | 11 #include "net/quic/core/interval_set.h" |
13 #include "net/quic/core/quic_types.h" | 12 #include "net/quic/core/quic_types.h" |
| 13 #include "net/quic/platform/api/quic_export.h" |
14 | 14 |
15 namespace net { | 15 namespace net { |
16 | 16 |
17 // A sequence of packet numbers where each number is unique. Intended to be used | 17 // A sequence of packet numbers where each number is unique. Intended to be used |
18 // in a sliding window fashion, where smaller old packet numbers are removed and | 18 // in a sliding window fashion, where smaller old packet numbers are removed and |
19 // larger new packet numbers are added, with the occasional random access. | 19 // larger new packet numbers are added, with the occasional random access. |
20 class NET_EXPORT_PRIVATE PacketNumberQueue { | 20 class QUIC_EXPORT_PRIVATE PacketNumberQueue { |
21 public: | 21 public: |
22 using const_iterator = IntervalSet<QuicPacketNumber>::const_iterator; | 22 using const_iterator = IntervalSet<QuicPacketNumber>::const_iterator; |
23 using const_reverse_iterator = | 23 using const_reverse_iterator = |
24 IntervalSet<QuicPacketNumber>::const_reverse_iterator; | 24 IntervalSet<QuicPacketNumber>::const_reverse_iterator; |
25 | 25 |
26 PacketNumberQueue(); | 26 PacketNumberQueue(); |
27 PacketNumberQueue(const PacketNumberQueue& other); | 27 PacketNumberQueue(const PacketNumberQueue& other); |
28 PacketNumberQueue(PacketNumberQueue&& other); | 28 PacketNumberQueue(PacketNumberQueue&& other); |
29 ~PacketNumberQueue(); | 29 ~PacketNumberQueue(); |
30 | 30 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 // Returns the length of last interval. | 79 // Returns the length of last interval. |
80 QuicPacketNumber LastIntervalLength() const; | 80 QuicPacketNumber LastIntervalLength() const; |
81 | 81 |
82 // Returns iterators over the packet number intervals. | 82 // Returns iterators over the packet number intervals. |
83 const_iterator begin() const; | 83 const_iterator begin() const; |
84 const_iterator end() const; | 84 const_iterator end() const; |
85 const_reverse_iterator rbegin() const; | 85 const_reverse_iterator rbegin() const; |
86 const_reverse_iterator rend() const; | 86 const_reverse_iterator rend() const; |
87 const_iterator lower_bound(QuicPacketNumber packet_number) const; | 87 const_iterator lower_bound(QuicPacketNumber packet_number) const; |
88 | 88 |
89 friend NET_EXPORT_PRIVATE std::ostream& operator<<( | 89 friend QUIC_EXPORT_PRIVATE std::ostream& operator<<( |
90 std::ostream& os, | 90 std::ostream& os, |
91 const PacketNumberQueue& q); | 91 const PacketNumberQueue& q); |
92 | 92 |
93 private: | 93 private: |
94 IntervalSet<QuicPacketNumber> packet_number_intervals_; | 94 IntervalSet<QuicPacketNumber> packet_number_intervals_; |
95 }; | 95 }; |
96 | 96 |
97 struct NET_EXPORT_PRIVATE QuicAckFrame { | 97 struct QUIC_EXPORT_PRIVATE QuicAckFrame { |
98 QuicAckFrame(); | 98 QuicAckFrame(); |
99 QuicAckFrame(const QuicAckFrame& other); | 99 QuicAckFrame(const QuicAckFrame& other); |
100 ~QuicAckFrame(); | 100 ~QuicAckFrame(); |
101 | 101 |
102 friend NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, | 102 friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, |
103 const QuicAckFrame& s); | 103 const QuicAckFrame& s); |
104 | 104 |
105 // The highest packet number we've observed from the peer. | 105 // The highest packet number we've observed from the peer. |
106 QuicPacketNumber largest_observed; | 106 QuicPacketNumber largest_observed; |
107 | 107 |
108 // Time elapsed since largest_observed was received until this Ack frame was | 108 // Time elapsed since largest_observed was received until this Ack frame was |
109 // sent. | 109 // sent. |
110 QuicTime::Delta ack_delay_time; | 110 QuicTime::Delta ack_delay_time; |
111 | 111 |
112 // Vector of <packet_number, time> for when packets arrived. | 112 // Vector of <packet_number, time> for when packets arrived. |
113 PacketTimeVector received_packet_times; | 113 PacketTimeVector received_packet_times; |
114 | 114 |
115 // Set of packets. | 115 // Set of packets. |
116 PacketNumberQueue packets; | 116 PacketNumberQueue packets; |
117 | 117 |
118 // Path which this ack belongs to. | 118 // Path which this ack belongs to. |
119 QuicPathId path_id; | 119 QuicPathId path_id; |
120 }; | 120 }; |
121 | 121 |
122 // True if the packet number is greater than largest_observed or is listed | 122 // True if the packet number is greater than largest_observed or is listed |
123 // as missing. | 123 // as missing. |
124 // Always returns false for packet numbers less than least_unacked. | 124 // Always returns false for packet numbers less than least_unacked. |
125 NET_EXPORT_PRIVATE bool IsAwaitingPacket( | 125 QUIC_EXPORT_PRIVATE bool IsAwaitingPacket( |
126 const QuicAckFrame& ack_frame, | 126 const QuicAckFrame& ack_frame, |
127 QuicPacketNumber packet_number, | 127 QuicPacketNumber packet_number, |
128 QuicPacketNumber peer_least_packet_awaiting_ack); | 128 QuicPacketNumber peer_least_packet_awaiting_ack); |
129 | 129 |
130 } // namespace net | 130 } // namespace net |
131 | 131 |
132 #endif // NET_QUIC_CORE_FRAMES_QUIC_ACK_FRAME_H_ | 132 #endif // NET_QUIC_CORE_FRAMES_QUIC_ACK_FRAME_H_ |
OLD | NEW |