Move crow to its own repo
diff --git a/crow/include/crow/socket_adaptors.h b/crow/include/crow/socket_adaptors.h
new file mode 100644
index 0000000..fe1bb93
--- /dev/null
+++ b/crow/include/crow/socket_adaptors.h
@@ -0,0 +1,69 @@
+#pragma once
+#include <boost/asio.hpp>
+#ifdef CROW_ENABLE_SSL
+#include <boost/asio/ssl.hpp>
+#endif
+#include "crow/settings.h"
+namespace crow {
+using namespace boost;
+using tcp = asio::ip::tcp;
+
+struct SocketAdaptor {
+ using context = void;
+ SocketAdaptor(boost::asio::io_service& io_service, context*)
+ : socket_(io_service) {}
+
+ boost::asio::io_service& get_io_service() { return socket_.get_io_service(); }
+
+ tcp::socket& raw_socket() { return socket_; }
+
+ tcp::socket& socket() { return socket_; }
+
+ tcp::endpoint remote_endpoint() { return socket_.remote_endpoint(); }
+
+ bool is_open() { return socket_.is_open(); }
+
+ void close() { socket_.close(); }
+
+ template <typename F>
+ void start(F f) {
+ f(boost::system::error_code());
+ }
+
+ tcp::socket socket_;
+};
+
+#ifdef CROW_ENABLE_SSL
+struct SSLAdaptor {
+ using context = boost::asio::ssl::context;
+ using ssl_socket_t = boost::asio::ssl::stream<tcp::socket>;
+ SSLAdaptor(boost::asio::io_service& io_service, context* ctx)
+ : ssl_socket_(new ssl_socket_t(io_service, *ctx)) {}
+
+ boost::asio::ssl::stream<tcp::socket>& socket() { return *ssl_socket_; }
+
+ tcp::socket::lowest_layer_type& raw_socket() {
+ return ssl_socket_->lowest_layer();
+ }
+
+ tcp::endpoint remote_endpoint() { return raw_socket().remote_endpoint(); }
+
+ bool is_open() { return raw_socket().is_open(); }
+
+ void close() { raw_socket().close(); }
+
+ boost::asio::io_service& get_io_service() {
+ return raw_socket().get_io_service();
+ }
+
+ template <typename F>
+ void start(F f) {
+ ssl_socket_->async_handshake(
+ boost::asio::ssl::stream_base::server,
+ [f](const boost::system::error_code& ec) { f(ec); });
+ }
+
+ std::unique_ptr<boost::asio::ssl::stream<tcp::socket>> ssl_socket_;
+};
+#endif
+}