Electroneum
Toggle main menu visibility
Loading...
Searching...
No Matches
jsonrpc_server_handlers_map.h
Go to the documentation of this file.
1
#ifndef JSONRPC_SERVER_HANDLERS_MAP_H
2
#define JSONRPC_SERVER_HANDLERS_MAP_H
3
4
#include <string>
5
#include "
serialization/keyvalue_serialization.h
"
6
#include "
storages/portable_storage_template_helper.h
"
7
#include "
storages/portable_storage_base.h
"
8
#include "
jsonrpc_structs.h
"
9
#include "
jsonrpc_protocol_handler.h
"
10
11
#define BEGIN_JSONRPC2_MAP(t_connection_context) \
12
bool handle_rpc_request(const std::string& req_data, \
13
std::string& resp_data, \
14
t_connection_context& m_conn_context) \
15
{ \
16
bool handled = false; \
17
uint64_t ticks = epee::misc_utils::get_tick_count(); \
18
epee::serialization::portable_storage ps; \
19
if (!ps.load_from_json(req_data)) \
20
{ \
21
epee::net_utils::jsonrpc2::make_error_resp_json(-32700, "Parse error", resp_data); \
22
return true; \
23
} \
24
epee::serialization::storage_entry id_; \
25
id_ = epee::serialization::storage_entry(std::string()); \
26
if (!ps.get_value("id", id_, nullptr)) \
27
{ \
28
epee::net_utils::jsonrpc2::make_error_resp_json(-32600, "Invalid Request", resp_data); \
29
return true; \
30
} \
31
std::string callback_name; \
32
if (!ps.get_value("method", callback_name, nullptr)) \
33
{ \
34
epee::net_utils::jsonrpc2::make_error_resp_json(-32600, "Invalid Request", resp_data, id_); \
35
return true; \
36
} \
37
if (false) return true;
//just a stub to have "else if"
38
39
40
41
#define PREPARE_JSONRPC2_OBJECTS_FROM_JSON(command_type) \
42
handled = true; \
43
boost::value_initialized<epee::json_rpc::request<command_type::request> > req_; \
44
epee::json_rpc::request<command_type::request>& req = static_cast<epee::json_rpc::request<command_type::request>&>(req_);\
45
if(!req.load(ps)) \
46
{ \
47
epee::net_utils::jsonrpc2::make_error_resp_json(-32602, "Invalid params", resp_data, req.id); \
48
return true; \
49
} \
50
uint64_t ticks1 = epee::misc_utils::get_tick_count(); \
51
boost::value_initialized<epee::json_rpc::response<command_type::response, epee::json_rpc::dummy_error> > resp_; \
52
epee::json_rpc::response<command_type::response, epee::json_rpc::dummy_error>& resp = static_cast<epee::json_rpc::response<command_type::response, epee::json_rpc::dummy_error> &>(resp_); \
53
resp.jsonrpc = "2.0"; \
54
resp.id = req.id;
55
56
#define FINALIZE_JSONRPC2_OBJECTS_TO_JSON(method_name) \
57
uint64_t ticks2 = epee::misc_utils::get_tick_count(); \
58
epee::serialization::store_t_to_json(resp, resp_data, 0, false); \
59
resp_data += "\n"; \
60
uint64_t ticks3 = epee::misc_utils::get_tick_count(); \
61
LOG_PRINT("[" << method_name << "] processed with " << ticks1-ticks << "/"<< ticks2-ticks1 << "/" << ticks3-ticks2 << "ms", LOG_LEVEL_2);
62
63
64
#define MAP_JSONRPC2_WE(method_name, callback_f, command_type) \
65
else if (callback_name == method_name) \
66
{ \
67
PREPARE_JSONRPC2_OBJECTS_FROM_JSON(command_type) \
68
epee::json_rpc::error_response fail_resp = AUTO_VAL_INIT(fail_resp); \
69
fail_resp.jsonrpc = "2.0"; \
70
fail_resp.id = req.id; \
71
if(!callback_f(req.params, resp.result, fail_resp.error, m_conn_context)) \
72
{ \
73
epee::serialization::store_t_to_json(static_cast<epee::json_rpc::error_response&>(fail_resp), resp_data, 0, false); \
74
resp_data += "\n"; \
75
return true; \
76
} \
77
FINALIZE_JSONRPC2_OBJECTS_TO_JSON(method_name) \
78
return true; \
79
}
80
81
#define END_JSONRPC2_MAP() \
82
epee::net_utils::jsonrpc2::make_error_resp_json(-32601, "Method not found", resp_data, id_); \
83
return true; \
84
}
85
86
#endif
/* JSONRPC_SERVER_HANDLERS_MAP_H */
jsonrpc_protocol_handler.h
jsonrpc_structs.h
keyvalue_serialization.h
portable_storage_base.h
portable_storage_template_helper.h
contrib
epee
include
net
jsonrpc_server_handlers_map.h
Generated on
for Electroneum by
1.17.0