#ifndef SIMPLE_WEB_ASIO_HPP #define SIMPLE_WEB_ASIO_HPP #include #ifdef USE_STANDALONE_ASIO #include #include namespace SimpleWeb { using error_code = std::error_code; using errc = std::errc; using system_error = std::system_error; namespace make_error_code = std; } // namespace SimpleWeb #else #include #include namespace SimpleWeb { namespace asio = boost::asio; using error_code = boost::system::error_code; namespace errc = boost::system::errc; using system_error = boost::system::system_error; namespace make_error_code = boost::system::errc; } // namespace SimpleWeb #endif namespace SimpleWeb { #if(USE_STANDALONE_ASIO && ASIO_VERSION >= 101300) || BOOST_ASIO_VERSION >= 101300 // TODO: change to 101300 using io_context = asio::io_context; using resolver_results = asio::ip::tcp::resolver::results_type; using async_connect_endpoint = asio::ip::tcp::endpoint; inline void restart(io_context &context) noexcept { context.restart(); } inline void timer_expires_after(asio::steady_timer &timer, const asio::steady_timer::duration &duration) { timer.expires_after(duration); } inline asio::ip::address make_address(const std::string &str) noexcept { return asio::ip::make_address(str); } template io_context &get_socket_context(socket_type &socket) { return socket.get_executor().context(); } template void async_resolve(asio::ip::tcp::resolver &resolver, const std::pair &host_port, handler_type &&handler) { resolver.async_resolve(host_port.first, host_port.second, handler); } template void post(executor_type &executor, handler_type &&handler) { asio::post(executor, handler); } template asio::executor_binder::type, executor_type> bind_executor(executor_type &executor, handler_type &&handler) { return asio::bind_executor(executor, handler); } #else using io_context = asio::io_service; using resolver_results = asio::ip::tcp::resolver::iterator; using async_connect_endpoint = asio::ip::tcp::resolver::iterator; inline void restart(io_context &context) noexcept { context.reset(); } inline void timer_expires_after(asio::steady_timer &timer, const asio::steady_timer::duration &duration) { timer.expires_from_now(duration); } inline asio::ip::address make_address(const std::string &str) noexcept { return asio::ip::address::from_string(str); } template io_context &get_socket_context(socket_type &socket) { return socket.get_io_service(); } template void async_resolve(asio::ip::tcp::resolver &resolver, const std::pair &host_port, handler_type &&handler) { resolver.async_resolve(asio::ip::tcp::resolver::query(host_port.first, host_port.second), handler); } template void post(executor_type &executor, handler_type &&handler) { executor.post(handler); } template asio::detail::wrapped_handler bind_executor(executor_type &executor, handler_type &&handler) { return executor.wrap(handler); } #endif } // namespace SimpleWeb #endif /* SIMPLE_WEB_ASIO_HPP */