mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-24 04:01:07 +03:00
Codec changes to support ACK_RECEIVE_TIMESTAMPS
Summary: Create a new ACK_RECEIVE_TIMESTAMPS frame, as outlined in https://www.ietf.org/archive/id/draft-smith-quic-receive-ts-00.html#name-ack_receive_timestamps-fram Reviewed By: mjoras Differential Revision: D37799050 fbshipit-source-id: 0157c7fa7c4e489bb310f7c9cd6c0c1877e4967f
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9ef63d6b46
commit
96abc8160d
@@ -10,7 +10,9 @@
|
||||
#include <quic/loss/QuicLossFunctions.h>
|
||||
|
||||
#include <folly/io/async/AsyncSocketException.h>
|
||||
#include <quic/QuicConstants.h>
|
||||
#include <quic/client/handshake/CachedServerTransportParameters.h>
|
||||
#include <quic/codec/Decode.h>
|
||||
#include <quic/common/TimeUtil.h>
|
||||
#include <quic/congestion_control/CongestionControllerFactory.h>
|
||||
#include <quic/congestion_control/QuicCubic.h>
|
||||
@@ -54,7 +56,9 @@ std::unique_ptr<QuicClientConnectionState> undoAllClientStateForRetry(
|
||||
newConn->readCodec = std::make_unique<QuicReadCodec>(QuicNodeType::Client);
|
||||
newConn->readCodec->setClientConnectionId(*conn->clientConnectionId);
|
||||
newConn->readCodec->setCodecParameters(CodecParameters(
|
||||
conn->peerAckDelayExponent, conn->originalVersion.value()));
|
||||
conn->peerAckDelayExponent,
|
||||
conn->originalVersion.value(),
|
||||
conn->transportSettings.maybeAckReceiveTimestampsConfigSentToPeer));
|
||||
newConn->earlyDataAppParamsValidator =
|
||||
std::move(conn->earlyDataAppParamsValidator);
|
||||
newConn->earlyDataAppParamsGetter = std::move(conn->earlyDataAppParamsGetter);
|
||||
@@ -134,6 +138,15 @@ void processServerInitialParams(
|
||||
auto minAckDelay = getIntegerParameter(
|
||||
TransportParameterId::min_ack_delay, serverParams.parameters);
|
||||
|
||||
auto isAckReceiveTimestampsEnabled = getIntegerParameter(
|
||||
TransportParameterId::ack_receive_timestamps_enabled,
|
||||
serverParams.parameters);
|
||||
auto maxReceiveTimestampsPerAck = getIntegerParameter(
|
||||
TransportParameterId::max_receive_timestamps_per_ack,
|
||||
serverParams.parameters);
|
||||
auto receiveTimestampsExponent = getIntegerParameter(
|
||||
TransportParameterId::receive_timestamps_exponent,
|
||||
serverParams.parameters);
|
||||
if (conn.version == QuicVersion::QUIC_DRAFT ||
|
||||
conn.version == QuicVersion::QUIC_V1 ||
|
||||
conn.version == QuicVersion::QUIC_V1_ALIAS) {
|
||||
@@ -224,7 +237,7 @@ void processServerInitialParams(
|
||||
: conn.transportSettings.advertisedInitialBidiRemoteStreamWindowSize;
|
||||
handleStreamWindowUpdate(s, windowSize, packetNum);
|
||||
});
|
||||
if (maxDatagramFrameSize.hasValue()) {
|
||||
if (maxDatagramFrameSize.has_value()) {
|
||||
if (maxDatagramFrameSize.value() > 0 &&
|
||||
maxDatagramFrameSize.value() <= kMaxDatagramPacketOverhead) {
|
||||
throw QuicTransportException(
|
||||
@@ -237,6 +250,20 @@ void processServerInitialParams(
|
||||
if (peerMaxStreamGroupsAdvertized) {
|
||||
conn.peerMaxStreamGroupsAdvertized = *peerMaxStreamGroupsAdvertized;
|
||||
}
|
||||
|
||||
if (isAckReceiveTimestampsEnabled.has_value() &&
|
||||
isAckReceiveTimestampsEnabled.value() == 1) {
|
||||
if (maxReceiveTimestampsPerAck.has_value() &&
|
||||
receiveTimestampsExponent.has_value()) {
|
||||
conn.maybePeerAckReceiveTimestampsConfig.assign(
|
||||
{std::min(
|
||||
static_cast<uint8_t>(maxReceiveTimestampsPerAck.value()),
|
||||
kMaxReceivedPktsTimestampsStored),
|
||||
std::max(
|
||||
static_cast<uint8_t>(receiveTimestampsExponent.value()),
|
||||
static_cast<uint8_t>(0))});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cacheServerInitialParams(
|
||||
|
||||
Reference in New Issue
Block a user