diff --git a/quic/state/QuicStateFunctions.cpp b/quic/state/QuicStateFunctions.cpp index d3d640319..eee5c4de2 100644 --- a/quic/state/QuicStateFunctions.cpp +++ b/quic/state/QuicStateFunctions.cpp @@ -366,4 +366,38 @@ uint64_t maximumConnectionIdsToIssue(const QuicConnectionStateBase& conn) { return maximumIdsToIssue; } +uint64_t updateLargestReceivedPacketNum( + AckState& ackState, + PacketNum packetNum, + TimePoint receivedTime) { + PacketNum expectedNextPacket = 0; + if (ackState.largestRecvdPacketNum) { + expectedNextPacket = *ackState.largestRecvdPacketNum + 1; + } + ackState.largestRecvdPacketNum = std::max( + ackState.largestRecvdPacketNum.value_or(packetNum), packetNum); + ackState.acks.insert(packetNum); + if (ackState.largestRecvdPacketNum == packetNum) { + ackState.largestRecvdPacketTime = receivedTime; + } + static_assert(Clock::is_steady, "Needs steady clock"); + + ackState.lastRecvdPacketInfo.assign({packetNum, receivedTime}); + + if (packetNum >= expectedNextPacket) { + if (ackState.recvdPacketInfos.size() == kMaxReceivedPktsTimestampsStored) { + ackState.recvdPacketInfos.pop_front(); + } + ackState.recvdPacketInfos.emplace_back( + RecvdPacketInfo{packetNum, receivedTime}); + } + + if (expectedNextPacket) { + return (packetNum > expectedNextPacket) ? packetNum - expectedNextPacket + : expectedNextPacket - packetNum; + } else { + return 0; + } +} + } // namespace quic diff --git a/quic/state/QuicStateFunctions.h b/quic/state/QuicStateFunctions.h index d055aa522..a293c7568 100644 --- a/quic/state/QuicStateFunctions.h +++ b/quic/state/QuicStateFunctions.h @@ -59,40 +59,10 @@ void increaseNextPacketNum( * Update largestReceivedPacketNum in ackState with packetNum. Return the * distance from the next packet number we expect to receive. */ -template uint64_t updateLargestReceivedPacketNum( AckState& ackState, PacketNum packetNum, - TimePoint receivedTime) { - PacketNum expectedNextPacket = 0; - if (ackState.largestRecvdPacketNum) { - expectedNextPacket = *ackState.largestRecvdPacketNum + 1; - } - ackState.largestRecvdPacketNum = std::max( - ackState.largestRecvdPacketNum.value_or(packetNum), packetNum); - ackState.acks.insert(packetNum); - if (ackState.largestRecvdPacketNum == packetNum) { - ackState.largestRecvdPacketTime = receivedTime; - } - static_assert(ClockType::is_steady, "Needs steady clock"); - - ackState.lastRecvdPacketInfo.assign({packetNum, receivedTime}); - - if (packetNum >= expectedNextPacket) { - if (ackState.recvdPacketInfos.size() == kMaxReceivedPktsTimestampsStored) { - ackState.recvdPacketInfos.pop_front(); - } - ackState.recvdPacketInfos.emplace_back( - RecvdPacketInfo{packetNum, receivedTime}); - } - - if (expectedNextPacket) { - return (packetNum > expectedNextPacket) ? packetNum - expectedNextPacket - : expectedNextPacket - packetNum; - } else { - return 0; - } -} + TimePoint receivedTime); std::deque::iterator getNextOutstandingPacket( QuicConnectionStateBase& conn,