diff --git a/patch/ros-rolling-async-web-server-cpp.patch b/patch/ros-rolling-async-web-server-cpp.patch new file mode 100644 index 0000000..0395877 --- /dev/null +++ b/patch/ros-rolling-async-web-server-cpp.patch @@ -0,0 +1,109 @@ +diff --git a/include/async_web_server_cpp/http_connection.hpp b/include/async_web_server_cpp/http_connection.hpp +index 62ccd89..646359e 100644 +--- a/include/async_web_server_cpp/http_connection.hpp ++++ b/include/async_web_server_cpp/http_connection.hpp +@@ -40,7 +40,7 @@ public: + ReadHandler; + typedef std::shared_ptr ResourcePtr; + +- explicit HttpConnection(boost::asio::io_service& io_service, ++ explicit HttpConnection(boost::asio::io_context& io_context, + HttpServerRequestHandler request_handler); + + boost::asio::ip::tcp::socket& socket(); +@@ -79,7 +79,7 @@ private: + void handle_write(const boost::system::error_code& e, + std::vector resources); + +- boost::asio::io_service::strand strand_; ++ boost::asio::strand strand_; + boost::asio::ip::tcp::socket socket_; + HttpServerRequestHandler request_handler_; + boost::array buffer_; +diff --git a/include/async_web_server_cpp/http_server.hpp b/include/async_web_server_cpp/http_server.hpp +index f772f55..ee99c72 100644 +--- a/include/async_web_server_cpp/http_server.hpp ++++ b/include/async_web_server_cpp/http_server.hpp +@@ -40,7 +40,7 @@ private: + + void handle_accept(const boost::system::error_code& e); + +- boost::asio::io_service io_service_; ++ boost::asio::io_context io_context_; + boost::asio::ip::tcp::acceptor acceptor_; + std::size_t thread_pool_size_; + std::vector> threads_; +diff --git a/src/http_connection.cpp b/src/http_connection.cpp +index bcb77d4..17a02ad 100644 +--- a/src/http_connection.cpp ++++ b/src/http_connection.cpp +@@ -6,9 +6,9 @@ + namespace async_web_server_cpp + { + +-HttpConnection::HttpConnection(boost::asio::io_service& io_service, ++HttpConnection::HttpConnection(boost::asio::io_context& io_context, + HttpServerRequestHandler handler) +- : strand_(io_service), socket_(io_service), request_handler_(handler), ++ : strand_(io_context.get_executor()), socket_(io_context), request_handler_(handler), + write_in_progress_(false) + { + } +@@ -77,7 +77,8 @@ void HttpConnection::async_read(ReadHandler callback) + } + socket_.async_read_some( + boost::asio::buffer(buffer_), +- strand_.wrap( ++ boost::asio::bind_executor( ++ strand_, + boost::bind(&HttpConnection::handle_read_raw, shared_from_this(), + callback, boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred))); +diff --git a/src/http_server.cpp b/src/http_server.cpp +index 2c1c4ea..502cf4b 100644 +--- a/src/http_server.cpp ++++ b/src/http_server.cpp +@@ -8,14 +8,12 @@ namespace async_web_server_cpp + HttpServer::HttpServer(const std::string& address, const std::string& port, + HttpServerRequestHandler request_handler, + std::size_t thread_pool_size) +- : acceptor_(io_service_), thread_pool_size_(thread_pool_size), ++ : acceptor_(io_context_), thread_pool_size_(thread_pool_size), + request_handler_(request_handler) + { + +- boost::asio::ip::tcp::resolver resolver(io_service_); +- boost::asio::ip::tcp::resolver::query query( +- address, port, boost::asio::ip::resolver_query_base::flags()); +- boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query); ++ boost::asio::ip::tcp::resolver resolver(io_context_); ++ boost::asio::ip::tcp::endpoint endpoint = resolver.resolve(address, port).begin()->endpoint(); + acceptor_.open(endpoint.protocol()); + acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); + acceptor_.bind(endpoint); +@@ -33,14 +31,14 @@ void HttpServer::run() + for (std::size_t i = 0; i < thread_pool_size_; ++i) + { + boost::shared_ptr thread(new boost::thread( +- boost::bind(&boost::asio::io_service::run, &io_service_))); ++ boost::bind(&boost::asio::io_context::run, &io_context_))); + threads_.push_back(thread); + } + } + + void HttpServer::start_accept() + { +- new_connection_.reset(new HttpConnection(io_service_, request_handler_)); ++ new_connection_.reset(new HttpConnection(io_context_, request_handler_)); + acceptor_.async_accept(new_connection_->socket(), + boost::bind(&HttpServer::handle_accept, this, + boost::asio::placeholders::error)); +@@ -62,7 +60,7 @@ void HttpServer::stop() + acceptor_.cancel(); + acceptor_.close(); + } +- io_service_.stop(); ++ io_context_.stop(); + // Wait for all threads in the pool to exit. + for (std::size_t i = 0; i < threads_.size(); ++i) + threads_[i]->join(); diff --git a/vinca.yaml b/vinca.yaml index 3e4a301..af400cd 100644 --- a/vinca.yaml +++ b/vinca.yaml @@ -162,6 +162,12 @@ packages_select_by_deps: - py-trees-ros - py-trees-ros-viewer + - nmea-navsat-driver + - diagnostic-remote-logging + - robot-localization + - web-video-server + - persist-parameter-server + # These packages are only built on Linux as they depend on Linux-specific API - if: linux then: