summaryrefslogtreecommitdiffstats
path: root/server/src/http_client.cppm
diff options
context:
space:
mode:
authorRutger Broekhoff2026-08-28 21:12:55 +0200
committerRutger Broekhoff2026-08-28 21:12:55 +0200
commita5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac (patch)
treeb4e0ec57c3799e9f649c6bfe27cb6c3313b97364 /server/src/http_client.cppm
parent973aec43ea54bbf95b64fbcb636403401d1ca60e (diff)
downloadroutemon-a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac.tar.gz
routemon-a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac.zip
clang-format C++ sources
Diffstat (limited to 'server/src/http_client.cppm')
-rw-r--r--server/src/http_client.cppm74
1 files changed, 39 insertions, 35 deletions
diff --git a/server/src/http_client.cppm b/server/src/http_client.cppm
index d5316d6..bea5384 100644
--- a/server/src/http_client.cppm
+++ b/server/src/http_client.cppm
@@ -16,47 +16,51 @@ using tcp = net::ip::tcp;
16 16
17namespace routemon::http { 17namespace routemon::http {
18 18
19 export class client { 19export class client
20 net::io_context& ioc_; 20{
21 ssl::context sslc_{ssl::context::tlsv12_client}; 21 net::io_context& ioc_;
22 tcp::resolver resolver_; 22 ssl::context sslc_{ssl::context::tlsv12_client};
23 tcp::resolver resolver_;
23 24
24 public: 25public:
25 explicit client(net::io_context& ioc) 26 explicit client(net::io_context& ioc) : ioc_{ioc}, resolver_{ioc}
26 : ioc_{ioc}, resolver_{ioc} 27 {
27 { 28 sslc_.set_default_verify_paths();
28 sslc_.set_default_verify_paths(); 29 sslc_.set_verify_mode(
29 sslc_.set_verify_mode(net::ssl::verify_peer | net::ssl::verify_fail_if_no_peer_cert); 30 net::ssl::verify_peer | net::ssl::verify_fail_if_no_peer_cert);
30 } 31 }
31 32
32 template<class ReqBody> 33 template <class ReqBody>
33 auto do_request(bhttp::request<ReqBody>& req) -> bhttp::response<bhttp::dynamic_body> { 34 auto do_request(bhttp::request<ReqBody>& req)
34 auto stream = ssl::stream<beast::tcp_stream>{ioc_, sslc_}; 35 -> bhttp::response<bhttp::dynamic_body>
36 {
37 auto stream = ssl::stream<beast::tcp_stream>{ioc_, sslc_};
35 38
36 auto host = std::string{req.at(bhttp::field::host)}; 39 auto host = std::string{req.at(bhttp::field::host)};
37 if (!SSL_set_tlsext_host_name(stream.native_handle(), host.c_str())) { 40 if (!SSL_set_tlsext_host_name(stream.native_handle(), host.c_str()))
38 throw beast::system_error(static_cast<int>(::ERR_get_error()), 41 {
39 net::error::get_ssl_category()); 42 throw beast::system_error(
40 } 43 static_cast<int>(::ERR_get_error()), net::error::get_ssl_category());
41 stream.set_verify_callback(ssl::host_name_verification(host)); 44 }
42 auto const results = resolver_.resolve(host, "443"); 45 stream.set_verify_callback(ssl::host_name_verification(host));
43 beast::get_lowest_layer(stream).connect(results); 46 auto const results = resolver_.resolve(host, "443");
44 stream.handshake(ssl::stream_base::client); 47 beast::get_lowest_layer(stream).connect(results);
48 stream.handshake(ssl::stream_base::client);
45 49
46 req.set(bhttp::field::user_agent, "routemon/1.0"); 50 req.set(bhttp::field::user_agent, "routemon/1.0");
47 bhttp::write(stream, req); 51 bhttp::write(stream, req);
48 52
49 auto buffer = beast::flat_buffer{}; 53 auto buffer = beast::flat_buffer{};
50 auto res = bhttp::response<bhttp::dynamic_body>{}; 54 auto res = bhttp::response<bhttp::dynamic_body>{};
51 bhttp::read(stream, buffer, res); 55 bhttp::read(stream, buffer, res);
52 56
53 auto ec = beast::error_code{}; 57 auto ec = beast::error_code{};
54 stream.shutdown(ec); 58 stream.shutdown(ec);
55 if (ec != net::ssl::error::stream_truncated) 59 if (ec != net::ssl::error::stream_truncated)
56 throw beast::system_error{ec}; 60 throw beast::system_error{ec};
57 61
58 return res; 62 return res;
59 } 63 }
60 }; 64};
61 65
62} // namespace routemon::http 66} // namespace routemon::http