replace boost::asio with standalone asio.

This commit is contained in:
Luca Schlecker 2022-06-06 16:38:46 +02:00 committed by Farook Al-Sammarraie
parent c780642dd8
commit f3d00bbecf
12 changed files with 340 additions and 336 deletions

View File

@ -10,8 +10,8 @@ To enable SSL, first your application needs to define either a `.crt` and `.key`
You also need to define `CROW_ENABLE_SSL` in your compiler definitions (`g++ main.cpp -DCROW_ENABLE_SSL` for example) or `set(CROW_FEATURES ssl)` in `CMakeLists.txt`.
You can also set your own SSL context (by using `boost::asio::ssl::context ctx`) and then applying it via the `#!cpp app.ssl(ctx)` method.<br><br>
You can also set your own SSL context (by using `asio::ssl::context ctx`) and then applying it via the `#!cpp app.ssl(ctx)` method.<br><br>
!!! warning
If you plan on using a proxy like Nginx or Apache2, **DO NOT** use SSL in crow, instead define it in your proxy and keep the connection between the proxy and Crow non-SSL.

View File

@ -41,14 +41,14 @@ This method involves creating a simple [ASIO](https://think-async.com/Asio/) cli
app.wait_for_server_start();
std::string sendmsg = "GET /\r\nContent-Length:3\r\nX-HeaderTest: 123\r\n\r\nA=B\r\n";
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string("127.0.0.1"), 45451));
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
size_t recved = c.receive(boost::asio::buffer(buf, 2048));
size_t recved = c.receive(asio::buffer(buf, 2048));
CHECK('A' == buf[recved - 1]); //This is specific to catch2 testing library, but it should give a general idea of how to read the response.
}

View File

@ -14,7 +14,7 @@ int main()
// Use .pem file
//app.port(18080).ssl_file("test.pem").run();
// Use custom context; see boost::asio::ssl::context
// Use custom context; see asio::ssl::context
/*
* crow::ssl_context_t ctx;
* ctx.set_verify_mode(...)

View File

@ -39,7 +39,7 @@
namespace crow
{
#ifdef CROW_ENABLE_SSL
using ssl_context_t = boost::asio::ssl::context;
using ssl_context_t = asio::ssl::context;
#endif
/// The main server application
@ -379,12 +379,12 @@ namespace crow
self_t& ssl_file(const std::string& crt_filename, const std::string& key_filename)
{
ssl_used_ = true;
ssl_context_.set_verify_mode(boost::asio::ssl::verify_peer);
ssl_context_.set_verify_mode(boost::asio::ssl::verify_client_once);
ssl_context_.set_verify_mode(asio::ssl::verify_peer);
ssl_context_.set_verify_mode(asio::ssl::verify_client_once);
ssl_context_.use_certificate_file(crt_filename, ssl_context_t::pem);
ssl_context_.use_private_key_file(key_filename, ssl_context_t::pem);
ssl_context_.set_options(
boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::no_sslv3);
asio::ssl::context::default_workarounds | asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3);
return *this;
}
@ -392,11 +392,11 @@ namespace crow
self_t& ssl_file(const std::string& pem_filename)
{
ssl_used_ = true;
ssl_context_.set_verify_mode(boost::asio::ssl::verify_peer);
ssl_context_.set_verify_mode(boost::asio::ssl::verify_client_once);
ssl_context_.set_verify_mode(asio::ssl::verify_peer);
ssl_context_.set_verify_mode(asio::ssl::verify_client_once);
ssl_context_.load_verify_file(pem_filename);
ssl_context_.set_options(
boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::no_sslv3);
asio::ssl::context::default_workarounds | asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3);
return *this;
}
@ -404,16 +404,16 @@ namespace crow
self_t& ssl_chainfile(const std::string& crt_filename, const std::string& key_filename)
{
ssl_used_ = true;
ssl_context_.set_verify_mode(boost::asio::ssl::verify_peer);
ssl_context_.set_verify_mode(boost::asio::ssl::verify_client_once);
ssl_context_.set_verify_mode(asio::ssl::verify_peer);
ssl_context_.set_verify_mode(asio::ssl::verify_client_once);
ssl_context_.use_certificate_chain_file(crt_filename);
ssl_context_.use_private_key_file(key_filename, ssl_context_t::pem);
ssl_context_.set_options(
boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::no_sslv3);
asio::ssl::context::default_workarounds | asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3);
return *this;
}
self_t& ssl(boost::asio::ssl::context&& ctx)
self_t& ssl(asio::ssl::context&& ctx)
{
ssl_used_ = true;
ssl_context_ = std::move(ctx);
@ -540,7 +540,7 @@ namespace crow
#ifdef CROW_ENABLE_SSL
std::unique_ptr<ssl_server_t> ssl_server_;
bool ssl_used_{false};
ssl_context_t ssl_context_{boost::asio::ssl::context::sslv23};
ssl_context_t ssl_context_{asio::ssl::context::sslv23};
#endif
std::unique_ptr<server_t> server_;

View File

@ -1,5 +1,6 @@
#pragma once
#include <boost/asio.hpp>
#define ASIO_STANDALONE
#include <asio.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/array.hpp>
@ -21,7 +22,7 @@
namespace crow
{
using tcp = boost::asio::ip::tcp;
using tcp = asio::ip::tcp;
#ifdef CROW_ENABLE_DEBUG
@ -36,7 +37,7 @@ namespace crow
public:
Connection(
boost::asio::io_service& io_service,
asio::io_service& io_service,
Handler* handler,
const std::string& server_name,
std::tuple<Middlewares...>* middlewares,
@ -78,7 +79,7 @@ namespace crow
void start()
{
adaptor_.start([this](const boost::system::error_code& ec) {
adaptor_.start([this](const std::error_code& ec) {
if (!ec)
{
start_deadline();
@ -373,7 +374,7 @@ namespace crow
void do_write_static()
{
is_writing = true;
boost::asio::write(adaptor_.socket(), buffers_);
asio::write(adaptor_.socket(), buffers_);
if (res.file_info.statResult == 0)
{
@ -381,8 +382,8 @@ namespace crow
char buf[16384];
while (is.read(buf, sizeof(buf)).gcount() > 0)
{
std::vector<boost::asio::const_buffer> buffers;
buffers.push_back(boost::asio::buffer(buf));
std::vector<asio::const_buffer> buffers;
buffers.push_back(asio::buffer(buf));
do_write_sync(buffers);
}
}
@ -419,12 +420,12 @@ namespace crow
else
{
is_writing = true;
boost::asio::write(adaptor_.socket(), buffers_); // Write the response start / headers
asio::write(adaptor_.socket(), buffers_); // Write the response start / headers
cancel_deadline_timer();
if (res.body.length() > 0)
{
std::string buf;
std::vector<boost::asio::const_buffer> buffers;
std::vector<asio::const_buffer> buffers;
while (res.body.length() > 16384)
{
@ -432,7 +433,7 @@ namespace crow
buf = res.body.substr(0, 16384);
res.body = res.body.substr(16384);
buffers.clear();
buffers.push_back(boost::asio::buffer(buf));
buffers.push_back(asio::buffer(buf));
do_write_sync(buffers);
}
// Collect whatever is left (less than 16KB) and send it down the socket
@ -441,7 +442,7 @@ namespace crow
res.body.clear();
buffers.clear();
buffers.push_back(boost::asio::buffer(buf));
buffers.push_back(asio::buffer(buf));
do_write_sync(buffers);
}
is_writing = false;
@ -464,8 +465,8 @@ namespace crow
//auto self = this->shared_from_this();
is_reading = true;
adaptor_.socket().async_read_some(
boost::asio::buffer(buffer_),
[this](const boost::system::error_code& ec, std::size_t bytes_transferred) {
asio::buffer(buffer_),
[this](const std::error_code& ec, std::size_t bytes_transferred) {
bool error_while_reading = true;
if (!ec)
{
@ -511,9 +512,9 @@ namespace crow
{
//auto self = this->shared_from_this();
is_writing = true;
boost::asio::async_write(
asio::async_write(
adaptor_.socket(), buffers_,
[&](const boost::system::error_code& ec, std::size_t /*bytes_transferred*/) {
[&](const std::error_code& ec, std::size_t /*bytes_transferred*/) {
is_writing = false;
res.clear();
res_body_copy_.clear();
@ -535,10 +536,10 @@ namespace crow
});
}
inline void do_write_sync(std::vector<boost::asio::const_buffer>& buffers)
inline void do_write_sync(std::vector<asio::const_buffer>& buffers)
{
boost::asio::write(adaptor_.socket(), buffers, [&](std::error_code ec, std::size_t) {
asio::write(adaptor_.socket(), buffers, [&](std::error_code ec, std::size_t) {
if (!ec)
{
return false;
@ -598,7 +599,7 @@ namespace crow
bool close_connection_ = false;
const std::string& server_name_;
std::vector<boost::asio::const_buffer> buffers_;
std::vector<asio::const_buffer> buffers_;
std::string content_length_;
std::string date_str_;

View File

@ -1,6 +1,7 @@
#pragma once
#include <boost/asio.hpp>
#define ASIO_STANDALONE
#include <asio.hpp>
#include "crow/common.h"
#include "crow/ci_map.h"
@ -35,7 +36,7 @@ namespace crow
void* middleware_context{};
void* middleware_container{};
boost::asio::io_service* io_service{};
asio::io_service* io_service{};
/// Construct an empty request. (sets the method to `GET`)
request():

View File

@ -2,9 +2,10 @@
#include <chrono>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/asio.hpp>
#define ASIO_STANDALONE
#include <asio.hpp>
#ifdef CROW_ENABLE_SSL
#include <boost/asio/ssl.hpp>
#include <asio/ssl.hpp>
#endif
#include <cstdint>
#include <atomic>
@ -19,14 +20,14 @@
namespace crow
{
using tcp = boost::asio::ip::tcp;
using tcp = asio::ip::tcp;
template<typename Handler, typename Adaptor = SocketAdaptor, typename... Middlewares>
class Server
{
public:
Server(Handler* handler, std::string bindaddr, uint16_t port, std::string server_name = std::string("Crow/") + VERSION, std::tuple<Middlewares...>* middlewares = nullptr, uint16_t concurrency = 1, uint8_t timeout = 5, typename Adaptor::context* adaptor_ctx = nullptr):
acceptor_(io_service_, tcp::endpoint(boost::asio::ip::address::from_string(bindaddr), port)),
acceptor_(io_service_, tcp::endpoint(asio::ip::address::from_string(bindaddr), port)),
signals_(io_service_),
tick_timer_(io_service_),
handler_(handler),
@ -61,7 +62,7 @@ namespace crow
{
uint16_t worker_thread_count = concurrency_ - 1;
for (int i = 0; i < worker_thread_count; i++)
io_service_pool_.emplace_back(new boost::asio::io_service());
io_service_pool_.emplace_back(new asio::io_service());
get_cached_date_str_pool_.resize(worker_thread_count);
task_timer_pool_.resize(worker_thread_count);
@ -141,7 +142,7 @@ namespace crow
CROW_LOG_INFO << "Call `app.loglevel(crow::LogLevel::Warning)` to hide Info level logs.";
signals_.async_wait(
[&](const boost::system::error_code& /*error*/, int /*signal_number*/) {
[&](const std::error_code& /*error*/, int /*signal_number*/) {
stop();
});
@ -215,7 +216,7 @@ namespace crow
if (!shutting_down_)
{
uint16_t service_idx = pick_io_service_idx();
boost::asio::io_service& is = *io_service_pool_[service_idx];
asio::io_service& is = *io_service_pool_[service_idx];
task_queue_length_pool_[service_idx]++;
CROW_LOG_DEBUG << &is << " {" << service_idx << "} queue length: " << task_queue_length_pool_[service_idx];
@ -225,7 +226,7 @@ namespace crow
acceptor_.async_accept(
p->socket(),
[this, p, &is, service_idx](boost::system::error_code ec) {
[this, p, &is, service_idx](std::error_code ec) {
if (!ec)
{
is.post(
@ -253,8 +254,8 @@ namespace crow
}
private:
boost::asio::io_service io_service_;
std::vector<std::unique_ptr<boost::asio::io_service>> io_service_pool_;
asio::io_service io_service_;
std::vector<std::unique_ptr<asio::io_service>> io_service_pool_;
std::vector<detail::task_timer*> task_timer_pool_;
std::vector<std::function<std::string()>> get_cached_date_str_pool_;
tcp::acceptor acceptor_;
@ -262,9 +263,9 @@ namespace crow
bool server_started_{false};
std::condition_variable cv_started_;
std::mutex start_mutex_;
boost::asio::signal_set signals_;
asio::signal_set signals_;
boost::asio::basic_waitable_timer<std::chrono::high_resolution_clock> tick_timer_;
asio::basic_waitable_timer<std::chrono::high_resolution_clock> tick_timer_;
Handler* handler_;
uint16_t concurrency_{2};

View File

@ -1898,7 +1898,7 @@ namespace crow
//std::vector<boost::asio::const_buffer> dump_ref(wvalue& v)
//std::vector<asio::const_buffer> dump_ref(wvalue& v)
//{
//}
} // namespace json

View File

@ -1,27 +1,28 @@
#pragma once
#include <boost/asio.hpp>
#define ASIO_STANDALONE
#include <asio.hpp>
#ifdef CROW_ENABLE_SSL
#include <boost/asio/ssl.hpp>
#include <asio/ssl.hpp>
#endif
#include "crow/settings.h"
#if BOOST_VERSION >= 107000
#define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
#define GET_IO_SERVICE(s) ((asio::io_context&)(s).get_executor().context())
#else
#define GET_IO_SERVICE(s) ((s).get_io_service())
#endif
namespace crow
{
using tcp = boost::asio::ip::tcp;
using tcp = asio::ip::tcp;
/// A wrapper for the boost::asio::ip::tcp::socket and boost::asio::ssl::stream
/// A wrapper for the asio::ip::tcp::socket and asio::ssl::stream
struct SocketAdaptor
{
using context = void;
SocketAdaptor(boost::asio::io_service& io_service, context*):
SocketAdaptor(asio::io_service& io_service, context*):
socket_(io_service)
{}
boost::asio::io_service& get_io_service()
asio::io_service& get_io_service()
{
return GET_IO_SERVICE(socket_);
}
@ -50,32 +51,32 @@ namespace crow
void close()
{
boost::system::error_code ec;
std::error_code ec;
socket_.close(ec);
}
void shutdown_readwrite()
{
boost::system::error_code ec;
socket_.shutdown(boost::asio::socket_base::shutdown_type::shutdown_both, ec);
std::error_code ec;
socket_.shutdown(asio::socket_base::shutdown_type::shutdown_both, ec);
}
void shutdown_write()
{
boost::system::error_code ec;
socket_.shutdown(boost::asio::socket_base::shutdown_type::shutdown_send, ec);
std::error_code ec;
socket_.shutdown(asio::socket_base::shutdown_type::shutdown_send, ec);
}
void shutdown_read()
{
boost::system::error_code ec;
socket_.shutdown(boost::asio::socket_base::shutdown_type::shutdown_receive, ec);
std::error_code ec;
socket_.shutdown(asio::socket_base::shutdown_type::shutdown_receive, ec);
}
template<typename F>
void start(F f)
{
f(boost::system::error_code());
f(std::error_code());
}
tcp::socket socket_;
@ -84,13 +85,13 @@ namespace crow
#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):
using context = asio::ssl::context;
using ssl_socket_t = asio::ssl::stream<tcp::socket>;
SSLAdaptor(asio::io_service& io_service, context* ctx):
ssl_socket_(new ssl_socket_t(io_service, *ctx))
{}
boost::asio::ssl::stream<tcp::socket>& socket()
asio::ssl::stream<tcp::socket>& socket()
{
return *ssl_socket_;
}
@ -115,7 +116,7 @@ namespace crow
{
if (is_open())
{
boost::system::error_code ec;
std::error_code ec;
raw_socket().close(ec);
}
}
@ -124,8 +125,8 @@ namespace crow
{
if (is_open())
{
boost::system::error_code ec;
raw_socket().shutdown(boost::asio::socket_base::shutdown_type::shutdown_both, ec);
std::error_code ec;
raw_socket().shutdown(asio::socket_base::shutdown_type::shutdown_both, ec);
}
}
@ -133,8 +134,8 @@ namespace crow
{
if (is_open())
{
boost::system::error_code ec;
raw_socket().shutdown(boost::asio::socket_base::shutdown_type::shutdown_send, ec);
std::error_code ec;
raw_socket().shutdown(asio::socket_base::shutdown_type::shutdown_send, ec);
}
}
@ -142,12 +143,12 @@ namespace crow
{
if (is_open())
{
boost::system::error_code ec;
raw_socket().shutdown(boost::asio::socket_base::shutdown_type::shutdown_receive, ec);
std::error_code ec;
raw_socket().shutdown(asio::socket_base::shutdown_type::shutdown_receive, ec);
}
}
boost::asio::io_service& get_io_service()
asio::io_service& get_io_service()
{
return GET_IO_SERVICE(raw_socket());
}
@ -155,13 +156,13 @@ namespace crow
template<typename F>
void start(F f)
{
ssl_socket_->async_handshake(boost::asio::ssl::stream_base::server,
[f](const boost::system::error_code& ec) {
ssl_socket_->async_handshake(asio::ssl::stream_base::server,
[f](const std::error_code& ec) {
f(ec);
});
}
std::unique_ptr<boost::asio::ssl::stream<tcp::socket>> ssl_socket_;
std::unique_ptr<asio::ssl::stream<tcp::socket>> ssl_socket_;
};
#endif
} // namespace crow

View File

@ -283,12 +283,12 @@ namespace crow
case WebSocketReadState::MiniHeader:
{
mini_header_ = 0;
//boost::asio::async_read(adaptor_.socket(), boost::asio::buffer(&mini_header_, 1),
//asio::async_read(adaptor_.socket(), asio::buffer(&mini_header_, 1),
adaptor_.socket().async_read_some(
boost::asio::buffer(&mini_header_, 2),
[this](const boost::system::error_code& ec, std::size_t
asio::buffer(&mini_header_, 2),
[this](const std::error_code& ec, std::size_t
#ifdef CROW_ENABLE_DEBUG
bytes_transferred
bytes_transferred
#endif
)
@ -352,11 +352,11 @@ namespace crow
{
remaining_length_ = 0;
remaining_length16_ = 0;
boost::asio::async_read(
adaptor_.socket(), boost::asio::buffer(&remaining_length16_, 2),
[this](const boost::system::error_code& ec, std::size_t
asio::async_read(
adaptor_.socket(), asio::buffer(&remaining_length16_, 2),
[this](const std::error_code& ec, std::size_t
#ifdef CROW_ENABLE_DEBUG
bytes_transferred
bytes_transferred
#endif
) {
is_reading = false;
@ -388,11 +388,11 @@ namespace crow
break;
case WebSocketReadState::Len64:
{
boost::asio::async_read(
adaptor_.socket(), boost::asio::buffer(&remaining_length_, 8),
[this](const boost::system::error_code& ec, std::size_t
asio::async_read(
adaptor_.socket(), asio::buffer(&remaining_length_, 8),
[this](const std::error_code& ec, std::size_t
#ifdef CROW_ENABLE_DEBUG
bytes_transferred
bytes_transferred
#endif
) {
is_reading = false;
@ -432,11 +432,11 @@ namespace crow
}
else if (has_mask_)
{
boost::asio::async_read(
adaptor_.socket(), boost::asio::buffer((char*)&mask_, 4),
[this](const boost::system::error_code& ec, std::size_t
asio::async_read(
adaptor_.socket(), asio::buffer((char*)&mask_, 4),
[this](const std::error_code& ec, std::size_t
#ifdef CROW_ENABLE_DEBUG
bytes_transferred
bytes_transferred
#endif
) {
is_reading = false;
@ -475,8 +475,8 @@ namespace crow
if (remaining_length_ < to_read)
to_read = remaining_length_;
adaptor_.socket().async_read_some(
boost::asio::buffer(buffer_, static_cast<std::size_t>(to_read)),
[this](const boost::system::error_code& ec, std::size_t bytes_transferred) {
asio::buffer(buffer_, static_cast<std::size_t>(to_read)),
[this](const std::error_code& ec, std::size_t bytes_transferred) {
is_reading = false;
if (!ec)
@ -619,15 +619,15 @@ namespace crow
if (sending_buffers_.empty())
{
sending_buffers_.swap(write_buffers_);
std::vector<boost::asio::const_buffer> buffers;
std::vector<asio::const_buffer> buffers;
buffers.reserve(sending_buffers_.size());
for (auto& s : sending_buffers_)
{
buffers.emplace_back(boost::asio::buffer(s));
buffers.emplace_back(asio::buffer(s));
}
boost::asio::async_write(
asio::async_write(
adaptor_.socket(), buffers,
[&](const boost::system::error_code& ec, std::size_t /*bytes_transferred*/) {
[&](const std::error_code& ec, std::size_t /*bytes_transferred*/) {
sending_buffers_.clear();
if (!ec && !close_connection_)
{

View File

@ -41,15 +41,15 @@ TEST_CASE("SSL")
std::string sendmsg = "GET /\r\n\r\n";
boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23);
asio::ssl::context ctx(asio::ssl::context::sslv23);
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> c(is, ctx);
c.lowest_layer().connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45460));
asio::ssl::stream<asio::ip::tcp::socket> c(is, ctx);
c.lowest_layer().connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45460));
c.handshake(boost::asio::ssl::stream_base::client);
c.write_some(boost::asio::buffer(sendmsg));
c.handshake(asio::ssl::stream_base::client);
c.write_some(asio::buffer(sendmsg));
size_t x = 0;
size_t y = 0;
@ -57,7 +57,7 @@ TEST_CASE("SSL")
while (x < 121)
{
y = c.read_some(boost::asio::buffer(buf, 2048));
y = c.read_some(asio::buffer(buf, 2048));
x += y;
buf[y] = '\0';
}
@ -74,24 +74,24 @@ TEST_CASE("SSL")
CHECK(std::string("Hello world, I'm keycrt.").substr((z * -1)) == to_test);
}
boost::system::error_code ec;
c.lowest_layer().shutdown(boost::asio::socket_base::shutdown_type::shutdown_both, ec);
std::error_code ec;
c.lowest_layer().shutdown(asio::socket_base::shutdown_type::shutdown_both, ec);
}
/*
boost::asio::io_service is2;
asio::io_service is2;
{
std::cout << "started second one" << std::endl;
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> c(is2, ctx);
c.lowest_layer().connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45461));
asio::ssl::stream<asio::ip::tcp::socket> c(is2, ctx);
c.lowest_layer().connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45461));
c.handshake(boost::asio::ssl::stream_base::client);
c.handshake(asio::ssl::stream_base::client);
c.write_some(boost::asio::buffer(sendmsg));
c.write_some(asio::buffer(sendmsg));
size_t sz = c.read_some(boost::asio::buffer(buf2, 2048));
size_t sz = c.read_some(asio::buffer(buf2, 2048));
CHECK("Hello world, I'm pem." == std::string(buf2).substr((sz - 21)));
}
*/

View File

@ -467,17 +467,17 @@ TEST_CASE("server_handling_error_request")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
std::string sendmsg = "POX";
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
try
{
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
FAIL_CHECK();
}
catch (std::exception& e)
@ -499,17 +499,17 @@ TEST_CASE("server_handling_error_request_http_version")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
std::string sendmsg = "POST /\r\nContent-Length:3\r\nX-HeaderTest: 123\r\n\r\nA=B\r\n";
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
try
{
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
FAIL_CHECK();
}
catch (std::exception& e)
@ -541,30 +541,30 @@ TEST_CASE("multi_server")
std::string sendmsg =
"POST / HTTP/1.0\r\nContent-Length:3\r\nX-HeaderTest: 123\r\n\r\nA=B\r\n";
{
boost::asio::io_service is;
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::io_service is;
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
size_t recved = c.receive(boost::asio::buffer(buf, 2048));
size_t recved = c.receive(asio::buffer(buf, 2048));
CHECK('A' == buf[recved - 1]);
}
{
boost::asio::io_service is;
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
asio::io_service is;
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
for (auto ch : sendmsg)
{
char buf[1] = {ch};
c.send(boost::asio::buffer(buf));
c.send(asio::buffer(buf));
}
size_t recved = c.receive(boost::asio::buffer(buf, 2048));
size_t recved = c.receive(asio::buffer(buf, 2048));
CHECK('B' == buf[recved - 1]);
}
@ -591,12 +591,12 @@ TEST_CASE("undefined_status_code")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45471).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
auto sendRequestAndGetStatusCode = [&](const std::string& route) -> unsigned {
boost::asio::ip::tcp::socket socket(is);
socket.connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), app.port()));
asio::ip::tcp::socket socket(is);
socket.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), app.port()));
boost::asio::streambuf request;
asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "GET " << route << " HTTP/1.0\r\n";
request_stream << "Host: " << LOCALHOST_ADDRESS << "\r\n";
@ -604,10 +604,10 @@ TEST_CASE("undefined_status_code")
request_stream << "Connection: close\r\n\r\n";
// Send the request.
boost::asio::write(socket, request);
asio::write(socket, request);
boost::asio::streambuf response;
boost::asio::read_until(socket, response, "\r\n");
asio::streambuf response;
asio::read_until(socket, response, "\r\n");
std::istream response_stream(&response);
std::string http_version;
@ -1407,15 +1407,15 @@ TEST_CASE("middleware_context")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
std::string sendmsg = "GET /\r\n\r\n";
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
}
{
@ -1432,13 +1432,13 @@ TEST_CASE("middleware_context")
}
std::string sendmsg2 = "GET /break\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg2));
c.send(asio::buffer(sendmsg2));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
}
{
@ -1487,25 +1487,25 @@ TEST_CASE("local_middleware")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer("GET /\r\n\r\n"));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(std::string(buf).find("200") != std::string::npos);
}
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /secret\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer("GET /secret\r\n\r\n"));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(std::string(buf).find("403") != std::string::npos);
@ -1569,15 +1569,15 @@ TEST_CASE("middleware_blueprint")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /a/b/\r\n\r\n"));
c.send(asio::buffer("GET /a/b/\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
}
{
@ -1592,13 +1592,13 @@ TEST_CASE("middleware_blueprint")
CHECK("1 after" == out[6]);
}
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /a/c/break\r\n\r\n"));
c.send(asio::buffer("GET /a/c/break\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
}
{
@ -1643,15 +1643,15 @@ TEST_CASE("middleware_cookieparser_parse")
std::string sendmsg =
"GET /\r\nCookie: key1=value1; key2=\"val=ue2\"; key3=\"val\"ue3\"; "
"key4=\"val\"ue4\"\r\n\r\n";
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
}
{
@ -1747,42 +1747,42 @@ TEST_CASE("middleware_cors")
});
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /\r\n\r\n"));
c.send(asio::buffer("GET /\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(std::string(buf).find("Access-Control-Allow-Origin: *") != std::string::npos);
}
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /origin\r\n\r\n"));
c.send(asio::buffer("GET /origin\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(std::string(buf).find("Access-Control-Allow-Origin: test.test") != std::string::npos);
}
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer("GET /nocors/path\r\n\r\n"));
c.send(asio::buffer("GET /nocors/path\r\n\r\n"));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(std::string(buf).find("Access-Control-Allow-Origin:") == std::string::npos);
@ -1805,21 +1805,21 @@ TEST_CASE("bug_quick_repeated_request")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
std::string sendmsg = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n";
boost::asio::io_service is;
asio::io_service is;
{
std::vector<std::future<void>> v;
for (int i = 0; i < 5; i++)
{
v.push_back(async(launch::async, [&] {
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
for (int j = 0; j < 5; j++)
{
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
size_t received = c.receive(boost::asio::buffer(buf, 2048));
size_t received = c.receive(asio::buffer(buf, 2048));
CHECK("hello" == std::string(buf + received - 5, buf + received));
}
c.close();
@ -1847,17 +1847,17 @@ TEST_CASE("simple_url_params")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
std::string sendmsg;
// check empty params
sendmsg = "GET /params\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
stringstream ss;
@ -1868,11 +1868,11 @@ TEST_CASE("simple_url_params")
// check single presence
sendmsg = "GET /params?foobar\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(last_url_params.get("missing") == nullptr);
@ -1882,11 +1882,11 @@ TEST_CASE("simple_url_params")
// check multiple presence
sendmsg = "GET /params?foo&bar&baz\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(last_url_params.get("missing") == nullptr);
@ -1897,11 +1897,11 @@ TEST_CASE("simple_url_params")
// check single value
sendmsg = "GET /params?hello=world\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(string(last_url_params.get("hello")) == "world");
@ -1909,11 +1909,11 @@ TEST_CASE("simple_url_params")
// check multiple value
sendmsg = "GET /params?hello=world&left=right&up=down\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
query_string mutable_params(last_url_params);
@ -1929,11 +1929,11 @@ TEST_CASE("simple_url_params")
// check multiple value, multiple types
sendmsg = "GET /params?int=100&double=123.45&boolean=1\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(boost::lexical_cast<int>(last_url_params.get("int")) == 100);
@ -1944,12 +1944,12 @@ TEST_CASE("simple_url_params")
// check single array value
sendmsg = "GET /params?tmnt[]=leonardo\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(last_url_params.get("tmnt") == nullptr);
@ -1959,12 +1959,12 @@ TEST_CASE("simple_url_params")
// check multiple array value
sendmsg = "GET /params?tmnt[]=leonardo&tmnt[]=donatello&tmnt[]=raphael\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(last_url_params.get_list("tmnt").size() == 3);
@ -1977,11 +1977,11 @@ TEST_CASE("simple_url_params")
// check dictionary value
sendmsg = "GET /params?kees[one]=vee1&kees[two]=vee2&kees[three]=vee3\r\n\r\n";
{
boost::asio::ip::tcp::socket c(is);
asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
c.receive(boost::asio::buffer(buf, 2048));
c.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
c.receive(asio::buffer(buf, 2048));
c.close();
CHECK(last_url_params.get_dict("kees").size() == 3);
@ -2243,19 +2243,19 @@ TEST_CASE("stream_response")
std::thread runTest([&app, &key_response, key_response_size, keyword_]() {
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
std::string sendmsg;
//Total bytes received
unsigned int received = 0;
sendmsg = "GET /test HTTP/1.0\r\n\r\n";
{
boost::asio::streambuf b;
asio::streambuf b;
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(boost::asio::buffer(sendmsg));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
c.send(asio::buffer(sendmsg));
// consuming the headers, since we don't need those for the test
static char buf[2048];
@ -2275,7 +2275,7 @@ TEST_CASE("stream_response")
while (received < key_response_size)
{
boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(16384);
asio::streambuf::mutable_buffers_type bufs = b.prepare(16384);
size_t n(0);
n = c.receive(bufs);
@ -2323,11 +2323,11 @@ TEST_CASE("websocket")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).port(45451).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
char buf[2048];
@ -2335,9 +2335,9 @@ TEST_CASE("websocket")
//----------Handshake----------
{
std::fill_n(buf, 2048, 0);
c.send(boost::asio::buffer(http_message));
c.send(asio::buffer(http_message));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
CHECK(connected);
}
@ -2346,8 +2346,8 @@ TEST_CASE("websocket")
std::fill_n(buf, 2048, 0);
char ping_message[2]("\x89");
c.send(boost::asio::buffer(ping_message, 2));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(ping_message, 2));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
CHECK((int)(unsigned char)buf[0] == 0x8A);
}
@ -2357,8 +2357,8 @@ TEST_CASE("websocket")
char not_ping_message[2 + 6 + 1]("\x81\x06"
"PINGME");
c.send(boost::asio::buffer(not_ping_message, 8));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(not_ping_message, 8));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
CHECK((int)(unsigned char)buf[0] == 0x89);
}
@ -2368,8 +2368,8 @@ TEST_CASE("websocket")
char text_message[2 + 5 + 1]("\x81\x05"
"Hello");
c.send(boost::asio::buffer(text_message, 7));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(text_message, 7));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::string checkstring(std::string(buf).substr(0, 12));
CHECK(checkstring == "\x81\x0AHello back");
@ -2380,8 +2380,8 @@ TEST_CASE("websocket")
char bin_message[2 + 9 + 1]("\x82\x09"
"Hello bin");
c.send(boost::asio::buffer(bin_message, 11));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(bin_message, 11));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::string checkstring2(std::string(buf).substr(0, 16));
CHECK(checkstring2 == "\x82\x0EHello back bin");
@ -2393,8 +2393,8 @@ TEST_CASE("websocket")
"\x67\xc6\x69\x73"
"\x2f\xa3\x05\x1f\x08");
c.send(boost::asio::buffer(text_masked_message, 11));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(text_masked_message, 11));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::string checkstring3(std::string(buf).substr(0, 12));
CHECK(checkstring3 == "\x81\x0AHello back");
@ -2406,8 +2406,8 @@ TEST_CASE("websocket")
"\x67\xc6\x69\x73"
"\x2f\xa3\x05\x1f\x08\xe6\x0b\x1a\x09");
c.send(boost::asio::buffer(bin_masked_message, 15));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(bin_masked_message, 15));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::string checkstring4(std::string(buf).substr(0, 16));
CHECK(checkstring4 == "\x82\x0EHello back bin");
@ -2419,8 +2419,8 @@ TEST_CASE("websocket")
"\x00\x05"
"Hello");
c.send(boost::asio::buffer(b16_text_message, 9));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(b16_text_message, 9));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::string checkstring(std::string(buf).substr(0, 12));
CHECK(checkstring == "\x81\x0AHello back");
@ -2432,8 +2432,8 @@ TEST_CASE("websocket")
"\x00\x00\x00\x00\x00\x00\x00\x05"
"Hello");
c.send(boost::asio::buffer(b64text_message, 15));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(b64text_message, 15));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::string checkstring(std::string(buf).substr(0, 12));
CHECK(checkstring == "\x81\x0AHello back");
@ -2443,8 +2443,8 @@ TEST_CASE("websocket")
std::fill_n(buf, 2048, 0);
char close_message[10]("\x88"); //I do not know why, but the websocket code does not read this unless it's longer than 4 or so bytes
c.send(boost::asio::buffer(close_message, 10));
c.receive(boost::asio::buffer(buf, 2048));
c.send(asio::buffer(close_message, 10));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
CHECK((int)(unsigned char)buf[0] == 0x88);
}
@ -2482,11 +2482,11 @@ TEST_CASE("websocket_max_payload")
auto _ = app.websocket_max_payload(3).bindaddr(LOCALHOST_ADDRESS).port(45461).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45461));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45461));
char buf[2048];
@ -2494,9 +2494,9 @@ TEST_CASE("websocket_max_payload")
//----------Handshake----------
{
std::fill_n(buf, 2048, 0);
c.send(boost::asio::buffer(http_message));
c.send(asio::buffer(http_message));
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
std::this_thread::sleep_for(std::chrono::milliseconds(5));
CHECK(connected);
}
@ -2506,10 +2506,10 @@ TEST_CASE("websocket_max_payload")
char text_message[2 + 5 + 1]("\x81\x05"
"Hello");
c.send(boost::asio::buffer(text_message, 7));
c.send(asio::buffer(text_message, 7));
try
{
c.receive(boost::asio::buffer(buf, 2048));
c.receive(asio::buffer(buf, 2048));
FAIL_CHECK();
}
catch (std::exception& e)
@ -2518,8 +2518,8 @@ TEST_CASE("websocket_max_payload")
}
}
boost::system::error_code ec;
c.lowest_layer().shutdown(boost::asio::socket_base::shutdown_type::shutdown_both, ec);
std::error_code ec;
c.lowest_layer().shutdown(asio::socket_base::shutdown_type::shutdown_both, ec);
app.stop();
} // websocket_max_payload
@ -2612,19 +2612,19 @@ TEST_CASE("zlib_compression")
return inflated_string;
};
boost::asio::io_service is;
asio::io_service is;
{
// Compression
{
boost::asio::ip::tcp::socket socket[2] = {boost::asio::ip::tcp::socket(is), boost::asio::ip::tcp::socket(is)};
socket[0].connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
socket[1].connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
asio::ip::tcp::socket socket[2] = {asio::ip::tcp::socket(is), asio::ip::tcp::socket(is)};
socket[0].connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
socket[1].connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
socket[0].send(boost::asio::buffer(test_compress_msg));
socket[1].send(boost::asio::buffer(test_compress_msg));
socket[0].send(asio::buffer(test_compress_msg));
socket[1].send(asio::buffer(test_compress_msg));
socket[0].receive(boost::asio::buffer(buf_deflate, 2048));
socket[1].receive(boost::asio::buffer(buf_gzip, 2048));
socket[0].receive(asio::buffer(buf_deflate, 2048));
socket[1].receive(asio::buffer(buf_gzip, 2048));
std::string response_deflate;
std::string response_gzip;
@ -2685,15 +2685,15 @@ TEST_CASE("zlib_compression")
}
// No Header (thus no compression)
{
boost::asio::ip::tcp::socket socket[2] = {boost::asio::ip::tcp::socket(is), boost::asio::ip::tcp::socket(is)};
socket[0].connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
socket[1].connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
asio::ip::tcp::socket socket[2] = {asio::ip::tcp::socket(is), asio::ip::tcp::socket(is)};
socket[0].connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
socket[1].connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
socket[0].send(boost::asio::buffer(test_compress_no_header_msg));
socket[1].send(boost::asio::buffer(test_compress_no_header_msg));
socket[0].send(asio::buffer(test_compress_no_header_msg));
socket[1].send(asio::buffer(test_compress_no_header_msg));
socket[0].receive(boost::asio::buffer(buf_deflate, 2048));
socket[1].receive(boost::asio::buffer(buf_gzip, 2048));
socket[0].receive(asio::buffer(buf_deflate, 2048));
socket[1].receive(asio::buffer(buf_gzip, 2048));
std::string response_deflate(buf_deflate);
std::string response_gzip(buf_gzip);
@ -2707,15 +2707,15 @@ TEST_CASE("zlib_compression")
}
// No compression
{
boost::asio::ip::tcp::socket socket[2] = {boost::asio::ip::tcp::socket(is), boost::asio::ip::tcp::socket(is)};
socket[0].connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
socket[1].connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
asio::ip::tcp::socket socket[2] = {asio::ip::tcp::socket(is), asio::ip::tcp::socket(is)};
socket[0].connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
socket[1].connect(asio::ip::tcp::endpoint(asio::ip::address::from_string(LOCALHOST_ADDRESS), 45452));
socket[0].send(boost::asio::buffer(test_none_msg));
socket[1].send(boost::asio::buffer(test_none_msg));
socket[0].send(asio::buffer(test_none_msg));
socket[1].send(asio::buffer(test_none_msg));
socket[0].receive(boost::asio::buffer(buf_deflate, 2048));
socket[1].receive(boost::asio::buffer(buf_gzip, 2048));
socket[0].receive(asio::buffer(buf_deflate, 2048));
socket[1].receive(asio::buffer(buf_gzip, 2048));
std::string response_deflate(buf_deflate);
std::string response_gzip(buf_gzip);
@ -3013,18 +3013,18 @@ TEST_CASE("timeout")
auto _ = app.bindaddr(LOCALHOST_ADDRESS).timeout(timeout).port(45451).run_async();
app.wait_for_server_start();
boost::asio::io_service is;
asio::io_service is;
std::string sendmsg = "GET /\r\n\r\n";
future_status status;
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
auto receive_future = async(launch::async, [&]() {
boost::system::error_code ec;
c.receive(boost::asio::buffer(buf, 2048), 0, ec);
std::error_code ec;
c.receive(asio::buffer(buf, 2048), 0, ec);
return ec;
});
status = receive_future.wait_for(std::chrono::seconds(timeout - 1));
@ -3032,25 +3032,25 @@ TEST_CASE("timeout")
status = receive_future.wait_for(chrono::seconds(3));
CHECK(status == future_status::ready);
CHECK(receive_future.get() == boost::asio::error::eof);
CHECK(receive_future.get() == asio::error::eof);
c.close();
}
{
boost::asio::ip::tcp::socket c(is);
c.connect(boost::asio::ip::tcp::endpoint(
boost::asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
asio::ip::tcp::socket c(is);
c.connect(asio::ip::tcp::endpoint(
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
size_t received;
auto receive_future = async(launch::async, [&]() {
boost::system::error_code ec;
received = c.receive(boost::asio::buffer(buf, 2048), 0, ec);
std::error_code ec;
received = c.receive(asio::buffer(buf, 2048), 0, ec);
return ec;
});
status = receive_future.wait_for(std::chrono::seconds(timeout - 1));
CHECK(status == future_status::timeout);
c.send(boost::asio::buffer(sendmsg));
c.send(asio::buffer(sendmsg));
status = receive_future.wait_for(chrono::seconds(3));
CHECK(status == future_status::ready);
@ -3069,9 +3069,9 @@ TEST_CASE("timeout")
TEST_CASE("task_timer")
{
using work_guard_type = boost::asio::executor_work_guard<boost::asio::io_service::executor_type>;
using work_guard_type = asio::executor_work_guard<asio::io_service::executor_type>;
boost::asio::io_service io_service;
asio::io_service io_service;
work_guard_type work_guard(io_service.get_executor());
thread io_thread([&io_service]() {
io_service.run();