LES Peer Info (#4195)

* connected peers function for network service

* get LES peer info in sync API

* new peer info in RPC
This commit is contained in:
Robert Habermeier
2017-01-20 12:41:49 +01:00
committed by Arkadiy Paronyan
parent 35666f718b
commit 3ff9324ec0
11 changed files with 150 additions and 48 deletions

View File

@@ -542,6 +542,20 @@ impl Host {
Ok(())
}
/// Get all connected peers.
pub fn connected_peers(&self) -> Vec<PeerId> {
let sessions = self.sessions.read();
let sessions = &*sessions;
let mut peers = Vec::with_capacity(sessions.count());
for i in (0..MAX_SESSIONS).map(|x| x + FIRST_SESSION) {
if sessions.get(i).is_some() {
peers.push(i);
}
}
peers
}
fn init_public_interface(&self, io: &IoContext<NetworkIoMessage>) -> Result<(), NetworkError> {
if self.info.read().public_endpoint.is_some() {
return Ok(());

View File

@@ -16,7 +16,7 @@
use {NetworkProtocolHandler, NetworkConfiguration, NonReservedPeerMode};
use error::NetworkError;
use host::{Host, NetworkContext, NetworkIoMessage, ProtocolId};
use host::{Host, NetworkContext, NetworkIoMessage, PeerId, ProtocolId};
use stats::NetworkStats;
use io::*;
use parking_lot::RwLock;
@@ -142,6 +142,11 @@ impl NetworkService {
Ok(())
}
/// Get a list of all connected peers by id.
pub fn connected_peers(&self) -> Vec<PeerId> {
self.host.read().as_ref().map(|h| h.connected_peers()).unwrap_or_else(Vec::new)
}
/// Try to add a reserved peer.
pub fn add_reserved_peer(&self, peer: &str) -> Result<(), NetworkError> {
let host = self.host.read();