void Acceptor::processEstablishedConnection( int fd, const SocketAddress& clientAddr, std::chrono::steady_clock::time_point acceptTime, TransportInfo& tinfo) noexcept { if (accConfig_.isSSL()) { CHECK(sslCtxManager_); AsyncSSLSocket::UniquePtr sslSock( makeNewAsyncSSLSocket( sslCtxManager_->getDefaultSSLCtx(), base_, fd)); ++numPendingSSLConns_; ++totalNumPendingSSLConns_; if (totalNumPendingSSLConns_ > accConfig_.maxConcurrentSSLHandshakes) { VLOG(2) << "dropped SSL handshake on " << accConfig_.name << " too many handshakes in progress"; updateSSLStats(sslSock.get(), std::chrono::milliseconds(0), SSLErrorEnum::DROPPED); sslConnectionError(); return; } new AcceptorHandshakeHelper( std::move(sslSock), this, clientAddr, acceptTime, tinfo ); } else { tinfo.ssl = false; tinfo.acceptTime = acceptTime; AsyncSocket::UniquePtr sock(makeNewAsyncSocket(base_, fd)); connectionReady(std::move(sock), clientAddr, empty_string, tinfo); } }
void Acceptor::processEstablishedConnection( int fd, const SocketAddress& clientAddr, std::chrono::steady_clock::time_point acceptTime, TransportInfo& tinfo) noexcept { bool shouldDoSSL = false; if (accConfig_.isSSL()) { CHECK(sslCtxManager_); shouldDoSSL = sslCtxManager_->getDefaultSSLCtx() != nullptr; } if (shouldDoSSL) { AsyncSSLSocket::UniquePtr sslSock( makeNewAsyncSSLSocket( sslCtxManager_->getDefaultSSLCtx(), base_, fd)); ++numPendingSSLConns_; ++totalNumPendingSSLConns_; if (numPendingSSLConns_ > accConfig_.maxConcurrentSSLHandshakes) { VLOG(2) << "dropped SSL handshake on " << accConfig_.name << " too many handshakes in progress"; auto error = SSLErrorEnum::DROPPED; auto latency = std::chrono::milliseconds(0); updateSSLStats(sslSock.get(), latency, error); auto ex = folly::make_exception_wrapper<SSLException>( error, latency, sslSock->getRawBytesReceived()); sslConnectionError(ex); return; } tinfo.tfoSucceded = sslSock->getTFOSucceded(); startHandshakeManager( std::move(sslSock), this, clientAddr, acceptTime, tinfo); } else { tinfo.secure = false; tinfo.acceptTime = acceptTime; AsyncSocket::UniquePtr sock(makeNewAsyncSocket(base_, fd)); tinfo.tfoSucceded = sock->getTFOSucceded(); plaintextConnectionReady( std::move(sock), clientAddr, empty_string, SecureTransportType::NONE, tinfo); } }