...
This commit is contained in:
@@ -48,7 +48,8 @@ public:
|
||||
|
||||
} else {
|
||||
using srv_t = AdcNetServiceASIOTLS<asio::ip::tcp, SessProtoT>;
|
||||
AdcGenericNetServer::start<Session<srv_t>>("TLS", this, _ioContext, ept, tls_context, tls_verify_mode);
|
||||
AdcGenericNetServer::start<Session<srv_t>>("TLS", this, _ioContext, ept, std::move(tls_context),
|
||||
tls_verify_mode);
|
||||
}
|
||||
#else
|
||||
if (endpoint.isTCP()) {
|
||||
|
||||
@@ -168,13 +168,39 @@ public:
|
||||
typedef std::function<void(std::error_code, netservice_t)> async_accept_callback_t;
|
||||
|
||||
|
||||
acceptor_t(asio::io_context& io_context) : _ioContext(io_context), _acceptor(io_context) {}
|
||||
acceptor_t(asio::io_context& io_context)
|
||||
requires(!netservice_t::isTLS)
|
||||
: _ioContext(io_context), _acceptor(io_context)
|
||||
{
|
||||
}
|
||||
|
||||
acceptor_t(asio::io_context& io_context, const netservice_t::endpoint_t& endpoint)
|
||||
requires(!netservice_t::isTLS)
|
||||
: _ioContext(io_context), _acceptor(io_context, endpoint)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
acceptor_t(asio::io_context& io_context,
|
||||
asio::ssl::context tls_ctx,
|
||||
asio::ssl::verify_mode tls_verify_mode = asio::ssl::context_base::verify_peer)
|
||||
requires netservice_t::isTLS
|
||||
: _ioContext(io_context), _acceptor(io_context), _tlsCtx(std::move(tls_ctx)), _tlsVerMode(tls_verify_mode)
|
||||
{
|
||||
}
|
||||
|
||||
acceptor_t(asio::io_context& io_context,
|
||||
const netservice_t::endpoint_t& endpoint,
|
||||
asio::ssl::context tls_ctx,
|
||||
asio::ssl::verify_mode tls_verify_mode = asio::ssl::context_base::verify_peer)
|
||||
requires netservice_t::isTLS
|
||||
: _ioContext(io_context),
|
||||
_acceptor(io_context, endpoint),
|
||||
_tlsCtx(std::move(tls_ctx)),
|
||||
_tlsVerMode(tls_verify_mode)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
template <asio::completion_token_for<void(std::error_code, netservice_t)> TokenT,
|
||||
traits::adc_time_duration_c DT = decltype(DEFAULT_ACCEPT_TIMEOUT)>
|
||||
auto asyncAccept(TokenT&& token, const DT& timeout = DEFAULT_ACCEPT_TIMEOUT)
|
||||
@@ -183,10 +209,17 @@ public:
|
||||
|
||||
auto timer = netservice_t::getDeadlineTimer(_acceptor, timeout);
|
||||
|
||||
// auto srv = std::make_unique<netservice_t>(_ioContext);
|
||||
auto srv = netservice_t::isTLS ? std::make_unique<netservice_t>(_ioContext, srv->_tlsContext)
|
||||
: std::make_unique<netservice_t>(_ioContext);
|
||||
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
auto srv = [&, this]() {
|
||||
if constexpr (netservice_t::isTLS) {
|
||||
return std::make_unique<netservice_t>(_ioContext, std::move(_tlsCtx), _tlsVerMode);
|
||||
} else {
|
||||
return std::make_unique<netservice_t>(_ioContext);
|
||||
}
|
||||
}();
|
||||
#else
|
||||
auto srv = std::make_unique<netservice_t>(_ioContext);
|
||||
#endif
|
||||
return asio::async_compose<TokenT, void(std::error_code, netservice_t)>(
|
||||
[timer = std::move(timer), srv = std::move(srv), state = sock_accept, this](
|
||||
auto& self, std::error_code ec = {}) mutable {
|
||||
@@ -205,7 +238,7 @@ public:
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
if constexpr (netservice_t::isTLS) {
|
||||
srv->_sessSocket =
|
||||
netservice_t::session_level_socket_t(srv->_socket, srv->_tlsContext);
|
||||
netservice_t::session_level_socket_t(std::move(srv->_socket), srv->_tlsContext);
|
||||
return srv->_sessSocket.async_handshake(asio::ssl::stream_base::server,
|
||||
std::move(self));
|
||||
}
|
||||
@@ -264,6 +297,11 @@ public:
|
||||
private:
|
||||
asio::io_context& _ioContext;
|
||||
srv_acceptor_t _acceptor;
|
||||
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
asio::ssl::context _tlsCtx{asio::ssl::context_base::tlsv13};
|
||||
asio::ssl::verify_mode _tlsVerMode;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -291,7 +329,7 @@ public:
|
||||
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
AdcBaseNetServiceASIO(asio::io_context& ctx,
|
||||
const asio::ssl::context& tls_context,
|
||||
asio::ssl::context tls_context,
|
||||
const asio::ssl::verify_mode& tls_peer_verify_mode = asio::ssl::verify_peer)
|
||||
requires isTLS
|
||||
: SESSION_PROTOT(),
|
||||
@@ -299,8 +337,9 @@ public:
|
||||
_receiveStrand(_ioContext),
|
||||
_socket(_ioContext),
|
||||
_receiveQueue(),
|
||||
_tlsContext(tls_context),
|
||||
_tlsPeerVerifyMode(tls_peer_verify_mode)
|
||||
_tlsContext(std::move(tls_context)),
|
||||
_tlsPeerVerifyMode(tls_peer_verify_mode),
|
||||
_sessSocket(_ioContext, _tlsContext)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
@@ -418,7 +457,7 @@ public:
|
||||
state = done;
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
if constexpr (isTLS) {
|
||||
_sessSocket = session_level_socket_t(_socket, _tlsContext);
|
||||
_sessSocket = session_level_socket_t(std::move(_socket), _tlsContext);
|
||||
return _sessSocket.async_handshake(session_level_socket_t::client, std::move(self));
|
||||
}
|
||||
#endif
|
||||
@@ -666,7 +705,7 @@ public:
|
||||
|
||||
#ifdef USE_OPENSSL_WITH_ASIO
|
||||
if constexpr (isTLS) {
|
||||
_sessSocket.shutdown(_shutdownType, ec);
|
||||
_sessSocket.shutdown(ec);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user