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. If multipath enabled, only creates | 6 // it's time to create a packet from them. If multipath enabled, only creates |
7 // packets on one path at the same time. Currently, next packet number is | 7 // packets on one path at the same time. Currently, next packet number is |
8 // tracked per-path. | 8 // tracked per-path. |
9 | 9 |
10 #ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_ | 10 #ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_ |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 QuicFramer* framer, | 65 QuicFramer* framer, |
66 QuicRandom* random_generator, | 66 QuicRandom* random_generator, |
67 QuicBufferAllocator* buffer_allocator, | 67 QuicBufferAllocator* buffer_allocator, |
68 DelegateInterface* delegate); | 68 DelegateInterface* delegate); |
69 | 69 |
70 ~QuicPacketCreator(); | 70 ~QuicPacketCreator(); |
71 | 71 |
72 // Makes the framer not serialize the protocol version in sent packets. | 72 // Makes the framer not serialize the protocol version in sent packets. |
73 void StopSendingVersion(); | 73 void StopSendingVersion(); |
74 | 74 |
| 75 // SetDiversificationNonce sets the nonce that will be sent in each public |
| 76 // header of packets encrypted at the initial encryption level. Should only |
| 77 // be called by servers. |
| 78 void SetDiversificationNonce(const DiversificationNonce nonce); |
| 79 |
75 // Update the packet number length to use in future packets as soon as it | 80 // Update the packet number length to use in future packets as soon as it |
76 // can be safely changed. | 81 // can be safely changed. |
77 // TODO(fayang): Directly set packet number length instead of compute it in | 82 // TODO(fayang): Directly set packet number length instead of compute it in |
78 // creator. | 83 // creator. |
79 void UpdatePacketNumberLength(QuicPacketNumber least_packet_awaited_by_peer, | 84 void UpdatePacketNumberLength(QuicPacketNumber least_packet_awaited_by_peer, |
80 QuicPacketCount max_packets_in_flight); | 85 QuicPacketCount max_packets_in_flight); |
81 | 86 |
82 // The overhead the framing will add for a packet with one frame. | 87 // The overhead the framing will add for a packet with one frame. |
83 static size_t StreamFramePacketOverhead( | 88 static size_t StreamFramePacketOverhead( |
84 QuicConnectionIdLength connection_id_length, | 89 QuicConnectionIdLength connection_id_length, |
85 bool include_version, | 90 bool include_version, |
86 bool include_path_id, | 91 bool include_path_id, |
| 92 bool include_diversification_nonce, |
87 QuicPacketNumberLength packet_number_length, | 93 QuicPacketNumberLength packet_number_length, |
88 QuicStreamOffset offset); | 94 QuicStreamOffset offset); |
89 | 95 |
90 // Returns false and flushes all pending frames if current open packet is | 96 // Returns false and flushes all pending frames if current open packet is |
91 // full. | 97 // full. |
92 // If current packet is not full, converts a raw payload into a stream frame | 98 // If current packet is not full, converts a raw payload into a stream frame |
93 // that fits into the open packet and adds it to the packet. | 99 // that fits into the open packet and adds it to the packet. |
94 // The payload begins at |iov_offset| into the |iov|. | 100 // The payload begins at |iov_offset| into the |iov|. |
95 bool ConsumeData(QuicStreamId id, | 101 bool ConsumeData(QuicStreamId id, |
96 QuicIOVector iov, | 102 QuicIOVector iov, |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 // Fails if |buffer_len| isn't long enough for the encrypted packet. | 260 // Fails if |buffer_len| isn't long enough for the encrypted packet. |
255 void SerializePacket(char* encrypted_buffer, size_t buffer_len); | 261 void SerializePacket(char* encrypted_buffer, size_t buffer_len); |
256 | 262 |
257 // Called after a new SerialiedPacket is created to call the delegate's | 263 // Called after a new SerialiedPacket is created to call the delegate's |
258 // OnSerializedPacket and reset state. | 264 // OnSerializedPacket and reset state. |
259 void OnSerializedPacket(); | 265 void OnSerializedPacket(); |
260 | 266 |
261 // Clears all fields of packet_ that should be cleared between serializations. | 267 // Clears all fields of packet_ that should be cleared between serializations. |
262 void ClearPacket(); | 268 void ClearPacket(); |
263 | 269 |
| 270 // Returns true if a diversification nonce should be included in the current |
| 271 // packet's public header. |
| 272 bool IncludeNonceInPublicHeader(); |
| 273 |
264 // Does not own these delegates or the framer. | 274 // Does not own these delegates or the framer. |
265 DelegateInterface* delegate_; | 275 DelegateInterface* delegate_; |
266 DebugDelegate* debug_delegate_; | 276 DebugDelegate* debug_delegate_; |
267 QuicFramer* framer_; | 277 QuicFramer* framer_; |
268 | 278 |
269 std::unique_ptr<QuicRandomBoolSource> random_bool_source_; | 279 std::unique_ptr<QuicRandomBoolSource> random_bool_source_; |
270 QuicBufferAllocator* const buffer_allocator_; | 280 QuicBufferAllocator* const buffer_allocator_; |
271 | 281 |
272 // Controls whether version should be included while serializing the packet. | 282 // Controls whether version should be included while serializing the packet. |
273 bool send_version_in_packet_; | 283 bool send_version_in_packet_; |
274 // Controls whether path id should be included while serializing the packet. | 284 // Controls whether path id should be included while serializing the packet. |
275 bool send_path_id_in_packet_; | 285 bool send_path_id_in_packet_; |
276 // Staging variable to hold next packet number length. When sequence | 286 // Staging variable to hold next packet number length. When sequence |
277 // number length is to be changed, this variable holds the new length until | 287 // number length is to be changed, this variable holds the new length until |
278 // a packet boundary, when the creator's packet_number_length_ can be changed | 288 // a packet boundary, when the creator's packet_number_length_ can be changed |
279 // to this new value. | 289 // to this new value. |
280 QuicPacketNumberLength next_packet_number_length_; | 290 QuicPacketNumberLength next_packet_number_length_; |
| 291 // If true, then |nonce_for_public_header_| will be included in the public |
| 292 // header of all packets created at the initial encryption level. |
| 293 bool have_diversification_nonce_; |
| 294 DiversificationNonce diversification_nonce_; |
281 // Maximum length including headers and encryption (UDP payload length.) | 295 // Maximum length including headers and encryption (UDP payload length.) |
282 QuicByteCount max_packet_length_; | 296 QuicByteCount max_packet_length_; |
283 size_t max_plaintext_size_; | 297 size_t max_plaintext_size_; |
284 // Length of connection_id to send over the wire. | 298 // Length of connection_id to send over the wire. |
285 QuicConnectionIdLength connection_id_length_; | 299 QuicConnectionIdLength connection_id_length_; |
286 | 300 |
287 // Frames to be added to the next SerializedPacket | 301 // Frames to be added to the next SerializedPacket |
288 QuicFrames queued_frames_; | 302 QuicFrames queued_frames_; |
289 | 303 |
290 // packet_size should never be read directly, use PacketSize() instead. | 304 // packet_size should never be read directly, use PacketSize() instead. |
291 // TODO(ianswett): Move packet_size_ into SerializedPacket once | 305 // TODO(ianswett): Move packet_size_ into SerializedPacket once |
292 // QuicEncryptedPacket has been flattened into SerializedPacket. | 306 // QuicEncryptedPacket has been flattened into SerializedPacket. |
293 size_t packet_size_; | 307 size_t packet_size_; |
294 QuicConnectionId connection_id_; | 308 QuicConnectionId connection_id_; |
295 | 309 |
296 // Packet used to invoke OnSerializedPacket. | 310 // Packet used to invoke OnSerializedPacket. |
297 SerializedPacket packet_; | 311 SerializedPacket packet_; |
298 | 312 |
299 // Map mapping path_id to last sent packet number on the path. | 313 // Map mapping path_id to last sent packet number on the path. |
300 std::unordered_map<QuicPathId, QuicPacketNumber> multipath_packet_number_; | 314 std::unordered_map<QuicPathId, QuicPacketNumber> multipath_packet_number_; |
301 | 315 |
302 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); | 316 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); |
303 }; | 317 }; |
304 | 318 |
305 } // namespace net | 319 } // namespace net |
306 | 320 |
307 #endif // NET_QUIC_QUIC_PACKET_CREATOR_H_ | 321 #endif // NET_QUIC_QUIC_PACKET_CREATOR_H_ |
OLD | NEW |