FastMM documentation
FastMM C++ API 0.6.0
Public headers, tier 1 and tier 2
Loading...
Searching...
No Matches
blocking_http.hpp
Go to the documentation of this file.
1#pragma once
2// BlockingHttp: one synchronous HTTPS request on a private Reactor + HttpClient. Used only
3// on control paths that must not depend on the venue's reactor thread being alive:
4// reference data at startup, server-time probes, and the kill-switch cancel_all (6.7:
5// "independent REST connection"). Allocates freely; never touched by the hot path.
6#include "fastmm/net/http_message.hpp"
7#include "fastmm/net/source_address.hpp"
8#include "fastmm/net/tls_stream.hpp"
9
10#include <cstddef>
11#include <cstdint>
12#include <string>
13#include <string_view>
14#include <utility>
15#include <vector>
16
17namespace fastmm::venues {
18
19struct HttpReply {
20 int status = 0;
21 std::string body;
22 std::vector<std::pair<std::string, std::string>> headers;
23 std::string error; // non-empty on transport failure (status == 0)
25 [[nodiscard]] bool ok() const noexcept { return error.empty() && status >= 200 && status < 300; }
26 [[nodiscard]] std::string_view header(std::string_view name) const noexcept {
27 for (const auto& [k, v] : headers) {
28 if (net::iequals(k, name)) return v;
29 }
30 return {};
31 }
32};
33
34struct BlockingHttpOptions {
35 std::string ca_file;
36 bool insecure_tls = false;
37 std::uint32_t timeout_ms = 5000;
38 std::uint32_t connect_timeout_ms = 5000;
39 // Largest response body. Binance USD-M's exchangeInfo has no symbol filter and was 1.1 MB on
40 // production in 2026-09 (1 MiB is the streaming client's default).
41 std::size_t recv_capacity = std::size_t{16} * 1024 * 1024;
42 net::SourceAddress source; // where the connection leaves this host from; empty: anywhere
43};
45class BlockingHttp {
46 public:
47 explicit BlockingHttp(std::string base_url, BlockingHttpOptions opts = {});
48
49 // `target` is the path plus query ("/api/v3/depth?symbol=BTCUSDT"); `extra_headers` is a
50 // pre-formatted "Name: value\r\n" block.
51 HttpReply request(std::string_view method,
52 std::string_view target,
53 std::string_view extra_headers = {},
54 std::string_view body = {});
55 HttpReply get(std::string_view target, std::string_view extra_headers = {}) {
56 return request("GET", target, extra_headers);
57 }
58
59 [[nodiscard]] const std::string& base_url() const noexcept { return base_url_; }
60 [[nodiscard]] std::string_view host() const noexcept { return host_; }
62 private:
63 std::string base_url_;
64 std::string host_;
65 std::uint16_t port_ = 0;
66 bool tls_ = false;
67 std::string base_path_; // path prefix from the base URL ("" or "/api")
69};
70
71} // namespace fastmm::venues
Definition blocking_http.hpp:47
HttpReply get(std::string_view target, std::string_view extra_headers={})
Definition blocking_http.hpp:57
HttpReply request(std::string_view method, std::string_view target, std::string_view extra_headers={}, std::string_view body={})
target is the path plus query ("/api/v3/depth?symbol=BTCUSDT"); extra_headers is a pre-formatted "Nam...
const std::string & base_url() const noexcept
Definition blocking_http.hpp:61
std::string_view host() const noexcept
Definition blocking_http.hpp:62
Definition venue.hpp:38
Definition blocking_http.hpp:36
std::string ca_file
Definition blocking_http.hpp:37
std::uint32_t timeout_ms
Definition blocking_http.hpp:39
std::size_t recv_capacity
Largest response body.
Definition blocking_http.hpp:43
bool insecure_tls
Definition blocking_http.hpp:38
net::SourceAddress source
where the connection leaves this host from; empty: anywhere
Definition blocking_http.hpp:44
std::uint32_t connect_timeout_ms
Definition blocking_http.hpp:40
Definition blocking_http.hpp:21
std::string_view header(std::string_view name) const noexcept
Definition blocking_http.hpp:28
int status
Definition blocking_http.hpp:22
bool ok() const noexcept
Definition blocking_http.hpp:27
std::vector< std::pair< std::string, std::string > > headers
Definition blocking_http.hpp:24
std::string body
Definition blocking_http.hpp:23
std::string error
non-empty on transport failure (status == 0)
Definition blocking_http.hpp:25