OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Accumulates frames for the next packet until more frames no longer fit or | 5 // Accumulates frames for the next packet until more frames no longer fit or |
6 // it's time to create a packet from them. Also provides packet creation of | 6 // it's time to create a packet from them. Also provides packet creation of |
7 // FEC packets based on previously created packets. | 7 // FEC packets based on previously created packets. |
8 | 8 |
9 #ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_ | 9 #ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_ |
10 #define NET_QUIC_QUIC_PACKET_CREATOR_H_ | 10 #define NET_QUIC_QUIC_PACKET_CREATOR_H_ |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 // Returns true if there are retransmittable frames pending to be serialized. | 118 // Returns true if there are retransmittable frames pending to be serialized. |
119 bool HasPendingRetransmittableFrames() const; | 119 bool HasPendingRetransmittableFrames() const; |
120 | 120 |
121 // Returns whether FEC protection is currently enabled. Note: Enabled does not | 121 // Returns whether FEC protection is currently enabled. Note: Enabled does not |
122 // mean that an FEC group is currently active; i.e., IsFecProtected() may | 122 // mean that an FEC group is currently active; i.e., IsFecProtected() may |
123 // still return false. | 123 // still return false. |
124 bool IsFecEnabled() const; | 124 bool IsFecEnabled() const; |
125 | 125 |
126 // Returns true if subsequent packets will be FEC protected. Note: True does | 126 // Returns true if subsequent packets will be FEC protected. Note: True does |
127 // not mean that an FEC packet is currently under construction; i.e., | 127 // not mean that an FEC packet is currently under construction; i.e., |
128 // fec_group_.get() may still be NULL, until MaybeStartFec() is called. | 128 // fec_group_.get() may still be nullptr, until MaybeStartFec() is called. |
129 bool IsFecProtected() const; | 129 bool IsFecProtected() const; |
130 | 130 |
131 // Returns the number of bytes which are available to be used by additional | 131 // Returns the number of bytes which are available to be used by additional |
132 // frames in the packet. Since stream frames are slightly smaller when they | 132 // frames in the packet. Since stream frames are slightly smaller when they |
133 // are the last frame in a packet, this method will return a different | 133 // are the last frame in a packet, this method will return a different |
134 // value than max_packet_size - PacketSize(), in this case. | 134 // value than max_packet_size - PacketSize(), in this case. |
135 size_t BytesFree() const; | 135 size_t BytesFree() const; |
136 | 136 |
137 // Returns the number of bytes that the packet will expand by if a new frame | 137 // Returns the number of bytes that the packet will expand by if a new frame |
138 // is added to the packet. If the last frame was a stream frame, it will | 138 // is added to the packet. If the last frame was a stream frame, it will |
139 // expand slightly when a new frame is added, and this method returns the | 139 // expand slightly when a new frame is added, and this method returns the |
140 // amount of expected expansion. If the packet is in an FEC group, no | 140 // amount of expected expansion. If the packet is in an FEC group, no |
141 // expansion happens and this method always returns zero. | 141 // expansion happens and this method always returns zero. |
142 size_t ExpansionOnNewFrame() const; | 142 size_t ExpansionOnNewFrame() const; |
143 | 143 |
144 // Returns the number of bytes in the current packet, including the header, | 144 // Returns the number of bytes in the current packet, including the header, |
145 // if serialized with the current frames. Adding a frame to the packet | 145 // if serialized with the current frames. Adding a frame to the packet |
146 // may change the serialized length of existing frames, as per the comment | 146 // may change the serialized length of existing frames, as per the comment |
147 // in BytesFree. | 147 // in BytesFree. |
148 size_t PacketSize() const; | 148 size_t PacketSize() const; |
149 | 149 |
150 // TODO(jri): AddSavedFrame calls AddFrame, which only saves the frame | 150 // TODO(jri): AddSavedFrame calls AddFrame, which only saves the frame |
151 // if it is a stream frame, not other types of frames. Fix this API; | 151 // if it is a stream frame, not other types of frames. Fix this API; |
152 // add a AddNonSavedFrame method. | 152 // add a AddNonSavedFrame method. |
153 // Adds |frame| to the packet creator's list of frames to be serialized. | 153 // Adds |frame| to the packet creator's list of frames to be serialized. |
154 // Returns false if the frame doesn't fit into the current packet. | 154 // Returns false if the frame doesn't fit into the current packet. |
155 bool AddSavedFrame(const QuicFrame& frame); | 155 bool AddSavedFrame(const QuicFrame& frame); |
156 | 156 |
157 // Serializes all frames which have been added and adds any which should be | 157 // Serializes all frames which have been added and adds any which should be |
158 // retransmitted to |retransmittable_frames| if it's not NULL. All frames must | 158 // retransmitted to |retransmittable_frames| if it's not nullptr. All frames |
159 // fit into a single packet. Sets the entropy hash of the serialized | 159 // must fit into a single packet. Sets the entropy hash of the serialized |
160 // packet to a random bool and returns that value as a member of | 160 // packet to a random bool and returns that value as a member of |
161 // SerializedPacket. Also, sets |serialized_frames| in the SerializedPacket | 161 // SerializedPacket. Also, sets |serialized_frames| in the SerializedPacket to |
162 // to the corresponding RetransmittableFrames if any frames are to be | 162 // the corresponding RetransmittableFrames if any frames are to be |
163 // retransmitted. | 163 // retransmitted. |
164 SerializedPacket SerializePacket(); | 164 SerializedPacket SerializePacket(); |
165 | 165 |
166 // Packetize FEC data. All frames must fit into a single packet. Also, sets | 166 // Packetize FEC data. All frames must fit into a single packet. Also, sets |
167 // the entropy hash of the serialized packet to a random bool and returns | 167 // the entropy hash of the serialized packet to a random bool and returns |
168 // that value as a member of SerializedPacket. | 168 // that value as a member of SerializedPacket. |
169 SerializedPacket SerializeFec(); | 169 SerializedPacket SerializeFec(); |
170 | 170 |
171 // Creates a packet with connection close frame. Caller owns the created | 171 // Creates a packet with connection close frame. Caller owns the created |
172 // packet. Also, sets the entropy hash of the serialized packet to a random | 172 // packet. Also, sets the entropy hash of the serialized packet to a random |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 void set_next_sequence_number_length(QuicSequenceNumberLength length) { | 207 void set_next_sequence_number_length(QuicSequenceNumberLength length) { |
208 next_sequence_number_length_ = length; | 208 next_sequence_number_length_ = length; |
209 } | 209 } |
210 | 210 |
211 size_t max_packet_length() const { | 211 size_t max_packet_length() const { |
212 return max_packet_length_; | 212 return max_packet_length_; |
213 } | 213 } |
214 | 214 |
215 void set_max_packet_length(size_t length) { | 215 void set_max_packet_length(size_t length) { |
216 // |max_packet_length_| should not be changed mid-packet or mid-FEC group. | 216 // |max_packet_length_| should not be changed mid-packet or mid-FEC group. |
217 DCHECK(fec_group_.get() == NULL && queued_frames_.empty()); | 217 DCHECK(fec_group_.get() == nullptr && queued_frames_.empty()); |
218 max_packet_length_ = length; | 218 max_packet_length_ = length; |
219 } | 219 } |
220 | 220 |
221 // Returns current max number of packets covered by an FEC group. | 221 // Returns current max number of packets covered by an FEC group. |
222 size_t max_packets_per_fec_group() const { | 222 size_t max_packets_per_fec_group() const { |
223 return max_packets_per_fec_group_; | 223 return max_packets_per_fec_group_; |
224 } | 224 } |
225 | 225 |
226 // Sets creator's max number of packets covered by an FEC group. | 226 // Sets creator's max number of packets covered by an FEC group. |
227 // Note: While there are no constraints on |max_packets_per_fec_group|, | 227 // Note: While there are no constraints on |max_packets_per_fec_group|, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 mutable size_t packet_size_; | 287 mutable size_t packet_size_; |
288 QuicFrames queued_frames_; | 288 QuicFrames queued_frames_; |
289 scoped_ptr<RetransmittableFrames> queued_retransmittable_frames_; | 289 scoped_ptr<RetransmittableFrames> queued_retransmittable_frames_; |
290 | 290 |
291 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); | 291 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); |
292 }; | 292 }; |
293 | 293 |
294 } // namespace net | 294 } // namespace net |
295 | 295 |
296 #endif // NET_QUIC_QUIC_PACKET_CREATOR_H_ | 296 #endif // NET_QUIC_QUIC_PACKET_CREATOR_H_ |
OLD | NEW |