Encapsulate mapCommands in class CRPCTable
This commit is contained in:
parent
dc42bf52c1
commit
9862229d4d
1 changed files with 38 additions and 27 deletions
|
@ -47,7 +47,17 @@ public:
|
||||||
bool okSafeMode;
|
bool okSafeMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern map<string, CRPCCommand*> mapCommands;
|
class CRPCTable
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
map<string, const CRPCCommand*> mapCommands;
|
||||||
|
public:
|
||||||
|
CRPCTable();
|
||||||
|
const CRPCCommand* operator[](string name) const;
|
||||||
|
string help(string name) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
const CRPCTable tableRPC;
|
||||||
|
|
||||||
static std::string strRPCUserColonPass;
|
static std::string strRPCUserColonPass;
|
||||||
|
|
||||||
|
@ -177,23 +187,13 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex)
|
||||||
/// Note: This interface may still be subject to change.
|
/// Note: This interface may still be subject to change.
|
||||||
///
|
///
|
||||||
|
|
||||||
|
string CRPCTable::help(string strCommand) const
|
||||||
Value help(const Array& params, bool fHelp)
|
|
||||||
{
|
{
|
||||||
if (fHelp || params.size() > 1)
|
|
||||||
throw runtime_error(
|
|
||||||
"help [command]\n"
|
|
||||||
"List commands, or get help for a command.");
|
|
||||||
|
|
||||||
string strCommand;
|
|
||||||
if (params.size() > 0)
|
|
||||||
strCommand = params[0].get_str();
|
|
||||||
|
|
||||||
string strRet;
|
string strRet;
|
||||||
set<rpcfn_type> setDone;
|
set<rpcfn_type> setDone;
|
||||||
for (map<string, CRPCCommand*>::iterator mi = mapCommands.begin(); mi != mapCommands.end(); ++mi)
|
for (map<string, const CRPCCommand*>::const_iterator mi = mapCommands.begin(); mi != mapCommands.end(); ++mi)
|
||||||
{
|
{
|
||||||
CRPCCommand *pcmd = mi->second;
|
const CRPCCommand *pcmd = mi->second;
|
||||||
string strMethod = mi->first;
|
string strMethod = mi->first;
|
||||||
// We already filter duplicates, but these deprecated screw up the sort order
|
// We already filter duplicates, but these deprecated screw up the sort order
|
||||||
if (strMethod == "getamountreceived" ||
|
if (strMethod == "getamountreceived" ||
|
||||||
|
@ -226,6 +226,20 @@ Value help(const Array& params, bool fHelp)
|
||||||
return strRet;
|
return strRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value help(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() > 1)
|
||||||
|
throw runtime_error(
|
||||||
|
"help [command]\n"
|
||||||
|
"List commands, or get help for a command.");
|
||||||
|
|
||||||
|
string strCommand;
|
||||||
|
if (params.size() > 0)
|
||||||
|
strCommand = params[0].get_str();
|
||||||
|
|
||||||
|
return tableRPC.help(strCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Value stop(const Array& params, bool fHelp)
|
Value stop(const Array& params, bool fHelp)
|
||||||
{
|
{
|
||||||
|
@ -2065,15 +2079,8 @@ static CRPCCommand vRPCCommands[] =
|
||||||
{ "importprivkey", &importprivkey, false },
|
{ "importprivkey", &importprivkey, false },
|
||||||
};
|
};
|
||||||
|
|
||||||
map<string, CRPCCommand*> mapCommands;
|
CRPCTable::CRPCTable()
|
||||||
|
|
||||||
static void RegisterRPCCommands()
|
|
||||||
{
|
{
|
||||||
static bool registered = false;
|
|
||||||
if (registered)
|
|
||||||
return;
|
|
||||||
registered = true;
|
|
||||||
|
|
||||||
unsigned int vcidx;
|
unsigned int vcidx;
|
||||||
for (vcidx = 0; vcidx < (sizeof(vRPCCommands) / sizeof(vRPCCommands[0])); vcidx++)
|
for (vcidx = 0; vcidx < (sizeof(vRPCCommands) / sizeof(vRPCCommands[0])); vcidx++)
|
||||||
{
|
{
|
||||||
|
@ -2084,6 +2091,13 @@ static void RegisterRPCCommands()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CRPCCommand *CRPCTable::operator[](string name) const
|
||||||
|
{
|
||||||
|
map<string, const CRPCCommand*>::const_iterator it = mapCommands.find(name);
|
||||||
|
if (it == mapCommands.end())
|
||||||
|
return NULL;
|
||||||
|
return (*it).second;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// HTTP protocol
|
// HTTP protocol
|
||||||
|
@ -2363,8 +2377,6 @@ void ThreadRPCServer2(void* parg)
|
||||||
{
|
{
|
||||||
printf("ThreadRPCServer started\n");
|
printf("ThreadRPCServer started\n");
|
||||||
|
|
||||||
RegisterRPCCommands();
|
|
||||||
|
|
||||||
strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"];
|
strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"];
|
||||||
if (mapArgs["-rpcpassword"] == "")
|
if (mapArgs["-rpcpassword"] == "")
|
||||||
{
|
{
|
||||||
|
@ -2516,11 +2528,10 @@ void ThreadRPCServer2(void* parg)
|
||||||
throw JSONRPCError(-32600, "Params must be an array");
|
throw JSONRPCError(-32600, "Params must be an array");
|
||||||
|
|
||||||
// Find method
|
// Find method
|
||||||
if (!mapCommands.count(strMethod))
|
const CRPCCommand *pcmd = tableRPC[strMethod];
|
||||||
|
if (!pcmd)
|
||||||
throw JSONRPCError(-32601, "Method not found");
|
throw JSONRPCError(-32601, "Method not found");
|
||||||
|
|
||||||
CRPCCommand *pcmd = mapCommands[strMethod];
|
|
||||||
|
|
||||||
// Observe safe mode
|
// Observe safe mode
|
||||||
string strWarning = GetWarnings("rpc");
|
string strWarning = GetWarnings("rpc");
|
||||||
if (strWarning != "" && !GetBoolArg("-disablesafemode") &&
|
if (strWarning != "" && !GetBoolArg("-disablesafemode") &&
|
||||||
|
|
Loading…
Reference in a new issue