aboutsummaryrefslogtreecommitdiff
path: root/src/rpc/protocol.cpp
diff options
context:
space:
mode:
authorKarl-Johan Alm <karljohan-alm@garage.co.jp>2019-06-20 02:39:38 +0900
committerKarl-Johan Alm <karljohan-alm@garage.co.jp>2019-07-05 11:22:02 +0900
commit5c5e32bbe3dfa790dd8bb421fbd6301ae10b09f5 (patch)
tree8dcdcbeae96f2a7fb03b36bfa50d269b6bc68749 /src/rpc/protocol.cpp
parent0ab8ba1ac65b70f044a5e323b13d098cef33695a (diff)
downloadbitcoin-5c5e32bbe3dfa790dd8bb421fbd6301ae10b09f5.tar.xz
rpc: migrate JSONRPCRequest functionality into request.cpp
Diffstat (limited to 'src/rpc/protocol.cpp')
-rw-r--r--src/rpc/protocol.cpp150
1 files changed, 0 insertions, 150 deletions
diff --git a/src/rpc/protocol.cpp b/src/rpc/protocol.cpp
deleted file mode 100644
index 33b0130a94..0000000000
--- a/src/rpc/protocol.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2010 Satoshi Nakamoto
-// Copyright (c) 2009-2018 The Bitcoin Core developers
-// Distributed under the MIT software license, see the accompanying
-// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-#include <rpc/protocol.h>
-
-#include <random.h>
-#include <tinyformat.h>
-#include <util/system.h>
-#include <util/strencodings.h>
-#include <util/time.h>
-
-/**
- * JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility,
- * but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were
- * unspecified (HTTP errors and contents of 'error').
- *
- * 1.0 spec: http://json-rpc.org/wiki/specification
- * 1.2 spec: http://jsonrpc.org/historical/json-rpc-over-http.html
- */
-
-UniValue JSONRPCRequestObj(const std::string& strMethod, const UniValue& params, const UniValue& id)
-{
- UniValue request(UniValue::VOBJ);
- request.pushKV("method", strMethod);
- request.pushKV("params", params);
- request.pushKV("id", id);
- return request;
-}
-
-UniValue JSONRPCReplyObj(const UniValue& result, const UniValue& error, const UniValue& id)
-{
- UniValue reply(UniValue::VOBJ);
- if (!error.isNull())
- reply.pushKV("result", NullUniValue);
- else
- reply.pushKV("result", result);
- reply.pushKV("error", error);
- reply.pushKV("id", id);
- return reply;
-}
-
-std::string JSONRPCReply(const UniValue& result, const UniValue& error, const UniValue& id)
-{
- UniValue reply = JSONRPCReplyObj(result, error, id);
- return reply.write() + "\n";
-}
-
-UniValue JSONRPCError(int code, const std::string& message)
-{
- UniValue error(UniValue::VOBJ);
- error.pushKV("code", code);
- error.pushKV("message", message);
- return error;
-}
-
-/** Username used when cookie authentication is in use (arbitrary, only for
- * recognizability in debugging/logging purposes)
- */
-static const std::string COOKIEAUTH_USER = "__cookie__";
-/** Default name for auth cookie file */
-static const std::string COOKIEAUTH_FILE = ".cookie";
-
-/** Get name of RPC authentication cookie file */
-static fs::path GetAuthCookieFile(bool temp=false)
-{
- std::string arg = gArgs.GetArg("-rpccookiefile", COOKIEAUTH_FILE);
- if (temp) {
- arg += ".tmp";
- }
- return AbsPathForConfigVal(fs::path(arg));
-}
-
-bool GenerateAuthCookie(std::string *cookie_out)
-{
- const size_t COOKIE_SIZE = 32;
- unsigned char rand_pwd[COOKIE_SIZE];
- GetRandBytes(rand_pwd, COOKIE_SIZE);
- std::string cookie = COOKIEAUTH_USER + ":" + HexStr(rand_pwd, rand_pwd+COOKIE_SIZE);
-
- /** the umask determines what permissions are used to create this file -
- * these are set to 077 in init.cpp unless overridden with -sysperms.
- */
- fsbridge::ofstream file;
- fs::path filepath_tmp = GetAuthCookieFile(true);
- file.open(filepath_tmp);
- if (!file.is_open()) {
- LogPrintf("Unable to open cookie authentication file %s for writing\n", filepath_tmp.string());
- return false;
- }
- file << cookie;
- file.close();
-
- fs::path filepath = GetAuthCookieFile(false);
- if (!RenameOver(filepath_tmp, filepath)) {
- LogPrintf("Unable to rename cookie authentication file %s to %s\n", filepath_tmp.string(), filepath.string());
- return false;
- }
- LogPrintf("Generated RPC authentication cookie %s\n", filepath.string());
-
- if (cookie_out)
- *cookie_out = cookie;
- return true;
-}
-
-bool GetAuthCookie(std::string *cookie_out)
-{
- fsbridge::ifstream file;
- std::string cookie;
- fs::path filepath = GetAuthCookieFile();
- file.open(filepath);
- if (!file.is_open())
- return false;
- std::getline(file, cookie);
- file.close();
-
- if (cookie_out)
- *cookie_out = cookie;
- return true;
-}
-
-void DeleteAuthCookie()
-{
- try {
- fs::remove(GetAuthCookieFile());
- } catch (const fs::filesystem_error& e) {
- LogPrintf("%s: Unable to remove random auth cookie file: %s\n", __func__, fsbridge::get_filesystem_error_message(e));
- }
-}
-
-std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue &in, size_t num)
-{
- if (!in.isArray()) {
- throw std::runtime_error("Batch must be an array");
- }
- std::vector<UniValue> batch(num);
- for (size_t i=0; i<in.size(); ++i) {
- const UniValue &rec = in[i];
- if (!rec.isObject()) {
- throw std::runtime_error("Batch member must be object");
- }
- size_t id = rec["id"].get_int();
- if (id >= num) {
- throw std::runtime_error("Batch member id larger than size");
- }
- batch[id] = rec;
- }
- return batch;
-}