Bitcoin Core 32.99.0
P2P Digital Currency
server.h
Go to the documentation of this file.
1// Copyright (c) 2010 Satoshi Nakamoto
2// Copyright (c) 2009-present The Bitcoin Core developers
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef BITCOIN_RPC_SERVER_H
7#define BITCOIN_RPC_SERVER_H
8
9#include <rpc/request.h>
10#include <rpc/util.h>
11#include <univalue.h>
12
13#include <cstdint>
14#include <functional>
15#include <map>
16#include <string>
17#include <string_view>
18#include <utility>
19#include <vector>
20
22bool IsRPCRunning();
23
26
31void SetRPCWarmupStatus(const std::string& newStatus);
33/* Mark warmup as done. RPC calls will be processed from now on. */
35
36/* returns the current warmup state. */
37bool RPCIsInWarmup(std::string *outStatus);
38
40
42{
43public:
47 using Actor = std::function<bool(const JSONRPCRequest& request, UniValue& result, bool last_handler)>;
48
50 CRPCCommand(std::string category, std::string name, Actor actor, std::vector<std::pair<std::string, bool>> args, intptr_t unique_id)
51 : category(std::move(category)), name(std::move(name)), actor(std::move(actor)), argNames(std::move(args)),
53 {
54 }
55
60 fn().m_name,
61 [fn](const JSONRPCRequest& request, UniValue& result, bool) { result = fn().HandleRequest(request); return true; },
62 fn().GetArgNames(),
63 intptr_t(fn))
64 {
65 this->metadata_fn = fn;
66 }
67
68 std::string category;
69 std::string name;
80 std::vector<std::pair<std::string, bool>> argNames;
81 intptr_t unique_id;
83};
84
89{
90private:
91 std::map<std::string, std::vector<const CRPCCommand*>> mapCommands;
92public:
93 CRPCTable();
94 std::string help(std::string_view name, const JSONRPCRequest& helpreq) const;
95
102 UniValue execute(const JSONRPCRequest &request) const;
103
108 std::vector<std::string> listCommands() const;
110 UniValue buildOpenRPCDoc(bool include_hidden = false) const;
111
115 UniValue dumpArgMap(const JSONRPCRequest& request) const;
116
129 void appendCommand(const std::string& name, const CRPCCommand* pcmd);
130 bool removeCommand(const std::string& name, const CRPCCommand* pcmd);
131};
132
133bool IsDeprecatedRPCEnabled(const std::string& method);
134
135extern CRPCTable tableRPC;
136
137void StartRPC();
138void InterruptRPC();
139void StopRPC();
140UniValue JSONRPCExec(const JSONRPCRequest& jreq, bool catch_errors);
141
142#endif // BITCOIN_RPC_SERVER_H
ArgsManager & args
Definition: bitcoind.cpp:280
std::string category
Definition: server.h:68
CRPCCommand(std::string category, std::string name, Actor actor, std::vector< std::pair< std::string, bool > > args, intptr_t unique_id)
Constructor taking Actor callback supporting multiple handlers.
Definition: server.h:50
intptr_t unique_id
Definition: server.h:81
std::vector< std::pair< std::string, bool > > argNames
List of method arguments and whether they are named-only.
Definition: server.h:80
std::string name
Definition: server.h:69
RpcMethodFnType metadata_fn
Definition: server.h:82
std::function< bool(const JSONRPCRequest &request, UniValue &result, bool last_handler)> Actor
RPC method handler reading request and assigning result.
Definition: server.h:47
Actor actor
Definition: server.h:70
CRPCCommand(std::string category, RpcMethodFnType fn)
Simplified constructor taking plain RpcMethodFnType function pointer.
Definition: server.h:57
RPC command dispatcher.
Definition: server.h:89
CRPCTable()
Definition: server.cpp:620
std::map< std::string, std::vector< const CRPCCommand * > > mapCommands
Definition: server.h:91
bool removeCommand(const std::string &name, const CRPCCommand *pcmd)
Definition: server.cpp:634
std::string help(std::string_view name, const JSONRPCRequest &helpreq) const
Definition: server.cpp:77
std::vector< std::string > listCommands() const
Returns a list of registered commands.
Definition: server.cpp:896
UniValue buildOpenRPCDoc(bool include_hidden=false) const
Return a complete OpenRPC 1.4.1 document for registered commands.
Definition: server.cpp:904
UniValue execute(const JSONRPCRequest &request) const
Execute a method.
Definition: server.cpp:859
void appendCommand(const std::string &name, const CRPCCommand *pcmd)
Appends a CRPCCommand to the dispatch table.
Definition: server.cpp:627
UniValue dumpArgMap(const JSONRPCRequest &request) const
Return all named arguments that need to be converted by the client from string to another JSON type.
Definition: server.cpp:986
const char * name
Definition: rest.cpp:71
bool IsDeprecatedRPCEnabled(const std::string &method)
Definition: server.cpp:716
void SetRPCWarmupFinished()
Definition: server.cpp:701
void StartRPC()
Definition: server.cpp:650
bool RPCIsInWarmup(std::string *outStatus)
Definition: server.cpp:708
void StopRPC()
Definition: server.cpp:667
bool IsRPCRunning()
Query whether RPC is running.
Definition: server.cpp:679
void SetRPCWarmupStarting()
Definition: server.cpp:695
void InterruptRPC()
Definition: server.cpp:656
UniValue JSONRPCExec(const JSONRPCRequest &jreq, bool catch_errors)
Definition: server.cpp:723
RPCMethod(* RpcMethodFnType)()
Definition: server.h:39
void SetRPCWarmupStatus(const std::string &newStatus)
Set the RPC warmup status.
Definition: server.cpp:689
CRPCTable tableRPC
Definition: server.cpp:1003
void RpcInterruptionPoint()
Throw JSONRPCError if RPC is not running.
Definition: server.cpp:684