mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-09 10:00:57 +03:00
Summary: This iterates the mvfst version to be semantically equivalent to draft-27, and leaves support for the old mvfst version. The client will not yet be moved to draft-27 by default. Reviewed By: lnicco Differential Revision: D20182452 fbshipit-source-id: 1e11ad7296a6cd8d15ca5ed359d9ed82af79bb17
142 lines
4.3 KiB
C++
142 lines
4.3 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
|
|
#include <quic/QuicConstants.h>
|
|
|
|
namespace quic {
|
|
|
|
folly::StringPiece congestionControlTypeToString(CongestionControlType type) {
|
|
switch (type) {
|
|
case CongestionControlType::Cubic:
|
|
return kCongestionControlCubicStr;
|
|
case CongestionControlType::BBR:
|
|
return kCongestionControlBbrStr;
|
|
case CongestionControlType::Copa:
|
|
return kCongestionControlCopaStr;
|
|
case CongestionControlType::NewReno:
|
|
return kCongestionControlNewRenoStr;
|
|
case CongestionControlType::None:
|
|
return kCongestionControlNoneStr;
|
|
default:
|
|
return "unknown";
|
|
}
|
|
}
|
|
|
|
folly::Optional<CongestionControlType> congestionControlStrToType(
|
|
folly::StringPiece str) {
|
|
if (str == kCongestionControlCubicStr) {
|
|
return quic::CongestionControlType::Cubic;
|
|
} else if (str == kCongestionControlBbrStr) {
|
|
return quic::CongestionControlType::BBR;
|
|
} else if (str == kCongestionControlCopaStr) {
|
|
return quic::CongestionControlType::Copa;
|
|
} else if (str == kCongestionControlNewRenoStr) {
|
|
return quic::CongestionControlType::NewReno;
|
|
} else if (str == kCongestionControlNoneStr) {
|
|
return quic::CongestionControlType::None;
|
|
}
|
|
return folly::none;
|
|
}
|
|
|
|
QuicBatchingMode getQuicBatchingMode(uint32_t val) {
|
|
switch (val) {
|
|
case static_cast<uint32_t>(QuicBatchingMode::BATCHING_MODE_NONE):
|
|
return QuicBatchingMode::BATCHING_MODE_NONE;
|
|
case static_cast<uint32_t>(QuicBatchingMode::BATCHING_MODE_GSO):
|
|
return QuicBatchingMode::BATCHING_MODE_GSO;
|
|
case static_cast<uint32_t>(QuicBatchingMode::BATCHING_MODE_SENDMMSG):
|
|
return QuicBatchingMode::BATCHING_MODE_SENDMMSG;
|
|
case static_cast<uint32_t>(QuicBatchingMode::BATCHING_MODE_SENDMMSG_GSO):
|
|
return QuicBatchingMode::BATCHING_MODE_SENDMMSG_GSO;
|
|
// no default
|
|
}
|
|
|
|
return QuicBatchingMode::BATCHING_MODE_NONE;
|
|
}
|
|
std::vector<QuicVersion> filterSupportedVersions(
|
|
const std::vector<QuicVersion>& versions) {
|
|
std::vector<QuicVersion> filteredVersions;
|
|
std::copy_if(
|
|
versions.begin(),
|
|
versions.end(),
|
|
std::back_inserter(filteredVersions),
|
|
[](auto version) {
|
|
return version == QuicVersion::MVFST ||
|
|
version == QuicVersion::MVFST_D24 ||
|
|
version == QuicVersion::QUIC_DRAFT ||
|
|
version == QuicVersion::MVFST_INVALID;
|
|
});
|
|
return filteredVersions;
|
|
}
|
|
|
|
folly::StringPiece writeDataReasonString(WriteDataReason reason) {
|
|
switch (reason) {
|
|
case WriteDataReason::PROBES:
|
|
return "Probes";
|
|
case WriteDataReason::ACK:
|
|
return "Ack";
|
|
case WriteDataReason::CRYPTO_STREAM:
|
|
return "Crypto";
|
|
case WriteDataReason::STREAM:
|
|
return "Stream";
|
|
case WriteDataReason::LOSS:
|
|
return "Loss";
|
|
case WriteDataReason::BLOCKED:
|
|
return "Blocked";
|
|
case WriteDataReason::STREAM_WINDOW_UPDATE:
|
|
return "StreamWindowUpdate";
|
|
case WriteDataReason::CONN_WINDOW_UPDATE:
|
|
return "ConnWindowUpdate";
|
|
case WriteDataReason::SIMPLE:
|
|
return "Simple";
|
|
case WriteDataReason::RESET:
|
|
return "Reset";
|
|
case WriteDataReason::PATHCHALLENGE:
|
|
return "PathChallenge";
|
|
case WriteDataReason::NO_WRITE:
|
|
return "NoWrite";
|
|
}
|
|
folly::assume_unreachable();
|
|
}
|
|
|
|
folly::StringPiece writeNoWriteReasonString(NoWriteReason reason) {
|
|
switch (reason) {
|
|
case NoWriteReason::WRITE_OK:
|
|
return "WriteOk";
|
|
case NoWriteReason::EMPTY_SCHEDULER:
|
|
return "EmptyScheduler";
|
|
case NoWriteReason::NO_FRAME:
|
|
return "NoFrame";
|
|
case NoWriteReason::NO_BODY:
|
|
return "NoBody";
|
|
case NoWriteReason::SOCKET_FAILURE:
|
|
return "SocketFailure";
|
|
}
|
|
folly::assume_unreachable();
|
|
}
|
|
|
|
folly::StringPiece readNoReadReasonString(NoReadReason reason) {
|
|
switch (reason) {
|
|
case NoReadReason::READ_OK:
|
|
return "ReadOK";
|
|
case NoReadReason::TRUNCATED:
|
|
return "Truncated";
|
|
case NoReadReason::EMPTY_DATA:
|
|
return "Empty data";
|
|
case NoReadReason::RETRIABLE_ERROR:
|
|
return "Retriable error";
|
|
case NoReadReason::NONRETRIABLE_ERROR:
|
|
return "Nonretriable error";
|
|
case NoReadReason::STALE_DATA:
|
|
return "Stale data";
|
|
}
|
|
folly::assume_unreachable();
|
|
}
|
|
|
|
} // namespace quic
|