changeset 547:a95954e53589

Irccd: fix TLS tranports
author David Demelier <markand@malikania.fr>
date Wed, 22 Nov 2017 20:01:05 +0100
parents fd96de07657a
children a7c0eb100760
files libirccd/irccd/transport_server.cpp libirccd/irccd/transport_server.hpp libirccdctl/irccd/ctl/ip_connection.cpp
diffstat 3 files changed, 11 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd/irccd/transport_server.cpp	Wed Nov 22 19:32:56 2017 +0100
+++ b/libirccd/irccd/transport_server.cpp	Wed Nov 22 20:01:05 2017 +0100
@@ -99,13 +99,10 @@
 
 #if defined(HAVE_SSL)
 
-void tls_transport_server::do_handshake(std::shared_ptr<tls_transport_client> client, accept_t handler)
+void tls_transport_server::do_handshake(std::shared_ptr<client_t> client, accept_t handler)
 {
-    client->socket().async_handshake(boost::asio::ssl::stream_base::server, [client, handler] (auto code) {
-        if (code)
-            handler(nullptr, code);
-        else
-            handler(std::move(client), std::move(code));
+    client->stream().socket().async_handshake(boost::asio::ssl::stream_base::server, [client, handler] (auto code) {
+        handler(std::move(code), std::move(client));
     });
 }
 
@@ -117,11 +114,11 @@
 
 void tls_transport_server::do_accept(accept_t handler)
 {
-    auto client = std::make_shared<tls_transport_client>(*this, acceptor_.get_io_service(), context_);
+    auto client = std::make_shared<client_t>(*this, acceptor_.get_io_service(), context_);
 
-    acceptor_.async_accept(client->socket().lowest_layer(), [this, client, handler] (auto code) {
+    acceptor_.async_accept(client->stream().socket().lowest_layer(), [this, client, handler] (auto code) {
         if (code)
-            handler(nullptr, code);
+            handler(std::move(code), nullptr);
         else
             do_handshake(std::move(client), std::move(handler));
     });
--- a/libirccd/irccd/transport_server.hpp	Wed Nov 22 19:32:56 2017 +0100
+++ b/libirccd/irccd/transport_server.hpp	Wed Nov 22 20:01:05 2017 +0100
@@ -216,13 +216,13 @@
  * \brief Secure layer implementation.
  */
 class tls_transport_server : public tcp_transport_server {
-public:
+private:
     using context_t = boost::asio::ssl::context;
+    using client_t = basic_transport_client<boost::asio::ssl::stream<socket_t>>;
 
-private:
     context_t context_;
 
-    void do_handshake(std::shared_ptr<tls_transport_client>, accept_t);
+    void do_handshake(std::shared_ptr<client_t>, accept_t);
 
 protected:
     /**
--- a/libirccdctl/irccd/ctl/ip_connection.cpp	Wed Nov 22 19:32:56 2017 +0100
+++ b/libirccdctl/irccd/ctl/ip_connection.cpp	Wed Nov 22 20:01:05 2017 +0100
@@ -66,14 +66,14 @@
 
 void tls_connection::handshake(connect_t handler)
 {
-    socket_.async_handshake(boost::asio::ssl::stream_base::client, [handler] (auto code) {
+    stream_.socket().async_handshake(boost::asio::ssl::stream_base::client, [handler] (auto code) {
         handler(code);
     });
 }
 
 void tls_connection::connect(connect_t handler)
 {
-    do_resolve(host_, std::to_string(port_), socket_.lowest_layer(), resolver_, [handler, this] (auto code) {
+    do_resolve(host_, std::to_string(port_), stream_.socket().lowest_layer(), resolver_, [handler, this] (auto code) {
         if (code)
             handler(code);
         else