| Index: net/quic/quic_packet_creator.cc
|
| diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
|
| index dd40b2f5856e85596f0f1f8d24948818ce3d38c7..1cd9e3af30b73b9e39f944192f9582941a094f45 100644
|
| --- a/net/quic/quic_packet_creator.cc
|
| +++ b/net/quic/quic_packet_creator.cc
|
| @@ -422,13 +422,6 @@ void QuicPacketCreator::SerializePacket(char* encrypted_buffer,
|
| MaybeAddPadding();
|
|
|
| DCHECK_GE(max_plaintext_size_, packet_size_);
|
| - // ACK Frames will be truncated due to length only if they're the only frame
|
| - // in the packet, and if packet_size_ was set to max_plaintext_size_. If
|
| - // truncation due to length occurred, then GetSerializedFrameLength will have
|
| - // returned all bytes free.
|
| - bool possibly_truncated_by_length = packet_size_ == max_plaintext_size_ &&
|
| - queued_frames_.size() == 1 &&
|
| - queued_frames_.back().type == ACK_FRAME;
|
| // Use the packet_size_ instead of the buffer size to ensure smaller
|
| // packet sizes are properly used.
|
| size_t length = framer_->BuildDataPacket(header, queued_frames_,
|
| @@ -438,24 +431,36 @@ void QuicPacketCreator::SerializePacket(char* encrypted_buffer,
|
| return;
|
| }
|
|
|
| - // TODO(ianswett) Consider replacing QuicPacket with something else, since
|
| - // it's only used to provide convenience methods to FEC and encryption.
|
| - QuicPacket packet(
|
| - encrypted_buffer, length,
|
| - /* owns_buffer */ false, header.public_header.connection_id_length,
|
| - header.public_header.version_flag, header.public_header.multipath_flag,
|
| - header.public_header.packet_number_length);
|
| -
|
| + // ACK Frames will be truncated due to length only if they're the only frame
|
| + // in the packet, and if packet_size_ was set to max_plaintext_size_. If
|
| + // truncation due to length occurred, then GetSerializedFrameLength will have
|
| + // returned all bytes free.
|
| + bool possibly_truncated_by_length = packet_size_ == max_plaintext_size_ &&
|
| + queued_frames_.size() == 1 &&
|
| + queued_frames_.back().type == ACK_FRAME;
|
| // Because of possible truncation, we can't be confident that our
|
| // packet size calculation worked correctly.
|
| if (!possibly_truncated_by_length) {
|
| DCHECK_EQ(packet_size_, length);
|
| }
|
| - // Immediately encrypt the packet, to ensure we don't encrypt the same
|
| - // packet number multiple times.
|
| - size_t encrypted_length = framer_->EncryptPayload(
|
| - packet_.encryption_level, packet_.path_id, packet_.packet_number, packet,
|
| - encrypted_buffer, encrypted_buffer_len);
|
| + size_t encrypted_length = 0;
|
| + if (FLAGS_quic_inplace_encryption2) {
|
| + const size_t ad_len = GetStartOfEncryptedData(header);
|
| + encrypted_length = framer_->EncryptInPlace(
|
| + packet_.encryption_level, packet_.path_id, packet_.packet_number,
|
| + ad_len, length, encrypted_buffer_len, encrypted_buffer);
|
| + } else {
|
| + QuicPacket packet(
|
| + encrypted_buffer, length,
|
| + /* owns_buffer */ false, header.public_header.connection_id_length,
|
| + header.public_header.version_flag, header.public_header.multipath_flag,
|
| + header.public_header.packet_number_length);
|
| + // Immediately encrypt the packet, to ensure we don't encrypt the same
|
| + // packet number multiple times.
|
| + encrypted_length = framer_->EncryptPayload(
|
| + packet_.encryption_level, packet_.path_id, packet_.packet_number,
|
| + packet, encrypted_buffer, encrypted_buffer_len);
|
| + }
|
| if (encrypted_length == 0) {
|
| QUIC_BUG << "Failed to encrypt packet number " << packet_.packet_number;
|
| return;
|
|
|