// Copyright (C) 2016-2024 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef TLS_ACCEPTOR_H #define TLS_ACCEPTOR_H #ifndef BOOST_ASIO_HPP #error "asio.hpp must be included before including this, see asiolink.h as to why" #endif #include #include #include #include #include #include #include #include #include namespace isc { namespace asiolink { /// @brief Provides a service for accepting new TLS connections. /// /// @tparam C Acceptor callback type. template class TLSAcceptor : public TCPAcceptor { public: /// @brief Constructor. /// /// @param io_service IO service. explicit TLSAcceptor(const IOServicePtr& io_service) : TCPAcceptor(io_service) { } /// @brief Destructor. virtual ~TLSAcceptor() { } /// @brief Asynchronously accept new connection. /// /// This method accepts new connection into the specified socket. When the /// new connection arrives or an error occurs the specified callback function /// is invoked. /// /// @param socket Socket into which connection should be accepted. /// @param callback Callback function to be invoked when the new connection /// arrives. /// @tparam SocketCallback Type of the callback for the @ref TLSSocket. template void asyncAccept(const TLSSocket& socket, C& callback) { TCPAcceptor::acceptor_->async_accept(socket.getASIOSocket(), callback); } }; } // namespace asiolink } // namespace isc #endif