Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: net/quic/quic_packet_creator.cc

Issue 312553003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | net/quic/quic_packet_creator_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "net/quic/quic_packet_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "net/quic/crypto/quic_random.h" 9 #include "net/quic/crypto/quic_random.h"
10 #include "net/quic/quic_ack_notifier.h" 10 #include "net/quic/quic_ack_notifier.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 bool is_server) 61 bool is_server)
62 : connection_id_(connection_id), 62 : connection_id_(connection_id),
63 encryption_level_(ENCRYPTION_NONE), 63 encryption_level_(ENCRYPTION_NONE),
64 framer_(framer), 64 framer_(framer),
65 random_bool_source_(new QuicRandomBoolSource(random_generator)), 65 random_bool_source_(new QuicRandomBoolSource(random_generator)),
66 sequence_number_(0), 66 sequence_number_(0),
67 should_fec_protect_(false), 67 should_fec_protect_(false),
68 fec_group_number_(0), 68 fec_group_number_(0),
69 is_server_(is_server), 69 is_server_(is_server),
70 send_version_in_packet_(!is_server), 70 send_version_in_packet_(!is_server),
71 sequence_number_length_(options_.send_sequence_number_length), 71 max_packet_length_(kDefaultMaxPacketSize),
72 max_packets_per_fec_group_(0),
73 connection_id_length_(PACKET_8BYTE_CONNECTION_ID),
74 next_sequence_number_length_(PACKET_1BYTE_SEQUENCE_NUMBER),
75 sequence_number_length_(next_sequence_number_length_),
72 packet_size_(0) { 76 packet_size_(0) {
73 framer_->set_fec_builder(this); 77 framer_->set_fec_builder(this);
74 } 78 }
75 79
76 QuicPacketCreator::~QuicPacketCreator() { 80 QuicPacketCreator::~QuicPacketCreator() {
77 } 81 }
78 82
79 void QuicPacketCreator::OnBuiltFecProtectedPayload( 83 void QuicPacketCreator::OnBuiltFecProtectedPayload(
80 const QuicPacketHeader& header, StringPiece payload) { 84 const QuicPacketHeader& header, StringPiece payload) {
81 if (fec_group_.get()) { 85 if (fec_group_.get()) {
82 DCHECK_NE(0u, header.fec_group); 86 DCHECK_NE(0u, header.fec_group);
83 fec_group_->Update(encryption_level_, header, payload); 87 fec_group_->Update(encryption_level_, header, payload);
84 } 88 }
85 } 89 }
86 90
87 bool QuicPacketCreator::ShouldSendFec(bool force_close) const { 91 bool QuicPacketCreator::ShouldSendFec(bool force_close) const {
88 return fec_group_.get() != NULL && fec_group_->NumReceivedPackets() > 0 && 92 return fec_group_.get() != NULL && fec_group_->NumReceivedPackets() > 0 &&
89 (force_close || fec_group_->NumReceivedPackets() >= 93 (force_close || fec_group_->NumReceivedPackets() >=
90 options_.max_packets_per_fec_group); 94 max_packets_per_fec_group_);
91 } 95 }
92 96
93 void QuicPacketCreator::StartFecProtectingPackets() { 97 void QuicPacketCreator::StartFecProtectingPackets() {
94 if (!IsFecEnabled()) { 98 if (!IsFecEnabled()) {
95 LOG(DFATAL) << "Cannot start FEC protection when FEC is not enabled."; 99 LOG(DFATAL) << "Cannot start FEC protection when FEC is not enabled.";
96 return; 100 return;
97 } 101 }
98 // TODO(jri): This currently requires that the generator flush out any 102 // TODO(jri): This currently requires that the generator flush out any
99 // pending frames when FEC protection is turned on. If current packet can be 103 // pending frames when FEC protection is turned on. If current packet can be
100 // converted to an FEC protected packet, do it. This will require the 104 // converted to an FEC protected packet, do it. This will require the
(...skipping 15 matching lines...) Expand all
116 DCHECK(should_fec_protect_); 120 DCHECK(should_fec_protect_);
117 should_fec_protect_ = false; 121 should_fec_protect_ = false;
118 fec_group_number_ = 0; 122 fec_group_number_ = 0;
119 } 123 }
120 124
121 bool QuicPacketCreator::IsFecProtected() const { 125 bool QuicPacketCreator::IsFecProtected() const {
122 return should_fec_protect_; 126 return should_fec_protect_;
123 } 127 }
124 128
125 bool QuicPacketCreator::IsFecEnabled() const { 129 bool QuicPacketCreator::IsFecEnabled() const {
126 return options_.max_packets_per_fec_group > 0; 130 return max_packets_per_fec_group_ > 0;
127 }
128
129 size_t QuicPacketCreator::max_packets_per_fec_group() const {
130 return options_.max_packets_per_fec_group;
131 }
132
133 void QuicPacketCreator::set_max_packets_per_fec_group(
134 size_t max_packets_per_fec_group) {
135 // To turn off FEC protection, use StopFecProtectingPackets().
136 DCHECK_NE(0u, max_packets_per_fec_group);
137 options_.max_packets_per_fec_group = max_packets_per_fec_group;
138 } 131 }
139 132
140 InFecGroup QuicPacketCreator::MaybeUpdateLengthsAndStartFec() { 133 InFecGroup QuicPacketCreator::MaybeUpdateLengthsAndStartFec() {
141 if (fec_group_.get() != NULL) { 134 if (fec_group_.get() != NULL) {
142 // Don't update any lengths when an FEC group is open, to ensure same 135 // Don't update any lengths when an FEC group is open, to ensure same
143 // packet header size in all packets within a group. 136 // packet header size in all packets within a group.
144 return IN_FEC_GROUP; 137 return IN_FEC_GROUP;
145 } 138 }
146 if (!queued_frames_.empty()) { 139 if (!queued_frames_.empty()) {
147 // Don't change creator state if there are frames queued. 140 // Don't change creator state if there are frames queued.
148 return fec_group_.get() == NULL ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 141 return fec_group_.get() == NULL ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
149 } 142 }
150 // TODO(jri): Add max_packet_length and send_connection_id_length here too. 143
151 sequence_number_length_ = options_.send_sequence_number_length; 144 // Update sequence number length only on packet and FEC group boundaries.
145 sequence_number_length_ = next_sequence_number_length_;
152 146
153 if (!should_fec_protect_) { 147 if (!should_fec_protect_) {
154 return NOT_IN_FEC_GROUP; 148 return NOT_IN_FEC_GROUP;
155 } 149 }
156 // Start a new FEC group since protection is on. Set the fec group number to 150 // Start a new FEC group since protection is on. Set the fec group number to
157 // the sequence number of the next packet. 151 // the sequence number of the next packet.
158 fec_group_number_ = sequence_number() + 1; 152 fec_group_number_ = sequence_number() + 1;
159 fec_group_.reset(new QuicFecGroup()); 153 fec_group_.reset(new QuicFecGroup());
160 return IN_FEC_GROUP; 154 return IN_FEC_GROUP;
161 } 155 }
(...skipping 10 matching lines...) Expand all
172 } 166 }
173 } 167 }
174 168
175 void QuicPacketCreator::UpdateSequenceNumberLength( 169 void QuicPacketCreator::UpdateSequenceNumberLength(
176 QuicPacketSequenceNumber least_packet_awaited_by_peer, 170 QuicPacketSequenceNumber least_packet_awaited_by_peer,
177 QuicByteCount congestion_window) { 171 QuicByteCount congestion_window) {
178 DCHECK_LE(least_packet_awaited_by_peer, sequence_number_ + 1); 172 DCHECK_LE(least_packet_awaited_by_peer, sequence_number_ + 1);
179 // Since the packet creator will not change sequence number length mid FEC 173 // Since the packet creator will not change sequence number length mid FEC
180 // group, include the size of an FEC group to be safe. 174 // group, include the size of an FEC group to be safe.
181 const QuicPacketSequenceNumber current_delta = 175 const QuicPacketSequenceNumber current_delta =
182 options_.max_packets_per_fec_group + sequence_number_ + 1 176 max_packets_per_fec_group_ + sequence_number_ + 1
183 - least_packet_awaited_by_peer; 177 - least_packet_awaited_by_peer;
184 const uint64 congestion_window_packets = 178 const uint64 congestion_window_packets =
185 congestion_window / options_.max_packet_length; 179 congestion_window / max_packet_length_;
186 const uint64 delta = max(current_delta, congestion_window_packets); 180 const uint64 delta = max(current_delta, congestion_window_packets);
187 options_.send_sequence_number_length = 181 next_sequence_number_length_ =
188 QuicFramer::GetMinSequenceNumberLength(delta * 4); 182 QuicFramer::GetMinSequenceNumberLength(delta * 4);
189 } 183 }
190 184
191 bool QuicPacketCreator::HasRoomForStreamFrame(QuicStreamId id, 185 bool QuicPacketCreator::HasRoomForStreamFrame(QuicStreamId id,
192 QuicStreamOffset offset) const { 186 QuicStreamOffset offset) const {
193 // TODO(jri): This is a simple safe decision for now, but make 187 // TODO(jri): This is a simple safe decision for now, but make
194 // is_in_fec_group a parameter. Same as with all public methods in 188 // is_in_fec_group a parameter. Same as with all public methods in
195 // QuicPacketCreator. 189 // QuicPacketCreator.
196 return BytesFree() > 190 return BytesFree() >
197 QuicFramer::GetMinStreamFrameSize(framer_->version(), id, offset, true, 191 QuicFramer::GetMinStreamFrameSize(framer_->version(), id, offset, true,
(...skipping 14 matching lines...) Expand all
212 // Assumes this is a stream with a single lone packet. 206 // Assumes this is a stream with a single lone packet.
213 QuicFramer::GetMinStreamFrameSize(version, 1u, offset, true, 207 QuicFramer::GetMinStreamFrameSize(version, 1u, offset, true,
214 is_in_fec_group); 208 is_in_fec_group);
215 } 209 }
216 210
217 size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id, 211 size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id,
218 const IOVector& data, 212 const IOVector& data,
219 QuicStreamOffset offset, 213 QuicStreamOffset offset,
220 bool fin, 214 bool fin,
221 QuicFrame* frame) { 215 QuicFrame* frame) {
222 DCHECK_GT(options_.max_packet_length, 216 DCHECK_GT(max_packet_length_, StreamFramePacketOverhead(
223 StreamFramePacketOverhead(
224 framer_->version(), PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, 217 framer_->version(), PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
225 PACKET_6BYTE_SEQUENCE_NUMBER, offset, IN_FEC_GROUP)); 218 PACKET_6BYTE_SEQUENCE_NUMBER, offset, IN_FEC_GROUP));
226 219
227 InFecGroup is_in_fec_group = MaybeUpdateLengthsAndStartFec(); 220 InFecGroup is_in_fec_group = MaybeUpdateLengthsAndStartFec();
228 221
229 LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset)) 222 LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset))
230 << "No room for Stream frame, BytesFree: " << BytesFree() 223 << "No room for Stream frame, BytesFree: " << BytesFree()
231 << " MinStreamFrameSize: " 224 << " MinStreamFrameSize: "
232 << QuicFramer::GetMinStreamFrameSize( 225 << QuicFramer::GetMinStreamFrameSize(
233 framer_->version(), id, offset, true, is_in_fec_group); 226 framer_->version(), id, offset, true, is_in_fec_group);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 frame->stream_frame->notifier = notifier; 263 frame->stream_frame->notifier = notifier;
271 264
272 return bytes_consumed; 265 return bytes_consumed;
273 } 266 }
274 267
275 SerializedPacket QuicPacketCreator::ReserializeAllFrames( 268 SerializedPacket QuicPacketCreator::ReserializeAllFrames(
276 const QuicFrames& frames, 269 const QuicFrames& frames,
277 QuicSequenceNumberLength original_length) { 270 QuicSequenceNumberLength original_length) {
278 DCHECK(fec_group_.get() == NULL); 271 DCHECK(fec_group_.get() == NULL);
279 const QuicSequenceNumberLength saved_length = sequence_number_length_; 272 const QuicSequenceNumberLength saved_length = sequence_number_length_;
280 const QuicSequenceNumberLength saved_options_length = 273 const QuicSequenceNumberLength saved_next_length =
281 options_.send_sequence_number_length; 274 next_sequence_number_length_;
282 const bool saved_should_fec_protect = should_fec_protect_; 275 const bool saved_should_fec_protect = should_fec_protect_;
283 276
284 // Temporarily set the sequence number length and stop FEC protection. 277 // Temporarily set the sequence number length and stop FEC protection.
285 sequence_number_length_ = original_length; 278 sequence_number_length_ = original_length;
286 options_.send_sequence_number_length = original_length; 279 next_sequence_number_length_ = original_length;
287 should_fec_protect_ = false; 280 should_fec_protect_ = false;
288 281
289 // Serialize the packet and restore the FEC and sequence number length state. 282 // Serialize the packet and restore the FEC and sequence number length state.
290 SerializedPacket serialized_packet = SerializeAllFrames(frames); 283 SerializedPacket serialized_packet = SerializeAllFrames(frames);
291 sequence_number_length_ = saved_length; 284 sequence_number_length_ = saved_length;
292 options_.send_sequence_number_length = saved_options_length; 285 next_sequence_number_length_ = saved_next_length;
293 should_fec_protect_ = saved_should_fec_protect; 286 should_fec_protect_ = saved_should_fec_protect;
294 287
295 return serialized_packet; 288 return serialized_packet;
296 } 289 }
297 290
298 SerializedPacket QuicPacketCreator::SerializeAllFrames( 291 SerializedPacket QuicPacketCreator::SerializeAllFrames(
299 const QuicFrames& frames) { 292 const QuicFrames& frames) {
300 // TODO(satyamshekhar): Verify that this DCHECK won't fail. What about queued 293 // TODO(satyamshekhar): Verify that this DCHECK won't fail. What about queued
301 // frames from SendStreamData()[send_stream_should_flush_ == false && 294 // frames from SendStreamData()[send_stream_should_flush_ == false &&
302 // data.empty() == true] and retransmit due to RTO. 295 // data.empty() == true] and retransmit due to RTO.
(...skipping 20 matching lines...) Expand all
323 } 316 }
324 // If the last frame in the packet is a stream frame, then it will expand to 317 // If the last frame in the packet is a stream frame, then it will expand to
325 // include the stream_length field when a new frame is added. 318 // include the stream_length field when a new frame is added.
326 bool has_trailing_stream_frame = 319 bool has_trailing_stream_frame =
327 !queued_frames_.empty() && queued_frames_.back().type == STREAM_FRAME; 320 !queued_frames_.empty() && queued_frames_.back().type == STREAM_FRAME;
328 return has_trailing_stream_frame ? kQuicStreamPayloadLengthSize : 0; 321 return has_trailing_stream_frame ? kQuicStreamPayloadLengthSize : 0;
329 } 322 }
330 323
331 size_t QuicPacketCreator::BytesFree() const { 324 size_t QuicPacketCreator::BytesFree() const {
332 const size_t max_plaintext_size = 325 const size_t max_plaintext_size =
333 framer_->GetMaxPlaintextSize(options_.max_packet_length); 326 framer_->GetMaxPlaintextSize(max_packet_length_);
334 DCHECK_GE(max_plaintext_size, PacketSize()); 327 DCHECK_GE(max_plaintext_size, PacketSize());
335 return max_plaintext_size - min(max_plaintext_size, PacketSize() 328 return max_plaintext_size - min(max_plaintext_size, PacketSize()
336 + ExpansionOnNewFrame()); 329 + ExpansionOnNewFrame());
337 } 330 }
338 331
339 size_t QuicPacketCreator::PacketSize() const { 332 size_t QuicPacketCreator::PacketSize() const {
340 if (queued_frames_.empty()) { 333 if (!queued_frames_.empty()) {
341 // Only adjust the sequence number length when the FEC group is not open, 334 return packet_size_;
342 // to ensure no packets in a group are too large.
343 if (fec_group_.get() == NULL ||
344 fec_group_->NumReceivedPackets() == 0) {
345 sequence_number_length_ = options_.send_sequence_number_length;
346 }
347 packet_size_ = GetPacketHeaderSize(options_.send_connection_id_length,
348 send_version_in_packet_,
349 sequence_number_length_,
350 should_fec_protect_ ? IN_FEC_GROUP :
351 NOT_IN_FEC_GROUP);
352 } 335 }
336 if (fec_group_.get() == NULL) {
337 // Update sequence number length on packet and FEC boundary.
338 sequence_number_length_ = next_sequence_number_length_;
339 }
340 packet_size_ = GetPacketHeaderSize(
341 connection_id_length_, send_version_in_packet_, sequence_number_length_,
342 should_fec_protect_ ? IN_FEC_GROUP : NOT_IN_FEC_GROUP);
353 return packet_size_; 343 return packet_size_;
354 } 344 }
355 345
356 bool QuicPacketCreator::AddSavedFrame(const QuicFrame& frame) { 346 bool QuicPacketCreator::AddSavedFrame(const QuicFrame& frame) {
357 return AddFrame(frame, true); 347 return AddFrame(frame, true);
358 } 348 }
359 349
360 SerializedPacket QuicPacketCreator::SerializePacket() { 350 SerializedPacket QuicPacketCreator::SerializePacket() {
361 LOG_IF(DFATAL, queued_frames_.empty()) 351 LOG_IF(DFATAL, queued_frames_.empty())
362 << "Attempt to serialize empty packet"; 352 << "Attempt to serialize empty packet";
363 DCHECK_GE(sequence_number_ + 1, fec_group_number_); 353 DCHECK_GE(sequence_number_ + 1, fec_group_number_);
364 QuicPacketHeader header; 354 QuicPacketHeader header;
365 FillPacketHeader(should_fec_protect_ ? fec_group_number_ : 0, false, &header); 355 FillPacketHeader(should_fec_protect_ ? fec_group_number_ : 0, false, &header);
366 356
367 MaybeAddPadding(); 357 MaybeAddPadding();
368 358
369 size_t max_plaintext_size = 359 size_t max_plaintext_size =
370 framer_->GetMaxPlaintextSize(options_.max_packet_length); 360 framer_->GetMaxPlaintextSize(max_packet_length_);
371 DCHECK_GE(max_plaintext_size, packet_size_); 361 DCHECK_GE(max_plaintext_size, packet_size_);
372 // ACK Frames will be truncated only if they're the only frame in the packet, 362 // ACK Frames will be truncated only if they're the only frame in the packet,
373 // and if packet_size_ was set to max_plaintext_size. If truncation occurred, 363 // and if packet_size_ was set to max_plaintext_size. If truncation occurred,
374 // then GetSerializedFrameLength will have returned all bytes free. 364 // then GetSerializedFrameLength will have returned all bytes free.
375 bool possibly_truncated = packet_size_ == max_plaintext_size && 365 bool possibly_truncated = packet_size_ == max_plaintext_size &&
376 queued_frames_.size() == 1 && 366 queued_frames_.size() == 1 &&
377 queued_frames_.back().type == ACK_FRAME; 367 queued_frames_.back().type == ACK_FRAME;
378 SerializedPacket serialized = 368 SerializedPacket serialized =
379 framer_->BuildDataPacket(header, queued_frames_, packet_size_); 369 framer_->BuildDataPacket(header, queued_frames_, packet_size_);
380 LOG_IF(DFATAL, !serialized.packet) 370 LOG_IF(DFATAL, !serialized.packet)
381 << "Failed to serialize " << queued_frames_.size() << " frames."; 371 << "Failed to serialize " << queued_frames_.size() << " frames.";
382 // Because of possible truncation, we can't be confident that our 372 // Because of possible truncation, we can't be confident that our
383 // packet size calculation worked correctly. 373 // packet size calculation worked correctly.
384 if (!possibly_truncated) { 374 if (!possibly_truncated) {
385 DCHECK_EQ(packet_size_, serialized.packet->length()); 375 DCHECK_EQ(packet_size_, serialized.packet->length());
386 } 376 }
387
388 packet_size_ = 0; 377 packet_size_ = 0;
389 queued_frames_.clear(); 378 queued_frames_.clear();
390 serialized.retransmittable_frames = queued_retransmittable_frames_.release(); 379 serialized.retransmittable_frames = queued_retransmittable_frames_.release();
391 return serialized; 380 return serialized;
392 } 381 }
393 382
394 SerializedPacket QuicPacketCreator::SerializeFec() { 383 SerializedPacket QuicPacketCreator::SerializeFec() {
395 if (fec_group_.get() == NULL || fec_group_->NumReceivedPackets() <= 0) { 384 if (fec_group_.get() == NULL || fec_group_->NumReceivedPackets() <= 0) {
396 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group."; 385 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group.";
397 // TODO(jri): Make this a public method of framer? 386 // TODO(jri): Make this a public method of framer?
398 SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL); 387 SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL);
399 return kNoPacket; 388 return kNoPacket;
400 } 389 }
401 DCHECK_EQ(0u, queued_frames_.size()); 390 DCHECK_EQ(0u, queued_frames_.size());
402 QuicPacketHeader header; 391 QuicPacketHeader header;
403 FillPacketHeader(fec_group_number_, true, &header); 392 FillPacketHeader(fec_group_number_, true, &header);
404 QuicFecData fec_data; 393 QuicFecData fec_data;
405 fec_data.fec_group = fec_group_->min_protected_packet(); 394 fec_data.fec_group = fec_group_->min_protected_packet();
406 fec_data.redundancy = fec_group_->payload_parity(); 395 fec_data.redundancy = fec_group_->payload_parity();
407 SerializedPacket serialized = framer_->BuildFecPacket(header, fec_data); 396 SerializedPacket serialized = framer_->BuildFecPacket(header, fec_data);
408 fec_group_.reset(NULL); 397 fec_group_.reset(NULL);
409 packet_size_ = 0; 398 packet_size_ = 0;
410 LOG_IF(DFATAL, !serialized.packet) 399 LOG_IF(DFATAL, !serialized.packet)
411 << "Failed to serialize fec packet for group:" << fec_data.fec_group; 400 << "Failed to serialize fec packet for group:" << fec_data.fec_group;
412 DCHECK_GE(options_.max_packet_length, serialized.packet->length()); 401 DCHECK_GE(max_packet_length_, serialized.packet->length());
413 return serialized; 402 return serialized;
414 } 403 }
415 404
416 SerializedPacket QuicPacketCreator::SerializeConnectionClose( 405 SerializedPacket QuicPacketCreator::SerializeConnectionClose(
417 QuicConnectionCloseFrame* close_frame) { 406 QuicConnectionCloseFrame* close_frame) {
418 QuicFrames frames; 407 QuicFrames frames;
419 frames.push_back(QuicFrame(close_frame)); 408 frames.push_back(QuicFrame(close_frame));
420 return SerializeAllFrames(frames); 409 return SerializeAllFrames(frames);
421 } 410 }
422 411
423 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket( 412 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket(
424 const QuicVersionVector& supported_versions) { 413 const QuicVersionVector& supported_versions) {
425 DCHECK(is_server_); 414 DCHECK(is_server_);
426 QuicPacketPublicHeader header; 415 QuicPacketPublicHeader header;
427 header.connection_id = connection_id_; 416 header.connection_id = connection_id_;
428 header.reset_flag = false; 417 header.reset_flag = false;
429 header.version_flag = true; 418 header.version_flag = true;
430 header.versions = supported_versions; 419 header.versions = supported_versions;
431 QuicEncryptedPacket* encrypted = 420 QuicEncryptedPacket* encrypted =
432 framer_->BuildVersionNegotiationPacket(header, supported_versions); 421 framer_->BuildVersionNegotiationPacket(header, supported_versions);
433 DCHECK(encrypted); 422 DCHECK(encrypted);
434 DCHECK_GE(options_.max_packet_length, encrypted->length()); 423 DCHECK_GE(max_packet_length_, encrypted->length());
435 return encrypted; 424 return encrypted;
436 } 425 }
437 426
438 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, 427 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group,
439 bool fec_flag, 428 bool fec_flag,
440 QuicPacketHeader* header) { 429 QuicPacketHeader* header) {
441 header->public_header.connection_id = connection_id_; 430 header->public_header.connection_id = connection_id_;
442 header->public_header.reset_flag = false; 431 header->public_header.reset_flag = false;
443 header->public_header.version_flag = send_version_in_packet_; 432 header->public_header.version_flag = send_version_in_packet_;
444 header->fec_flag = fec_flag; 433 header->fec_flag = fec_flag;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 if (!is_handshake) { 500 if (!is_handshake) {
512 return; 501 return;
513 } 502 }
514 503
515 QuicPaddingFrame padding; 504 QuicPaddingFrame padding;
516 bool success = AddFrame(QuicFrame(&padding), false); 505 bool success = AddFrame(QuicFrame(&padding), false);
517 DCHECK(success); 506 DCHECK(success);
518 } 507 }
519 508
520 } // namespace net 509 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | net/quic/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698