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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_packet_generator_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_generator.h" 5 #include "net/quic/quic_packet_generator.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/quic_ack_notifier.h" 9 #include "net/quic/quic_ack_notifier.h"
10 #include "net/quic/quic_fec_group.h" 10 #include "net/quic/quic_fec_group.h"
(...skipping 28 matching lines...) Expand all
39 QuicFramer* framer, 39 QuicFramer* framer,
40 QuicRandom* random_generator, 40 QuicRandom* random_generator,
41 DelegateInterface* delegate) 41 DelegateInterface* delegate)
42 : delegate_(delegate), 42 : delegate_(delegate),
43 debug_delegate_(nullptr), 43 debug_delegate_(nullptr),
44 packet_creator_(connection_id, framer, random_generator), 44 packet_creator_(connection_id, framer, random_generator),
45 batch_mode_(false), 45 batch_mode_(false),
46 fec_timeout_(QuicTime::Delta::Zero()), 46 fec_timeout_(QuicTime::Delta::Zero()),
47 should_fec_protect_(false), 47 should_fec_protect_(false),
48 should_send_ack_(false), 48 should_send_ack_(false),
49 should_send_stop_waiting_(false) { 49 should_send_stop_waiting_(false),
50 ack_queued_(false),
51 stop_waiting_queued_(false) {
50 } 52 }
51 53
52 QuicPacketGenerator::~QuicPacketGenerator() { 54 QuicPacketGenerator::~QuicPacketGenerator() {
53 for (QuicFrames::iterator it = queued_control_frames_.begin(); 55 for (QuicFrames::iterator it = queued_control_frames_.begin();
54 it != queued_control_frames_.end(); ++it) { 56 it != queued_control_frames_.end(); ++it) {
55 switch (it->type) { 57 switch (it->type) {
56 case PADDING_FRAME: 58 case PADDING_FRAME:
57 delete it->padding_frame; 59 delete it->padding_frame;
58 break; 60 break;
59 case STREAM_FRAME: 61 case STREAM_FRAME:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 packet_creator_.set_max_packets_per_fec_group( 96 packet_creator_.set_max_packets_per_fec_group(
95 static_cast<size_t>(kMaxPacketsInFlightMultiplierForFecGroupSize * 97 static_cast<size_t>(kMaxPacketsInFlightMultiplierForFecGroupSize *
96 max_packets_in_flight)); 98 max_packets_in_flight));
97 } 99 }
98 100
99 void QuicPacketGenerator::OnRttChange(QuicTime::Delta rtt) { 101 void QuicPacketGenerator::OnRttChange(QuicTime::Delta rtt) {
100 fec_timeout_ = rtt.Multiply(kRttMultiplierForFecTimeout); 102 fec_timeout_ = rtt.Multiply(kRttMultiplierForFecTimeout);
101 } 103 }
102 104
103 void QuicPacketGenerator::SetShouldSendAck(bool also_send_stop_waiting) { 105 void QuicPacketGenerator::SetShouldSendAck(bool also_send_stop_waiting) {
104 if (pending_ack_frame_ != nullptr) { 106 if (ack_queued_) {
105 // Ack already queued, nothing to do. 107 // Ack already queued, nothing to do.
106 return; 108 return;
107 } 109 }
108 110
109 if (also_send_stop_waiting && pending_stop_waiting_frame_ != nullptr) { 111 if (also_send_stop_waiting && stop_waiting_queued_) {
110 LOG(DFATAL) << "Should only ever be one pending stop waiting frame."; 112 LOG(DFATAL) << "Should only ever be one pending stop waiting frame.";
111 return; 113 return;
112 } 114 }
113 115
114 should_send_ack_ = true; 116 should_send_ack_ = true;
115 should_send_stop_waiting_ = also_send_stop_waiting; 117 should_send_stop_waiting_ = also_send_stop_waiting;
116 SendQueuedFrames(false); 118 SendQueuedFrames(false);
117 } 119 }
118 120
119 void QuicPacketGenerator::SetShouldSendStopWaiting() { 121 void QuicPacketGenerator::SetShouldSendStopWaiting() {
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 return packet_creator_.HasPendingFrames() || HasPendingFrames(); 355 return packet_creator_.HasPendingFrames() || HasPendingFrames();
354 } 356 }
355 357
356 bool QuicPacketGenerator::HasPendingFrames() const { 358 bool QuicPacketGenerator::HasPendingFrames() const {
357 return should_send_ack_ || should_send_stop_waiting_ || 359 return should_send_ack_ || should_send_stop_waiting_ ||
358 !queued_control_frames_.empty(); 360 !queued_control_frames_.empty();
359 } 361 }
360 362
361 bool QuicPacketGenerator::AddNextPendingFrame() { 363 bool QuicPacketGenerator::AddNextPendingFrame() {
362 if (should_send_ack_) { 364 if (should_send_ack_) {
363 pending_ack_frame_.reset(delegate_->CreateAckFrame()); 365 delegate_->PopulateAckFrame(&pending_ack_frame_);
366 ack_queued_ = true;
364 // If we can't this add the frame now, then we still need to do so later. 367 // If we can't this add the frame now, then we still need to do so later.
365 should_send_ack_ = !AddFrame(QuicFrame(pending_ack_frame_.get())); 368 should_send_ack_ = !AddFrame(QuicFrame(&pending_ack_frame_));
366 // Return success if we have cleared out this flag (i.e., added the frame). 369 // Return success if we have cleared out this flag (i.e., added the frame).
367 // If we still need to send, then the frame is full, and we have failed. 370 // If we still need to send, then the frame is full, and we have failed.
368 return !should_send_ack_; 371 return !should_send_ack_;
369 } 372 }
370 373
371 if (should_send_stop_waiting_) { 374 if (should_send_stop_waiting_) {
372 pending_stop_waiting_frame_.reset(delegate_->CreateStopWaitingFrame()); 375 delegate_->PopulateStopWaitingFrame(&pending_stop_waiting_frame_);
376 stop_waiting_queued_ = true;
373 // If we can't this add the frame now, then we still need to do so later. 377 // If we can't this add the frame now, then we still need to do so later.
374 should_send_stop_waiting_ = 378 should_send_stop_waiting_ =
375 !AddFrame(QuicFrame(pending_stop_waiting_frame_.get())); 379 !AddFrame(QuicFrame(&pending_stop_waiting_frame_));
376 // Return success if we have cleared out this flag (i.e., added the frame). 380 // Return success if we have cleared out this flag (i.e., added the frame).
377 // If we still need to send, then the frame is full, and we have failed. 381 // If we still need to send, then the frame is full, and we have failed.
378 return !should_send_stop_waiting_; 382 return !should_send_stop_waiting_;
379 } 383 }
380 384
381 LOG_IF(DFATAL, queued_control_frames_.empty()) 385 LOG_IF(DFATAL, queued_control_frames_.empty())
382 << "AddNextPendingFrame called with no queued control frames."; 386 << "AddNextPendingFrame called with no queued control frames.";
383 if (!AddFrame(queued_control_frames_.back())) { 387 if (!AddFrame(queued_control_frames_.back())) {
384 // Packet was full. 388 // Packet was full.
385 return false; 389 return false;
(...skipping 16 matching lines...) Expand all
402 406
403 // There may be AckNotifiers interested in this packet. 407 // There may be AckNotifiers interested in this packet.
404 if (FLAGS_quic_attach_ack_notifiers_to_packets) { 408 if (FLAGS_quic_attach_ack_notifiers_to_packets) {
405 serialized_packet.notifiers.swap(ack_notifiers_); 409 serialized_packet.notifiers.swap(ack_notifiers_);
406 ack_notifiers_.clear(); 410 ack_notifiers_.clear();
407 } 411 }
408 412
409 delegate_->OnSerializedPacket(serialized_packet); 413 delegate_->OnSerializedPacket(serialized_packet);
410 MaybeSendFecPacketAndCloseGroup(/*force=*/false); 414 MaybeSendFecPacketAndCloseGroup(/*force=*/false);
411 415
412 // The packet has now been serialized, safe to delete pending frames. 416 // The packet has now been serialized, so the frames are no longer queued.
413 pending_ack_frame_.reset(); 417 ack_queued_ = false;
414 pending_stop_waiting_frame_.reset(); 418 stop_waiting_queued_ = false;
415 } 419 }
416 420
417 void QuicPacketGenerator::StopSendingVersion() { 421 void QuicPacketGenerator::StopSendingVersion() {
418 packet_creator_.StopSendingVersion(); 422 packet_creator_.StopSendingVersion();
419 } 423 }
420 424
421 QuicPacketSequenceNumber QuicPacketGenerator::sequence_number() const { 425 QuicPacketSequenceNumber QuicPacketGenerator::sequence_number() const {
422 return packet_creator_.sequence_number(); 426 return packet_creator_.sequence_number();
423 } 427 }
424 428
425 QuicByteCount QuicPacketGenerator::max_packet_length() const { 429 QuicByteCount QuicPacketGenerator::max_packet_length() const {
426 return packet_creator_.max_packet_length(); 430 return packet_creator_.max_packet_length();
427 } 431 }
428 432
429 void QuicPacketGenerator::set_max_packet_length(QuicByteCount length) { 433 void QuicPacketGenerator::set_max_packet_length(QuicByteCount length) {
430 packet_creator_.set_max_packet_length(length); 434 packet_creator_.set_max_packet_length(length);
431 } 435 }
432 436
433 QuicEncryptedPacket* QuicPacketGenerator::SerializeVersionNegotiationPacket( 437 QuicEncryptedPacket* QuicPacketGenerator::SerializeVersionNegotiationPacket(
434 const QuicVersionVector& supported_versions) { 438 const QuicVersionVector& supported_versions) {
435 return packet_creator_.SerializeVersionNegotiationPacket(supported_versions); 439 return packet_creator_.SerializeVersionNegotiationPacket(supported_versions);
436 } 440 }
437 441
438 SerializedPacket QuicPacketGenerator::ReserializeAllFrames( 442 SerializedPacket QuicPacketGenerator::ReserializeAllFrames(
439 const QuicFrames& frames, 443 const RetransmittableFrames& frames,
440 QuicSequenceNumberLength original_length) { 444 QuicSequenceNumberLength original_length) {
441 return packet_creator_.ReserializeAllFrames(frames, original_length); 445 return packet_creator_.ReserializeAllFrames(frames, original_length);
442 } 446 }
443 447
444 void QuicPacketGenerator::UpdateSequenceNumberLength( 448 void QuicPacketGenerator::UpdateSequenceNumberLength(
445 QuicPacketSequenceNumber least_packet_awaited_by_peer, 449 QuicPacketSequenceNumber least_packet_awaited_by_peer,
446 QuicPacketCount max_packets_in_flight) { 450 QuicPacketCount max_packets_in_flight) {
447 return packet_creator_.UpdateSequenceNumberLength( 451 return packet_creator_.UpdateSequenceNumberLength(
448 least_packet_awaited_by_peer, max_packets_in_flight); 452 least_packet_awaited_by_peer, max_packets_in_flight);
449 } 453 }
450 454
451 void QuicPacketGenerator::SetConnectionIdLength(uint32 length) { 455 void QuicPacketGenerator::SetConnectionIdLength(uint32 length) {
452 if (length == 0) { 456 if (length == 0) {
453 packet_creator_.set_connection_id_length(PACKET_0BYTE_CONNECTION_ID); 457 packet_creator_.set_connection_id_length(PACKET_0BYTE_CONNECTION_ID);
454 } else if (length == 1) { 458 } else if (length == 1) {
455 packet_creator_.set_connection_id_length(PACKET_1BYTE_CONNECTION_ID); 459 packet_creator_.set_connection_id_length(PACKET_1BYTE_CONNECTION_ID);
456 } else if (length <= 4) { 460 } else if (length <= 4) {
457 packet_creator_.set_connection_id_length(PACKET_4BYTE_CONNECTION_ID); 461 packet_creator_.set_connection_id_length(PACKET_4BYTE_CONNECTION_ID);
458 } else { 462 } else {
459 packet_creator_.set_connection_id_length(PACKET_8BYTE_CONNECTION_ID); 463 packet_creator_.set_connection_id_length(PACKET_8BYTE_CONNECTION_ID);
460 } 464 }
461 } 465 }
462 466
463 467
464 void QuicPacketGenerator::set_encryption_level(EncryptionLevel level) { 468 void QuicPacketGenerator::set_encryption_level(EncryptionLevel level) {
465 packet_creator_.set_encryption_level(level); 469 packet_creator_.set_encryption_level(level);
466 } 470 }
467 471
468 } // namespace net 472 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_packet_generator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698