From ead68ebe34bdfa013dc5978a2592bf179fe99984 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sun, 12 Mar 2017 12:34:40 +0900 Subject: [PATCH] Add new RPC method: add_peer --- docs/RPC-INTERFACE.rst | 11 +++++++++++ server/controller.py | 12 +++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/RPC-INTERFACE.rst b/docs/RPC-INTERFACE.rst index bb0aed9..b5dc960 100644 --- a/docs/RPC-INTERFACE.rst +++ b/docs/RPC-INTERFACE.rst @@ -156,6 +156,17 @@ The following commands are available: Currently peer data is obtained via a peer discovery protocol; it used to be taken from IRC. +* **add_peer** + + Add a peer to the peers list. ElectrumX will schdule an immediate + connection attempt. This command takes a single argument: the + peer's "real name" as it would advertise itself on IRC. + + .. code:: + + $ ./electrumx_rpc.py add_peer "ecdsa.net v1.0 s110 t" + "peer 'ecdsa.net v1.0 s110 t' added" + * **daemon_url** This command takes an optional argument that is interpreted diff --git a/server/controller.py b/server/controller.py index c0cbf6b..18b33fd 100644 --- a/server/controller.py +++ b/server/controller.py @@ -21,6 +21,7 @@ import pylru from lib.jsonrpc import JSONRPC, JSONSessionBase, RPCError from lib.hash import double_sha256, hash_to_str, hex_str_to_hash +from lib.peer import Peer import lib.util as util from server.block_processor import BlockProcessor from server.daemon import Daemon, DaemonError @@ -73,7 +74,7 @@ class Controller(util.LoggedClass): env.max_send = max(350000, env.max_send) self.setup_bands() # Set up the RPC request handlers - cmds = ('daemon_url disconnect getinfo groups log peers reorg ' + cmds = ('add_peer daemon_url disconnect getinfo groups log peers reorg ' 'sessions stop'.split()) self.rpc_handlers = {cmd: getattr(self, 'rpc_' + cmd) for cmd in cmds} # Set up the ElectrumX request handlers @@ -579,6 +580,15 @@ class Controller(util.LoggedClass): # Local RPC command handlers + def rpc_add_peer(self, real_name): + '''Add a peer. + + real_name: a real name, as would appear on IRC + ''' + peer = Peer.from_real_name(real_name, 'RPC') + self.peer_mgr.add_peers([peer]) + return "peer '{}' added".format(real_name) + def rpc_disconnect(self, session_ids): '''Disconnect sesssions.