Skip to content

Commit abefa9d

Browse files
Sotirios Delimanolisfacebook-github-bot
Sotirios Delimanolis
authored andcommitted
Use AsyncSocket's "stealing" constructor to construct a KTLS socket
Summary: `folly::AsyncSocket` has a constructor that transfers over state from an old socket to the new socket, including the file descriptor. Prefer using that to manually detaching the fd. Reviewed By: dmm-fb Differential Revision: D45833219 fbshipit-source-id: 5e4e429edd942bbaf4fc9fa8b44dca8c09a903f7
1 parent 289739d commit abefa9d

File tree

3 files changed

+12
-28
lines changed

3 files changed

+12
-28
lines changed

fizz/experimental/ktls/AsyncFizzBaseKTLS.h

+1-8
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,6 @@ tryConvertKTLS(FizzSocket& fizzSock) {
143143
auto rstate = (*state.readRecordLayer()).getRecordLayerState();
144144
auto wstate = (*state.writeRecordLayer()).getRecordLayerState();
145145

146-
auto evb = fizzSock.getEventBase();
147-
148146
auto rx = KTLSDirectionalCryptoParams<TrafficDirection::Receive>(
149147
KTLSCryptoParams::fromRecordState(ciphersuite, rstate));
150148
auto tx = KTLSDirectionalCryptoParams<TrafficDirection::Transmit>(
@@ -165,14 +163,9 @@ tryConvertKTLS(FizzSocket& fizzSock) {
165163
auto readCb = fizzSock.getReadCallback();
166164
fizzSock.setReadCB(nullptr);
167165

168-
(void)sock->detachNetworkSocket();
169166
AsyncKTLSSocket::UniquePtr ret;
170167
ret.reset(new AsyncKTLSSocket(
171-
evb,
172-
result.value(),
173-
std::move(callbackImpl),
174-
std::move(selfCert),
175-
std::move(peerCert)));
168+
sock, std::move(callbackImpl), std::move(selfCert), std::move(peerCert)));
176169
ret->setReadCB(readCb);
177170
return ret;
178171
#else

fizz/experimental/ktls/AsyncKTLSSocket.h

+8-10
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,20 @@ class AsyncKTLSSocket final : public folly::AsyncSocket {
9191
* AsyncKTLSSocket
9292
* * You have established a ktls 1.3 connection out of band
9393
*
94-
* @param evb The eventbase that the AsyncKTLSSocket will initially
95-
* be attached to.
96-
* @param fd The kTLS enabled file descriptor.
97-
* @param tlsCallback An instance of `TLSCallback` which will be used to
98-
* handle non-application data events.
99-
* @param selfCert The certificate used to authenticate *to* the peer.
100-
* @param peerCert The certificate that the *peer* presented and
94+
* @param oldAsyncSocket The AsyncSocket, with kTLS enabled, from which we'll
95+
* steal the file descriptor and EventBase.
96+
* @param tlsCallback An instance of `TLSCallback` which will be used to
97+
* handle non-application data events.
98+
* @param selfCert The certificate used to authenticate *to* the peer.
99+
* @param peerCert The certificate that the *peer* presented and
101100
* *we* authenticated.
102101
*/
103102
AsyncKTLSSocket(
104-
folly::EventBase* evb,
105-
KTLSNetworkSocket fd,
103+
folly::AsyncSocket* oldAsyncSocket,
106104
std::unique_ptr<TLSCallback> tlsCallback,
107105
std::shared_ptr<const Cert> selfCert,
108106
std::shared_ptr<const Cert> peerCert)
109-
: AsyncSocket(evb, fd),
107+
: AsyncSocket(oldAsyncSocket),
110108
tlsCallback_(std::move(tlsCallback)),
111109
selfCert_(std::move(selfCert)),
112110
peerCert_(std::move(peerCert)) {}

fizz/experimental/ktls/test/AsyncKTLSSocketTest.cpp

+3-10
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,9 @@ class KTLSReadTest : public KTLSTest {
197197
clientToServer.toKTLSParams<fizz::TrafficDirection::Receive>(),
198198
serverToClient.toKTLSParams<fizz::TrafficDirection::Transmit>());
199199
ASSERT_TRUE(ktlsFDResult.hasValue());
200-
serverSocket->detachNetworkSocket();
201200

202201
serverConn_.reset(new fizz::AsyncKTLSSocket(
203-
&evb_, ktlsFDResult.value(), std::move(tlsCb), nullptr, nullptr));
202+
serverSocket.get(), std::move(tlsCb), nullptr, nullptr));
204203

205204
clientWrite_ = clientToServer.write();
206205
clientRead_ = serverToClient.read();
@@ -343,15 +342,9 @@ TEST_F(KTLSReadTest, MultipleKTLSError) {
343342
// message if we don't have a tls callback installed, that we will get
344343
// a readErr.
345344
TEST_F(KTLSReadTest, NoTLSCallbackCausesReadErrOnHandshake) {
346-
auto serverfd = serverConn_->detachNetworkSocket();
347-
348345
fizz::AsyncKTLSSocket::UniquePtr conn;
349-
conn.reset(new fizz::AsyncKTLSSocket(
350-
&evb_,
351-
fizz::KTLSNetworkSocket::unsafeFromExistingKTLSSocket(serverfd),
352-
nullptr,
353-
nullptr,
354-
nullptr));
346+
conn.reset(
347+
new fizz::AsyncKTLSSocket(serverConn_.get(), nullptr, nullptr, nullptr));
355348

356349
// Client writes a NewSessionTicket to server.
357350
{

0 commit comments

Comments
 (0)