Just Wonder
5 years ago
8 changed files with 138 additions and 12 deletions
@ -0,0 +1,61 @@ |
|||||||
|
// Copyright (c) 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 <zmq/zmqrpc.h> |
||||||
|
|
||||||
|
#include <rpc/server.h> |
||||||
|
#include <zmq/zmqabstractnotifier.h> |
||||||
|
#include <zmq/zmqnotificationinterface.h> |
||||||
|
|
||||||
|
#include <univalue.h> |
||||||
|
|
||||||
|
namespace { |
||||||
|
|
||||||
|
UniValue getzmqnotifications(const JSONRPCRequest& request) |
||||||
|
{ |
||||||
|
if (request.fHelp || request.params.size() != 0) { |
||||||
|
throw std::runtime_error( |
||||||
|
"getzmqnotifications\n" |
||||||
|
"\nReturns information about the active ZeroMQ notifications.\n" |
||||||
|
"\nResult:\n" |
||||||
|
"[\n" |
||||||
|
" { (json object)\n" |
||||||
|
" \"type\": \"pubhashtx\", (string) Type of notification\n" |
||||||
|
" \"address\": \"...\" (string) Address of the publisher\n" |
||||||
|
" },\n" |
||||||
|
" ...\n" |
||||||
|
"]\n" |
||||||
|
"\nExamples:\n" |
||||||
|
+ HelpExampleCli("getzmqnotifications", "") |
||||||
|
+ HelpExampleRpc("getzmqnotifications", "") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
UniValue result(UniValue::VARR); |
||||||
|
if (g_zmq_notification_interface != nullptr) { |
||||||
|
for (const auto* n : g_zmq_notification_interface->GetActiveNotifiers()) { |
||||||
|
UniValue obj(UniValue::VOBJ); |
||||||
|
obj.pushKV("type", n->GetType()); |
||||||
|
obj.pushKV("address", n->GetAddress()); |
||||||
|
result.push_back(obj); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
const CRPCCommand commands[] = |
||||||
|
{ // category name actor (function) argNames
|
||||||
|
// ----------------- ------------------------ ----------------------- ----------
|
||||||
|
{ "zmq", "getzmqnotifications", &getzmqnotifications, {} }, |
||||||
|
}; |
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
void RegisterZMQRPCCommands(CRPCTable& t) |
||||||
|
{ |
||||||
|
for (const auto& c : commands) { |
||||||
|
t.appendCommand(c.name, &c); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
// Copyright (c) 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.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_ZMQ_ZMQRPC_H |
||||||
|
#define BITCOIN_ZMQ_ZMQRPC_H |
||||||
|
|
||||||
|
class CRPCTable; |
||||||
|
|
||||||
|
void RegisterZMQRPCCommands(CRPCTable& t); |
||||||
|
|
||||||
|
#endif // BITCOIN_ZMQ_ZMRRPC_H
|
@ -0,0 +1,34 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
# Copyright (c) 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. |
||||||
|
"""Test for the ZMQ RPC methods.""" |
||||||
|
|
||||||
|
from test_framework.test_framework import BitcoinTestFramework |
||||||
|
from test_framework.util import assert_equal |
||||||
|
|
||||||
|
|
||||||
|
class RPCZMQTest(BitcoinTestFramework): |
||||||
|
|
||||||
|
address = "tcp://127.0.0.1:28332" |
||||||
|
|
||||||
|
def set_test_params(self): |
||||||
|
self.num_nodes = 1 |
||||||
|
self.setup_clean_chain = True |
||||||
|
|
||||||
|
def run_test(self): |
||||||
|
self._test_getzmqnotifications() |
||||||
|
|
||||||
|
def _test_getzmqnotifications(self): |
||||||
|
self.restart_node(0, extra_args=[]) |
||||||
|
assert_equal(self.nodes[0].getzmqnotifications(), []) |
||||||
|
|
||||||
|
self.restart_node(0, extra_args=["-zmqpubhashtx=%s" % self.address]) |
||||||
|
assert_equal(self.nodes[0].getzmqnotifications(), [ |
||||||
|
{"type": "pubhashtx", "address": self.address}, |
||||||
|
]) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
RPCZMQTest().main() |
||||||
|
|
Loading…
Reference in new issue