mirror of https://github.com/CrowCpp/Crow.git
replace boost::asio with standalone asio.
This commit is contained in:
parent
c780642dd8
commit
f3d00bbecf
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
}
|
||||
|
||||
|
|
|
@ -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(...)
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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_)
|
||||
{
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue