| 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 #include "net/quic/quic_packet_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 length -= copy_len; | 389 length -= copy_len; |
| 390 buffer += copy_len; | 390 buffer += copy_len; |
| 391 ++iovnum; | 391 ++iovnum; |
| 392 } | 392 } |
| 393 } | 393 } |
| 394 LOG_IF(DFATAL, length > 0) << "Failed to copy entire length to buffer."; | 394 LOG_IF(DFATAL, length > 0) << "Failed to copy entire length to buffer."; |
| 395 } | 395 } |
| 396 | 396 |
| 397 SerializedPacket QuicPacketCreator::ReserializeAllFrames( | 397 SerializedPacket QuicPacketCreator::ReserializeAllFrames( |
| 398 const RetransmittableFrames& frames, | 398 const RetransmittableFrames& frames, |
| 399 EncryptionLevel original_encryption_level, |
| 399 QuicPacketNumberLength original_length, | 400 QuicPacketNumberLength original_length, |
| 400 char* buffer, | 401 char* buffer, |
| 401 size_t buffer_len) { | 402 size_t buffer_len) { |
| 402 DCHECK(fec_group_.get() == nullptr); | 403 DCHECK(fec_group_.get() == nullptr); |
| 403 const QuicPacketNumberLength saved_length = packet_number_length_; | 404 const QuicPacketNumberLength saved_length = packet_number_length_; |
| 404 const QuicPacketNumberLength saved_next_length = next_packet_number_length_; | 405 const QuicPacketNumberLength saved_next_length = next_packet_number_length_; |
| 405 const bool saved_should_fec_protect = fec_protect_; | 406 const bool saved_should_fec_protect = fec_protect_; |
| 406 const bool needs_padding = needs_padding_; | 407 const bool needs_padding = needs_padding_; |
| 407 const EncryptionLevel default_encryption_level = encryption_level_; | 408 const EncryptionLevel default_encryption_level = encryption_level_; |
| 408 | 409 |
| 409 // Temporarily set the packet number length, stop FEC protection, | 410 // Temporarily set the packet number length, stop FEC protection, |
| 410 // and change the encryption level. | 411 // and change the encryption level. |
| 411 packet_number_length_ = original_length; | 412 packet_number_length_ = original_length; |
| 412 next_packet_number_length_ = original_length; | 413 next_packet_number_length_ = original_length; |
| 413 fec_protect_ = false; | 414 fec_protect_ = false; |
| 414 encryption_level_ = frames.encryption_level(); | 415 encryption_level_ = original_encryption_level; |
| 415 needs_padding_ = frames.needs_padding(); | 416 needs_padding_ = frames.needs_padding(); |
| 416 | 417 |
| 417 // Serialize the packet and restore the FEC and packet number length state. | 418 // Serialize the packet and restore the FEC and packet number length state. |
| 418 SerializedPacket serialized_packet = | 419 SerializedPacket serialized_packet = |
| 419 SerializeAllFrames(frames.frames(), buffer, buffer_len); | 420 SerializeAllFrames(frames.frames(), buffer, buffer_len); |
| 420 packet_number_length_ = saved_length; | 421 packet_number_length_ = saved_length; |
| 421 next_packet_number_length_ = saved_next_length; | 422 next_packet_number_length_ = saved_next_length; |
| 422 fec_protect_ = saved_should_fec_protect; | 423 fec_protect_ = saved_should_fec_protect; |
| 423 needs_padding_ = needs_padding; | 424 needs_padding_ = needs_padding; |
| 424 encryption_level_ = default_encryption_level; | 425 encryption_level_ = default_encryption_level; |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 if (frame_len == 0) { | 696 if (frame_len == 0) { |
| 696 // Current open packet is full. | 697 // Current open packet is full. |
| 697 Flush(); | 698 Flush(); |
| 698 return false; | 699 return false; |
| 699 } | 700 } |
| 700 DCHECK_LT(0u, packet_size_); | 701 DCHECK_LT(0u, packet_size_); |
| 701 packet_size_ += ExpansionOnNewFrame() + frame_len; | 702 packet_size_ += ExpansionOnNewFrame() + frame_len; |
| 702 | 703 |
| 703 if (save_retransmittable_frames && ShouldRetransmit(frame)) { | 704 if (save_retransmittable_frames && ShouldRetransmit(frame)) { |
| 704 if (queued_retransmittable_frames_.get() == nullptr) { | 705 if (queued_retransmittable_frames_.get() == nullptr) { |
| 705 queued_retransmittable_frames_.reset( | 706 queued_retransmittable_frames_.reset(new RetransmittableFrames()); |
| 706 new RetransmittableFrames(encryption_level_)); | |
| 707 } | 707 } |
| 708 queued_frames_.push_back( | 708 queued_frames_.push_back( |
| 709 queued_retransmittable_frames_->AddFrame(frame, buffer.Pass())); | 709 queued_retransmittable_frames_->AddFrame(frame, buffer.Pass())); |
| 710 } else { | 710 } else { |
| 711 queued_frames_.push_back(frame); | 711 queued_frames_.push_back(frame); |
| 712 } | 712 } |
| 713 | 713 |
| 714 if (needs_padding) { | 714 if (needs_padding) { |
| 715 needs_padding_ = true; | 715 needs_padding_ = true; |
| 716 } | 716 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 QuicPacketCount max_packets_in_flight) { | 783 QuicPacketCount max_packets_in_flight) { |
| 784 set_max_packets_per_fec_group(static_cast<size_t>( | 784 set_max_packets_per_fec_group(static_cast<size_t>( |
| 785 kMaxPacketsInFlightMultiplierForFecGroupSize * max_packets_in_flight)); | 785 kMaxPacketsInFlightMultiplierForFecGroupSize * max_packets_in_flight)); |
| 786 } | 786 } |
| 787 | 787 |
| 788 void QuicPacketCreator::OnRttChange(QuicTime::Delta rtt) { | 788 void QuicPacketCreator::OnRttChange(QuicTime::Delta rtt) { |
| 789 fec_timeout_ = rtt.Multiply(rtt_multiplier_for_fec_timeout_); | 789 fec_timeout_ = rtt.Multiply(rtt_multiplier_for_fec_timeout_); |
| 790 } | 790 } |
| 791 | 791 |
| 792 } // namespace net | 792 } // namespace net |
| OLD | NEW |