mirror of
https://github.com/monero-project/monero.git
synced 2025-08-16 11:20:21 -04:00
Use byte_slice for sending zmq messages - removes data copy within zmq
This commit is contained in:
parent
378cdeaeae
commit
da99157462
11 changed files with 138 additions and 27 deletions
|
@ -33,6 +33,7 @@
|
|||
#include <stdexcept>
|
||||
|
||||
#include <boost/uuid/nil_generator.hpp>
|
||||
#include <boost/utility/string_ref.hpp>
|
||||
// likely included by daemon_handler.h's includes,
|
||||
// but including here for clarity
|
||||
#include "cryptonote_core/cryptonote_core.h"
|
||||
|
@ -48,7 +49,7 @@ namespace rpc
|
|||
{
|
||||
namespace
|
||||
{
|
||||
using handler_function = std::string(DaemonHandler& handler, const rapidjson::Value& id, const rapidjson::Value& msg);
|
||||
using handler_function = epee::byte_slice(DaemonHandler& handler, const rapidjson::Value& id, const rapidjson::Value& msg);
|
||||
struct handler_map
|
||||
{
|
||||
const char* method_name;
|
||||
|
@ -66,7 +67,7 @@ namespace rpc
|
|||
}
|
||||
|
||||
template<typename Message>
|
||||
std::string handle_message(DaemonHandler& handler, const rapidjson::Value& id, const rapidjson::Value& parameters)
|
||||
epee::byte_slice handle_message(DaemonHandler& handler, const rapidjson::Value& id, const rapidjson::Value& parameters)
|
||||
{
|
||||
typename Message::Request request{};
|
||||
request.fromJson(parameters);
|
||||
|
@ -903,7 +904,7 @@ namespace rpc
|
|||
return true;
|
||||
}
|
||||
|
||||
std::string DaemonHandler::handle(const std::string& request)
|
||||
epee::byte_slice DaemonHandler::handle(const std::string& request)
|
||||
{
|
||||
MDEBUG("Handling RPC request: " << request);
|
||||
|
||||
|
@ -916,8 +917,11 @@ namespace rpc
|
|||
if (matched_handler == std::end(handlers) || matched_handler->method_name != request_type)
|
||||
return BAD_REQUEST(request_type, req_full.getID());
|
||||
|
||||
std::string response = matched_handler->call(*this, req_full.getID(), req_full.getMessage());
|
||||
MDEBUG("Returning RPC response: " << response);
|
||||
epee::byte_slice response = matched_handler->call(*this, req_full.getID(), req_full.getMessage());
|
||||
|
||||
const boost::string_ref response_view{reinterpret_cast<const char*>(response.data()), response.size()};
|
||||
MDEBUG("Returning RPC response: " << response_view);
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue