summaryrefslogtreecommitdiffhomepage
path: root/http.cpp
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2023-01-09 13:15:18 +0100
committerRoland Reichwein <mail@reichwein.it>2023-01-09 13:15:18 +0100
commitdc2e2b3e293a8374a2627982b521cc6865129c49 (patch)
treebd34d6c13e330be5937aec29503cbe6649d0fa74 /http.cpp
parentd747193e76baf689211d9f1e42335360288d43c0 (diff)
Separated out websocket
Diffstat (limited to 'http.cpp')
-rw-r--r--http.cpp105
1 files changed, 0 insertions, 105 deletions
diff --git a/http.cpp b/http.cpp
index b538233..0a9c680 100644
--- a/http.cpp
+++ b/http.cpp
@@ -2,11 +2,6 @@
#include <boost/beast/version.hpp>
-// Support both boost in Debian unstable (BOOST_LATEST) and in stable (boost 1.67)
-#if BOOST_VERSION >= 107100
-#define BOOST_LATEST
-#endif
-
#include "server.h"
#include "response.h"
@@ -14,10 +9,8 @@
#include <boost/beast/core.hpp>
#include <boost/beast/http.hpp>
#include <boost/asio/dispatch.hpp>
-#ifndef BOOST_LATEST
#include <boost/asio/bind_executor.hpp>
#include <boost/asio/ip/tcp.hpp>
-#endif
#include <boost/asio/strand.hpp>
#include <boost/config.hpp>
#include <algorithm>
@@ -48,12 +41,7 @@ void fail(beast::error_code ec, char const* what)
// Handles an HTTP server connection
class session : public std::enable_shared_from_this<session>
{
-#ifdef BOOST_LATEST
beast::tcp_stream stream_;
-#else
- tcp::socket socket_;
- boost::asio::strand<boost::asio::io_context::executor_type> strand_;
-#endif
beast::flat_buffer buffer_;
Server& m_server;
std::optional<http::request_parser<http::string_body>> parser_;
@@ -62,17 +50,12 @@ class session : public std::enable_shared_from_this<session>
void handle_request(::Server& server, request_type&& req)
{
-#ifdef BOOST_LATEST
stream_.expires_after(std::chrono::seconds(300)); // timeout on write by server much longer than read timeout from client
-#else
- // socket_.expires_after(std::chrono::seconds(300)); // not supported by old boost
-#endif
auto sp = std::make_shared<response_type>(generate_response(req, server));
res_ = sp;
// Write the response
-#ifdef BOOST_LATEST
http::async_write(
stream_,
*sp,
@@ -80,36 +63,14 @@ class session : public std::enable_shared_from_this<session>
&session::on_write,
shared_from_this(),
sp->need_eof()));
-#else
- http::async_write(
- socket_,
- *sp,
- boost::asio::bind_executor(
- strand_,
- std::bind(
- &session::on_write,
- shared_from_this(),
- std::placeholders::_1,
- std::placeholders::_2,
- sp->need_eof())));
-#endif
}
public:
// Take ownership of the stream
session(
-#ifdef BOOST_LATEST
tcp::socket&& socket,
-#else
- tcp::socket socket,
-#endif
Server& server)
-#ifdef BOOST_LATEST
: stream_(std::move(socket))
-#else
- : socket_(std::move(socket))
- , strand_(socket_.get_executor())
-#endif
, m_server(server)
{
}
@@ -119,14 +80,10 @@ public:
{
// We need to be executing within a strand to perform async operations
// on the I/O objects in this session.
-#ifdef BOOST_LATEST
net::dispatch(stream_.get_executor(),
beast::bind_front_handler(
&session::do_read,
shared_from_this()));
-#else
- do_read();
-#endif
}
void do_read()
@@ -140,7 +97,6 @@ public:
parser_.emplace();
parser_->body_limit(1000000000); // 1GB limit
-#ifdef BOOST_LATEST
// Set the timeout.
stream_.expires_after(std::chrono::seconds(30));
@@ -149,28 +105,12 @@ public:
beast::bind_front_handler(
&session::on_read,
shared_from_this()));
-#else
-
- http::async_read(socket_, buffer_, *parser_,
- boost::asio::bind_executor(
- strand_,
- std::bind(
- &session::on_read,
- shared_from_this(),
- std::placeholders::_1,
- std::placeholders::_2)));
-#endif
}
void
on_read(
-#ifdef BOOST_LATEST
beast::error_code ec,
std::size_t bytes_transferred
-#else
- boost::system::error_code ec,
- std::size_t bytes_transferred
-#endif
)
{
boost::ignore_unused(bytes_transferred);
@@ -193,15 +133,9 @@ public:
void
on_write(
-#ifdef BOOST_LATEST
bool close,
beast::error_code ec,
std::size_t bytes_transferred
-#else
- boost::system::error_code ec,
- std::size_t bytes_transferred,
- bool close
-#endif
)
{
boost::ignore_unused(bytes_transferred);
@@ -228,11 +162,7 @@ public:
{
// Send a TCP shutdown
beast::error_code ec;
-#ifdef BOOST_LATEST
stream_.socket().shutdown(tcp::socket::shutdown_send, ec);
-#else
- socket_.shutdown(tcp::socket::shutdown_send, ec);
-#endif
// At this point the connection is closed gracefully
}
};
@@ -242,13 +172,8 @@ public:
// Accepts incoming connections and launches the sessions
class listener : public std::enable_shared_from_this<listener>
{
-#ifdef BOOST_LATEST
net::io_context& ioc_;
-#endif
tcp::acceptor acceptor_;
-#ifndef BOOST_LATEST
- tcp::socket socket_;
-#endif
Server& m_server;
public:
@@ -256,20 +181,11 @@ public:
net::io_context& ioc,
tcp::endpoint endpoint,
Server& server)
-#ifdef BOOST_LATEST
: ioc_(ioc)
, acceptor_(net::make_strand(ioc))
-#else
- : acceptor_(ioc)
- , socket_(ioc)
-#endif
, m_server(server)
{
-#ifdef BOOST_VERSION
beast::error_code ec;
-#else
- boost::system::error_code ec;
-#endif
// Open the acceptor
acceptor_.open(endpoint.protocol(), ec);
@@ -309,10 +225,6 @@ public:
void
run()
{
-#ifndef BOOST_LATEST
- if (!acceptor_.is_open())
- return;
-#endif
do_accept();
}
@@ -321,28 +233,15 @@ private:
do_accept()
{
// The new connection gets its own strand
-#ifdef BOOST_LATEST
acceptor_.async_accept(
net::make_strand(ioc_),
beast::bind_front_handler(
&listener::on_accept,
shared_from_this()));
-#else
- acceptor_.async_accept(
- socket_,
- std::bind(
- &listener::on_accept,
- shared_from_this(),
- std::placeholders::_1));
-#endif
}
void
-#ifdef BOOST_LATEST
on_accept(beast::error_code ec, tcp::socket socket)
-#else
- on_accept(boost::system::error_code ec)
-#endif
{
if(ec)
{
@@ -352,11 +251,7 @@ private:
{
// Create the session and run it
std::make_shared<session>(
-#ifdef BOOST_LATEST
std::move(socket),
-#else
- std::move(socket_),
-#endif
m_server)->run();
}