mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-08-23 20:12:48 +02:00
refactor: replace util::Ref by std::any (C++17)
This commit is contained in:
42
src/rest.cpp
42
src/rest.cpp
@@ -18,10 +18,12 @@
|
||||
#include <sync.h>
|
||||
#include <txmempool.h>
|
||||
#include <util/check.h>
|
||||
#include <util/ref.h>
|
||||
#include <util/system.h>
|
||||
#include <validation.h>
|
||||
#include <version.h>
|
||||
|
||||
#include <any>
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include <univalue.h>
|
||||
@@ -73,10 +75,10 @@ static bool RESTERR(HTTPRequest* req, enum HTTPStatusCode status, std::string me
|
||||
* context is not found.
|
||||
* @returns Pointer to the node context or nullptr if not found.
|
||||
*/
|
||||
static NodeContext* GetNodeContext(const util::Ref& context, HTTPRequest* req)
|
||||
static NodeContext* GetNodeContext(const std::any& context, HTTPRequest* req)
|
||||
{
|
||||
NodeContext* node = context.Has<NodeContext>() ? &context.Get<NodeContext>() : nullptr;
|
||||
if (!node) {
|
||||
auto node_context = util::AnyPtr<NodeContext>(context);
|
||||
if (!node_context) {
|
||||
RESTERR(req, HTTP_INTERNAL_SERVER_ERROR,
|
||||
strprintf("%s:%d (%s)\n"
|
||||
"Internal bug detected: Node context not found!\n"
|
||||
@@ -84,7 +86,7 @@ static NodeContext* GetNodeContext(const util::Ref& context, HTTPRequest* req)
|
||||
__FILE__, __LINE__, __func__, PACKAGE_BUGREPORT));
|
||||
return nullptr;
|
||||
}
|
||||
return node;
|
||||
return node_context;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,14 +96,14 @@ static NodeContext* GetNodeContext(const util::Ref& context, HTTPRequest* req)
|
||||
* context mempool is not found.
|
||||
* @returns Pointer to the mempool or nullptr if no mempool found.
|
||||
*/
|
||||
static CTxMemPool* GetMemPool(const util::Ref& context, HTTPRequest* req)
|
||||
static CTxMemPool* GetMemPool(const std::any& context, HTTPRequest* req)
|
||||
{
|
||||
NodeContext* node = context.Has<NodeContext>() ? &context.Get<NodeContext>() : nullptr;
|
||||
if (!node || !node->mempool) {
|
||||
auto node_context = util::AnyPtr<NodeContext>(context);
|
||||
if (!node_context || !node_context->mempool) {
|
||||
RESTERR(req, HTTP_NOT_FOUND, "Mempool disabled or instance not found");
|
||||
return nullptr;
|
||||
}
|
||||
return node->mempool.get();
|
||||
return node_context->mempool.get();
|
||||
}
|
||||
|
||||
static RetFormat ParseDataFormat(std::string& param, const std::string& strReq)
|
||||
@@ -151,7 +153,7 @@ static bool CheckWarmup(HTTPRequest* req)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool rest_headers(const util::Ref& context,
|
||||
static bool rest_headers(const std::any& context,
|
||||
HTTPRequest* req,
|
||||
const std::string& strURIPart)
|
||||
{
|
||||
@@ -293,12 +295,12 @@ static bool rest_block(HTTPRequest* req,
|
||||
}
|
||||
}
|
||||
|
||||
static bool rest_block_extended(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_block_extended(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
return rest_block(req, strURIPart, true);
|
||||
}
|
||||
|
||||
static bool rest_block_notxdetails(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_block_notxdetails(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
return rest_block(req, strURIPart, false);
|
||||
}
|
||||
@@ -306,7 +308,7 @@ static bool rest_block_notxdetails(const util::Ref& context, HTTPRequest* req, c
|
||||
// A bit of a hack - dependency on a function defined in rpc/blockchain.cpp
|
||||
RPCHelpMan getblockchaininfo();
|
||||
|
||||
static bool rest_chaininfo(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_chaininfo(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
if (!CheckWarmup(req))
|
||||
return false;
|
||||
@@ -329,7 +331,7 @@ static bool rest_chaininfo(const util::Ref& context, HTTPRequest* req, const std
|
||||
}
|
||||
}
|
||||
|
||||
static bool rest_mempool_info(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_mempool_info(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
if (!CheckWarmup(req))
|
||||
return false;
|
||||
@@ -353,7 +355,7 @@ static bool rest_mempool_info(const util::Ref& context, HTTPRequest* req, const
|
||||
}
|
||||
}
|
||||
|
||||
static bool rest_mempool_contents(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_mempool_contents(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
if (!CheckWarmup(req)) return false;
|
||||
const CTxMemPool* mempool = GetMemPool(context, req);
|
||||
@@ -376,7 +378,7 @@ static bool rest_mempool_contents(const util::Ref& context, HTTPRequest* req, co
|
||||
}
|
||||
}
|
||||
|
||||
static bool rest_tx(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_tx(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
if (!CheckWarmup(req))
|
||||
return false;
|
||||
@@ -435,7 +437,7 @@ static bool rest_tx(const util::Ref& context, HTTPRequest* req, const std::strin
|
||||
}
|
||||
}
|
||||
|
||||
static bool rest_getutxos(const util::Ref& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::string& strURIPart)
|
||||
{
|
||||
if (!CheckWarmup(req))
|
||||
return false;
|
||||
@@ -621,7 +623,7 @@ static bool rest_getutxos(const util::Ref& context, HTTPRequest* req, const std:
|
||||
}
|
||||
}
|
||||
|
||||
static bool rest_blockhash_by_height(const util::Ref& context, HTTPRequest* req,
|
||||
static bool rest_blockhash_by_height(const std::any& context, HTTPRequest* req,
|
||||
const std::string& str_uri_part)
|
||||
{
|
||||
if (!CheckWarmup(req)) return false;
|
||||
@@ -669,7 +671,7 @@ static bool rest_blockhash_by_height(const util::Ref& context, HTTPRequest* req,
|
||||
|
||||
static const struct {
|
||||
const char* prefix;
|
||||
bool (*handler)(const util::Ref& context, HTTPRequest* req, const std::string& strReq);
|
||||
bool (*handler)(const std::any& context, HTTPRequest* req, const std::string& strReq);
|
||||
} uri_prefixes[] = {
|
||||
{"/rest/tx/", rest_tx},
|
||||
{"/rest/block/notxdetails/", rest_block_notxdetails},
|
||||
@@ -682,7 +684,7 @@ static const struct {
|
||||
{"/rest/blockhashbyheight/", rest_blockhash_by_height},
|
||||
};
|
||||
|
||||
void StartREST(const util::Ref& context)
|
||||
void StartREST(const std::any& context)
|
||||
{
|
||||
for (const auto& up : uri_prefixes) {
|
||||
auto handler = [&context, up](HTTPRequest* req, const std::string& prefix) { return up.handler(context, req, prefix); };
|
||||
|
Reference in New Issue
Block a user