diff --git a/util/src/network/host.rs b/util/src/network/host.rs index b2be68a32..78fb274fa 100644 --- a/util/src/network/host.rs +++ b/util/src/network/host.rs @@ -209,6 +209,12 @@ impl<'s, Message> NetworkContext<'s, Message> where Message: Send + Sync + Clone } } + /// Send an IO message + pub fn message(&self, msg: Message) { + self.io.message(NetworkIoMessage::User(msg)); + } + + /// Disable current protocol capability for given peer. If no capabilities left peer gets disconnected. pub fn disable_peer(&self, peer: PeerId) { //TODO: remove capability, disconnect if no capabilities left @@ -754,6 +760,7 @@ impl IoHandler> for Host where Messa io.register_timer(DISCOVERY_REFRESH, 7200).expect("Error registering discovery timer"); io.register_timer(DISCOVERY_ROUND, 300).expect("Error registering discovery timer"); } + self.maintain_network(io) } fn stream_hup(&self, io: &IoContext>, stream: StreamToken) { diff --git a/util/src/network/node_table.rs b/util/src/network/node_table.rs index f528f7134..7ca060f75 100644 --- a/util/src/network/node_table.rs +++ b/util/src/network/node_table.rs @@ -332,6 +332,7 @@ impl Drop for NodeTable { } } +/// Check if node url is valid pub fn is_valid_node_url(url: &str) -> bool { use std::str::FromStr; Node::from_str(url).is_ok() diff --git a/util/src/network/tests.rs b/util/src/network/tests.rs index dc80936d2..44d53bdbe 100644 --- a/util/src/network/tests.rs +++ b/util/src/network/tests.rs @@ -74,6 +74,7 @@ impl NetworkProtocolHandler for TestProtocol { } fn connected(&self, io: &NetworkContext, peer: &PeerId) { + assert!(io.peer_info(*peer).contains("parity")); if self.drop_session { io.disconnect_peer(*peer) } else { @@ -86,7 +87,8 @@ impl NetworkProtocolHandler for TestProtocol { } /// Timer function called after a timeout created with `NetworkContext::timeout`. - fn timeout(&self, _io: &NetworkContext, timer: TimerToken) { + fn timeout(&self, io: &NetworkContext, timer: TimerToken) { + io.message(TestProtocolMessage { payload: 22 }); assert_eq!(timer, 0); self.got_timeout.store(true, AtomicOrdering::Relaxed); }