rpc: migrate JSONRPCRequest functionality into request.cpp
This commit is contained in:
parent
0ab8ba1ac6
commit
5c5e32bbe3
10 changed files with 89 additions and 79 deletions
|
@ -175,9 +175,10 @@ BITCOIN_CORE_H = \
|
||||||
rpc/blockchain.h \
|
rpc/blockchain.h \
|
||||||
rpc/client.h \
|
rpc/client.h \
|
||||||
rpc/protocol.h \
|
rpc/protocol.h \
|
||||||
rpc/server.h \
|
|
||||||
rpc/rawtransaction_util.h \
|
rpc/rawtransaction_util.h \
|
||||||
rpc/register.h \
|
rpc/register.h \
|
||||||
|
rpc/request.h \
|
||||||
|
rpc/server.h \
|
||||||
rpc/util.h \
|
rpc/util.h \
|
||||||
scheduler.h \
|
scheduler.h \
|
||||||
script/descriptor.h \
|
script/descriptor.h \
|
||||||
|
@ -481,7 +482,7 @@ libbitcoin_util_a_SOURCES = \
|
||||||
interfaces/handler.cpp \
|
interfaces/handler.cpp \
|
||||||
logging.cpp \
|
logging.cpp \
|
||||||
random.cpp \
|
random.cpp \
|
||||||
rpc/protocol.cpp \
|
rpc/request.cpp \
|
||||||
support/cleanse.cpp \
|
support/cleanse.cpp \
|
||||||
sync.cpp \
|
sync.cpp \
|
||||||
threadinterrupt.cpp \
|
threadinterrupt.cpp \
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <fs.h>
|
#include <fs.h>
|
||||||
#include <rpc/client.h>
|
#include <rpc/client.h>
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/protocol.h>
|
||||||
|
#include <rpc/request.h>
|
||||||
#include <util/system.h>
|
#include <util/system.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <primitives/block.h>
|
#include <primitives/block.h>
|
||||||
#include <primitives/transaction.h>
|
#include <primitives/transaction.h>
|
||||||
#include <rpc/blockchain.h>
|
#include <rpc/blockchain.h>
|
||||||
|
#include <rpc/protocol.h>
|
||||||
#include <rpc/server.h>
|
#include <rpc/server.h>
|
||||||
#include <streams.h>
|
#include <streams.h>
|
||||||
#include <sync.h>
|
#include <sync.h>
|
||||||
|
|
|
@ -6,15 +6,6 @@
|
||||||
#ifndef BITCOIN_RPC_PROTOCOL_H
|
#ifndef BITCOIN_RPC_PROTOCOL_H
|
||||||
#define BITCOIN_RPC_PROTOCOL_H
|
#define BITCOIN_RPC_PROTOCOL_H
|
||||||
|
|
||||||
#include <fs.h>
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
#include <map>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include <univalue.h>
|
|
||||||
|
|
||||||
//! HTTP status codes
|
//! HTTP status codes
|
||||||
enum HTTPStatusCode
|
enum HTTPStatusCode
|
||||||
{
|
{
|
||||||
|
@ -92,18 +83,4 @@ enum RPCErrorCode
|
||||||
RPC_FORBIDDEN_BY_SAFE_MODE = -2, //!< Server is in safe mode, and command is not allowed in safe mode
|
RPC_FORBIDDEN_BY_SAFE_MODE = -2, //!< Server is in safe mode, and command is not allowed in safe mode
|
||||||
};
|
};
|
||||||
|
|
||||||
UniValue JSONRPCRequestObj(const std::string& strMethod, const UniValue& params, const UniValue& id);
|
|
||||||
UniValue JSONRPCReplyObj(const UniValue& result, const UniValue& error, const UniValue& id);
|
|
||||||
std::string JSONRPCReply(const UniValue& result, const UniValue& error, const UniValue& id);
|
|
||||||
UniValue JSONRPCError(int code, const std::string& message);
|
|
||||||
|
|
||||||
/** Generate a new RPC authentication cookie and write it to disk */
|
|
||||||
bool GenerateAuthCookie(std::string *cookie_out);
|
|
||||||
/** Read the RPC authentication cookie from disk */
|
|
||||||
bool GetAuthCookie(std::string *cookie_out);
|
|
||||||
/** Delete RPC authentication cookie from disk */
|
|
||||||
void DeleteAuthCookie();
|
|
||||||
/** Parse JSON-RPC batch reply into a vector */
|
|
||||||
std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue &in, size_t num);
|
|
||||||
|
|
||||||
#endif // BITCOIN_RPC_PROTOCOL_H
|
#endif // BITCOIN_RPC_PROTOCOL_H
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include <keystore.h>
|
#include <keystore.h>
|
||||||
#include <policy/policy.h>
|
#include <policy/policy.h>
|
||||||
#include <primitives/transaction.h>
|
#include <primitives/transaction.h>
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/request.h>
|
||||||
#include <rpc/util.h>
|
#include <rpc/util.h>
|
||||||
#include <tinyformat.h>
|
#include <tinyformat.h>
|
||||||
#include <univalue.h>
|
#include <univalue.h>
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
// Copyright (c) 2010 Satoshi Nakamoto
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2018 The Bitcoin Core developers
|
// Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/request.h>
|
||||||
|
|
||||||
|
#include <fs.h>
|
||||||
|
|
||||||
#include <random.h>
|
#include <random.h>
|
||||||
#include <tinyformat.h>
|
#include <rpc/protocol.h>
|
||||||
#include <util/system.h>
|
#include <util/system.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
#include <util/time.h>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility,
|
* JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility,
|
||||||
|
@ -148,3 +149,36 @@ std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue &in, size_t num)
|
||||||
}
|
}
|
||||||
return batch;
|
return batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JSONRPCRequest::parse(const UniValue& valRequest)
|
||||||
|
{
|
||||||
|
// Parse request
|
||||||
|
if (!valRequest.isObject())
|
||||||
|
throw JSONRPCError(RPC_INVALID_REQUEST, "Invalid Request object");
|
||||||
|
const UniValue& request = valRequest.get_obj();
|
||||||
|
|
||||||
|
// Parse id now so errors from here on will have the id
|
||||||
|
id = find_value(request, "id");
|
||||||
|
|
||||||
|
// Parse method
|
||||||
|
UniValue valMethod = find_value(request, "method");
|
||||||
|
if (valMethod.isNull())
|
||||||
|
throw JSONRPCError(RPC_INVALID_REQUEST, "Missing method");
|
||||||
|
if (!valMethod.isStr())
|
||||||
|
throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string");
|
||||||
|
strMethod = valMethod.get_str();
|
||||||
|
if (fLogIPs)
|
||||||
|
LogPrint(BCLog::RPC, "ThreadRPCServer method=%s user=%s peeraddr=%s\n", SanitizeString(strMethod),
|
||||||
|
this->authUser, this->peerAddr);
|
||||||
|
else
|
||||||
|
LogPrint(BCLog::RPC, "ThreadRPCServer method=%s user=%s\n", SanitizeString(strMethod), this->authUser);
|
||||||
|
|
||||||
|
// Parse params
|
||||||
|
UniValue valParams = find_value(request, "params");
|
||||||
|
if (valParams.isArray() || valParams.isObject())
|
||||||
|
params = valParams;
|
||||||
|
else if (valParams.isNull())
|
||||||
|
params = UniValue(UniValue::VARR);
|
||||||
|
else
|
||||||
|
throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array or object");
|
||||||
|
}
|
42
src/rpc/request.h
Normal file
42
src/rpc/request.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright (c) 2010 Satoshi Nakamoto
|
||||||
|
// Copyright (c) 2009-2019 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_RPC_REQUEST_H
|
||||||
|
#define BITCOIN_RPC_REQUEST_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <univalue.h>
|
||||||
|
|
||||||
|
UniValue JSONRPCRequestObj(const std::string& strMethod, const UniValue& params, const UniValue& id);
|
||||||
|
UniValue JSONRPCReplyObj(const UniValue& result, const UniValue& error, const UniValue& id);
|
||||||
|
std::string JSONRPCReply(const UniValue& result, const UniValue& error, const UniValue& id);
|
||||||
|
UniValue JSONRPCError(int code, const std::string& message);
|
||||||
|
|
||||||
|
/** Generate a new RPC authentication cookie and write it to disk */
|
||||||
|
bool GenerateAuthCookie(std::string *cookie_out);
|
||||||
|
/** Read the RPC authentication cookie from disk */
|
||||||
|
bool GetAuthCookie(std::string *cookie_out);
|
||||||
|
/** Delete RPC authentication cookie from disk */
|
||||||
|
void DeleteAuthCookie();
|
||||||
|
/** Parse JSON-RPC batch reply into a vector */
|
||||||
|
std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue &in, size_t num);
|
||||||
|
|
||||||
|
class JSONRPCRequest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UniValue id;
|
||||||
|
std::string strMethod;
|
||||||
|
UniValue params;
|
||||||
|
bool fHelp;
|
||||||
|
std::string URI;
|
||||||
|
std::string authUser;
|
||||||
|
std::string peerAddr;
|
||||||
|
|
||||||
|
JSONRPCRequest() : id(NullUniValue), params(NullUniValue), fHelp(false) {}
|
||||||
|
void parse(const UniValue& valRequest);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BITCOIN_RPC_REQUEST_H
|
|
@ -329,39 +329,6 @@ bool RPCIsInWarmup(std::string *outStatus)
|
||||||
return fRPCInWarmup;
|
return fRPCInWarmup;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JSONRPCRequest::parse(const UniValue& valRequest)
|
|
||||||
{
|
|
||||||
// Parse request
|
|
||||||
if (!valRequest.isObject())
|
|
||||||
throw JSONRPCError(RPC_INVALID_REQUEST, "Invalid Request object");
|
|
||||||
const UniValue& request = valRequest.get_obj();
|
|
||||||
|
|
||||||
// Parse id now so errors from here on will have the id
|
|
||||||
id = find_value(request, "id");
|
|
||||||
|
|
||||||
// Parse method
|
|
||||||
UniValue valMethod = find_value(request, "method");
|
|
||||||
if (valMethod.isNull())
|
|
||||||
throw JSONRPCError(RPC_INVALID_REQUEST, "Missing method");
|
|
||||||
if (!valMethod.isStr())
|
|
||||||
throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string");
|
|
||||||
strMethod = valMethod.get_str();
|
|
||||||
if (fLogIPs)
|
|
||||||
LogPrint(BCLog::RPC, "ThreadRPCServer method=%s user=%s peeraddr=%s\n", SanitizeString(strMethod),
|
|
||||||
this->authUser, this->peerAddr);
|
|
||||||
else
|
|
||||||
LogPrint(BCLog::RPC, "ThreadRPCServer method=%s user=%s\n", SanitizeString(strMethod), this->authUser);
|
|
||||||
|
|
||||||
// Parse params
|
|
||||||
UniValue valParams = find_value(request, "params");
|
|
||||||
if (valParams.isArray() || valParams.isObject())
|
|
||||||
params = valParams;
|
|
||||||
else if (valParams.isNull())
|
|
||||||
params = UniValue(UniValue::VARR);
|
|
||||||
else
|
|
||||||
throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array or object");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsDeprecatedRPCEnabled(const std::string& method)
|
bool IsDeprecatedRPCEnabled(const std::string& method)
|
||||||
{
|
{
|
||||||
const std::vector<std::string> enabled_methods = gArgs.GetArgs("-deprecatedrpc");
|
const std::vector<std::string> enabled_methods = gArgs.GetArgs("-deprecatedrpc");
|
||||||
|
|
|
@ -7,13 +7,14 @@
|
||||||
#define BITCOIN_RPC_SERVER_H
|
#define BITCOIN_RPC_SERVER_H
|
||||||
|
|
||||||
#include <amount.h>
|
#include <amount.h>
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/request.h>
|
||||||
#include <uint256.h>
|
#include <uint256.h>
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
#include <univalue.h>
|
#include <univalue.h>
|
||||||
|
|
||||||
|
@ -27,21 +28,6 @@ namespace RPCServer
|
||||||
void OnStopped(std::function<void ()> slot);
|
void OnStopped(std::function<void ()> slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
class JSONRPCRequest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
UniValue id;
|
|
||||||
std::string strMethod;
|
|
||||||
UniValue params;
|
|
||||||
bool fHelp;
|
|
||||||
std::string URI;
|
|
||||||
std::string authUser;
|
|
||||||
std::string peerAddr;
|
|
||||||
|
|
||||||
JSONRPCRequest() : id(NullUniValue), params(NullUniValue), fHelp(false) {}
|
|
||||||
void parse(const UniValue& valRequest);
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Query whether RPC is running */
|
/** Query whether RPC is running */
|
||||||
bool IsRPCRunning();
|
bool IsRPCRunning();
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <outputtype.h>
|
#include <outputtype.h>
|
||||||
#include <pubkey.h>
|
#include <pubkey.h>
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/protocol.h>
|
||||||
|
#include <rpc/request.h>
|
||||||
#include <script/script.h>
|
#include <script/script.h>
|
||||||
#include <script/sign.h>
|
#include <script/sign.h>
|
||||||
#include <script/standard.h>
|
#include <script/standard.h>
|
||||||
|
|
Loading…
Reference in a new issue