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

Unified Diff: net/quic/quic_protocol.cc

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/quic_protocol_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_protocol.cc
diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
deleted file mode 100644
index 6ad07431e4bb36fae4c779e97900ef63b7970986..0000000000000000000000000000000000000000
--- a/net/quic/quic_protocol.cc
+++ /dev/null
@@ -1,685 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/quic/quic_protocol.h"
-
-#include "base/stl_util.h"
-#include "net/quic/quic_utils.h"
-
-using base::StringPiece;
-using std::map;
-using std::numeric_limits;
-using std::ostream;
-using std::string;
-
-namespace net {
-
-size_t GetPacketHeaderSize(const QuicPacketHeader& header) {
- return GetPacketHeaderSize(header.public_header.connection_id_length,
- header.public_header.version_flag,
- header.public_header.sequence_number_length,
- header.is_in_fec_group);
-}
-
-size_t GetPacketHeaderSize(QuicConnectionIdLength connection_id_length,
- bool include_version,
- QuicSequenceNumberLength sequence_number_length,
- InFecGroup is_in_fec_group) {
- return kPublicFlagsSize + connection_id_length +
- (include_version ? kQuicVersionSize : 0) + sequence_number_length +
- kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0);
-}
-
-size_t GetStartOfFecProtectedData(
- QuicConnectionIdLength connection_id_length,
- bool include_version,
- QuicSequenceNumberLength sequence_number_length) {
- return GetPacketHeaderSize(connection_id_length,
- include_version,
- sequence_number_length,
- IN_FEC_GROUP);
-}
-
-size_t GetStartOfEncryptedData(
- QuicConnectionIdLength connection_id_length,
- bool include_version,
- QuicSequenceNumberLength sequence_number_length) {
- // Don't include the fec size, since encryption starts before private flags.
- return GetPacketHeaderSize(connection_id_length,
- include_version,
- sequence_number_length,
- NOT_IN_FEC_GROUP) - kPrivateFlagsSize;
-}
-
-QuicPacketPublicHeader::QuicPacketPublicHeader()
- : connection_id(0),
- connection_id_length(PACKET_8BYTE_CONNECTION_ID),
- reset_flag(false),
- version_flag(false),
- sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) {
-}
-
-QuicPacketPublicHeader::QuicPacketPublicHeader(
- const QuicPacketPublicHeader& other)
- : connection_id(other.connection_id),
- connection_id_length(other.connection_id_length),
- reset_flag(other.reset_flag),
- version_flag(other.version_flag),
- sequence_number_length(other.sequence_number_length),
- versions(other.versions) {
-}
-
-QuicPacketPublicHeader::~QuicPacketPublicHeader() {}
-
-QuicPacketHeader::QuicPacketHeader()
- : fec_flag(false),
- entropy_flag(false),
- entropy_hash(0),
- packet_sequence_number(0),
- is_in_fec_group(NOT_IN_FEC_GROUP),
- fec_group(0) {
-}
-
-QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header)
- : public_header(header),
- fec_flag(false),
- entropy_flag(false),
- entropy_hash(0),
- packet_sequence_number(0),
- is_in_fec_group(NOT_IN_FEC_GROUP),
- fec_group(0) {
-}
-
-QuicPublicResetPacket::QuicPublicResetPacket()
- : nonce_proof(0),
- rejected_sequence_number(0) {}
-
-QuicPublicResetPacket::QuicPublicResetPacket(
- const QuicPacketPublicHeader& header)
- : public_header(header),
- nonce_proof(0),
- rejected_sequence_number(0) {}
-
-QuicStreamFrame::QuicStreamFrame()
- : stream_id(0),
- fin(false),
- offset(0),
- notifier(nullptr) {}
-
-QuicStreamFrame::QuicStreamFrame(const QuicStreamFrame& frame)
- : stream_id(frame.stream_id),
- fin(frame.fin),
- offset(frame.offset),
- data(frame.data),
- notifier(frame.notifier) {
-}
-
-QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
- bool fin,
- QuicStreamOffset offset,
- IOVector data)
- : stream_id(stream_id),
- fin(fin),
- offset(offset),
- data(data),
- notifier(nullptr) {}
-
-string* QuicStreamFrame::GetDataAsString() const {
- string* data_string = new string();
- data_string->reserve(data.TotalBufferSize());
- for (size_t i = 0; i < data.Size(); ++i) {
- data_string->append(static_cast<char*>(data.iovec()[i].iov_base),
- data.iovec()[i].iov_len);
- }
- DCHECK_EQ(data_string->size(), data.TotalBufferSize());
- return data_string;
-}
-
-uint32 MakeQuicTag(char a, char b, char c, char d) {
- return static_cast<uint32>(a) |
- static_cast<uint32>(b) << 8 |
- static_cast<uint32>(c) << 16 |
- static_cast<uint32>(d) << 24;
-}
-
-bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) {
- return std::find(tag_vector.begin(), tag_vector.end(), tag)
- != tag_vector.end();
-}
-
-QuicVersionVector QuicSupportedVersions() {
- QuicVersionVector supported_versions;
- for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
- supported_versions.push_back(kSupportedQuicVersions[i]);
- }
- return supported_versions;
-}
-
-QuicTag QuicVersionToQuicTag(const QuicVersion version) {
- switch (version) {
- case QUIC_VERSION_23:
- return MakeQuicTag('Q', '0', '2', '3');
- case QUIC_VERSION_24:
- return MakeQuicTag('Q', '0', '2', '4');
- default:
- // This shold be an ERROR because we should never attempt to convert an
- // invalid QuicVersion to be written to the wire.
- LOG(ERROR) << "Unsupported QuicVersion: " << version;
- return 0;
- }
-}
-
-QuicVersion QuicTagToQuicVersion(const QuicTag version_tag) {
- for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
- if (version_tag == QuicVersionToQuicTag(kSupportedQuicVersions[i])) {
- return kSupportedQuicVersions[i];
- }
- }
- // Reading from the client so this should not be considered an ERROR.
- DVLOG(1) << "Unsupported QuicTag version: "
- << QuicUtils::TagToString(version_tag);
- return QUIC_VERSION_UNSUPPORTED;
-}
-
-#define RETURN_STRING_LITERAL(x) \
-case x: \
-return #x
-
-string QuicVersionToString(const QuicVersion version) {
- switch (version) {
- RETURN_STRING_LITERAL(QUIC_VERSION_23);
- RETURN_STRING_LITERAL(QUIC_VERSION_24);
- default:
- return "QUIC_VERSION_UNSUPPORTED";
- }
-}
-
-string QuicVersionVectorToString(const QuicVersionVector& versions) {
- string result = "";
- for (size_t i = 0; i < versions.size(); ++i) {
- if (i != 0) {
- result.append(",");
- }
- result.append(QuicVersionToString(versions[i]));
- }
- return result;
-}
-
-ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
- os << "{ connection_id: " << header.public_header.connection_id
- << ", connection_id_length:" << header.public_header.connection_id_length
- << ", sequence_number_length:"
- << header.public_header.sequence_number_length
- << ", reset_flag: " << header.public_header.reset_flag
- << ", version_flag: " << header.public_header.version_flag;
- if (header.public_header.version_flag) {
- os << " version: ";
- for (size_t i = 0; i < header.public_header.versions.size(); ++i) {
- os << header.public_header.versions[0] << " ";
- }
- }
- os << ", fec_flag: " << header.fec_flag
- << ", entropy_flag: " << header.entropy_flag
- << ", entropy hash: " << static_cast<int>(header.entropy_hash)
- << ", sequence_number: " << header.packet_sequence_number
- << ", is_in_fec_group:" << header.is_in_fec_group
- << ", fec_group: " << header.fec_group<< "}\n";
- return os;
-}
-
-bool IsAwaitingPacket(const QuicAckFrame& ack_frame,
- QuicPacketSequenceNumber sequence_number) {
- return sequence_number > ack_frame.largest_observed ||
- ContainsKey(ack_frame.missing_packets, sequence_number);
-}
-
-void InsertMissingPacketsBetween(QuicAckFrame* ack_frame,
- QuicPacketSequenceNumber lower,
- QuicPacketSequenceNumber higher) {
- for (QuicPacketSequenceNumber i = lower; i < higher; ++i) {
- ack_frame->missing_packets.insert(i);
- }
-}
-
-QuicStopWaitingFrame::QuicStopWaitingFrame()
- : entropy_hash(0),
- least_unacked(0) {
-}
-
-QuicStopWaitingFrame::~QuicStopWaitingFrame() {}
-
-QuicAckFrame::QuicAckFrame()
- : entropy_hash(0),
- largest_observed(0),
- delta_time_largest_observed(QuicTime::Delta::Infinite()),
- is_truncated(false) {}
-
-QuicAckFrame::~QuicAckFrame() {}
-
-QuicRstStreamErrorCode AdjustErrorForVersion(
- QuicRstStreamErrorCode error_code,
- QuicVersion version) {
- return error_code;
-}
-
-QuicRstStreamFrame::QuicRstStreamFrame()
- : stream_id(0),
- error_code(QUIC_STREAM_NO_ERROR) {
-}
-
-QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id,
- QuicRstStreamErrorCode error_code,
- QuicStreamOffset bytes_written)
- : stream_id(stream_id),
- error_code(error_code),
- byte_offset(bytes_written) {
- DCHECK_LE(error_code, numeric_limits<uint8>::max());
-}
-
-QuicConnectionCloseFrame::QuicConnectionCloseFrame()
- : error_code(QUIC_NO_ERROR) {
-}
-
-QuicFrame::QuicFrame() {}
-
-QuicFrame::QuicFrame(QuicPaddingFrame* padding_frame)
- : type(PADDING_FRAME),
- padding_frame(padding_frame) {
-}
-
-QuicFrame::QuicFrame(QuicStreamFrame* stream_frame)
- : type(STREAM_FRAME),
- stream_frame(stream_frame) {
-}
-
-QuicFrame::QuicFrame(QuicAckFrame* frame)
- : type(ACK_FRAME),
- ack_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicStopWaitingFrame* frame)
- : type(STOP_WAITING_FRAME),
- stop_waiting_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicPingFrame* frame)
- : type(PING_FRAME),
- ping_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicRstStreamFrame* frame)
- : type(RST_STREAM_FRAME),
- rst_stream_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicConnectionCloseFrame* frame)
- : type(CONNECTION_CLOSE_FRAME),
- connection_close_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicGoAwayFrame* frame)
- : type(GOAWAY_FRAME),
- goaway_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame)
- : type(WINDOW_UPDATE_FRAME),
- window_update_frame(frame) {
-}
-
-QuicFrame::QuicFrame(QuicBlockedFrame* frame)
- : type(BLOCKED_FRAME),
- blocked_frame(frame) {
-}
-
-QuicFecData::QuicFecData() : fec_group(0) {}
-
-ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) {
- os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash)
- << " least_unacked: " << sent_info.least_unacked;
- return os;
-}
-
-ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
- os << "entropy_hash: " << static_cast<int>(ack_frame.entropy_hash)
- << " largest_observed: " << ack_frame.largest_observed
- << " delta_time_largest_observed: "
- << ack_frame.delta_time_largest_observed.ToMicroseconds()
- << " missing_packets: [ ";
- for (SequenceNumberSet::const_iterator it = ack_frame.missing_packets.begin();
- it != ack_frame.missing_packets.end(); ++it) {
- os << *it << " ";
- }
- os << " ] is_truncated: " << ack_frame.is_truncated;
- os << " revived_packets: [ ";
- for (SequenceNumberSet::const_iterator it = ack_frame.revived_packets.begin();
- it != ack_frame.revived_packets.end(); ++it) {
- os << *it << " ";
- }
- os << " ] received_packets: [ ";
- for (PacketTimeList::const_iterator it =
- ack_frame.received_packet_times.begin();
- it != ack_frame.received_packet_times.end(); ++it) {
- os << it->first << " at " << it->second.ToDebuggingValue() << " ";
- }
- os << " ]";
- return os;
-}
-
-ostream& operator<<(ostream& os, const QuicFrame& frame) {
- switch (frame.type) {
- case PADDING_FRAME: {
- os << "type { PADDING_FRAME } ";
- break;
- }
- case RST_STREAM_FRAME: {
- os << "type { " << RST_STREAM_FRAME << " } " << *(frame.rst_stream_frame);
- break;
- }
- case CONNECTION_CLOSE_FRAME: {
- os << "type { CONNECTION_CLOSE_FRAME } "
- << *(frame.connection_close_frame);
- break;
- }
- case GOAWAY_FRAME: {
- os << "type { GOAWAY_FRAME } " << *(frame.goaway_frame);
- break;
- }
- case WINDOW_UPDATE_FRAME: {
- os << "type { WINDOW_UPDATE_FRAME } " << *(frame.window_update_frame);
- break;
- }
- case BLOCKED_FRAME: {
- os << "type { BLOCKED_FRAME } " << *(frame.blocked_frame);
- break;
- }
- case STREAM_FRAME: {
- os << "type { STREAM_FRAME } " << *(frame.stream_frame);
- break;
- }
- case ACK_FRAME: {
- os << "type { ACK_FRAME } " << *(frame.ack_frame);
- break;
- }
- case STOP_WAITING_FRAME: {
- os << "type { STOP_WAITING_FRAME } " << *(frame.stop_waiting_frame);
- break;
- }
- case PING_FRAME: {
- os << "type { PING_FRAME } ";
- break;
- }
- default: {
- LOG(ERROR) << "Unknown frame type: " << frame.type;
- break;
- }
- }
- return os;
-}
-
-ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) {
- os << "stream_id { " << rst_frame.stream_id << " } "
- << "error_code { " << rst_frame.error_code << " } "
- << "error_details { " << rst_frame.error_details << " }\n";
- return os;
-}
-
-ostream& operator<<(ostream& os,
- const QuicConnectionCloseFrame& connection_close_frame) {
- os << "error_code { " << connection_close_frame.error_code << " } "
- << "error_details { " << connection_close_frame.error_details << " }\n";
- return os;
-}
-
-ostream& operator<<(ostream& os, const QuicGoAwayFrame& goaway_frame) {
- os << "error_code { " << goaway_frame.error_code << " } "
- << "last_good_stream_id { " << goaway_frame.last_good_stream_id << " } "
- << "reason_phrase { " << goaway_frame.reason_phrase << " }\n";
- return os;
-}
-
-ostream& operator<<(ostream& os,
- const QuicWindowUpdateFrame& window_update_frame) {
- os << "stream_id { " << window_update_frame.stream_id << " } "
- << "byte_offset { " << window_update_frame.byte_offset << " }\n";
- return os;
-}
-
-ostream& operator<<(ostream& os, const QuicBlockedFrame& blocked_frame) {
- os << "stream_id { " << blocked_frame.stream_id << " }\n";
- return os;
-}
-
-ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) {
- os << "stream_id { " << stream_frame.stream_id << " } "
- << "fin { " << stream_frame.fin << " } "
- << "offset { " << stream_frame.offset << " } "
- << "data { "
- << QuicUtils::StringToHexASCIIDump(*(stream_frame.GetDataAsString()))
- << " }\n";
- return os;
-}
-
-QuicGoAwayFrame::QuicGoAwayFrame()
- : error_code(QUIC_NO_ERROR),
- last_good_stream_id(0) {
-}
-
-QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code,
- QuicStreamId last_good_stream_id,
- const string& reason)
- : error_code(error_code),
- last_good_stream_id(last_good_stream_id),
- reason_phrase(reason) {
- DCHECK_LE(error_code, numeric_limits<uint8>::max());
-}
-
-QuicData::QuicData(const char* buffer,
- size_t length)
- : buffer_(buffer),
- length_(length),
- owns_buffer_(false) {
-}
-
-QuicData::QuicData(char* buffer,
- size_t length,
- bool owns_buffer)
- : buffer_(buffer),
- length_(length),
- owns_buffer_(owns_buffer) {
-}
-
-QuicData::~QuicData() {
- if (owns_buffer_) {
- delete [] const_cast<char*>(buffer_);
- }
-}
-
-QuicWindowUpdateFrame::QuicWindowUpdateFrame(QuicStreamId stream_id,
- QuicStreamOffset byte_offset)
- : stream_id(stream_id),
- byte_offset(byte_offset) {}
-
-QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id)
- : stream_id(stream_id) {}
-
-QuicPacket::QuicPacket(char* buffer,
- size_t length,
- bool owns_buffer,
- QuicConnectionIdLength connection_id_length,
- bool includes_version,
- QuicSequenceNumberLength sequence_number_length)
- : QuicData(buffer, length, owns_buffer),
- buffer_(buffer),
- connection_id_length_(connection_id_length),
- includes_version_(includes_version),
- sequence_number_length_(sequence_number_length) {
-}
-
-QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer,
- size_t length)
- : QuicData(buffer, length) {
-}
-
-QuicEncryptedPacket::QuicEncryptedPacket(char* buffer,
- size_t length,
- bool owns_buffer)
- : QuicData(buffer, length, owns_buffer) {
-}
-
-StringPiece QuicPacket::FecProtectedData() const {
- const size_t start_of_fec = GetStartOfFecProtectedData(
- connection_id_length_, includes_version_, sequence_number_length_);
- return StringPiece(data() + start_of_fec, length() - start_of_fec);
-}
-
-StringPiece QuicPacket::AssociatedData() const {
- return StringPiece(
- data() + kStartOfHashData,
- GetStartOfEncryptedData(
- connection_id_length_, includes_version_, sequence_number_length_) -
- kStartOfHashData);
-}
-
-StringPiece QuicPacket::BeforePlaintext() const {
- return StringPiece(data(), GetStartOfEncryptedData(connection_id_length_,
- includes_version_,
- sequence_number_length_));
-}
-
-StringPiece QuicPacket::Plaintext() const {
- const size_t start_of_encrypted_data =
- GetStartOfEncryptedData(
- connection_id_length_, includes_version_, sequence_number_length_);
- return StringPiece(data() + start_of_encrypted_data,
- length() - start_of_encrypted_data);
-}
-
-RetransmittableFrames::RetransmittableFrames()
- : encryption_level_(NUM_ENCRYPTION_LEVELS),
- has_crypto_handshake_(NOT_HANDSHAKE) {
-}
-
-RetransmittableFrames::~RetransmittableFrames() {
- for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) {
- switch (it->type) {
- case PADDING_FRAME:
- delete it->padding_frame;
- break;
- case STREAM_FRAME:
- delete it->stream_frame;
- break;
- case ACK_FRAME:
- delete it->ack_frame;
- break;
- case STOP_WAITING_FRAME:
- delete it->stop_waiting_frame;
- break;
- case PING_FRAME:
- delete it->ping_frame;
- break;
- case RST_STREAM_FRAME:
- delete it->rst_stream_frame;
- break;
- case CONNECTION_CLOSE_FRAME:
- delete it->connection_close_frame;
- break;
- case GOAWAY_FRAME:
- delete it->goaway_frame;
- break;
- case WINDOW_UPDATE_FRAME:
- delete it->window_update_frame;
- break;
- case BLOCKED_FRAME:
- delete it->blocked_frame;
- break;
- case NUM_FRAME_TYPES:
- DCHECK(false) << "Cannot delete type: " << it->type;
- }
- }
- STLDeleteElements(&stream_data_);
-}
-
-const QuicFrame& RetransmittableFrames::AddStreamFrame(
- QuicStreamFrame* stream_frame) {
- // Make an owned copy of the stream frame's data.
- stream_data_.push_back(stream_frame->GetDataAsString());
- // Ensure the stream frame's IOVector points to the owned copy of the data.
- stream_frame->data.Clear();
- stream_frame->data.Append(const_cast<char*>(stream_data_.back()->data()),
- stream_data_.back()->size());
- frames_.push_back(QuicFrame(stream_frame));
- if (stream_frame->stream_id == kCryptoStreamId) {
- has_crypto_handshake_ = IS_HANDSHAKE;
- }
- return frames_.back();
-}
-
-const QuicFrame& RetransmittableFrames::AddNonStreamFrame(
- const QuicFrame& frame) {
- DCHECK_NE(frame.type, STREAM_FRAME);
- frames_.push_back(frame);
- return frames_.back();
-}
-
-void RetransmittableFrames::set_encryption_level(EncryptionLevel level) {
- encryption_level_ = level;
-}
-
-SerializedPacket::SerializedPacket(
- QuicPacketSequenceNumber sequence_number,
- QuicSequenceNumberLength sequence_number_length,
- QuicEncryptedPacket* packet,
- QuicPacketEntropyHash entropy_hash,
- RetransmittableFrames* retransmittable_frames)
- : sequence_number(sequence_number),
- sequence_number_length(sequence_number_length),
- packet(packet),
- entropy_hash(entropy_hash),
- retransmittable_frames(retransmittable_frames),
- is_fec_packet(false) {
-}
-
-SerializedPacket::~SerializedPacket() {}
-
-QuicEncryptedPacket* QuicEncryptedPacket::Clone() const {
- char* buffer = new char[this->length()];
- memcpy(buffer, this->data(), this->length());
- return new QuicEncryptedPacket(buffer, this->length(), true);
-}
-
-ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) {
- os << s.length() << "-byte data";
- return os;
-}
-
-TransmissionInfo::TransmissionInfo()
- : retransmittable_frames(nullptr),
- sequence_number_length(PACKET_1BYTE_SEQUENCE_NUMBER),
- sent_time(QuicTime::Zero()),
- bytes_sent(0),
- nack_count(0),
- transmission_type(NOT_RETRANSMISSION),
- all_transmissions(nullptr),
- in_flight(false),
- is_unackable(false),
- is_fec_packet(false) {}
-
-TransmissionInfo::TransmissionInfo(
- RetransmittableFrames* retransmittable_frames,
- QuicSequenceNumberLength sequence_number_length,
- TransmissionType transmission_type,
- QuicTime sent_time)
- : retransmittable_frames(retransmittable_frames),
- sequence_number_length(sequence_number_length),
- sent_time(sent_time),
- bytes_sent(0),
- nack_count(0),
- transmission_type(transmission_type),
- all_transmissions(nullptr),
- in_flight(false),
- is_unackable(false),
- is_fec_packet(false) {}
-
-} // namespace net
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/quic_protocol_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698