From e38993bb36801d492cad87479b8473794f19c9da Mon Sep 17 00:00:00 2001 From: Jon Lund Steffensen Date: Tue, 26 Mar 2013 02:38:24 +0100 Subject: [PATCH] RPC: Add "togglenetwork" method to toggle network activity temporarily RPC command "togglenetwork" toggles network and returns new state after command. RPC command "getinfo" returns "networkactive" field in output. --- src/net.h | 1 + src/rpc/misc.cpp | 4 +++- src/rpc/net.cpp | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/net.h b/src/net.h index 6912c0f97b419..1d911664ffba7 100644 --- a/src/net.h +++ b/src/net.h @@ -131,6 +131,7 @@ class CConnman bool Start(boost::thread_group& threadGroup, CScheduler& scheduler, std::string& strNodeError, Options options); void Stop(); bool BindListenPort(const CService &bindAddr, std::string& strError, bool fWhitelisted = false); + bool GetNetworkActive() const { return fNetworkActive; }; void SetNetworkActive(bool active); bool OpenNetworkConnection(const CAddress& addrConnect, bool fCountFailure, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false, bool fFeeler = false); bool CheckIncomingNonce(uint64_t nonce); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 5afcf6353c731..4bfcc9387cf73 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -89,8 +89,10 @@ UniValue getinfo(const UniValue& params, bool fHelp) #endif obj.push_back(Pair("blocks", (int)chainActive.Height())); obj.push_back(Pair("timeoffset", GetTimeOffset())); - if(g_connman) + if (g_connman) { + obj.push_back(Pair("networkactive", g_connman->GetNetworkActive())); obj.push_back(Pair("connections", (int)g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL))); + } obj.push_back(Pair("proxy", (proxy.IsValid() ? proxy.proxy.ToStringIPPort() : string()))); obj.push_back(Pair("difficulty", (double)GetDifficulty())); obj.push_back(Pair("testnet", Params().TestnetToBeDeprecatedFieldRPC())); diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index b011029f51c29..7f5b107997aa2 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -571,6 +571,24 @@ UniValue clearbanned(const UniValue& params, bool fHelp) return NullUniValue; } +UniValue togglenetwork(const JSONRPCRequest& request) +{ + if (request.fHelp || request.params.size() != 0) { + throw runtime_error( + "togglenetwork\n" + "Toggle all network activity temporarily." + ); + } + + if (!g_connman) { + throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled"); + } + + g_connman->SetNetworkActive(!g_connman->GetNetworkActive()); + + return g_connman->GetNetworkActive(); +} + static const CRPCCommand commands[] = { // category name actor (function) okSafeMode // --------------------- ------------------------ ----------------------- ---------- @@ -585,6 +603,7 @@ static const CRPCCommand commands[] = { "network", "setban", &setban, true }, { "network", "listbanned", &listbanned, true }, { "network", "clearbanned", &clearbanned, true }, + { "network", "togglenetwork", &togglenetwork, true, }, }; void RegisterNetRPCCommands(CRPCTable &t)