diff --git a/quic/api/QuicTransportBase.cpp b/quic/api/QuicTransportBase.cpp index a964c5eca..9c2cfd861 100644 --- a/quic/api/QuicTransportBase.cpp +++ b/quic/api/QuicTransportBase.cpp @@ -29,7 +29,8 @@ namespace quic { QuicTransportBase::QuicTransportBase( folly::EventBase* evb, - std::unique_ptr socket) + std::unique_ptr socket, + bool useSplitConnectionCallbacks) : evb_(evb), socket_(std::move(socket)), lossTimeout_(this), @@ -52,7 +53,8 @@ QuicTransportBase::QuicTransportBase( writeLooper_(new FunctionLooper( evb, [this](bool fromTimer) { pacedWriteDataToSocket(fromTimer); }, - LooperType::WriteLooper)) { + LooperType::WriteLooper)), + useSplitConnectionCallbacks_(useSplitConnectionCallbacks) { writeLooper_->setPacingFunction([this]() -> auto { if (isConnectionPaced(*conn_)) { return conn_->pacer->getTimeUntilNextWrite(); diff --git a/quic/api/QuicTransportBase.h b/quic/api/QuicTransportBase.h index 5e93c3eab..a3a137710 100644 --- a/quic/api/QuicTransportBase.h +++ b/quic/api/QuicTransportBase.h @@ -39,7 +39,8 @@ class QuicTransportBase : public QuicSocket { public: QuicTransportBase( folly::EventBase* evb, - std::unique_ptr socket); + std::unique_ptr socket, + bool useSplitConnectionCallbacks = false); ~QuicTransportBase() override; @@ -875,6 +876,11 @@ class QuicTransportBase : public QuicSocket { std::shared_ptr observers_{std::make_shared()}; 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}; }; std::ostream& operator<<(std::ostream& os, const QuicTransportBase& qt); diff --git a/quic/client/QuicClientTransport.cpp b/quic/client/QuicClientTransport.cpp index ac0ce3387..393700988 100644 --- a/quic/client/QuicClientTransport.cpp +++ b/quic/client/QuicClientTransport.cpp @@ -39,12 +39,14 @@ QuicClientTransport::QuicClientTransport( std::unique_ptr socket, std::shared_ptr handshakeFactory, size_t connectionIdSize, - PacketNum startingPacketNum) + PacketNum startingPacketNum, + bool useSplitConnectionCallbacks) : QuicClientTransport( evb, std::move(socket), std::move(handshakeFactory), - connectionIdSize) { + connectionIdSize, + useSplitConnectionCallbacks) { conn_->ackStates = AckStates(startingPacketNum); } @@ -52,8 +54,9 @@ QuicClientTransport::QuicClientTransport( folly::EventBase* evb, std::unique_ptr socket, std::shared_ptr handshakeFactory, - size_t connectionIdSize) - : QuicTransportBase(evb, std::move(socket)), + size_t connectionIdSize, + bool useSplitConnectionCallbacks) + : QuicTransportBase(evb, std::move(socket), useSplitConnectionCallbacks), happyEyeballsConnAttemptDelayTimeout_(this) { DCHECK(handshakeFactory); auto tempConn = diff --git a/quic/client/QuicClientTransport.h b/quic/client/QuicClientTransport.h index 6b6259f36..4c0ad1ae9 100644 --- a/quic/client/QuicClientTransport.h +++ b/quic/client/QuicClientTransport.h @@ -32,7 +32,8 @@ class QuicClientTransport folly::EventBase* evb, std::unique_ptr socket, std::shared_ptr handshakeFactory, - size_t connectionIdSize = 0); + size_t connectionIdSize = 0, + bool useSplitConnectionCallbacks = false); // Testing only API: QuicClientTransport( @@ -40,7 +41,8 @@ class QuicClientTransport std::unique_ptr socket, std::shared_ptr handshakeFactory, size_t connectionIdSize, - PacketNum startingPacketNum); + PacketNum startingPacketNum, + bool useSplitConnectionCallbacks = false); ~QuicClientTransport() override; @@ -59,9 +61,14 @@ class QuicClientTransport folly::EventBase* evb, std::unique_ptr sock, std::shared_ptr handshakeFactory, - size_t connectionIdSize = 0) { + size_t connectionIdSize = 0, + bool useSplitConnectionCallbacks = false) { auto client = std::make_shared( - evb, std::move(sock), std::move(handshakeFactory), connectionIdSize); + evb, + std::move(sock), + std::move(handshakeFactory), + connectionIdSize, + useSplitConnectionCallbacks); client->setSelfOwning(); return client; } diff --git a/quic/fizz/client/test/QuicClientTransportTest.cpp b/quic/fizz/client/test/QuicClientTransportTest.cpp index da63b306d..8dafc6724 100644 --- a/quic/fizz/client/test/QuicClientTransportTest.cpp +++ b/quic/fizz/client/test/QuicClientTransportTest.cpp @@ -85,12 +85,14 @@ class TestingQuicClientTransport : public QuicClientTransport { folly::EventBase* evb, std::unique_ptr socket, std::shared_ptr handshakeFactory, - size_t connIdSize = kDefaultConnectionIdSize) + size_t connIdSize = kDefaultConnectionIdSize, + bool useSplitConnectionCallbacks = false) : QuicClientTransport( evb, std::move(socket), std::move(handshakeFactory), - connIdSize) {} + connIdSize, + useSplitConnectionCallbacks) {} ~TestingQuicClientTransport() override { if (destructionCallback_) { diff --git a/quic/server/QuicServerTransport.cpp b/quic/server/QuicServerTransport.cpp index 04b0d7e19..4ea8f81d2 100644 --- a/quic/server/QuicServerTransport.cpp +++ b/quic/server/QuicServerTransport.cpp @@ -43,7 +43,11 @@ QuicServerTransport::QuicServerTransport( ConnectionCallback& cb, std::shared_ptr ctx, std::unique_ptr cryptoFactory) - : QuicTransportBase(evb, std::move(sock)), ctx_(std::move(ctx)) { + : QuicTransportBase( + evb, + std::move(sock), + false /* useSplitConnectionCallbacks */), + ctx_(std::move(ctx)) { auto tempConn = std::make_unique( FizzServerQuicHandshakeContext::Builder() .setFizzServerContext(ctx_)