#include "quiche/quic/core/quic_connection.h"
#include <string.h>
#include <sys/types.h>
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <cstdlib>
#include <iterator>
#include <limits>
#include <memory>
#include <optional>
#include <ostream>
#include <set>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
#include "absl/strings/escaping.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "quiche/quic/core/congestion_control/rtt_stats.h"
#include "quiche/quic/core/congestion_control/send_algorithm_interface.h"
#include "quiche/quic/core/crypto/crypto_protocol.h"
#include "quiche/quic/core/crypto/crypto_utils.h"
#include "quiche/quic/core/crypto/quic_decrypter.h"
#include "quiche/quic/core/crypto/quic_encrypter.h"
#include "quiche/quic/core/quic_bandwidth.h"
#include "quiche/quic/core/quic_config.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_constants.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_packet_creator.h"
#include "quiche/quic/core/quic_packet_writer.h"
#include "quiche/quic/core/quic_packets.h"
#include "quiche/quic/core/quic_path_validator.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/core/quic_utils.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
#include "quiche/quic/platform/api/quic_client_stats.h"
#include "quiche/quic/platform/api/quic_exported_stats.h"
#include "quiche/quic/platform/api/quic_flag_utils.h"
#include "quiche/quic/platform/api/quic_flags.h"
#include "quiche/quic/platform/api/quic_logging.h"
#include "quiche/quic/platform/api/quic_socket_address.h"
#include "quiche/common/platform/api/quiche_flag_utils.h"
#include "quiche/common/platform/api/quiche_testvalue.h"
#include "quiche/common/quiche_text_utils.h"
namespace quic {
class QuicDecrypter;
class QuicEncrypter;
namespace {
const QuicPacketCount kMaxConsecutiveNonRetransmittablePackets = …;
const int kMinReleaseTimeIntoFutureMs = …;
const size_t kMaxReceivedClientAddressSize = …;
const uint8_t kEcnPtoLimit = …;
class ScopedCoalescedPacketClearer { … };
bool PacketCanReplaceServerConnectionId(const QuicPacketHeader& header,
Perspective perspective) { … }
bool NewServerConnectionIdMightBeValid(const QuicPacketHeader& header,
Perspective perspective,
bool connection_id_already_replaced) { … }
CongestionControlType GetDefaultCongestionControlType() { … }
bool ContainsNonProbingFrame(const SerializedPacket& packet) { … }
}
#define ENDPOINT …
QuicConnection::QuicConnection(
QuicConnectionId server_connection_id,
QuicSocketAddress initial_self_address,
QuicSocketAddress initial_peer_address,
QuicConnectionHelperInterface* helper, QuicAlarmFactory* alarm_factory,
QuicPacketWriter* writer, bool owns_writer, Perspective perspective,
const ParsedQuicVersionVector& supported_versions,
ConnectionIdGeneratorInterface& generator)
: … { … }
void QuicConnection::InstallInitialCrypters(QuicConnectionId connection_id) { … }
QuicConnection::~QuicConnection() { … }
void QuicConnection::ClearQueuedPackets() { … }
bool QuicConnection::ValidateConfigConnectionIds(const QuicConfig& config) { … }
void QuicConnection::SetFromConfig(const QuicConfig& config) { … }
void QuicConnection::AddDispatcherSentPackets(
absl::Span<const DispatcherSentPacket> dispatcher_sent_packets) { … }
bool QuicConnection::MaybeTestLiveness() { … }
void QuicConnection::ApplyConnectionOptions(
const QuicTagVector& connection_options) { … }
void QuicConnection::OnSendConnectionState(
const CachedNetworkParameters& cached_network_params) { … }
void QuicConnection::OnReceiveConnectionState(
const CachedNetworkParameters& cached_network_params) { … }
void QuicConnection::ResumeConnectionState(
const CachedNetworkParameters& cached_network_params,
bool max_bandwidth_resumption) { … }
void QuicConnection::SetMaxPacingRate(QuicBandwidth max_pacing_rate) { … }
void QuicConnection::AdjustNetworkParameters(
const SendAlgorithmInterface::NetworkParams& params) { … }
void QuicConnection::SetLossDetectionTuner(
std::unique_ptr<LossDetectionTunerInterface> tuner) { … }
void QuicConnection::OnConfigNegotiated() { … }
QuicBandwidth QuicConnection::MaxPacingRate() const { … }
bool QuicConnection::SelectMutualVersion(
const ParsedQuicVersionVector& available_versions) { … }
void QuicConnection::OnError(QuicFramer* framer) { … }
void QuicConnection::OnPacket() { … }
bool QuicConnection::OnProtocolVersionMismatch(
ParsedQuicVersion received_version) { … }
void QuicConnection::OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& packet) { … }
void QuicConnection::OnRetryPacket(QuicConnectionId original_connection_id,
QuicConnectionId new_connection_id,
absl::string_view retry_token,
absl::string_view retry_integrity_tag,
absl::string_view retry_without_tag) { … }
void QuicConnection::SetOriginalDestinationConnectionId(
const QuicConnectionId& original_destination_connection_id) { … }
QuicConnectionId QuicConnection::GetOriginalDestinationConnectionId() const { … }
void QuicConnection::RetireOriginalDestinationConnectionId() { … }
void QuicConnection::OnDiscardZeroRttDecryptionKeysAlarm() { … }
bool QuicConnection::ValidateServerConnectionId(
const QuicPacketHeader& header) const { … }
bool QuicConnection::OnUnauthenticatedPublicHeader(
const QuicPacketHeader& header) { … }
bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { … }
void QuicConnection::OnSuccessfulVersionNegotiation() { … }
void QuicConnection::OnSuccessfulMigration(bool is_port_change) { … }
void QuicConnection::OnTransportParametersSent(
const TransportParameters& transport_parameters) const { … }
void QuicConnection::OnTransportParametersReceived(
const TransportParameters& transport_parameters) const { … }
void QuicConnection::OnTransportParametersResumed(
const TransportParameters& transport_parameters) const { … }
void QuicConnection::OnEncryptedClientHelloSent(
absl::string_view client_hello) const { … }
void QuicConnection::OnEncryptedClientHelloReceived(
absl::string_view client_hello) const { … }
bool QuicConnection::HasPendingAcks() const { … }
void QuicConnection::OnUserAgentIdKnown(const std::string& ) { … }
void QuicConnection::OnDecryptedPacket(size_t ,
EncryptionLevel level) { … }
QuicSocketAddress QuicConnection::GetEffectivePeerAddressFromCurrentPacket()
const { … }
bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { … }
bool QuicConnection::OnStreamFrame(const QuicStreamFrame& frame) { … }
bool QuicConnection::OnCryptoFrame(const QuicCryptoFrame& frame) { … }
bool QuicConnection::OnAckFrameStart(QuicPacketNumber largest_acked,
QuicTime::Delta ack_delay_time) { … }
bool QuicConnection::OnAckRange(QuicPacketNumber start, QuicPacketNumber end) { … }
bool QuicConnection::OnAckTimestamp(QuicPacketNumber packet_number,
QuicTime timestamp) { … }
bool QuicConnection::OnAckFrameEnd(
QuicPacketNumber start, const std::optional<QuicEcnCounts>& ecn_counts) { … }
bool QuicConnection::OnStopWaitingFrame(const QuicStopWaitingFrame& ) { … }
bool QuicConnection::OnPaddingFrame(const QuicPaddingFrame& frame) { … }
bool QuicConnection::OnPingFrame(const QuicPingFrame& frame) { … }
bool QuicConnection::OnRstStreamFrame(const QuicRstStreamFrame& frame) { … }
bool QuicConnection::OnStopSendingFrame(const QuicStopSendingFrame& frame) { … }
class ReversePathValidationContext : public QuicPathValidationContext { … };
bool QuicConnection::OnPathChallengeFrame(const QuicPathChallengeFrame& frame) { … }
bool QuicConnection::OnPathResponseFrame(const QuicPathResponseFrame& frame) { … }
bool QuicConnection::OnConnectionCloseFrame(
const QuicConnectionCloseFrame& frame) { … }
bool QuicConnection::OnMaxStreamsFrame(const QuicMaxStreamsFrame& frame) { … }
bool QuicConnection::OnStreamsBlockedFrame(
const QuicStreamsBlockedFrame& frame) { … }
bool QuicConnection::OnGoAwayFrame(const QuicGoAwayFrame& frame) { … }
bool QuicConnection::OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) { … }
void QuicConnection::OnClientConnectionIdAvailable() { … }
NewConnectionIdResult QuicConnection::OnNewConnectionIdFrameInner(
const QuicNewConnectionIdFrame& frame) { … }
bool QuicConnection::OnNewConnectionIdFrame(
const QuicNewConnectionIdFrame& frame) { … }
bool QuicConnection::OnRetireConnectionIdFrame(
const QuicRetireConnectionIdFrame& frame) { … }
bool QuicConnection::OnNewTokenFrame(const QuicNewTokenFrame& frame) { … }
bool QuicConnection::OnMessageFrame(const QuicMessageFrame& frame) { … }
bool QuicConnection::OnHandshakeDoneFrame(const QuicHandshakeDoneFrame& frame) { … }
bool QuicConnection::OnAckFrequencyFrame(const QuicAckFrequencyFrame& frame) { … }
bool QuicConnection::OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) { … }
bool QuicConnection::OnBlockedFrame(const QuicBlockedFrame& frame) { … }
void QuicConnection::OnPacketComplete() { … }
void QuicConnection::MaybeRespondToConnectivityProbingOrMigration() { … }
bool QuicConnection::IsValidStatelessResetToken(
const StatelessResetToken& token) const { … }
void QuicConnection::OnAuthenticatedIetfStatelessResetPacket(
const QuicIetfStatelessResetPacket& ) { … }
void QuicConnection::OnKeyUpdate(KeyUpdateReason reason) { … }
void QuicConnection::OnDecryptedFirstPacketInKeyPhase() { … }
std::unique_ptr<QuicDecrypter>
QuicConnection::AdvanceKeysAndCreateCurrentOneRttDecrypter() { … }
std::unique_ptr<QuicEncrypter> QuicConnection::CreateCurrentOneRttEncrypter() { … }
void QuicConnection::ClearLastFrames() { … }
void QuicConnection::CloseIfTooManyOutstandingSentPackets() { … }
const QuicFrame QuicConnection::GetUpdatedAckFrame() { … }
QuicPacketNumber QuicConnection::GetLeastUnacked() const { … }
bool QuicConnection::HandleWriteBlocked() { … }
void QuicConnection::MaybeSendInResponseToPacket() { … }
size_t QuicConnection::SendCryptoData(EncryptionLevel level,
size_t write_length,
QuicStreamOffset offset) { … }
QuicConsumedData QuicConnection::SendStreamData(QuicStreamId id,
size_t write_length,
QuicStreamOffset offset,
StreamSendingState state) { … }
bool QuicConnection::SendControlFrame(const QuicFrame& frame) { … }
void QuicConnection::OnStreamReset(QuicStreamId id,
QuicRstStreamErrorCode error) { … }
const QuicConnectionStats& QuicConnection::GetStats() { … }
void QuicConnection::OnCoalescedPacket(const QuicEncryptedPacket& packet) { … }
void QuicConnection::OnUndecryptablePacket(const QuicEncryptedPacket& packet,
EncryptionLevel decryption_level,
bool has_decryption_key) { … }
bool QuicConnection::ShouldEnqueueUnDecryptablePacket(
EncryptionLevel decryption_level, bool has_decryption_key) const { … }
std::string QuicConnection::UndecryptablePacketsInfo() const { … }
void QuicConnection::ProcessUdpPacket(const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address,
const QuicReceivedPacket& packet) { … }
void QuicConnection::OnBlockedWriterCanWrite() { … }
void QuicConnection::OnCanWrite() { … }
void QuicConnection::OnSendAlarm() { … }
void QuicConnection::WriteIfNotBlocked() { … }
void QuicConnection::MaybeClearQueuedPacketsOnPathChange() { … }
void QuicConnection::ReplaceInitialServerConnectionId(
const QuicConnectionId& new_server_connection_id) { … }
void QuicConnection::FindMatchingOrNewClientConnectionIdOrToken(
const PathState& default_path, const PathState& alternative_path,
const QuicConnectionId& server_connection_id,
QuicConnectionId* client_connection_id,
std::optional<StatelessResetToken>* stateless_reset_token) { … }
bool QuicConnection::FindOnPathConnectionIds(
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address,
QuicConnectionId* client_connection_id,
QuicConnectionId* server_connection_id) const { … }
void QuicConnection::SetDefaultPathState(PathState new_path_state) { … }
bool QuicConnection::PeerAddressChanged() const { … }
bool QuicConnection::ProcessValidatedPacket(const QuicPacketHeader& header) { … }
bool QuicConnection::ValidateReceivedPacketNumber(
QuicPacketNumber packet_number) { … }
void QuicConnection::WriteQueuedPackets() { … }
void QuicConnection::MarkZeroRttPacketsForRetransmission(int reject_reason) { … }
void QuicConnection::NeuterUnencryptedPackets() { … }
bool QuicConnection::IsMissingDestinationConnectionID() const { … }
bool QuicConnection::ShouldGeneratePacket(
HasRetransmittableData retransmittable, IsHandshake handshake) { … }
void QuicConnection::MaybeBundleOpportunistically(
TransmissionType transmission_type) { … }
bool QuicConnection::CanWrite(HasRetransmittableData retransmittable) { … }
QuicTime QuicConnection::CalculatePacketSentTime() { … }
bool QuicConnection::WritePacket(SerializedPacket* packet) { … }
bool QuicConnection::MaybeHandleAeadConfidentialityLimits(
const SerializedPacket& packet) { … }
void QuicConnection::FlushPackets() { … }
bool QuicConnection::IsMsgTooBig(const QuicPacketWriter* writer,
const WriteResult& result) { … }
bool QuicConnection::ShouldDiscardPacket(EncryptionLevel encryption_level) { … }
QuicTime QuicConnection::GetPathMtuReductionDeadline() const { … }
bool QuicConnection::MaybeRevertToPreviousMtu() { … }
void QuicConnection::OnWriteError(int error_code) { … }
QuicPacketBuffer QuicConnection::GetPacketBuffer() { … }
void QuicConnection::OnSerializedPacket(SerializedPacket serialized_packet) { … }
void QuicConnection::OnUnrecoverableError(QuicErrorCode error,
const std::string& error_details) { … }
void QuicConnection::OnCongestionChange() { … }
void QuicConnection::OnPathMtuIncreased(QuicPacketLength packet_size) { … }
void QuicConnection::OnInFlightEcnPacketAcked() { … }
void QuicConnection::OnInvalidEcnFeedback() { … }
std::unique_ptr<QuicSelfIssuedConnectionIdManager>
QuicConnection::MakeSelfIssuedConnectionIdManager() { … }
void QuicConnection::MaybeSendConnectionIdToClient() { … }
void QuicConnection::OnHandshakeComplete() { … }
void QuicConnection::MaybeCreateMultiPortPath() { … }
void QuicConnection::SendOrQueuePacket(SerializedPacket packet) { … }
void QuicConnection::OnAckAlarm() { … }
void QuicConnection::SendAck() { … }
EncryptionLevel QuicConnection::GetEncryptionLevelToSendPingForSpace(
PacketNumberSpace space) const { … }
bool QuicConnection::IsKnownServerAddress(
const QuicSocketAddress& address) const { … }
QuicEcnCodepoint QuicConnection::GetEcnCodepointToSend(
const QuicSocketAddress& destination_address) const { … }
WriteResult QuicConnection::SendPacketToWriter(
const char* buffer, size_t buf_len, const QuicIpAddress& self_address,
const QuicSocketAddress& destination_address, QuicPacketWriter* writer,
const QuicEcnCodepoint ecn_codepoint) { … }
void QuicConnection::OnRetransmissionAlarm() { … }
void QuicConnection::SetEncrypter(EncryptionLevel level,
std::unique_ptr<QuicEncrypter> encrypter) { … }
void QuicConnection::RemoveEncrypter(EncryptionLevel level) { … }
void QuicConnection::SetDiversificationNonce(
const DiversificationNonce& nonce) { … }
void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) { … }
void QuicConnection::SetDecrypter(EncryptionLevel level,
std::unique_ptr<QuicDecrypter> decrypter) { … }
void QuicConnection::SetAlternativeDecrypter(
EncryptionLevel level, std::unique_ptr<QuicDecrypter> decrypter,
bool latch_once_used) { … }
void QuicConnection::InstallDecrypter(
EncryptionLevel level, std::unique_ptr<QuicDecrypter> decrypter) { … }
void QuicConnection::RemoveDecrypter(EncryptionLevel level) { … }
void QuicConnection::OnDiscardPreviousOneRttKeysAlarm() { … }
bool QuicConnection::IsKeyUpdateAllowed() const { … }
bool QuicConnection::HaveSentPacketsInCurrentKeyPhaseButNoneAcked() const { … }
QuicPacketCount QuicConnection::PotentialPeerKeyUpdateAttemptCount() const { … }
bool QuicConnection::InitiateKeyUpdate(KeyUpdateReason reason) { … }
const QuicDecrypter* QuicConnection::decrypter() const { … }
const QuicDecrypter* QuicConnection::alternative_decrypter() const { … }
void QuicConnection::QueueUndecryptablePacket(
const QuicEncryptedPacket& packet, EncryptionLevel decryption_level) { … }
void QuicConnection::OnProcessUndecryptablePacketsAlarm() { … }
void QuicConnection::MaybeProcessUndecryptablePackets() { … }
void QuicConnection::QueueCoalescedPacket(const QuicEncryptedPacket& packet) { … }
bool QuicConnection::MaybeProcessCoalescedPackets() { … }
void QuicConnection::CloseConnection(
QuicErrorCode error, const std::string& details,
ConnectionCloseBehavior connection_close_behavior) { … }
void QuicConnection::CloseConnection(
QuicErrorCode error, QuicIetfTransportErrorCodes ietf_error,
const std::string& error_details,
ConnectionCloseBehavior connection_close_behavior) { … }
void QuicConnection::SendConnectionClosePacket(
QuicErrorCode error, QuicIetfTransportErrorCodes ietf_error,
const std::string& details) { … }
void QuicConnection::TearDownLocalConnectionState(
QuicErrorCode error, QuicIetfTransportErrorCodes ietf_error,
const std::string& error_details, ConnectionCloseSource source) { … }
void QuicConnection::TearDownLocalConnectionState(
const QuicConnectionCloseFrame& frame, ConnectionCloseSource source) { … }
void QuicConnection::CancelAllAlarms() { … }
QuicByteCount QuicConnection::max_packet_length() const { … }
void QuicConnection::SetMaxPacketLength(QuicByteCount length) { … }
bool QuicConnection::HasQueuedData() const { … }
void QuicConnection::SetNetworkTimeouts(QuicTime::Delta handshake_timeout,
QuicTime::Delta idle_timeout) { … }
void QuicConnection::SetPingAlarm() { … }
void QuicConnection::SetRetransmissionAlarm() { … }
void QuicConnection::MaybeSetMtuAlarm(QuicPacketNumber sent_packet_number) { … }
QuicConnection::ScopedPacketFlusher::ScopedPacketFlusher(
QuicConnection* connection)
: … { … }
QuicConnection::ScopedPacketFlusher::~ScopedPacketFlusher() { … }
QuicConnection::ScopedEncryptionLevelContext::ScopedEncryptionLevelContext(
QuicConnection* connection, EncryptionLevel encryption_level)
: … { … }
QuicConnection::ScopedEncryptionLevelContext::~ScopedEncryptionLevelContext() { … }
QuicConnection::BufferedPacket::BufferedPacket(
const SerializedPacket& packet, const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address, const QuicEcnCodepoint ecn_codepoint)
: … { … }
QuicConnection::BufferedPacket::BufferedPacket(
const char* encrypted_buffer, QuicPacketLength encrypted_length,
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address, const QuicEcnCodepoint ecn_codepoint)
: … { … }
QuicConnection::BufferedPacket::BufferedPacket(
QuicRandom& random, QuicPacketLength encrypted_length,
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address)
: … { … }
QuicConnection::ReceivedPacketInfo::ReceivedPacketInfo(QuicTime receipt_time)
: … { … }
QuicConnection::ReceivedPacketInfo::ReceivedPacketInfo(
const QuicSocketAddress& destination_address,
const QuicSocketAddress& source_address, QuicTime receipt_time,
QuicByteCount length, QuicEcnCodepoint ecn_codepoint)
: … { … }
std::ostream& operator<<(std::ostream& os,
const QuicConnection::ReceivedPacketInfo& info) { … }
HasRetransmittableData QuicConnection::IsRetransmittable(
const SerializedPacket& packet) { … }
bool QuicConnection::IsTerminationPacket(const SerializedPacket& packet,
QuicErrorCode* error_code) { … }
void QuicConnection::SetMtuDiscoveryTarget(QuicByteCount target) { … }
QuicByteCount QuicConnection::GetLimitedMaxPacketSize(
QuicByteCount suggested_max_packet_size) { … }
void QuicConnection::SendMtuDiscoveryPacket(QuicByteCount target_mtu) { … }
bool QuicConnection::SendConnectivityProbingPacket(
QuicPacketWriter* probing_writer, const QuicSocketAddress& peer_address) { … }
bool QuicConnection::WritePacketUsingWriter(
std::unique_ptr<SerializedPacket> packet, QuicPacketWriter* writer,
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address, bool measure_rtt) { … }
void QuicConnection::DisableMtuDiscovery() { … }
void QuicConnection::OnMtuDiscoveryAlarm() { … }
void QuicConnection::OnEffectivePeerMigrationValidated(
bool ) { … }
void QuicConnection::StartEffectivePeerMigration(AddressChangeType type) { … }
void QuicConnection::OnConnectionMigration() { … }
bool QuicConnection::IsCurrentPacketConnectivityProbing() const { … }
bool QuicConnection::ack_frame_updated() const { … }
absl::string_view QuicConnection::GetCurrentPacket() { … }
bool QuicConnection::MaybeConsiderAsMemoryCorruption(
const QuicStreamFrame& frame) { … }
void QuicConnection::CheckIfApplicationLimited() { … }
bool QuicConnection::UpdatePacketContent(QuicFrameType type) { … }
void QuicConnection::MaybeStartIetfPeerMigration() { … }
void QuicConnection::PostProcessAfterAckFrame(bool acked_new_packet) { … }
void QuicConnection::SetSessionNotifier(
SessionNotifierInterface* session_notifier) { … }
void QuicConnection::SetDataProducer(
QuicStreamFrameDataProducer* data_producer) { … }
void QuicConnection::SetTransmissionType(TransmissionType type) { … }
void QuicConnection::UpdateReleaseTimeIntoFuture() { … }
void QuicConnection::ResetAckStates() { … }
MessageStatus QuicConnection::SendMessage(
QuicMessageId message_id, absl::Span<quiche::QuicheMemSlice> message,
bool flush) { … }
QuicPacketLength QuicConnection::GetCurrentLargestMessagePayload() const { … }
QuicPacketLength QuicConnection::GetGuaranteedLargestMessagePayload() const { … }
uint32_t QuicConnection::cipher_id() const { … }
EncryptionLevel QuicConnection::GetConnectionCloseEncryptionLevel() const { … }
void QuicConnection::MaybeBundleCryptoDataWithAcks() { … }
void QuicConnection::SendAllPendingAcks() { … }
bool QuicConnection::ShouldBundleRetransmittableFrameWithAck() const { … }
void QuicConnection::MaybeCoalescePacketOfHigherSpace() { … }
bool QuicConnection::FlushCoalescedPacket() { … }
void QuicConnection::MaybeEnableMultiplePacketNumberSpacesSupport() { … }
bool QuicConnection::SupportsMultiplePacketNumberSpaces() const { … }
void QuicConnection::SetLargestReceivedPacketWithAck(
QuicPacketNumber new_value) { … }
void QuicConnection::OnForwardProgressMade() { … }
QuicPacketNumber QuicConnection::GetLargestReceivedPacketWithAck() const { … }
QuicPacketNumber QuicConnection::GetLargestAckedPacket() const { … }
QuicPacketNumber QuicConnection::GetLargestReceivedPacket() const { … }
bool QuicConnection::EnforceAntiAmplificationLimit() const { … }
bool QuicConnection::LimitedByAmplificationFactor(QuicByteCount bytes) const { … }
SerializedPacketFate QuicConnection::GetSerializedPacketFate(
bool is_mtu_discovery, EncryptionLevel encryption_level) { … }
bool QuicConnection::IsHandshakeComplete() const { … }
bool QuicConnection::IsHandshakeConfirmed() const { … }
size_t QuicConnection::min_received_before_ack_decimation() const { … }
void QuicConnection::set_min_received_before_ack_decimation(size_t new_value) { … }
const QuicAckFrame& QuicConnection::ack_frame() const { … }
void QuicConnection::set_client_connection_id(
QuicConnectionId client_connection_id) { … }
void QuicConnection::OnPathDegradingDetected() { … }
void QuicConnection::MaybeMigrateToMultiPortPath() { … }
void QuicConnection::OnBlackholeDetected() { … }
void QuicConnection::OnPathMtuReductionDetected() { … }
void QuicConnection::OnHandshakeTimeout() { … }
void QuicConnection::OnIdleNetworkDetected() { … }
void QuicConnection::OnKeepAliveTimeout() { … }
void QuicConnection::OnRetransmittableOnWireTimeout() { … }
void QuicConnection::OnPeerIssuedConnectionIdRetired() { … }
bool QuicConnection::SendNewConnectionId(
const QuicNewConnectionIdFrame& frame) { … }
bool QuicConnection::MaybeReserveConnectionId(
const QuicConnectionId& connection_id) { … }
void QuicConnection::OnSelfIssuedConnectionIdRetired(
const QuicConnectionId& connection_id) { … }
void QuicConnection::MaybeUpdateAckTimeout() { … }
QuicTime QuicConnection::GetPathDegradingDeadline() const { … }
bool QuicConnection::ShouldDetectPathDegrading() const { … }
QuicTime QuicConnection::GetNetworkBlackholeDeadline() const { … }
QuicTime::Delta QuicConnection::CalculateNetworkBlackholeDelay(
QuicTime::Delta blackhole_delay, QuicTime::Delta path_degrading_delay,
QuicTime::Delta pto_delay) { … }
void QuicConnection::AddKnownServerAddress(const QuicSocketAddress& address) { … }
std::optional<QuicNewConnectionIdFrame>
QuicConnection::MaybeIssueNewConnectionIdForPreferredAddress() { … }
bool QuicConnection::ShouldDetectBlackhole() const { … }
QuicTime QuicConnection::GetRetransmissionDeadline() const { … }
bool QuicConnection::SendPathChallenge(
const QuicPathFrameBuffer& data_buffer,
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address,
const QuicSocketAddress& effective_peer_address, QuicPacketWriter* writer) { … }
QuicTime QuicConnection::GetRetryTimeout(
const QuicSocketAddress& peer_address_to_use,
QuicPacketWriter* writer_to_use) const { … }
void QuicConnection::ValidatePath(
std::unique_ptr<QuicPathValidationContext> context,
std::unique_ptr<QuicPathValidator::ResultDelegate> result_delegate,
PathValidationReason reason) { … }
bool QuicConnection::SendPathResponse(
const QuicPathFrameBuffer& data_buffer,
const QuicSocketAddress& peer_address_to_send,
const QuicSocketAddress& effective_peer_address) { … }
void QuicConnection::UpdatePeerAddress(QuicSocketAddress peer_address) { … }
void QuicConnection::SendPingAtLevel(EncryptionLevel level) { … }
bool QuicConnection::HasPendingPathValidation() const { … }
QuicPathValidationContext* QuicConnection::GetPathValidationContext() const { … }
void QuicConnection::CancelPathValidation() { … }
bool QuicConnection::UpdateConnectionIdsOnMigration(
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address) { … }
void QuicConnection::RetirePeerIssuedConnectionIdsNoLongerOnPath() { … }
bool QuicConnection::MigratePath(const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address,
QuicPacketWriter* writer, bool owns_writer) { … }
void QuicConnection::OnPathValidationFailureAtClient(
bool is_multi_port, const QuicPathValidationContext& context) { … }
QuicConnectionId QuicConnection::GetOneActiveServerConnectionId() const { … }
std::vector<QuicConnectionId> QuicConnection::GetActiveServerConnectionIds()
const { … }
void QuicConnection::CreateConnectionIdManager() { … }
void QuicConnection::QuicBugIfHasPendingFrames(QuicStreamId id) const { … }
void QuicConnection::SetUnackedMapInitialCapacity() { … }
void QuicConnection::SetSourceAddressTokenToSend(absl::string_view token) { … }
void QuicConnection::MaybeUpdateBytesSentToAlternativeAddress(
const QuicSocketAddress& peer_address, QuicByteCount sent_packet_size) { … }
void QuicConnection::MaybeUpdateBytesReceivedFromAlternativeAddress(
QuicByteCount received_packet_size) { … }
bool QuicConnection::IsDefaultPath(
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address) const { … }
bool QuicConnection::IsAlternativePath(
const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address) const { … }
void QuicConnection::PathState::Clear() { … }
QuicConnection::PathState::PathState(PathState&& other) { … }
QuicConnection::PathState& QuicConnection::PathState::operator=(
QuicConnection::PathState&& other) { … }
bool QuicConnection::IsReceivedPeerAddressValidated() const { … }
void QuicConnection::OnMultiPortPathProbingSuccess(
std::unique_ptr<QuicPathValidationContext> context, QuicTime start_time) { … }
void QuicConnection::MaybeProbeMultiPortPath() { … }
void QuicConnection::ContextObserver::OnMultiPortPathContextAvailable(
std::unique_ptr<QuicPathValidationContext> path_context) { … }
QuicConnection::MultiPortPathValidationResultDelegate::
MultiPortPathValidationResultDelegate(QuicConnection* connection)
: … { … }
void QuicConnection::MultiPortPathValidationResultDelegate::
OnPathValidationSuccess(std::unique_ptr<QuicPathValidationContext> context,
QuicTime start_time) { … }
void QuicConnection::MultiPortPathValidationResultDelegate::
OnPathValidationFailure(
std::unique_ptr<QuicPathValidationContext> context) { … }
QuicConnection::ReversePathValidationResultDelegate::
ReversePathValidationResultDelegate(
QuicConnection* connection,
const QuicSocketAddress& direct_peer_address)
: … { … }
void QuicConnection::ReversePathValidationResultDelegate::
OnPathValidationSuccess(std::unique_ptr<QuicPathValidationContext> context,
QuicTime start_time) { … }
void QuicConnection::ReversePathValidationResultDelegate::
OnPathValidationFailure(
std::unique_ptr<QuicPathValidationContext> context) { … }
QuicConnection::ScopedRetransmissionTimeoutIndicator::
ScopedRetransmissionTimeoutIndicator(QuicConnection* connection)
: … { … }
QuicConnection::ScopedRetransmissionTimeoutIndicator::
~ScopedRetransmissionTimeoutIndicator() { … }
void QuicConnection::RestoreToLastValidatedPath(
QuicSocketAddress original_direct_peer_address) { … }
std::unique_ptr<SendAlgorithmInterface>
QuicConnection::OnPeerIpAddressChanged() { … }
void QuicConnection::set_keep_alive_ping_timeout(
QuicTime::Delta keep_alive_ping_timeout) { … }
void QuicConnection::set_initial_retransmittable_on_wire_timeout(
QuicTime::Delta retransmittable_on_wire_timeout) { … }
bool QuicConnection::IsValidatingServerPreferredAddress() const { … }
void QuicConnection::OnServerPreferredAddressValidated(
QuicPathValidationContext& context, bool owns_writer) { … }
bool QuicConnection::set_ecn_codepoint(QuicEcnCodepoint ecn_codepoint) { … }
void QuicConnection::OnIdleDetectorAlarm() { … }
void QuicConnection::OnPingAlarm() { … }
void QuicConnection::OnNetworkBlackholeDetectorAlarm() { … }
std::unique_ptr<SerializedPacket>
QuicConnection::SerializeLargePacketNumberConnectionClosePacket(
QuicErrorCode error, const std::string& error_details) { … }
#undef ENDPOINT
}