Commit 6f8d37dc authored by Subodh Iyengar's avatar Subodh Iyengar Committed by Facebook Github Bot

Add getTotalConnectTimeout method

Summary:
AsyncSSLSocket can be connected using connect with
total timeouts.

This adds a method to get the total timeout that
was set.

Reviewed By: ngoyal, yfeldblum

Differential Revision: D4656331

fbshipit-source-id: a55ad9f081449d358b8133e9598a2063f625a2e6
parent 00eb2ce0
......@@ -666,6 +666,7 @@ void AsyncSSLSocket::connect(
assert(state_ == StateEnum::UNINIT);
assert(sslState_ == STATE_UNINIT);
noTransparentTls_ = true;
totalConnectTimeout_ = totalConnectTimeout;
AsyncSSLSocketConnector* connector =
new AsyncSSLSocketConnector(this, callback, totalConnectTimeout.count());
AsyncSocket::connect(
......
......@@ -693,6 +693,16 @@ class AsyncSSLSocket : public virtual AsyncSocket {
return sessionResumptionAttempted_;
}
/**
* If the SSL socket was used to connect as well
* as establish an SSL connection, this gives the total
* timeout for the connect + SSL connection that was
* set.
*/
std::chrono::milliseconds getTotalConnectTimeout() const {
return totalConnectTimeout_;
}
private:
void init();
......@@ -845,6 +855,7 @@ class AsyncSSLSocket : public virtual AsyncSocket {
std::chrono::steady_clock::time_point handshakeEndTime_;
std::chrono::milliseconds handshakeConnectTimeout_{0};
bool sessionResumptionAttempted_{false};
std::chrono::milliseconds totalConnectTimeout_{0};
std::unique_ptr<IOBuf> preReceivedData_;
};
......
......@@ -152,7 +152,7 @@ TEST(AsyncSSLSocketTest, ConnectWriteReadClose) {
// connect
auto socket = std::make_shared<BlockingSocket>(server.getAddress(),
sslContext);
socket->open();
socket->open(std::chrono::milliseconds(10000));
// write()
uint8_t buf[128];
......@@ -169,6 +169,7 @@ TEST(AsyncSSLSocketTest, ConnectWriteReadClose) {
socket->close();
cerr << "ConnectWriteReadClose test completed" << endl;
EXPECT_EQ(socket->getSSLSocket()->getTotalConnectTimeout().count(), 10000);
}
/**
......
......@@ -56,6 +56,7 @@ class BlockingSocket : public folly::AsyncSocket::ConnectCallback,
throw err_.value();
}
}
void close() {
sock_->close();
}
......@@ -86,6 +87,14 @@ class BlockingSocket : public folly::AsyncSocket::ConnectCallback,
return sock_->getFd();
}
folly::AsyncSocket* getSocket() {
return sock_.get();
}
folly::AsyncSSLSocket* getSSLSocket() {
return dynamic_cast<folly::AsyncSSLSocket*>(sock_.get());
}
private:
folly::EventBase eventBase_;
folly::AsyncSocket::UniquePtr sock_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment