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 08a20843c227417278d43c32a4bc5fea0af76b6f..0000000000000000000000000000000000000000 |
--- a/net/quic/quic_protocol.cc |
+++ /dev/null |
@@ -1,894 +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 "base/strings/string_number_conversions.h" |
-#include "net/quic/quic_flags.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 { |
- |
-const char* const kFinalOffsetHeaderKey = ":final-offset"; |
- |
-size_t GetPacketHeaderSize(QuicVersion version, |
- const QuicPacketHeader& header) { |
- return GetPacketHeaderSize(version, header.public_header.connection_id_length, |
- header.public_header.version_flag, |
- header.public_header.multipath_flag, |
- header.public_header.nonce != nullptr, |
- header.public_header.packet_number_length); |
-} |
- |
-size_t GetPacketHeaderSize(QuicVersion version, |
- QuicConnectionIdLength connection_id_length, |
- bool include_version, |
- bool include_path_id, |
- bool include_diversification_nonce, |
- QuicPacketNumberLength packet_number_length) { |
- return kPublicFlagsSize + connection_id_length + |
- (include_version ? kQuicVersionSize : 0) + |
- (include_path_id ? kQuicPathIdSize : 0) + packet_number_length + |
- (include_diversification_nonce ? kDiversificationNonceSize : 0) + |
- (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0); |
-} |
- |
-size_t GetStartOfEncryptedData(QuicVersion version, |
- const QuicPacketHeader& header) { |
- return GetPacketHeaderSize(version, header) - |
- (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0); |
-} |
- |
-size_t GetStartOfEncryptedData(QuicVersion version, |
- QuicConnectionIdLength connection_id_length, |
- bool include_version, |
- bool include_path_id, |
- bool include_diversification_nonce, |
- QuicPacketNumberLength packet_number_length) { |
- // Encryption starts before private flags. |
- return GetPacketHeaderSize(version, connection_id_length, include_version, |
- include_path_id, include_diversification_nonce, |
- packet_number_length) - |
- (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0); |
-} |
- |
-QuicPacketPublicHeader::QuicPacketPublicHeader() |
- : connection_id(0), |
- connection_id_length(PACKET_8BYTE_CONNECTION_ID), |
- multipath_flag(false), |
- reset_flag(false), |
- version_flag(false), |
- packet_number_length(PACKET_6BYTE_PACKET_NUMBER), |
- nonce(nullptr) {} |
- |
-QuicPacketPublicHeader::QuicPacketPublicHeader( |
- const QuicPacketPublicHeader& other) = default; |
- |
-QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
- |
-QuicPacketHeader::QuicPacketHeader() |
- : packet_number(0), |
- path_id(kDefaultPathId), |
- entropy_flag(false), |
- entropy_hash(0), |
- fec_flag(false) {} |
- |
-QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) |
- : public_header(header), |
- packet_number(0), |
- path_id(kDefaultPathId), |
- entropy_flag(false), |
- entropy_hash(0), |
- fec_flag(false) {} |
- |
-QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default; |
- |
-QuicPublicResetPacket::QuicPublicResetPacket() |
- : nonce_proof(0), rejected_packet_number(0) {} |
- |
-QuicPublicResetPacket::QuicPublicResetPacket( |
- const QuicPacketPublicHeader& header) |
- : public_header(header), nonce_proof(0), rejected_packet_number(0) {} |
- |
-QuicBufferAllocator::~QuicBufferAllocator() = default; |
- |
-void StreamBufferDeleter::operator()(char* buffer) const { |
- if (allocator_ != nullptr && buffer != nullptr) { |
- allocator_->Delete(buffer); |
- } |
-} |
- |
-UniqueStreamBuffer NewStreamBuffer(QuicBufferAllocator* allocator, |
- size_t size) { |
- return UniqueStreamBuffer(allocator->New(size), |
- StreamBufferDeleter(allocator)); |
-} |
- |
-QuicStreamFrame::QuicStreamFrame() |
- : QuicStreamFrame(0, false, 0, nullptr, 0, nullptr) {} |
- |
-QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
- bool fin, |
- QuicStreamOffset offset, |
- StringPiece data) |
- : QuicStreamFrame(stream_id, |
- fin, |
- offset, |
- data.data(), |
- data.length(), |
- nullptr) {} |
- |
-QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
- bool fin, |
- QuicStreamOffset offset, |
- QuicPacketLength data_length, |
- UniqueStreamBuffer buffer) |
- : QuicStreamFrame(stream_id, |
- fin, |
- offset, |
- nullptr, |
- data_length, |
- std::move(buffer)) { |
- DCHECK(this->buffer != nullptr); |
- DCHECK_EQ(data_buffer, this->buffer.get()); |
-} |
- |
-QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
- bool fin, |
- QuicStreamOffset offset, |
- const char* data_buffer, |
- QuicPacketLength data_length, |
- UniqueStreamBuffer buffer) |
- : stream_id(stream_id), |
- fin(fin), |
- data_length(data_length), |
- data_buffer(data_buffer), |
- offset(offset), |
- buffer(std::move(buffer)) { |
- if (this->buffer != nullptr) { |
- DCHECK(data_buffer == nullptr); |
- this->data_buffer = this->buffer.get(); |
- } |
-} |
- |
-QuicStreamFrame::~QuicStreamFrame() {} |
- |
-uint32_t MakeQuicTag(char a, char b, char c, char d) { |
- return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 | |
- static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(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; |
-} |
- |
-QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) { |
- QuicVersionVector filtered_versions(versions.size()); |
- filtered_versions.clear(); // Guaranteed by spec not to change capacity. |
- for (QuicVersion version : versions) { |
- if (version == QUIC_VERSION_35) { |
- if (FLAGS_quic_enable_version_35) { |
- filtered_versions.push_back(version); |
- } |
- } else if (version == QUIC_VERSION_36) { |
- if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36) { |
- filtered_versions.push_back(version); |
- } |
- } else { |
- filtered_versions.push_back(version); |
- } |
- } |
- return filtered_versions; |
-} |
- |
-QuicTag QuicVersionToQuicTag(const QuicVersion version) { |
- switch (version) { |
- case QUIC_VERSION_30: |
- return MakeQuicTag('Q', '0', '3', '0'); |
- case QUIC_VERSION_31: |
- return MakeQuicTag('Q', '0', '3', '1'); |
- case QUIC_VERSION_32: |
- return MakeQuicTag('Q', '0', '3', '2'); |
- case QUIC_VERSION_33: |
- return MakeQuicTag('Q', '0', '3', '3'); |
- case QUIC_VERSION_34: |
- return MakeQuicTag('Q', '0', '3', '4'); |
- case QUIC_VERSION_35: |
- return MakeQuicTag('Q', '0', '3', '5'); |
- case QUIC_VERSION_36: |
- return MakeQuicTag('Q', '0', '3', '6'); |
- 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_30); |
- RETURN_STRING_LITERAL(QUIC_VERSION_31); |
- RETURN_STRING_LITERAL(QUIC_VERSION_32); |
- RETURN_STRING_LITERAL(QUIC_VERSION_33); |
- RETURN_STRING_LITERAL(QUIC_VERSION_34); |
- RETURN_STRING_LITERAL(QUIC_VERSION_35); |
- RETURN_STRING_LITERAL(QUIC_VERSION_36); |
- 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 Perspective& s) { |
- if (s == Perspective::IS_SERVER) { |
- os << "IS_SERVER"; |
- } else { |
- os << "IS_CLIENT"; |
- } |
- return os; |
-} |
- |
-ostream& operator<<(ostream& os, const QuicPacketHeader& header) { |
- os << "{ connection_id: " << header.public_header.connection_id |
- << ", connection_id_length: " << header.public_header.connection_id_length |
- << ", packet_number_length: " << header.public_header.packet_number_length |
- << ", multipath_flag: " << header.public_header.multipath_flag |
- << ", 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 << " "; |
- os << QuicVersionToString(header.public_header.versions[i]); |
- } |
- } |
- if (header.public_header.nonce != nullptr) { |
- os << ", diversification_nonce: " |
- << net::QuicUtils::HexDecode(*header.public_header.nonce); |
- } |
- os << ", fec_flag: " << header.fec_flag |
- << ", entropy_flag: " << header.entropy_flag |
- << ", entropy hash: " << static_cast<int>(header.entropy_hash) |
- << ", path_id: " << static_cast<int>(header.path_id) |
- << ", packet_number: " << header.packet_number << " }\n"; |
- return os; |
-} |
- |
-bool IsAwaitingPacket(const QuicAckFrame& ack_frame, |
- QuicPacketNumber packet_number, |
- QuicPacketNumber peer_least_packet_awaiting_ack) { |
- if (ack_frame.missing) { |
- return packet_number > ack_frame.largest_observed || |
- ack_frame.packets.Contains(packet_number); |
- } |
- return packet_number >= peer_least_packet_awaiting_ack && |
- !ack_frame.packets.Contains(packet_number); |
-} |
- |
-QuicStopWaitingFrame::QuicStopWaitingFrame() |
- : path_id(kDefaultPathId), entropy_hash(0), least_unacked(0) {} |
- |
-QuicStopWaitingFrame::~QuicStopWaitingFrame() {} |
- |
-QuicAckFrame::QuicAckFrame() |
- : largest_observed(0), |
- ack_delay_time(QuicTime::Delta::Infinite()), |
- path_id(kDefaultPathId), |
- entropy_hash(0), |
- is_truncated(false), |
- missing(true) {} |
- |
-QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default; |
- |
-QuicAckFrame::~QuicAckFrame() {} |
- |
-QuicRstStreamErrorCode AdjustErrorForVersion(QuicRstStreamErrorCode error_code, |
- QuicVersion /*version*/) { |
- return error_code; |
-} |
- |
-QuicRstStreamFrame::QuicRstStreamFrame() |
- : stream_id(0), error_code(QUIC_STREAM_NO_ERROR), byte_offset(0) {} |
- |
-QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id, |
- QuicRstStreamErrorCode error_code, |
- QuicStreamOffset bytes_written) |
- : stream_id(stream_id), |
- error_code(error_code), |
- byte_offset(bytes_written) {} |
- |
-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(QuicMtuDiscoveryFrame frame) |
- : type(MTU_DISCOVERY_FRAME), mtu_discovery_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) {} |
- |
-QuicFrame::QuicFrame(QuicPathCloseFrame* frame) |
- : type(PATH_CLOSE_FRAME), path_close_frame(frame) {} |
- |
-ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { |
- os << "{ entropy_hash: " << static_cast<int>(sent_info.entropy_hash) |
- << ", least_unacked: " << sent_info.least_unacked << " }\n"; |
- return os; |
-} |
- |
-PacketNumberQueue::const_iterator::const_iterator( |
- IntervalSet<QuicPacketNumber>::const_iterator interval_set_iter, |
- QuicPacketNumber first, |
- QuicPacketNumber last) |
- : interval_set_iter_(std::move(interval_set_iter)), |
- current_(first), |
- last_(last) {} |
- |
-PacketNumberQueue::const_iterator::const_iterator(const const_iterator& other) = |
- default; |
-// TODO(rtenneti): on windows RValue reference gives errors. |
-// PacketNumberQueue::const_iterator::const_iterator(const_iterator&& other) = |
-// default; |
-PacketNumberQueue::const_iterator::~const_iterator() {} |
- |
-PacketNumberQueue::const_iterator& PacketNumberQueue::const_iterator::operator=( |
- const const_iterator& other) = default; |
-// TODO(rtenneti): on windows RValue reference gives errors. |
-// PacketNumberQueue::const_iterator& |
-// PacketNumberQueue::const_iterator::operator=( |
-// const_iterator&& other) = default; |
- |
-bool PacketNumberQueue::const_iterator::operator!=( |
- const const_iterator& other) const { |
- return current_ != other.current_; |
-} |
- |
-bool PacketNumberQueue::const_iterator::operator==( |
- const const_iterator& other) const { |
- return current_ == other.current_; |
-} |
- |
-PacketNumberQueue::const_iterator::value_type |
- PacketNumberQueue::const_iterator::operator*() const { |
- return current_; |
-} |
- |
-PacketNumberQueue::const_iterator& PacketNumberQueue::const_iterator:: |
-operator++() { |
- ++current_; |
- if (current_ < last_) { |
- if (current_ >= interval_set_iter_->max()) { |
- ++interval_set_iter_; |
- current_ = interval_set_iter_->min(); |
- } |
- } else { |
- current_ = last_; |
- } |
- return *this; |
-} |
- |
-PacketNumberQueue::const_iterator PacketNumberQueue::const_iterator::operator++( |
- int /* postincrement */) { |
- PacketNumberQueue::const_iterator preincrement(*this); |
- operator++(); |
- return preincrement; |
-} |
- |
-PacketNumberQueue::PacketNumberQueue() = default; |
-PacketNumberQueue::PacketNumberQueue(const PacketNumberQueue& other) = default; |
-// TODO(rtenneti): on windows RValue reference gives errors. |
-// PacketNumberQueue::PacketNumberQueue(PacketNumberQueue&& other) = default; |
-PacketNumberQueue::~PacketNumberQueue() {} |
- |
-PacketNumberQueue& PacketNumberQueue::operator=( |
- const PacketNumberQueue& other) = default; |
-// TODO(rtenneti): on windows RValue reference gives errors. |
-// PacketNumberQueue& PacketNumberQueue::operator=(PacketNumberQueue&& other) = |
-// default; |
- |
-void PacketNumberQueue::Add(QuicPacketNumber packet_number) { |
- packet_number_intervals_.Add(packet_number, packet_number + 1); |
-} |
- |
-void PacketNumberQueue::Add(QuicPacketNumber lower, QuicPacketNumber higher) { |
- packet_number_intervals_.Add(lower, higher); |
-} |
- |
-void PacketNumberQueue::Remove(QuicPacketNumber packet_number) { |
- packet_number_intervals_.Difference(packet_number, packet_number + 1); |
-} |
- |
-void PacketNumberQueue::Remove(QuicPacketNumber lower, |
- QuicPacketNumber higher) { |
- packet_number_intervals_.Difference(lower, higher); |
-} |
- |
-bool PacketNumberQueue::RemoveUpTo(QuicPacketNumber higher) { |
- if (Empty()) { |
- return false; |
- } |
- const QuicPacketNumber old_min = Min(); |
- packet_number_intervals_.Difference(0, higher); |
- return Empty() || old_min != Min(); |
-} |
- |
-void PacketNumberQueue::Complement() { |
- if (Empty()) { |
- return; |
- } |
- packet_number_intervals_.Complement(Min(), Max() + 1); |
-} |
- |
-bool PacketNumberQueue::Contains(QuicPacketNumber packet_number) const { |
- return packet_number_intervals_.Contains(packet_number); |
-} |
- |
-bool PacketNumberQueue::Empty() const { |
- return packet_number_intervals_.Empty(); |
-} |
- |
-QuicPacketNumber PacketNumberQueue::Min() const { |
- DCHECK(!Empty()); |
- return packet_number_intervals_.begin()->min(); |
-} |
- |
-QuicPacketNumber PacketNumberQueue::Max() const { |
- DCHECK(!Empty()); |
- return packet_number_intervals_.rbegin()->max() - 1; |
-} |
- |
-size_t PacketNumberQueue::NumPacketsSlow() const { |
- size_t num_packets = 0; |
- for (const auto& interval : packet_number_intervals_) { |
- num_packets += interval.Length(); |
- } |
- return num_packets; |
-} |
- |
-size_t PacketNumberQueue::NumIntervals() const { |
- return packet_number_intervals_.Size(); |
-} |
- |
-QuicPacketNumber PacketNumberQueue::LastIntervalLength() const { |
- DCHECK(!Empty()); |
- return packet_number_intervals_.rbegin()->Length(); |
-} |
- |
-PacketNumberQueue::const_iterator PacketNumberQueue::begin() const { |
- QuicPacketNumber first; |
- QuicPacketNumber last; |
- if (packet_number_intervals_.Empty()) { |
- first = 0; |
- last = 0; |
- } else { |
- first = packet_number_intervals_.begin()->min(); |
- last = packet_number_intervals_.rbegin()->max(); |
- } |
- return const_iterator(packet_number_intervals_.begin(), first, last); |
-} |
- |
-PacketNumberQueue::const_iterator PacketNumberQueue::end() const { |
- QuicPacketNumber last = packet_number_intervals_.Empty() |
- ? 0 |
- : packet_number_intervals_.rbegin()->max(); |
- return const_iterator(packet_number_intervals_.end(), last, last); |
-} |
- |
-PacketNumberQueue::const_iterator PacketNumberQueue::lower_bound( |
- QuicPacketNumber packet_number) const { |
- QuicPacketNumber first; |
- QuicPacketNumber last; |
- if (packet_number_intervals_.Empty()) { |
- first = 0; |
- last = 0; |
- return const_iterator(packet_number_intervals_.begin(), first, last); |
- } |
- if (!packet_number_intervals_.Contains(packet_number)) { |
- return end(); |
- } |
- IntervalSet<QuicPacketNumber>::const_iterator it = |
- packet_number_intervals_.Find(packet_number); |
- first = packet_number; |
- last = packet_number_intervals_.rbegin()->max(); |
- return const_iterator(it, first, last); |
-} |
- |
-PacketNumberQueue::const_interval_iterator PacketNumberQueue::begin_intervals() |
- const { |
- return packet_number_intervals_.begin(); |
-} |
- |
-PacketNumberQueue::const_interval_iterator PacketNumberQueue::end_intervals() |
- const { |
- return packet_number_intervals_.end(); |
-} |
- |
-PacketNumberQueue::const_reverse_interval_iterator |
-PacketNumberQueue::rbegin_intervals() const { |
- return packet_number_intervals_.rbegin(); |
-} |
- |
-PacketNumberQueue::const_reverse_interval_iterator |
-PacketNumberQueue::rend_intervals() const { |
- return packet_number_intervals_.rend(); |
-} |
- |
-ostream& operator<<(ostream& os, const PacketNumberQueue& q) { |
- for (QuicPacketNumber packet_number : q) { |
- os << packet_number << " "; |
- } |
- 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 |
- << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds() |
- << ", packets: [ " << ack_frame.packets << " ]" |
- << ", is_truncated: " << ack_frame.is_truncated |
- << ", received_packets: [ "; |
- for (const std::pair<QuicPacketNumber, QuicTime>& p : |
- ack_frame.received_packet_times) { |
- os << p.first << " at " << p.second.ToDebuggingValue() << " "; |
- } |
- os << " ] }\n"; |
- return os; |
-} |
- |
-ostream& operator<<(ostream& os, const QuicFrame& frame) { |
- switch (frame.type) { |
- case PADDING_FRAME: { |
- os << "type { PADDING_FRAME } " << frame.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; |
- } |
- case MTU_DISCOVERY_FRAME: { |
- os << "type { MTU_DISCOVERY_FRAME } "; |
- break; |
- } |
- case PATH_CLOSE_FRAME: { |
- os << "type { PATH_CLOSE_FRAME } " << *(frame.path_close_frame); |
- break; |
- } |
- default: { |
- LOG(ERROR) << "Unknown frame type: " << frame.type; |
- break; |
- } |
- } |
- return os; |
-} |
- |
-ostream& operator<<(ostream& os, const QuicPaddingFrame& padding_frame) { |
- os << "{ num_padding_bytes: " << padding_frame.num_padding_bytes << " }\n"; |
- return os; |
-} |
- |
-ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) { |
- os << "{ stream_id: " << rst_frame.stream_id |
- << ", error_code: " << rst_frame.error_code << " }\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 QuicPathCloseFrame& path_close_frame) { |
- os << "{ path_id: " << static_cast<int>(path_close_frame.path_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 |
- << ", length: " << stream_frame.data_length << " }\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) {} |
- |
-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) {} |
- |
-QuicPathCloseFrame::QuicPathCloseFrame(QuicPathId path_id) : path_id(path_id) {} |
- |
-QuicPacket::QuicPacket(char* buffer, |
- size_t length, |
- bool owns_buffer, |
- QuicConnectionIdLength connection_id_length, |
- bool includes_version, |
- bool includes_path_id, |
- bool includes_diversification_nonce, |
- QuicPacketNumberLength packet_number_length) |
- : QuicData(buffer, length, owns_buffer), |
- buffer_(buffer), |
- connection_id_length_(connection_id_length), |
- includes_version_(includes_version), |
- includes_path_id_(includes_path_id), |
- includes_diversification_nonce_(includes_diversification_nonce), |
- packet_number_length_(packet_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) {} |
- |
-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; |
-} |
- |
-QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
- size_t length, |
- QuicTime receipt_time) |
- : QuicEncryptedPacket(buffer, length), receipt_time_(receipt_time) {} |
- |
-QuicReceivedPacket::QuicReceivedPacket(char* buffer, |
- size_t length, |
- QuicTime receipt_time, |
- bool owns_buffer) |
- : QuicEncryptedPacket(buffer, length, owns_buffer), |
- receipt_time_(receipt_time) {} |
- |
-QuicReceivedPacket* QuicReceivedPacket::Clone() const { |
- char* buffer = new char[this->length()]; |
- memcpy(buffer, this->data(), this->length()); |
- return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true); |
-} |
- |
-ostream& operator<<(ostream& os, const QuicReceivedPacket& s) { |
- os << s.length() << "-byte data"; |
- return os; |
-} |
- |
-StringPiece QuicPacket::AssociatedData(QuicVersion version) const { |
- return StringPiece( |
- data(), GetStartOfEncryptedData(version, connection_id_length_, |
- includes_version_, includes_path_id_, |
- includes_diversification_nonce_, |
- packet_number_length_)); |
-} |
- |
-StringPiece QuicPacket::Plaintext(QuicVersion version) const { |
- const size_t start_of_encrypted_data = GetStartOfEncryptedData( |
- version, connection_id_length_, includes_version_, includes_path_id_, |
- includes_diversification_nonce_, packet_number_length_); |
- return StringPiece(data() + start_of_encrypted_data, |
- length() - start_of_encrypted_data); |
-} |
- |
-AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, |
- QuicPacketLength data_length) |
- : ack_listener(listener), length(data_length) { |
- DCHECK(listener != nullptr); |
-} |
- |
-AckListenerWrapper::AckListenerWrapper(const AckListenerWrapper& other) = |
- default; |
- |
-AckListenerWrapper::~AckListenerWrapper() {} |
- |
-SerializedPacket::SerializedPacket(QuicPathId path_id, |
- QuicPacketNumber packet_number, |
- QuicPacketNumberLength packet_number_length, |
- const char* encrypted_buffer, |
- QuicPacketLength encrypted_length, |
- QuicPacketEntropyHash entropy_hash, |
- bool has_ack, |
- bool has_stop_waiting) |
- : encrypted_buffer(encrypted_buffer), |
- encrypted_length(encrypted_length), |
- has_crypto_handshake(NOT_HANDSHAKE), |
- num_padding_bytes(0), |
- path_id(path_id), |
- packet_number(packet_number), |
- packet_number_length(packet_number_length), |
- encryption_level(ENCRYPTION_NONE), |
- entropy_hash(entropy_hash), |
- has_ack(has_ack), |
- has_stop_waiting(has_stop_waiting), |
- transmission_type(NOT_RETRANSMISSION), |
- original_path_id(kInvalidPathId), |
- original_packet_number(0) {} |
- |
-SerializedPacket::SerializedPacket(const SerializedPacket& other) = default; |
- |
-SerializedPacket::~SerializedPacket() {} |
- |
-TransmissionInfo::TransmissionInfo() |
- : encryption_level(ENCRYPTION_NONE), |
- packet_number_length(PACKET_1BYTE_PACKET_NUMBER), |
- bytes_sent(0), |
- sent_time(QuicTime::Zero()), |
- transmission_type(NOT_RETRANSMISSION), |
- in_flight(false), |
- is_unackable(false), |
- has_crypto_handshake(false), |
- num_padding_bytes(0), |
- retransmission(0) {} |
- |
-TransmissionInfo::TransmissionInfo(EncryptionLevel level, |
- QuicPacketNumberLength packet_number_length, |
- TransmissionType transmission_type, |
- QuicTime sent_time, |
- QuicPacketLength bytes_sent, |
- bool has_crypto_handshake, |
- int num_padding_bytes) |
- : encryption_level(level), |
- packet_number_length(packet_number_length), |
- bytes_sent(bytes_sent), |
- sent_time(sent_time), |
- transmission_type(transmission_type), |
- in_flight(false), |
- is_unackable(false), |
- has_crypto_handshake(has_crypto_handshake), |
- num_padding_bytes(num_padding_bytes), |
- retransmission(0) {} |
- |
-TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; |
- |
-TransmissionInfo::~TransmissionInfo() {} |
- |
-} // namespace net |