aboutsummaryrefslogtreecommitdiff
path: root/libcmix-network/acceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcmix-network/acceptor.cpp')
-rw-r--r--libcmix-network/acceptor.cpp51
1 files changed, 21 insertions, 30 deletions
diff --git a/libcmix-network/acceptor.cpp b/libcmix-network/acceptor.cpp
index 69b2807..ed640a1 100644
--- a/libcmix-network/acceptor.cpp
+++ b/libcmix-network/acceptor.cpp
@@ -1,42 +1,26 @@
#include "acceptor.hpp"
-#include <boost/asio/ip/tcp.hpp>
-#include <boost/asio/ip/v6_only.hpp>
-#include <boost/asio/placeholders.hpp>
-#include <boost/bind.hpp>
+#include "accept.hpp"
+#include <boost/asio/ip/v6_only.hpp>
using namespace boost::asio;
using namespace boost::asio::ip;
-void accept_loop(tcp::acceptor& acceptor, std::function<void(tcp::socket&&)> f);
-
-void accept_connection(tcp::acceptor& acceptor, std::shared_ptr<tcp::socket> socket, boost::system::error_code ec, std::function<void(boost::asio::ip::tcp::socket&&)> f)
-{
- if(!bool(ec))
- {
- f(std::move(*socket));
- accept_loop(acceptor, f);
- } else {
- std::stringstream ss;
- ss << ec;
- throw std::runtime_error(ss.str());
- }
-}
-
-void accept_loop(tcp::acceptor& acceptor, std::function<void(tcp::socket&&)> f)
-{
- std::shared_ptr<tcp::socket> new_socket = std::make_shared<tcp::socket>(acceptor.get_io_service());
-
- acceptor.async_accept(*new_socket, boost::bind(accept_connection, boost::ref(acceptor), new_socket, boost::asio::placeholders::error, f));
-}
-
Acceptor::Acceptor(boost::asio::io_service &io_service, boost::asio::ip::address address, uint16_t port)
: acceptor(io_service)
, endpoint(address, port)
{}
-void Acceptor::bind_v6_and_v4_any(std::function<void(tcp::socket&&)> accept_handler) {
+address Acceptor::get_address() {
+ return endpoint.address();
+}
+
+bool Acceptor::is_open() {
+ return acceptor.is_open();
+}
+
+void Acceptor::listen_v6_and_v4_any() {
acceptor.open(endpoint.protocol());
v6_only option(false);
@@ -44,15 +28,22 @@ void Acceptor::bind_v6_and_v4_any(std::function<void(tcp::socket&&)> accept_hand
acceptor.bind(endpoint);
acceptor.listen();
-
- accept_loop(acceptor, accept_handler);
}
-void Acceptor::setup_listen_socket(std::function<void (tcp::socket &&)> accept_handler)
+void Acceptor::listen_socket()
{
acceptor.open(endpoint.protocol());
acceptor.bind(endpoint);
acceptor.listen();
+}
+void Acceptor::start_accepting(AcceptHandler accept_handler) {
accept_loop(acceptor, accept_handler);
}
+
+void Acceptor::start_accepting(std::shared_ptr<ssl::context> ctx, SSLAcceptHandler accept_handler)
+{
+ accept_loop(acceptor, ctx, accept_handler);
+}
+
+