11#define FMT_HEADER_ONLY
12#include <fmt/format.h>
13#include <nlohmann/json.hpp>
46 const std::string& method,
47 const std::span<const uint8_t> params,
48 const std::string& content_type,
50 const char* auth_token =
nullptr)
55 path = fmt::format(
"/{}/{}",
prefix.value(), path);
59 r.set_body(params.data(), params.size());
60 r.set_header(ccf::http::headers::CONTENT_TYPE, content_type);
61 r.set_header(
"Host",
host);
62 if (auth_token !=
nullptr)
65 ccf::http::headers::AUTHORIZATION,
66 fmt::format(
"Bearer {}", auth_token));
69 return r.build_request();
73 const std::string& method,
74 const std::span<const uint8_t> params,
75 const std::string& content_type,
77 const char* auth_token =
nullptr)
80 method, params, content_type, verb, auth_token);
100 const std::string&
host,
101 const std::string&
port,
102 std::shared_ptr<::tls::CA>
node_ca =
nullptr,
103 std::shared_ptr<::tls::Cert>
cert =
nullptr,
104 const std::string& key_id_ =
"Invalid") :
122 const std::string& method,
123 const std::span<const uint8_t> params,
124 const std::string& content_type,
125 llhttp_method verb = HTTP_POST,
126 const char* auth_token =
nullptr)
134 const std::string& method,
135 const nlohmann::json& params =
nullptr,
136 llhttp_method verb = HTTP_POST)
138 std::vector<uint8_t> body;
139 if (!params.is_null())
141 auto body_s = params.dump();
142 body = {body_s.begin(), body_s.end()};
148 ccf::http::headervalues::contenttype::JSON,
154 const std::string& method,
155 const std::span<const uint8_t> params,
156 llhttp_method verb = HTTP_POST)
159 method, params, ccf::http::headervalues::contenttype::JSON, verb));
164 return call(method, params, HTTP_POST);
168 const std::string& method,
const nlohmann::json& params =
nullptr)
171 auto full_path = method;
172 if (!params.is_null())
174 for (
auto it = params.begin(); it != params.end(); ++it)
176 full_path += fmt::format(
178 it == params.begin() ?
"?" :
"&",
180 it.value().is_string() ? it.value().get<std::string>() :
184 return call(full_path,
nullptr, HTTP_GET);
189 if (resp.
body.empty())
195 const auto& content_type =
196 resp.
headers.find(ccf::http::headers::CONTENT_TYPE);
197 return nlohmann::json::parse(resp.
body);
201 return std::string(resp.
body.begin(), resp.
body.end());
207 return std::string(resp.
body.begin(), resp.
body.end());
236 std::vector<uint8_t>&& body)
override
239 next_recv_id++, status, std::move(headers), std::move(body)};
Definition rpc_tls_client.h:20
Response get(const std::string &method, const nlohmann::json ¶ms=nullptr)
Definition rpc_tls_client.h:167
virtual void handle_response(ccf::http_status status, ccf::http::HeaderMap &&headers, std::vector< uint8_t > &&body) override
Definition rpc_tls_client.h:233
HttpRpcTlsClient(const HttpRpcTlsClient &c)
Definition rpc_tls_client.h:110
Response call_raw(const PreparedRpc &prep)
Definition rpc_tls_client.h:89
std::vector< uint8_t > gen_http_request_internal(const std::string &method, const std::span< const uint8_t > params, const std::string &content_type, llhttp_method verb, const char *auth_token=nullptr)
Definition rpc_tls_client.h:45
std::optional< Response > last_response
Definition rpc_tls_client.h:94
Response read_response()
Definition rpc_tls_client.h:210
std::optional< std::string > prefix
Definition rpc_tls_client.h:38
Response call_raw(const std::vector< uint8_t > &raw)
Definition rpc_tls_client.h:83
size_t next_recv_id
Definition rpc_tls_client.h:43
Response call(const std::string &method, const std::span< const uint8_t > params, llhttp_method verb=HTTP_POST)
Definition rpc_tls_client.h:153
std::optional< Response > read_response_non_blocking()
Definition rpc_tls_client.h:223
nlohmann::json unpack_body(const Response &resp)
Definition rpc_tls_client.h:187
Response post(const std::string &method, const nlohmann::json ¶ms)
Definition rpc_tls_client.h:162
HttpRpcTlsClient(const std::string &host, const std::string &port, std::shared_ptr<::tls::CA > node_ca=nullptr, std::shared_ptr<::tls::Cert > cert=nullptr, const std::string &key_id_="Invalid")
Definition rpc_tls_client.h:99
std::string key_id
Definition rpc_tls_client.h:40
void create_key_pair(const ccf::crypto::Pem priv_key)
Definition rpc_tls_client.h:116
ccf::crypto::KeyPairPtr key_pair
Definition rpc_tls_client.h:39
PreparedRpc gen_request(const std::string &method, const std::span< const uint8_t > params, const std::string &content_type, llhttp_method verb=HTTP_POST, const char *auth_token=nullptr)
Definition rpc_tls_client.h:121
::http::ResponseParser parser
Definition rpc_tls_client.h:37
std::string get_error(const Response &resp)
Definition rpc_tls_client.h:205
Response call(const std::string &method, const nlohmann::json ¶ms=nullptr, llhttp_method verb=HTTP_POST)
Definition rpc_tls_client.h:133
std::vector< uint8_t > gen_request_internal(const std::string &method, const std::span< const uint8_t > params, const std::string &content_type, llhttp_method verb, const char *auth_token=nullptr)
Definition rpc_tls_client.h:72
size_t next_send_id
Definition rpc_tls_client.h:42
void set_prefix(const std::string &prefix_)
Definition rpc_tls_client.h:242
Definition tls_client.h:67
std::vector< uint8_t > read_all()
Definition tls_client.h:212
std::string port
Definition tls_client.h:70
std::shared_ptr<::tls::CA > node_ca
Definition tls_client.h:71
bool bytes_available()
Definition tls_client.h:207
std::shared_ptr<::tls::Cert > cert
Definition tls_client.h:72
TlsClient(const std::string &host, const std::string &port, std::shared_ptr<::tls::CA > node_ca=nullptr, std::shared_ptr<::tls::Cert > cert=nullptr)
Definition tls_client.h:119
void write(std::span< const uint8_t > b)
Definition tls_client.h:159
void execute(const uint8_t *data, size_t size)
Definition http_parser.h:221
Definition http_builder.h:118
Definition http_parser.h:452
Definition http_proc.h:31
std::shared_ptr< KeyPair > KeyPairPtr
Definition key_pair.h:145
KeyPairPtr make_key_pair(CurveID curve_id=service_identity_curve_choice)
Definition key_pair.cpp:35
std::map< std::string, std::string, std::less<> > HeaderMap
Definition http_header_map.h:10
llhttp_status http_status
Definition http_status.h:9
Definition perf_client.h:12
Definition configuration.h:14
bool status_success(ccf::http_status status)
Definition http_parser.h:71
Definition rpc_tls_client.h:23
size_t id
Definition rpc_tls_client.h:25
std::vector< uint8_t > encoded
Definition rpc_tls_client.h:24
Definition rpc_tls_client.h:29
size_t id
Definition rpc_tls_client.h:30
std::vector< uint8_t > body
Definition rpc_tls_client.h:33
ccf::http_status status
Definition rpc_tls_client.h:31
ccf::http::HeaderMap headers
Definition rpc_tls_client.h:32