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. | 6 // it's time to create a packet from them. |
7 | 7 |
8 #ifndef NET_QUIC_CORE_QUIC_PACKET_CREATOR_H_ | 8 #ifndef NET_QUIC_CORE_QUIC_PACKET_CREATOR_H_ |
9 #define NET_QUIC_CORE_QUIC_PACKET_CREATOR_H_ | 9 #define NET_QUIC_CORE_QUIC_PACKET_CREATOR_H_ |
10 | 10 |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 // plaintext size. | 195 // plaintext size. |
196 void SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter); | 196 void SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter); |
197 | 197 |
198 // Indicates whether the packet creator is in a state where it can change | 198 // Indicates whether the packet creator is in a state where it can change |
199 // current maximum packet length. | 199 // current maximum packet length. |
200 bool CanSetMaxPacketLength() const; | 200 bool CanSetMaxPacketLength() const; |
201 | 201 |
202 // Sets the maximum packet length. | 202 // Sets the maximum packet length. |
203 void SetMaxPacketLength(QuicByteCount length); | 203 void SetMaxPacketLength(QuicByteCount length); |
204 | 204 |
| 205 // Increases pending_padding_bytes by |size|. Pending padding will be sent by |
| 206 // MaybeAddPadding(). |
| 207 void AddPendingPadding(QuicByteCount size); |
| 208 |
205 void set_debug_delegate(DebugDelegate* debug_delegate) { | 209 void set_debug_delegate(DebugDelegate* debug_delegate) { |
206 debug_delegate_ = debug_delegate; | 210 debug_delegate_ = debug_delegate; |
207 } | 211 } |
208 | 212 |
209 bool latched_flag_no_stop_waiting_frames() const { | 213 bool latched_flag_no_stop_waiting_frames() const { |
210 return latched_flag_no_stop_waiting_frames_; | 214 return latched_flag_no_stop_waiting_frames_; |
211 } | 215 } |
212 | 216 |
| 217 QuicByteCount pending_padding_bytes() const { return pending_padding_bytes_; } |
| 218 |
213 private: | 219 private: |
214 friend class test::QuicPacketCreatorPeer; | 220 friend class test::QuicPacketCreatorPeer; |
215 | 221 |
216 static bool ShouldRetransmit(const QuicFrame& frame); | 222 static bool ShouldRetransmit(const QuicFrame& frame); |
217 | 223 |
218 // Converts a raw payload to a frame which fits into the current open | 224 // Converts a raw payload to a frame which fits into the current open |
219 // packet. The payload begins at |iov_offset| into the |iov|. | 225 // packet. The payload begins at |iov_offset| into the |iov|. |
220 // If data is empty and fin is true, the expected behavior is to consume the | 226 // If data is empty and fin is true, the expected behavior is to consume the |
221 // fin but return 0. If any data is consumed, it will be copied into a | 227 // fin but return 0. If any data is consumed, it will be copied into a |
222 // new buffer that |frame| will point to and own. | 228 // new buffer that |frame| will point to and own. |
(...skipping 12 matching lines...) Expand all Loading... |
235 size_t length, | 241 size_t length, |
236 char* buffer); | 242 char* buffer); |
237 | 243 |
238 void FillPacketHeader(QuicPacketHeader* header); | 244 void FillPacketHeader(QuicPacketHeader* header); |
239 | 245 |
240 // Adds a |frame| if there is space and returns false and flushes all pending | 246 // Adds a |frame| if there is space and returns false and flushes all pending |
241 // frames if there isn't room. If |save_retransmittable_frames| is true, | 247 // frames if there isn't room. If |save_retransmittable_frames| is true, |
242 // saves the |frame| in the next SerializedPacket. | 248 // saves the |frame| in the next SerializedPacket. |
243 bool AddFrame(const QuicFrame& frame, bool save_retransmittable_frames); | 249 bool AddFrame(const QuicFrame& frame, bool save_retransmittable_frames); |
244 | 250 |
245 // Adds a padding frame to the current packet only if the current packet | 251 // Adds a padding frame to the current packet (if there is space) when (1) |
246 // contains a handshake message, and there is sufficient room to fit a | 252 // current packet needs full padding or (2) there are pending paddings. |
247 // padding frame. | |
248 void MaybeAddPadding(); | 253 void MaybeAddPadding(); |
249 | 254 |
250 // Serializes all frames which have been added and adds any which should be | 255 // Serializes all frames which have been added and adds any which should be |
251 // retransmitted to packet_.retransmittable_frames. All frames must fit into | 256 // retransmitted to packet_.retransmittable_frames. All frames must fit into |
252 // a single packet. | 257 // a single packet. |
253 // Fails if |buffer_len| isn't long enough for the encrypted packet. | 258 // Fails if |buffer_len| isn't long enough for the encrypted packet. |
254 void SerializePacket(char* encrypted_buffer, size_t buffer_len); | 259 void SerializePacket(char* encrypted_buffer, size_t buffer_len); |
255 | 260 |
256 // Called after a new SerialiedPacket is created to call the delegate's | 261 // Called after a new SerialiedPacket is created to call the delegate's |
257 // OnSerializedPacket and reset state. | 262 // OnSerializedPacket and reset state. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 // QuicEncryptedPacket has been flattened into SerializedPacket. | 301 // QuicEncryptedPacket has been flattened into SerializedPacket. |
297 size_t packet_size_; | 302 size_t packet_size_; |
298 QuicConnectionId connection_id_; | 303 QuicConnectionId connection_id_; |
299 | 304 |
300 // Packet used to invoke OnSerializedPacket. | 305 // Packet used to invoke OnSerializedPacket. |
301 SerializedPacket packet_; | 306 SerializedPacket packet_; |
302 | 307 |
303 // The latched value of FLAGS_quic_reloadable_flag_quic_no_stop_waiting_frames | 308 // The latched value of FLAGS_quic_reloadable_flag_quic_no_stop_waiting_frames |
304 bool latched_flag_no_stop_waiting_frames_; | 309 bool latched_flag_no_stop_waiting_frames_; |
305 | 310 |
| 311 // Pending padding bytes to send. Pending padding bytes will be sent in next |
| 312 // packet(s) (after all other frames) if current constructed packet does not |
| 313 // have room to send all of them. |
| 314 QuicByteCount pending_padding_bytes_; |
| 315 |
| 316 // Indicates whether current constructed packet needs full padding to max |
| 317 // packet size. Please note, full padding does not consume pending padding |
| 318 // bytes. |
| 319 bool needs_full_padding_; |
| 320 |
306 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); | 321 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); |
307 }; | 322 }; |
308 | 323 |
309 } // namespace net | 324 } // namespace net |
310 | 325 |
311 #endif // NET_QUIC_CORE_QUIC_PACKET_CREATOR_H_ | 326 #endif // NET_QUIC_CORE_QUIC_PACKET_CREATOR_H_ |
OLD | NEW |