Add new RPC method: add_peer

This commit is contained in:
Neil Booth 2017-03-12 12:34:40 +09:00
parent 9c6d2f5764
commit ead68ebe34
2 changed files with 22 additions and 1 deletions

View File

@ -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

View File

@ -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.