RPCs for reserved peers (#4423)

* RPC forwarders for adding reserved peers

* implement service side of reserved-peer RPCs

* Clean up unnecessary format! invocation

Co-Authored-By: Niklas Adolfsson <niklasadolfsson1@gmail.com>

* add some tests for the new RPC methods

* remove redundant `data` field

Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
This commit is contained in:
Robert Habermeier
2019-12-18 14:12:15 +01:00
committed by GitHub
parent 637d95e5ea
commit da87c3c1e3
6 changed files with 125 additions and 3 deletions
@@ -28,6 +28,8 @@ pub enum Error {
/// Provided block range couldn't be resolved to a list of blocks.
#[display(fmt = "Node is not fully functional: {}", _0)]
NotHealthy(Health),
/// Peer argument is malformatted.
MalformattedPeerArg(String),
}
impl std::error::Error for Error {}
@@ -43,6 +45,11 @@ impl From<Error> for rpc::Error {
message: format!("{}", e),
data: serde_json::to_value(h).ok(),
},
Error::MalformattedPeerArg(ref e) => rpc::Error {
code :rpc::ErrorCode::ServerError(BASE_ERROR + 2),
message: e.clone(),
data: None,
}
}
}
}
+18 -1
View File
@@ -21,8 +21,10 @@ pub mod helpers;
use crate::helpers::Receiver;
use jsonrpc_derive::rpc;
use futures::{future::BoxFuture, compat::Compat};
use std::pin::Pin;
use self::error::Result;
use self::error::{Error, Result};
pub use self::helpers::{Properties, SystemInfo, Health, PeerInfo, NodeRole};
pub use self::gen_client::Client as SystemClient;
@@ -65,6 +67,21 @@ pub trait SystemApi<Hash, Number> {
#[rpc(name = "system_networkState", returns = "jsonrpc_core::Value")]
fn system_network_state(&self) -> Receiver<jsonrpc_core::Value>;
/// Adds a reserved peer. Returns the empty string or an error. The string
/// parameter should encode a `p2p` multiaddr.
///
/// `/ip4/198.51.100.19/tcp/30333/p2p/QmSk5HQbn6LhUwDiNMseVUjuRYhEtYj4aUZ6WfWoGURpdV`
/// is an example of a valid, passing multiaddr with PeerId attached.
#[rpc(name = "system_addReservedPeer", returns = "()")]
fn system_add_reserved_peer(&self, peer: String)
-> Compat<BoxFuture<'static, std::result::Result<(), jsonrpc_core::Error>>>;
/// Remove a reserved peer. Returns the empty string or an error. The string
/// should encode only the PeerId e.g. `QmSk5HQbn6LhUwDiNMseVUjuRYhEtYj4aUZ6WfWoGURpdV`.
#[rpc(name = "system_removeReservedPeer", returns = "()")]
fn system_remove_reserved_peer(&self, peer_id: String)
-> Compat<BoxFuture<'static, std::result::Result<(), jsonrpc_core::Error>>>;
/// Returns the roles the node is running as.
#[rpc(name = "system_nodeRoles", returns = "Vec<NodeRole>")]
fn system_node_roles(&self) -> Receiver<Vec<NodeRole>>;