diff options
Diffstat (limited to 'net/quic/quic_framer.cc')
-rw-r--r-- | net/quic/quic_framer.cc | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc index e900e2c..0e56382 100644 --- a/net/quic/quic_framer.cc +++ b/net/quic/quic_framer.cc @@ -105,8 +105,6 @@ size_t QuicFramer::GetMinGoAwayFrameSize() { // static // TODO(satyamshekhar): 16 - Crypto hash for integrity. Not a static value. Use // QuicEncrypter::GetMaxPlaintextSize. -// 16 is a conservative estimate in the case of AEAD_AES_128_GCM_12, which uses -// 12-byte tags. size_t QuicFramer::GetMaxUnackedPackets(bool include_version) { return (kMaxPacketSize - GetPacketHeaderSize(include_version) - GetMinAckFrameSize() - 16) / kSequenceNumberSize; @@ -117,7 +115,7 @@ bool QuicFramer::IsSupportedVersion(QuicTag version) { } size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) { - return kPublicFlagsSize + kQuicGuidSize + + return kQuicGuidSize + kPublicFlagsSize + number_versions * kQuicVersionSize; } @@ -276,12 +274,12 @@ QuicEncryptedPacket* QuicFramer::ConstructPublicResetPacket( size_t len = GetPublicResetPacketSize(); QuicDataWriter writer(len); - uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_RST); - if (!writer.WriteUInt8(flags)) { + if (!writer.WriteUInt64(packet.public_header.guid)) { return NULL; } - if (!writer.WriteUInt64(packet.public_header.guid)) { + uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_RST); + if (!writer.WriteUInt8(flags)) { return NULL; } @@ -304,12 +302,12 @@ QuicEncryptedPacket* QuicFramer::ConstructVersionNegotiationPacket( size_t len = GetVersionNegotiationPacketSize(supported_versions.size()); QuicDataWriter writer(len); - uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_VERSION); - if (!writer.WriteUInt8(flags)) { + if (!writer.WriteUInt64(header.guid)) { return NULL; } - if (!writer.WriteUInt64(header.guid)) { + uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_VERSION); + if (!writer.WriteUInt8(flags)) { return NULL; } @@ -465,6 +463,10 @@ bool QuicFramer::ProcessRevivedPacket(QuicPacketHeader* header, bool QuicFramer::WritePacketHeader(const QuicPacketHeader& header, QuicDataWriter* writer) { + if (!writer->WriteUInt64(header.public_header.guid)) { + return false; + } + uint8 flags = 0; if (header.public_header.reset_flag) { flags |= PACKET_PUBLIC_FLAGS_RST; @@ -476,10 +478,6 @@ bool QuicFramer::WritePacketHeader(const QuicPacketHeader& header, return false; } - if (!writer->WriteUInt64(header.public_header.guid)) { - return false; - } - if (header.public_header.version_flag) { DCHECK(!is_server_); writer->WriteUInt32(quic_version_); @@ -540,6 +538,11 @@ QuicPacketSequenceNumber QuicFramer::CalculatePacketSequenceNumberFromWire( } bool QuicFramer::ProcessPublicHeader(QuicPacketPublicHeader* public_header) { + if (!reader_->ReadUInt64(&public_header->guid)) { + set_detailed_error("Unable to read GUID."); + return false; + } + uint8 public_flags; if (!reader_->ReadBytes(&public_flags, 1)) { set_detailed_error("Unable to read public flags."); @@ -560,11 +563,6 @@ bool QuicFramer::ProcessPublicHeader(QuicPacketPublicHeader* public_header) { return false; } - if (!reader_->ReadUInt64(&public_header->guid)) { - set_detailed_error("Unable to read GUID."); - return false; - } - if (public_header->version_flag && is_server_) { QuicTag version; if (!reader_->ReadUInt32(&version)) { @@ -581,13 +579,7 @@ bool QuicFramer::ProcessPublicHeader(QuicPacketPublicHeader* public_header) { // static bool QuicFramer::ReadGuidFromPacket(const QuicEncryptedPacket& packet, QuicGuid* guid) { - // TODO(ianswett): In the next CL, the flags will be used for guid length. QuicDataReader reader(packet.data(), packet.length()); - uint8 public_flags; - if (!reader.ReadBytes(&public_flags, 1)) { - return false; - } - return reader.ReadUInt64(guid); } @@ -1123,9 +1115,9 @@ QuicEncryptedPacket* QuicFramer::EncryptPacket( size_t QuicFramer::GetMaxPlaintextSize(size_t ciphertext_size) { // In order to keep the code simple, we don't have the current encryption - // level to hand. At the moment, the NullEncrypter has a tag length of 16 - // bytes and AES-GCM has a tag length of 12. We take the minimum plaintext - // length just to be safe. + // level to hand. At the moment, all AEADs have a tag-length of 16 bytes so + // that doesn't matter but we take the minimum plaintext length just to be + // safe. size_t min_plaintext_size = ciphertext_size; for (int i = ENCRYPTION_NONE; i < NUM_ENCRYPTION_LEVELS; i++) { |