/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include #include #include namespace quic { void updateAckSendStateOnRecvPacket( QuicConnectionStateBase& conn, AckState& ackState, uint64_t distanceFromExpectedPacketNum, bool pktHasRetransmittableData, bool pktHasCryptoData, bool initPktNumSpace = false); void updateAckStateOnAckTimeout(QuicConnectionStateBase& conn); void updateAckSendStateOnSentPacketWithAcks( QuicConnectionStateBase& conn, AckState& ackState, PacketNum largestAckScheduled); void updateRtt( QuicConnectionStateBase& conn, const std::chrono::microseconds rttSample, const std::chrono::microseconds ackDelay); bool isConnectionPaced(const QuicConnectionStateBase& conn) noexcept; AckState& getAckState( QuicConnectionStateBase& conn, PacketNumberSpace pnSpace) noexcept; const AckState& getAckState( const QuicConnectionStateBase& conn, PacketNumberSpace pnSpace) noexcept; AckStateVersion currentAckStateVersion( const QuicConnectionStateBase& conn) noexcept; PacketNum getNextPacketNum( const QuicConnectionStateBase& conn, PacketNumberSpace pnSpace) noexcept; void increaseNextPacketNum( QuicConnectionStateBase& conn, PacketNumberSpace pnSpace) noexcept; /** * Update largestReceivedPacketNum in ackState with packetNum. Return the * distance from the next packet number we expect to receive. */ uint64_t updateLargestReceivedPacketNum( AckState& ackState, PacketNum packetNum, TimePoint receivedTime); std::deque::iterator getNextOutstandingPacket( QuicConnectionStateBase& conn, PacketNumberSpace packetNumberSpace, std::deque::iterator from); std::deque::iterator getFirstOutstandingPacket( QuicConnectionStateBase& conn, PacketNumberSpace packetNumberSpace); std::deque::reverse_iterator getLastOutstandingPacket( QuicConnectionStateBase& conn, PacketNumberSpace packetNumberSpace); std::deque::reverse_iterator getLastOutstandingPacketIncludingLost( QuicConnectionStateBase& conn, PacketNumberSpace packetNumberSpace); bool hasReceivedPackets(const QuicConnectionStateBase& conn) noexcept; bool hasReceivedPacketsAtLastCloseSent( const QuicConnectionStateBase& conn) noexcept; bool hasNotReceivedNewPacketsSinceLastCloseSent( const QuicConnectionStateBase& conn) noexcept; void updateLargestReceivedPacketsAtLastCloseSent( QuicConnectionStateBase& conn) noexcept; folly::Optional& getLossTime( QuicConnectionStateBase& conn, PacketNumberSpace pnSpace) noexcept; bool canSetLossTimerForAppData(const QuicConnectionStateBase& conn) noexcept; std::pair, PacketNumberSpace> earliestLossTimer( const QuicConnectionStateBase& conn) noexcept; std::pair, PacketNumberSpace> earliestTimeAndSpace( const EnumArray>& times, bool considerAppData) noexcept; uint64_t maximumConnectionIdsToIssue(const QuicConnectionStateBase& conn); } // namespace quic