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

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

Issue 2322233004: Landing Recent QUIC changes until Sun Sep 4 03:41:00 (Closed)
Patch Set: Remove simulation files from the build. Created 4 years, 3 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/core/quic_packet_creator.h ('k') | net/quic/core/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/core/quic_packet_creator.h" 5 #include "net/quic/core/quic_packet_creator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 packet_.listeners.clear(); 386 packet_.listeners.clear();
387 } 387 }
388 388
389 void QuicPacketCreator::CreateAndSerializeStreamFrame( 389 void QuicPacketCreator::CreateAndSerializeStreamFrame(
390 QuicStreamId id, 390 QuicStreamId id,
391 const QuicIOVector& iov, 391 const QuicIOVector& iov,
392 QuicStreamOffset iov_offset, 392 QuicStreamOffset iov_offset,
393 QuicStreamOffset stream_offset, 393 QuicStreamOffset stream_offset,
394 bool fin, 394 bool fin,
395 QuicAckListenerInterface* listener, 395 QuicAckListenerInterface* listener,
396 char* encrypted_buffer,
397 size_t encrypted_buffer_len,
398 size_t* num_bytes_consumed) { 396 size_t* num_bytes_consumed) {
399 DCHECK(queued_frames_.empty()); 397 DCHECK(queued_frames_.empty());
400 // Write out the packet header 398 // Write out the packet header
401 QuicPacketHeader header; 399 QuicPacketHeader header;
402 FillPacketHeader(&header); 400 FillPacketHeader(&header);
403 QuicDataWriter writer(kMaxPacketSize, encrypted_buffer); 401 ALIGNAS(64) char encrypted_buffer[kMaxPacketSize];
402 QuicDataWriter writer(arraysize(encrypted_buffer), encrypted_buffer);
404 if (!framer_->AppendPacketHeader(header, &writer)) { 403 if (!framer_->AppendPacketHeader(header, &writer)) {
405 QUIC_BUG << "AppendPacketHeader failed"; 404 QUIC_BUG << "AppendPacketHeader failed";
406 return; 405 return;
407 } 406 }
408 407
409 // Create a Stream frame with the remaining space. 408 // Create a Stream frame with the remaining space.
410 QUIC_BUG_IF(iov_offset == iov.total_length && !fin) 409 QUIC_BUG_IF(iov_offset == iov.total_length && !fin)
411 << "Creating a stream frame with no data or fin."; 410 << "Creating a stream frame with no data or fin.";
412 const size_t remaining_data_size = iov.total_length - iov_offset; 411 const size_t remaining_data_size = iov.total_length - iov_offset;
413 const size_t min_frame_size = QuicFramer::GetMinStreamFrameSize( 412 const size_t min_frame_size = QuicFramer::GetMinStreamFrameSize(
(...skipping 20 matching lines...) Expand all
434 } 433 }
435 if (!framer_->AppendStreamFrame(*frame, /* no stream frame length */ true, 434 if (!framer_->AppendStreamFrame(*frame, /* no stream frame length */ true,
436 &writer)) { 435 &writer)) {
437 QUIC_BUG << "AppendStreamFrame failed"; 436 QUIC_BUG << "AppendStreamFrame failed";
438 return; 437 return;
439 } 438 }
440 439
441 size_t encrypted_length = framer_->EncryptInPlace( 440 size_t encrypted_length = framer_->EncryptInPlace(
442 packet_.encryption_level, packet_.path_id, packet_.packet_number, 441 packet_.encryption_level, packet_.path_id, packet_.packet_number,
443 GetStartOfEncryptedData(framer_->version(), header), writer.length(), 442 GetStartOfEncryptedData(framer_->version(), header), writer.length(),
444 encrypted_buffer_len, encrypted_buffer); 443 arraysize(encrypted_buffer), encrypted_buffer);
445 if (encrypted_length == 0) { 444 if (encrypted_length == 0) {
446 QUIC_BUG << "Failed to encrypt packet number " << header.packet_number; 445 QUIC_BUG << "Failed to encrypt packet number " << header.packet_number;
447 return; 446 return;
448 } 447 }
449 // TODO(ianswett): Optimize the storage so RetransmitableFrames can be 448 // TODO(ianswett): Optimize the storage so RetransmitableFrames can be
450 // unioned with a QuicStreamFrame and a UniqueStreamBuffer. 449 // unioned with a QuicStreamFrame and a UniqueStreamBuffer.
451 *num_bytes_consumed = bytes_consumed; 450 *num_bytes_consumed = bytes_consumed;
452 packet_size_ = 0; 451 packet_size_ = 0;
453 packet_.entropy_hash = QuicFramer::GetPacketEntropyHash(header); 452 packet_.entropy_hash = QuicFramer::GetPacketEntropyHash(header);
454 packet_.encrypted_buffer = encrypted_buffer; 453 packet_.encrypted_buffer = encrypted_buffer;
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 case MTU_DISCOVERY_FRAME: 604 case MTU_DISCOVERY_FRAME:
606 return false; 605 return false;
607 default: 606 default:
608 return true; 607 return true;
609 } 608 }
610 } 609 }
611 610
612 bool QuicPacketCreator::AddFrame(const QuicFrame& frame, 611 bool QuicPacketCreator::AddFrame(const QuicFrame& frame,
613 bool save_retransmittable_frames) { 612 bool save_retransmittable_frames) {
614 DVLOG(1) << "Adding frame: " << frame; 613 DVLOG(1) << "Adding frame: " << frame;
615 if (FLAGS_quic_never_write_unencrypted_data && frame.type == STREAM_FRAME && 614 if (frame.type == STREAM_FRAME &&
616 frame.stream_frame->stream_id != kCryptoStreamId && 615 frame.stream_frame->stream_id != kCryptoStreamId &&
617 packet_.encryption_level == ENCRYPTION_NONE) { 616 packet_.encryption_level == ENCRYPTION_NONE) {
618 const string error_details = "Cannot send stream data without encryption."; 617 const string error_details = "Cannot send stream data without encryption.";
619 QUIC_BUG << error_details; 618 QUIC_BUG << error_details;
620 delegate_->OnUnrecoverableError( 619 delegate_->OnUnrecoverableError(
621 QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA, error_details, 620 QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA, error_details,
622 ConnectionCloseSource::FROM_SELF); 621 ConnectionCloseSource::FROM_SELF);
623 return false; 622 return false;
624 } 623 }
625 if (!FLAGS_quic_simple_packet_number_length_2) { 624 if (!FLAGS_quic_simple_packet_number_length_2) {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 if (bit_mask_ == 0) { 718 if (bit_mask_ == 0) {
720 bit_bucket_ = random_->RandUint64(); 719 bit_bucket_ = random_->RandUint64();
721 bit_mask_ = 1; 720 bit_mask_ = 1;
722 } 721 }
723 bool result = ((bit_bucket_ & bit_mask_) != 0); 722 bool result = ((bit_bucket_ & bit_mask_) != 0);
724 bit_mask_ <<= 1; 723 bit_mask_ <<= 1;
725 return result; 724 return result;
726 } 725 }
727 726
728 } // namespace net 727 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_packet_creator.h ('k') | net/quic/core/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698