Electroneum
socket_adaptors.h
Go to the documentation of this file.
1 #pragma once
2 #include <boost/asio.hpp>
3 #ifdef CROW_ENABLE_SSL
4 #include <boost/asio/ssl.hpp>
5 #endif
6 #include "settings.h"
7 namespace crow
8 {
9  using namespace boost;
10  using tcp = asio::ip::tcp;
11 
13  {
14  using context = void;
15  SocketAdaptor(boost::asio::io_service& io_service, context*)
16  : socket_(io_service)
17  {
18  }
19 
20  boost::asio::io_service& get_io_service()
21  {
22  return socket_.get_io_service();
23  }
24 
25  tcp::socket& raw_socket()
26  {
27  return socket_;
28  }
29 
30  tcp::socket& socket()
31  {
32  return socket_;
33  }
34 
35  tcp::endpoint remote_endpoint()
36  {
37  return socket_.remote_endpoint();
38  }
39 
40  bool is_open()
41  {
42  return socket_.is_open();
43  }
44 
45  void close()
46  {
47  socket_.close();
48  }
49 
50  template <typename F>
51  void start(F f)
52  {
53  f(boost::system::error_code());
54  }
55 
56  tcp::socket socket_;
57  };
58 
59 #ifdef CROW_ENABLE_SSL
60  struct SSLAdaptor
61  {
63  using ssl_socket_t = boost::asio::ssl::stream<tcp::socket>;
64  SSLAdaptor(boost::asio::io_service& io_service, context* ctx)
65  : ssl_socket_(new ssl_socket_t(io_service, *ctx))
66  {
67  }
68 
69  boost::asio::ssl::stream<tcp::socket>& socket()
70  {
71  return *ssl_socket_;
72  }
73 
74  tcp::socket::lowest_layer_type&
75  raw_socket()
76  {
77  return ssl_socket_->lowest_layer();
78  }
79 
80  tcp::endpoint remote_endpoint()
81  {
82  return raw_socket().remote_endpoint();
83  }
84 
85  bool is_open()
86  {
87  return raw_socket().is_open();
88  }
89 
90  void close()
91  {
92  raw_socket().close();
93  }
94 
95  boost::asio::io_service& get_io_service()
96  {
97  return raw_socket().get_io_service();
98  }
99 
100  template <typename F>
101  void start(F f)
102  {
103  ssl_socket_->async_handshake(boost::asio::ssl::stream_base::server,
104  [f](const boost::system::error_code& ec) {
105  f(ec);
106  });
107  }
108 
109  std::unique_ptr<boost::asio::ssl::stream<tcp::socket>> ssl_socket_;
110  };
111 #endif
112 }
Definition: socket_adaptors.h:12
boost::asio::io_service & get_io_service()
Definition: socket_adaptors.h:20
Definition: unordered_containers_boost_serialization.h:38
#define F(w, k)
Definition: sha512-blocks.c:61
void start(F f)
Definition: socket_adaptors.h:51
SocketAdaptor(boost::asio::io_service &io_service, context *)
Definition: socket_adaptors.h:15
bool is_open()
Definition: socket_adaptors.h:40
tcp::socket & socket()
Definition: socket_adaptors.h:30
void close()
Definition: socket_adaptors.h:45
tcp::socket socket_
Definition: socket_adaptors.h:56
tcp::endpoint remote_endpoint()
Definition: socket_adaptors.h:35
void context
Definition: socket_adaptors.h:14
Definition: ci_map.h:7
tcp::socket & raw_socket()
Definition: socket_adaptors.h:25
asio::ip::tcp tcp
Definition: http_connection.h:23
json::wvalue context
Definition: mustache.h:12