mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-08 09:42:06 +03:00
Deprecate old connection callback
Summary: Deprecate old connection callback Reviewed By: jbeshay, lnicco Differential Revision: D33695440 fbshipit-source-id: 043baa53b71453b5e2b9f60d890f1adcda7c65b5
This commit is contained in:
committed by
Facebook GitHub Bot
parent
0f9eedb347
commit
dc79176a56
@@ -139,15 +139,6 @@ class QuicSocket {
|
|||||||
onKnob(uint64_t /*knobSpace*/, uint64_t /*knobId*/, Buf /*knobBlob*/) {}
|
onKnob(uint64_t /*knobSpace*/, uint64_t /*knobId*/, Buf /*knobBlob*/) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback for connection level events. This callback must be set at all
|
|
||||||
* times.
|
|
||||||
* This callback will be phased out with the two separate callbacks above to
|
|
||||||
* replace it.
|
|
||||||
*/
|
|
||||||
class ConnectionCallback : public ConnectionSetupCallback,
|
|
||||||
public ConnectionCallbackNew {};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information about the transport, similar to what TCP has.
|
* Information about the transport, similar to what TCP has.
|
||||||
*/
|
*/
|
||||||
@@ -216,11 +207,6 @@ class QuicSocket {
|
|||||||
uint64_t numPacketsTxWithNewData{0};
|
uint64_t numPacketsTxWithNewData{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets connection callback, must be set BEFORE using the socket.
|
|
||||||
*/
|
|
||||||
virtual void setConnectionCallback(ConnectionCallback* callback) = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets connection setup callback. This callback must be set before using the
|
* Sets connection setup callback. This callback must be set before using the
|
||||||
* socket.
|
* socket.
|
||||||
|
@@ -28,8 +28,7 @@ namespace quic {
|
|||||||
|
|
||||||
QuicTransportBase::QuicTransportBase(
|
QuicTransportBase::QuicTransportBase(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
std::unique_ptr<folly::AsyncUDPSocket> socket)
|
||||||
bool useSplitConnectionCallbacks)
|
|
||||||
: evb_(evb),
|
: evb_(evb),
|
||||||
socket_(std::move(socket)),
|
socket_(std::move(socket)),
|
||||||
lossTimeout_(this),
|
lossTimeout_(this),
|
||||||
@@ -52,8 +51,7 @@ QuicTransportBase::QuicTransportBase(
|
|||||||
writeLooper_(new FunctionLooper(
|
writeLooper_(new FunctionLooper(
|
||||||
evb,
|
evb,
|
||||||
[this](bool fromTimer) { pacedWriteDataToSocket(fromTimer); },
|
[this](bool fromTimer) { pacedWriteDataToSocket(fromTimer); },
|
||||||
LooperType::WriteLooper)),
|
LooperType::WriteLooper)) {
|
||||||
useSplitConnectionCallbacks_(useSplitConnectionCallbacks) {
|
|
||||||
writeLooper_->setPacingFunction([this]() -> auto {
|
writeLooper_->setPacingFunction([this]() -> auto {
|
||||||
if (isConnectionPaced(*conn_)) {
|
if (isConnectionPaced(*conn_)) {
|
||||||
return conn_->pacer->getTimeUntilNextWrite();
|
return conn_->pacer->getTimeUntilNextWrite();
|
||||||
@@ -398,11 +396,7 @@ void QuicTransportBase::closeImpl(
|
|||||||
// connCallback_ could be null if start() was never invoked and the
|
// connCallback_ could be null if start() was never invoked and the
|
||||||
// transport was destroyed or if the app initiated close.
|
// transport was destroyed or if the app initiated close.
|
||||||
if (connCallback_) {
|
if (connCallback_) {
|
||||||
if (!useSplitConnectionCallbacks_) {
|
processConnectionEndErrorSplitCallbacks(cancelCode);
|
||||||
processConnectionEndError(cancelCode);
|
|
||||||
} else {
|
|
||||||
processConnectionEndErrorSplitCallbacks(cancelCode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// can't invoke connection callbacks any more.
|
// can't invoke connection callbacks any more.
|
||||||
@@ -2706,13 +2700,6 @@ void QuicTransportBase::setSupportedVersions(
|
|||||||
conn_->supportedVersions = versions;
|
conn_->supportedVersions = versions;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuicTransportBase::setConnectionCallback(ConnectionCallback* callback) {
|
|
||||||
if (!connCallback_) {
|
|
||||||
connCallback_ = CallbackDispatcher::make();
|
|
||||||
}
|
|
||||||
connCallback_->setConnectionCallback(CHECK_NOTNULL(callback));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuicTransportBase::setConnectionSetupCallback(
|
void QuicTransportBase::setConnectionSetupCallback(
|
||||||
ConnectionSetupCallback* callback) {
|
ConnectionSetupCallback* callback) {
|
||||||
if (!connCallback_) {
|
if (!connCallback_) {
|
||||||
|
@@ -38,8 +38,7 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
public:
|
public:
|
||||||
QuicTransportBase(
|
QuicTransportBase(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
std::unique_ptr<folly::AsyncUDPSocket> socket);
|
||||||
bool useSplitConnectionCallbacks = false);
|
|
||||||
|
|
||||||
~QuicTransportBase() override;
|
~QuicTransportBase() override;
|
||||||
|
|
||||||
@@ -225,8 +224,6 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
|
|
||||||
virtual void setSupportedVersions(const std::vector<QuicVersion>& versions);
|
virtual void setSupportedVersions(const std::vector<QuicVersion>& versions);
|
||||||
|
|
||||||
void setConnectionCallback(ConnectionCallback* callback) final;
|
|
||||||
|
|
||||||
void setConnectionSetupCallback(ConnectionSetupCallback* callback) final;
|
void setConnectionSetupCallback(ConnectionSetupCallback* callback) final;
|
||||||
|
|
||||||
void setConnectionCallbackNew(ConnectionCallbackNew* callback) final;
|
void setConnectionCallbackNew(ConnectionCallbackNew* callback) final;
|
||||||
@@ -862,7 +859,8 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
const std::pair<QuicErrorCode, folly::StringPiece>& cancelCode);
|
const std::pair<QuicErrorCode, folly::StringPiece>& cancelCode);
|
||||||
|
|
||||||
class CallbackDispatcher : public folly::DelayedDestruction,
|
class CallbackDispatcher : public folly::DelayedDestruction,
|
||||||
public ConnectionCallback {
|
public ConnectionSetupCallback,
|
||||||
|
public ConnectionCallbackNew {
|
||||||
public:
|
public:
|
||||||
using UniquePtr = std::unique_ptr<CallbackDispatcher, Destructor>;
|
using UniquePtr = std::unique_ptr<CallbackDispatcher, Destructor>;
|
||||||
|
|
||||||
@@ -940,10 +938,6 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Callback setters.
|
// Callback setters.
|
||||||
void setConnectionCallback(ConnectionCallback* callback) {
|
|
||||||
connSetupCallback_ = callback;
|
|
||||||
connStreamsCallback_ = callback;
|
|
||||||
}
|
|
||||||
void setConnectionSetupCallback(ConnectionSetupCallback* callback) {
|
void setConnectionSetupCallback(ConnectionSetupCallback* callback) {
|
||||||
connSetupCallback_ = callback;
|
connSetupCallback_ = callback;
|
||||||
}
|
}
|
||||||
@@ -1028,11 +1022,6 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
|
|
||||||
uint64_t qlogRefcnt_{0};
|
uint64_t qlogRefcnt_{0};
|
||||||
|
|
||||||
// Temp flag controlling which connection callbacks to use - old single
|
|
||||||
// callback object or two new split callback objects. Will be removed out once
|
|
||||||
// mvfst is switched to the new split callbacks eventually.
|
|
||||||
bool useSplitConnectionCallbacks_{false};
|
|
||||||
|
|
||||||
// Priority level threshold for background streams
|
// Priority level threshold for background streams
|
||||||
// If all streams have equal or lower priority to the threshold
|
// If all streams have equal or lower priority to the threshold
|
||||||
// (value >= threshold), the connection is considered to be in backround mode.
|
// (value >= threshold), the connection is considered to be in backround mode.
|
||||||
|
@@ -112,7 +112,6 @@ class MockQuicSocket : public QuicSocket {
|
|||||||
StreamId,
|
StreamId,
|
||||||
ReadCallback*,
|
ReadCallback*,
|
||||||
folly::Optional<ApplicationErrorCode> err));
|
folly::Optional<ApplicationErrorCode> err));
|
||||||
MOCK_METHOD1(setConnectionCallback, void(ConnectionCallback*));
|
|
||||||
MOCK_METHOD1(setConnectionSetupCallback, void(ConnectionSetupCallback*));
|
MOCK_METHOD1(setConnectionSetupCallback, void(ConnectionSetupCallback*));
|
||||||
MOCK_METHOD1(setConnectionCallbackNew, void(ConnectionCallbackNew*));
|
MOCK_METHOD1(setConnectionCallbackNew, void(ConnectionCallbackNew*));
|
||||||
void setEarlyDataAppParamsFunctions(
|
void setEarlyDataAppParamsFunctions(
|
||||||
|
@@ -553,9 +553,8 @@ TEST_F(QuicTransportImplTest, AckTimeoutExpiredWillResetTimeoutFlag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicTransportImplTest, IdleTimeoutExpiredDestroysTransport) {
|
TEST_F(QuicTransportImplTest, IdleTimeoutExpiredDestroysTransport) {
|
||||||
EXPECT_CALL(connCallback, onConnectionEnd()).WillOnce(Invoke([&]() {
|
EXPECT_CALL(connSetupCallback, onConnectionSetupError(_))
|
||||||
transport = nullptr;
|
.WillOnce(Invoke([&](auto) { transport = nullptr; }));
|
||||||
}));
|
|
||||||
transport->invokeIdleTimeout();
|
transport->invokeIdleTimeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1171,8 +1170,8 @@ TEST_F(QuicTransportImplTest, onNewBidirectionalStreamSetReadCallback) {
|
|||||||
|
|
||||||
TEST_F(QuicTransportImplTest, OnInvalidServerStream) {
|
TEST_F(QuicTransportImplTest, OnInvalidServerStream) {
|
||||||
EXPECT_CALL(
|
EXPECT_CALL(
|
||||||
connCallback,
|
connSetupCallback,
|
||||||
onConnectionError(IsError(TransportErrorCode::STREAM_STATE_ERROR)));
|
onConnectionSetupError(IsError(TransportErrorCode::STREAM_STATE_ERROR)));
|
||||||
auto readData = folly::IOBuf::copyBuffer("actual stream data");
|
auto readData = folly::IOBuf::copyBuffer("actual stream data");
|
||||||
StreamId stream1 = 29;
|
StreamId stream1 = 29;
|
||||||
transport->addDataToStream(stream1, StreamBuffer(readData->clone(), 0, true));
|
transport->addDataToStream(stream1, StreamBuffer(readData->clone(), 0, true));
|
||||||
@@ -1412,8 +1411,8 @@ TEST_F(QuicTransportImplTest, ConnectionErrorUnhandledException) {
|
|||||||
transport->transportConn->oneRttWriteCipher = test::createNoOpAead();
|
transport->transportConn->oneRttWriteCipher = test::createNoOpAead();
|
||||||
auto stream = transport->createBidirectionalStream().value();
|
auto stream = transport->createBidirectionalStream().value();
|
||||||
EXPECT_CALL(
|
EXPECT_CALL(
|
||||||
connCallback,
|
connSetupCallback,
|
||||||
onConnectionError(std::make_pair(
|
onConnectionSetupError(std::make_pair(
|
||||||
QuicErrorCode(TransportErrorCode::INTERNAL_ERROR),
|
QuicErrorCode(TransportErrorCode::INTERNAL_ERROR),
|
||||||
std::string("Well there's your problem"))));
|
std::string("Well there's your problem"))));
|
||||||
EXPECT_CALL(*socketPtr, write(_, _)).WillOnce(Invoke([](auto&, auto&) {
|
EXPECT_CALL(*socketPtr, write(_, _)).WillOnce(Invoke([](auto&, auto&) {
|
||||||
@@ -2844,9 +2843,8 @@ TEST_F(QuicTransportImplTest, ExceptionInWriteLooperDoesNotCrash) {
|
|||||||
transport->addDataToStream(
|
transport->addDataToStream(
|
||||||
stream, StreamBuffer(IOBuf::copyBuffer("hello"), 0, false));
|
stream, StreamBuffer(IOBuf::copyBuffer("hello"), 0, false));
|
||||||
EXPECT_CALL(*socketPtr, write(_, _)).WillOnce(SetErrnoAndReturn(EBADF, -1));
|
EXPECT_CALL(*socketPtr, write(_, _)).WillOnce(SetErrnoAndReturn(EBADF, -1));
|
||||||
EXPECT_CALL(connCallback, onConnectionError(_)).WillOnce(Invoke([&](auto) {
|
EXPECT_CALL(connSetupCallback, onConnectionSetupError(_))
|
||||||
transport.reset();
|
.WillOnce(Invoke([&](auto) { transport.reset(); }));
|
||||||
}));
|
|
||||||
transport->writeLooper()->runLoopCallback();
|
transport->writeLooper()->runLoopCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@ namespace quic {
|
|||||||
QuicClientAsyncTransport::QuicClientAsyncTransport(
|
QuicClientAsyncTransport::QuicClientAsyncTransport(
|
||||||
const std::shared_ptr<quic::QuicClientTransport>& clientSock) {
|
const std::shared_ptr<quic::QuicClientTransport>& clientSock) {
|
||||||
setSocket(clientSock);
|
setSocket(clientSock);
|
||||||
clientSock->start(this);
|
clientSock->start(this, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuicClientAsyncTransport::onNewBidirectionalStream(
|
void QuicClientAsyncTransport::onNewBidirectionalStream(
|
||||||
|
@@ -17,7 +17,8 @@ namespace quic {
|
|||||||
* for experiments with QUIC in code using folly::AsyncSockets.
|
* for experiments with QUIC in code using folly::AsyncSockets.
|
||||||
*/
|
*/
|
||||||
class QuicClientAsyncTransport : public QuicStreamAsyncTransport,
|
class QuicClientAsyncTransport : public QuicStreamAsyncTransport,
|
||||||
public QuicSocket::ConnectionCallback {
|
public QuicSocket::ConnectionSetupCallback,
|
||||||
|
public QuicSocket::ConnectionCallbackNew {
|
||||||
public:
|
public:
|
||||||
using UniquePtr = std::unique_ptr<
|
using UniquePtr = std::unique_ptr<
|
||||||
QuicClientAsyncTransport,
|
QuicClientAsyncTransport,
|
||||||
|
@@ -38,14 +38,12 @@ QuicClientTransport::QuicClientTransport(
|
|||||||
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
||||||
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
||||||
size_t connectionIdSize,
|
size_t connectionIdSize,
|
||||||
PacketNum startingPacketNum,
|
PacketNum startingPacketNum)
|
||||||
bool useSplitConnectionCallbacks)
|
|
||||||
: QuicClientTransport(
|
: QuicClientTransport(
|
||||||
evb,
|
evb,
|
||||||
std::move(socket),
|
std::move(socket),
|
||||||
std::move(handshakeFactory),
|
std::move(handshakeFactory),
|
||||||
connectionIdSize,
|
connectionIdSize) {
|
||||||
useSplitConnectionCallbacks) {
|
|
||||||
conn_->ackStates = AckStates(startingPacketNum);
|
conn_->ackStates = AckStates(startingPacketNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,9 +51,8 @@ QuicClientTransport::QuicClientTransport(
|
|||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
||||||
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
||||||
size_t connectionIdSize,
|
size_t connectionIdSize)
|
||||||
bool useSplitConnectionCallbacks)
|
: QuicTransportBase(evb, std::move(socket)),
|
||||||
: QuicTransportBase(evb, std::move(socket), useSplitConnectionCallbacks),
|
|
||||||
happyEyeballsConnAttemptDelayTimeout_(this) {
|
happyEyeballsConnAttemptDelayTimeout_(this) {
|
||||||
DCHECK(handshakeFactory);
|
DCHECK(handshakeFactory);
|
||||||
auto tempConn =
|
auto tempConn =
|
||||||
@@ -1494,20 +1491,9 @@ void QuicClientTransport::
|
|||||||
runOnEvbAsync([&](auto) { markZeroRttPacketsLost(*conn_, markPacketLoss); });
|
runOnEvbAsync([&](auto) { markZeroRttPacketsLost(*conn_, markPacketLoss); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuicClientTransport::start(ConnectionCallback* cb) {
|
|
||||||
startBase(cb, nullptr, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuicClientTransport::start(
|
void QuicClientTransport::start(
|
||||||
ConnectionSetupCallback* connSetupCb,
|
ConnectionSetupCallback* connSetupCb,
|
||||||
ConnectionCallbackNew* connCb) {
|
ConnectionCallbackNew* connCb) {
|
||||||
startBase(nullptr, connSetupCb, connCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuicClientTransport::startBase(
|
|
||||||
ConnectionCallback* cb,
|
|
||||||
ConnectionSetupCallback* connSetupCb,
|
|
||||||
ConnectionCallbackNew* connCb) {
|
|
||||||
if (happyEyeballsEnabled_) {
|
if (happyEyeballsEnabled_) {
|
||||||
// TODO Supply v4 delay amount from somewhere when we want to tune this
|
// TODO Supply v4 delay amount from somewhere when we want to tune this
|
||||||
startHappyEyeballs(
|
startHappyEyeballs(
|
||||||
@@ -1528,12 +1514,10 @@ void QuicClientTransport::startBase(
|
|||||||
if (conn_->qLogger) {
|
if (conn_->qLogger) {
|
||||||
conn_->qLogger->addTransportStateUpdate(kStart);
|
conn_->qLogger->addTransportStateUpdate(kStart);
|
||||||
}
|
}
|
||||||
if (cb) {
|
|
||||||
setConnectionCallback(cb);
|
setConnectionSetupCallback(connSetupCb);
|
||||||
} else {
|
setConnectionCallbackNew(connCb);
|
||||||
setConnectionSetupCallback(connSetupCb);
|
|
||||||
setConnectionCallbackNew(connCb);
|
|
||||||
}
|
|
||||||
clientConn_->pendingOneRttData.reserve(
|
clientConn_->pendingOneRttData.reserve(
|
||||||
conn_->transportSettings.maxPacketsToBuffer);
|
conn_->transportSettings.maxPacketsToBuffer);
|
||||||
try {
|
try {
|
||||||
|
@@ -31,8 +31,7 @@ class QuicClientTransport
|
|||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
||||||
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
||||||
size_t connectionIdSize = 0,
|
size_t connectionIdSize = 0);
|
||||||
bool useSplitConnectionCallbacks = false);
|
|
||||||
|
|
||||||
// Testing only API:
|
// Testing only API:
|
||||||
QuicClientTransport(
|
QuicClientTransport(
|
||||||
@@ -40,8 +39,7 @@ class QuicClientTransport
|
|||||||
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
std::unique_ptr<folly::AsyncUDPSocket> socket,
|
||||||
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
||||||
size_t connectionIdSize,
|
size_t connectionIdSize,
|
||||||
PacketNum startingPacketNum,
|
PacketNum startingPacketNum);
|
||||||
bool useSplitConnectionCallbacks = false);
|
|
||||||
|
|
||||||
~QuicClientTransport() override;
|
~QuicClientTransport() override;
|
||||||
|
|
||||||
@@ -60,14 +58,9 @@ class QuicClientTransport
|
|||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
std::shared_ptr<ClientHandshakeFactory> handshakeFactory,
|
||||||
size_t connectionIdSize = 0,
|
size_t connectionIdSize = 0) {
|
||||||
bool useSplitConnectionCallbacks = false) {
|
|
||||||
auto client = std::make_shared<TransportType>(
|
auto client = std::make_shared<TransportType>(
|
||||||
evb,
|
evb, std::move(sock), std::move(handshakeFactory), connectionIdSize);
|
||||||
std::move(sock),
|
|
||||||
std::move(handshakeFactory),
|
|
||||||
connectionIdSize,
|
|
||||||
useSplitConnectionCallbacks);
|
|
||||||
client->setSelfOwning();
|
client->setSelfOwning();
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
@@ -95,11 +88,6 @@ class QuicClientTransport
|
|||||||
/**
|
/**
|
||||||
* Starts the connection.
|
* Starts the connection.
|
||||||
*/
|
*/
|
||||||
virtual void start(ConnectionCallback* cb);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts the connection with split callbacks.
|
|
||||||
*/
|
|
||||||
virtual void start(
|
virtual void start(
|
||||||
ConnectionSetupCallback* connSetupCb,
|
ConnectionSetupCallback* connSetupCb,
|
||||||
ConnectionCallbackNew* connCb);
|
ConnectionCallbackNew* connCb);
|
||||||
@@ -239,11 +227,6 @@ class QuicClientTransport
|
|||||||
*/
|
*/
|
||||||
void maybeSendTransportKnobs();
|
void maybeSendTransportKnobs();
|
||||||
|
|
||||||
void startBase(
|
|
||||||
ConnectionCallback* cb,
|
|
||||||
ConnectionSetupCallback* connSetupCb,
|
|
||||||
ConnectionCallbackNew* connStreamsCb);
|
|
||||||
|
|
||||||
bool replaySafeNotified_{false};
|
bool replaySafeNotified_{false};
|
||||||
// Set it QuicClientTransport is in a self owning mode. This will be cleaned
|
// Set it QuicClientTransport is in a self owning mode. This will be cleaned
|
||||||
// up when the caller invokes a terminal call to the transport.
|
// up when the caller invokes a terminal call to the transport.
|
||||||
|
@@ -64,8 +64,7 @@ void QuicConnector::connect(
|
|||||||
.setCertificateVerifier(std::move(verifier))
|
.setCertificateVerifier(std::move(verifier))
|
||||||
.setPskCache(std::move(quicPskCache))
|
.setPskCache(std::move(quicPskCache))
|
||||||
.build(),
|
.build(),
|
||||||
0, /* connectionIdSize */
|
0 /* connectionIdSize */);
|
||||||
true /* useSplitConnectionCallbacks */);
|
|
||||||
quicClient_->setHostname(sni.value_or(connectAddr.getAddressStr()));
|
quicClient_->setHostname(sni.value_or(connectAddr.getAddressStr()));
|
||||||
quicClient_->addNewPeerAddress(connectAddr);
|
quicClient_->addNewPeerAddress(connectAddr);
|
||||||
if (localAddr.hasValue()) {
|
if (localAddr.hasValue()) {
|
||||||
|
@@ -385,7 +385,7 @@ TEST_P(QuicClientTransportIntegrationTest, TLSAlert) {
|
|||||||
|
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Client);
|
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Client);
|
||||||
client->getNonConstConn().qLogger = qLogger;
|
client->getNonConstConn().qLogger = qLogger;
|
||||||
EXPECT_CALL(clientConnCallback, onConnectionError(_))
|
EXPECT_CALL(clientConnSetupCallback, onConnectionSetupError(_))
|
||||||
.WillOnce(Invoke([&](const auto& errorCode) {
|
.WillOnce(Invoke([&](const auto& errorCode) {
|
||||||
LOG(ERROR) << "error: " << errorCode.second;
|
LOG(ERROR) << "error: " << errorCode.second;
|
||||||
const TransportErrorCode* transportError =
|
const TransportErrorCode* transportError =
|
||||||
@@ -411,7 +411,7 @@ TEST_P(QuicClientTransportIntegrationTest, BadServerTest) {
|
|||||||
auto tp = client->getTransportSettings();
|
auto tp = client->getTransportSettings();
|
||||||
tp.maxNumPTOs = 4;
|
tp.maxNumPTOs = 4;
|
||||||
client->setTransportSettings(tp);
|
client->setTransportSettings(tp);
|
||||||
EXPECT_CALL(clientConnCallback, onConnectionError(_))
|
EXPECT_CALL(clientConnSetupCallback, onConnectionSetupError(_))
|
||||||
.WillOnce(Invoke([&](const auto& errorCode) {
|
.WillOnce(Invoke([&](const auto& errorCode) {
|
||||||
LOG(ERROR) << "error: " << errorCode.second;
|
LOG(ERROR) << "error: " << errorCode.second;
|
||||||
const LocalErrorCode* localError = errorCode.first.asLocalErrorCode();
|
const LocalErrorCode* localError = errorCode.first.asLocalErrorCode();
|
||||||
@@ -991,7 +991,7 @@ TEST_F(QuicClientTransportTest, CloseSocketOnWriteError) {
|
|||||||
client->start(&clientConnSetupCallback, &clientConnCallback);
|
client->start(&clientConnSetupCallback, &clientConnCallback);
|
||||||
|
|
||||||
EXPECT_FALSE(client->isClosed());
|
EXPECT_FALSE(client->isClosed());
|
||||||
EXPECT_CALL(clientConnCallback, onConnectionError(_));
|
EXPECT_CALL(clientConnSetupCallback, onConnectionSetupError(_));
|
||||||
eventbase_->loopOnce();
|
eventbase_->loopOnce();
|
||||||
EXPECT_TRUE(client->isClosed());
|
EXPECT_TRUE(client->isClosed());
|
||||||
}
|
}
|
||||||
@@ -1053,7 +1053,8 @@ TEST_F(QuicClientTransportTest, onNetworkSwitchReplaceNoHandshake) {
|
|||||||
|
|
||||||
TEST_F(QuicClientTransportTest, SocketClosedDuringOnTransportReady) {
|
TEST_F(QuicClientTransportTest, SocketClosedDuringOnTransportReady) {
|
||||||
class ConnectionCallbackThatWritesOnTransportReady
|
class ConnectionCallbackThatWritesOnTransportReady
|
||||||
: public QuicSocket::ConnectionCallback {
|
: public QuicSocket::ConnectionSetupCallback,
|
||||||
|
public QuicSocket::ConnectionCallbackNew {
|
||||||
public:
|
public:
|
||||||
explicit ConnectionCallbackThatWritesOnTransportReady(
|
explicit ConnectionCallbackThatWritesOnTransportReady(
|
||||||
std::shared_ptr<QuicSocket> socket)
|
std::shared_ptr<QuicSocket> socket)
|
||||||
@@ -1105,7 +1106,7 @@ TEST_F(QuicClientTransportTest, SocketClosedDuringOnTransportReady) {
|
|||||||
|
|
||||||
client->addNewPeerAddress(serverAddr);
|
client->addNewPeerAddress(serverAddr);
|
||||||
setupCryptoLayer();
|
setupCryptoLayer();
|
||||||
client->start(&callback);
|
client->start(&callback, &callback);
|
||||||
setConnectionIds();
|
setConnectionIds();
|
||||||
EXPECT_THROW(recvServerHello(), std::runtime_error);
|
EXPECT_THROW(recvServerHello(), std::runtime_error);
|
||||||
}
|
}
|
||||||
@@ -1113,7 +1114,7 @@ TEST_F(QuicClientTransportTest, SocketClosedDuringOnTransportReady) {
|
|||||||
TEST_F(QuicClientTransportTest, NetworkUnreachableIsFatalToConn) {
|
TEST_F(QuicClientTransportTest, NetworkUnreachableIsFatalToConn) {
|
||||||
client->addNewPeerAddress(serverAddr);
|
client->addNewPeerAddress(serverAddr);
|
||||||
setupCryptoLayer();
|
setupCryptoLayer();
|
||||||
EXPECT_CALL(clientConnCallback, onConnectionError(_));
|
EXPECT_CALL(clientConnSetupCallback, onConnectionSetupError(_));
|
||||||
EXPECT_CALL(*sock, write(_, _)).WillOnce(SetErrnoAndReturn(ENETUNREACH, -1));
|
EXPECT_CALL(*sock, write(_, _)).WillOnce(SetErrnoAndReturn(ENETUNREACH, -1));
|
||||||
client->start(&clientConnSetupCallback, &clientConnCallback);
|
client->start(&clientConnSetupCallback, &clientConnCallback);
|
||||||
loopForWrites();
|
loopForWrites();
|
||||||
@@ -1915,7 +1916,7 @@ class QuicClientTransportHappyEyeballsTest
|
|||||||
.WillOnce(SetErrnoAndReturn(EBADF, -1));
|
.WillOnce(SetErrnoAndReturn(EBADF, -1));
|
||||||
EXPECT_CALL(*secondSock, write(secondAddress, _))
|
EXPECT_CALL(*secondSock, write(secondAddress, _))
|
||||||
.WillOnce(SetErrnoAndReturn(EBADF, -1));
|
.WillOnce(SetErrnoAndReturn(EBADF, -1));
|
||||||
EXPECT_CALL(clientConnCallback, onConnectionError(_));
|
EXPECT_CALL(clientConnSetupCallback, onConnectionSetupError(_));
|
||||||
client->lossTimeout().cancelTimeout();
|
client->lossTimeout().cancelTimeout();
|
||||||
client->lossTimeout().timeoutExpired();
|
client->lossTimeout().timeoutExpired();
|
||||||
|
|
||||||
|
@@ -26,7 +26,8 @@
|
|||||||
|
|
||||||
namespace quic {
|
namespace quic {
|
||||||
namespace samples {
|
namespace samples {
|
||||||
class EchoClient : public quic::QuicSocket::ConnectionCallback,
|
class EchoClient : public quic::QuicSocket::ConnectionSetupCallback,
|
||||||
|
public quic::QuicSocket::ConnectionCallbackNew,
|
||||||
public quic::QuicSocket::ReadCallback,
|
public quic::QuicSocket::ReadCallback,
|
||||||
public quic::QuicSocket::WriteCallback {
|
public quic::QuicSocket::WriteCallback {
|
||||||
public:
|
public:
|
||||||
@@ -134,7 +135,7 @@ class EchoClient : public quic::QuicSocket::ConnectionCallback,
|
|||||||
std::make_shared<LogQuicStats>("client"));
|
std::make_shared<LogQuicStats>("client"));
|
||||||
|
|
||||||
LOG(INFO) << "EchoClient connecting to " << addr.describe();
|
LOG(INFO) << "EchoClient connecting to " << addr.describe();
|
||||||
quicClient_->start(this);
|
quicClient_->start(this, this);
|
||||||
});
|
});
|
||||||
|
|
||||||
startDone_.wait();
|
startDone_.wait();
|
||||||
|
@@ -20,22 +20,6 @@
|
|||||||
|
|
||||||
namespace quic {
|
namespace quic {
|
||||||
|
|
||||||
QuicServerTransport::QuicServerTransport(
|
|
||||||
folly::EventBase* evb,
|
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
|
||||||
ConnectionCallback& cb,
|
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx,
|
|
||||||
std::unique_ptr<CryptoFactory> cryptoFactory,
|
|
||||||
PacketNum startingPacketNum)
|
|
||||||
: QuicServerTransport(
|
|
||||||
evb,
|
|
||||||
std::move(sock),
|
|
||||||
cb,
|
|
||||||
std::move(ctx),
|
|
||||||
std::move(cryptoFactory)) {
|
|
||||||
conn_->ackStates = AckStates(startingPacketNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
QuicServerTransport::QuicServerTransport(
|
QuicServerTransport::QuicServerTransport(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
@@ -54,31 +38,6 @@ QuicServerTransport::QuicServerTransport(
|
|||||||
conn_->ackStates = AckStates(startingPacketNum);
|
conn_->ackStates = AckStates(startingPacketNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
QuicServerTransport::QuicServerTransport(
|
|
||||||
folly::EventBase* evb,
|
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
|
||||||
ConnectionCallback& cb,
|
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx,
|
|
||||||
std::unique_ptr<CryptoFactory> cryptoFactory)
|
|
||||||
: QuicTransportBase(
|
|
||||||
evb,
|
|
||||||
std::move(sock),
|
|
||||||
false /* useSplitConnectionCallbacks */),
|
|
||||||
ctx_(std::move(ctx)) {
|
|
||||||
auto tempConn = std::make_unique<QuicServerConnectionState>(
|
|
||||||
FizzServerQuicHandshakeContext::Builder()
|
|
||||||
.setFizzServerContext(ctx_)
|
|
||||||
.setCryptoFactory(std::move(cryptoFactory))
|
|
||||||
.build());
|
|
||||||
tempConn->serverAddr = socket_->address();
|
|
||||||
serverConn_ = tempConn.get();
|
|
||||||
conn_.reset(tempConn.release());
|
|
||||||
conn_->observers = observers_;
|
|
||||||
|
|
||||||
setConnectionCallback(&cb);
|
|
||||||
registerAllTransportKnobParamHandlers();
|
|
||||||
}
|
|
||||||
|
|
||||||
QuicServerTransport::QuicServerTransport(
|
QuicServerTransport::QuicServerTransport(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
@@ -86,11 +45,7 @@ QuicServerTransport::QuicServerTransport(
|
|||||||
ConnectionCallbackNew* connStreamsCb,
|
ConnectionCallbackNew* connStreamsCb,
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx,
|
std::shared_ptr<const fizz::server::FizzServerContext> ctx,
|
||||||
std::unique_ptr<CryptoFactory> cryptoFactory)
|
std::unique_ptr<CryptoFactory> cryptoFactory)
|
||||||
: QuicTransportBase(
|
: QuicTransportBase(evb, std::move(sock)), ctx_(std::move(ctx)) {
|
||||||
evb,
|
|
||||||
std::move(sock),
|
|
||||||
true /* useSplitConnectionCallbacks */),
|
|
||||||
ctx_(std::move(ctx)) {
|
|
||||||
auto tempConn = std::make_unique<QuicServerConnectionState>(
|
auto tempConn = std::make_unique<QuicServerConnectionState>(
|
||||||
FizzServerQuicHandshakeContext::Builder()
|
FizzServerQuicHandshakeContext::Builder()
|
||||||
.setFizzServerContext(ctx_)
|
.setFizzServerContext(ctx_)
|
||||||
@@ -118,14 +73,6 @@ QuicServerTransport::~QuicServerTransport() {
|
|||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
QuicServerTransport::Ptr QuicServerTransport::make(
|
|
||||||
folly::EventBase* evb,
|
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
|
||||||
ConnectionCallback& cb,
|
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx) {
|
|
||||||
return std::make_shared<QuicServerTransport>(evb, std::move(sock), cb, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
QuicServerTransport::Ptr QuicServerTransport::make(
|
QuicServerTransport::Ptr QuicServerTransport::make(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
|
@@ -58,12 +58,6 @@ class QuicServerTransport
|
|||||||
virtual void onHandshakeUnfinished() noexcept = 0;
|
virtual void onHandshakeUnfinished() noexcept = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
static QuicServerTransport::Ptr make(
|
|
||||||
folly::EventBase* evb,
|
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
|
||||||
ConnectionCallback& cb,
|
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx);
|
|
||||||
|
|
||||||
static QuicServerTransport::Ptr make(
|
static QuicServerTransport::Ptr make(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
@@ -71,13 +65,6 @@ class QuicServerTransport
|
|||||||
ConnectionCallbackNew* connStreamsCb,
|
ConnectionCallbackNew* connStreamsCb,
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx);
|
std::shared_ptr<const fizz::server::FizzServerContext> ctx);
|
||||||
|
|
||||||
QuicServerTransport(
|
|
||||||
folly::EventBase* evb,
|
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
|
||||||
ConnectionCallback& cb,
|
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx,
|
|
||||||
std::unique_ptr<CryptoFactory> cryptoFactory = nullptr);
|
|
||||||
|
|
||||||
QuicServerTransport(
|
QuicServerTransport(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
@@ -87,14 +74,6 @@ class QuicServerTransport
|
|||||||
std::unique_ptr<CryptoFactory> cryptoFactory = nullptr);
|
std::unique_ptr<CryptoFactory> cryptoFactory = nullptr);
|
||||||
|
|
||||||
// Testing only API:
|
// Testing only API:
|
||||||
QuicServerTransport(
|
|
||||||
folly::EventBase* evb,
|
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
|
||||||
ConnectionCallback& cb,
|
|
||||||
std::shared_ptr<const fizz::server::FizzServerContext> ctx,
|
|
||||||
std::unique_ptr<CryptoFactory> cryptoFactory,
|
|
||||||
PacketNum startingPacketNum);
|
|
||||||
|
|
||||||
QuicServerTransport(
|
QuicServerTransport(
|
||||||
folly::EventBase* evb,
|
folly::EventBase* evb,
|
||||||
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
std::unique_ptr<folly::AsyncUDPSocket> sock,
|
||||||
|
@@ -30,8 +30,8 @@ quic::QuicServerTransport::Ptr QuicAsyncTransportAcceptor::make(
|
|||||||
CHECK_EQ(evb, evb_);
|
CHECK_EQ(evb, evb_);
|
||||||
quic::QuicServerAsyncTransport::UniquePtr asyncWrapper(
|
quic::QuicServerAsyncTransport::UniquePtr asyncWrapper(
|
||||||
new quic::QuicServerAsyncTransport());
|
new quic::QuicServerAsyncTransport());
|
||||||
auto transport =
|
auto transport = quic::QuicServerTransport::make(
|
||||||
quic::QuicServerTransport::make(evb, std::move(sock), *asyncWrapper, ctx);
|
evb, std::move(sock), asyncWrapper.get(), asyncWrapper.get(), ctx);
|
||||||
asyncWrapper->setServerSocket(transport);
|
asyncWrapper->setServerSocket(transport);
|
||||||
wangle::ManagedConnection* managedConnection =
|
wangle::ManagedConnection* managedConnection =
|
||||||
connectionFactory_(std::move(asyncWrapper));
|
connectionFactory_(std::move(asyncWrapper));
|
||||||
|
@@ -12,7 +12,8 @@
|
|||||||
namespace quic {
|
namespace quic {
|
||||||
|
|
||||||
class QuicServerAsyncTransport : public QuicStreamAsyncTransport,
|
class QuicServerAsyncTransport : public QuicStreamAsyncTransport,
|
||||||
public QuicSocket::ConnectionCallback {
|
public QuicSocket::ConnectionSetupCallback,
|
||||||
|
public QuicSocket::ConnectionCallbackNew {
|
||||||
public:
|
public:
|
||||||
using UniquePtr = std::unique_ptr<
|
using UniquePtr = std::unique_ptr<
|
||||||
QuicServerAsyncTransport,
|
QuicServerAsyncTransport,
|
||||||
|
@@ -229,7 +229,8 @@ class TPerfAcceptObserver : public AcceptObserver {
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
class ServerStreamHandler : public quic::QuicSocket::ConnectionCallback,
|
class ServerStreamHandler : public quic::QuicSocket::ConnectionSetupCallback,
|
||||||
|
public quic::QuicSocket::ConnectionCallbackNew,
|
||||||
public quic::QuicSocket::ReadCallback,
|
public quic::QuicSocket::ReadCallback,
|
||||||
public quic::QuicSocket::WriteCallback {
|
public quic::QuicSocket::WriteCallback {
|
||||||
public:
|
public:
|
||||||
@@ -444,7 +445,7 @@ class TPerfServerTransportFactory : public quic::QuicServerTransportFactory {
|
|||||||
auto serverHandler = std::make_unique<ServerStreamHandler>(
|
auto serverHandler = std::make_unique<ServerStreamHandler>(
|
||||||
evb, blockSize_, numStreams_, maxBytesPerStream_, *sock, dsrEnabled_);
|
evb, blockSize_, numStreams_, maxBytesPerStream_, *sock, dsrEnabled_);
|
||||||
auto transport = quic::QuicServerTransport::make(
|
auto transport = quic::QuicServerTransport::make(
|
||||||
evb, std::move(sock), *serverHandler, ctx);
|
evb, std::move(sock), serverHandler.get(), serverHandler.get(), ctx);
|
||||||
if (!FLAGS_server_qlogger_path.empty()) {
|
if (!FLAGS_server_qlogger_path.empty()) {
|
||||||
auto qlogger = std::make_shared<TperfQLogger>(
|
auto qlogger = std::make_shared<TperfQLogger>(
|
||||||
VantagePoint::Server, FLAGS_server_qlogger_path);
|
VantagePoint::Server, FLAGS_server_qlogger_path);
|
||||||
@@ -572,7 +573,8 @@ class TPerfServer {
|
|||||||
quic::QuicCcpThreadLauncher quicCcpThreadLauncher_;
|
quic::QuicCcpThreadLauncher quicCcpThreadLauncher_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TPerfClient : public quic::QuicSocket::ConnectionCallback,
|
class TPerfClient : public quic::QuicSocket::ConnectionSetupCallback,
|
||||||
|
public quic::QuicSocket::ConnectionCallbackNew,
|
||||||
public quic::QuicSocket::ReadCallback,
|
public quic::QuicSocket::ReadCallback,
|
||||||
public quic::QuicSocket::WriteCallback,
|
public quic::QuicSocket::WriteCallback,
|
||||||
public folly::HHWheelTimer::Callback {
|
public folly::HHWheelTimer::Callback {
|
||||||
@@ -759,7 +761,7 @@ class TPerfClient : public quic::QuicSocket::ConnectionCallback,
|
|||||||
quicClient_->setTransportSettings(settings);
|
quicClient_->setTransportSettings(settings);
|
||||||
|
|
||||||
LOG(INFO) << "TPerfClient connecting to " << addr.describe();
|
LOG(INFO) << "TPerfClient connecting to " << addr.describe();
|
||||||
quicClient_->start(this);
|
quicClient_->start(this, this);
|
||||||
eventBase_.loopForever();
|
eventBase_.loopForever();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user