drop msgs received from a banned peer (#886)

This commit is contained in:
Antioch Peverell 2018-03-27 12:09:41 -04:00 committed by GitHub
parent 5bd0c251dc
commit 4fcf5fdbca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 0 deletions

View file

@ -442,4 +442,8 @@ impl NetAdapter for TrackingAdapter {
fn peer_difficulty(&self, addr: SocketAddr, diff: Difficulty, height: u64) {
self.adapter.peer_difficulty(addr, diff, height)
}
fn is_banned(&self, addr: SocketAddr) -> bool {
self.adapter.is_banned(addr)
}
}

View file

@ -638,4 +638,13 @@ impl NetAdapter for Peers {
}
}
}
fn is_banned(&self, addr: SocketAddr) -> bool {
if let Some(peer) = self.get_connected_peer(&addr) {
let mut peer = peer.write().unwrap();
peer.is_banned()
} else {
false
}
}
}

View file

@ -41,6 +41,19 @@ impl MessageHandler for Protocol {
fn consume<'a>(&self, mut msg: Message<'a>) -> Result<Option<Response<'a>>, Error> {
let adapter = &self.adapter;
// If we received a msg from a banned peer then log and drop it.
// If we are getting a lot of these then maybe we are not cleaning
// banned peers up correctly?
if adapter.is_banned(self.addr.clone()) {
debug!(
LOGGER,
"handler: consume: peer {:?} banned, received: {:?}, dropping.",
self.addr,
msg.header.msg_type,
);
return Ok(None);
}
match msg.header.msg_type {
Type::Ping => {
let ping: Ping = msg.body()?;

View file

@ -244,4 +244,7 @@ impl NetAdapter for DummyAdapter {
}
fn peer_addrs_received(&self, _: Vec<SocketAddr>) {}
fn peer_difficulty(&self, _: SocketAddr, _: Difficulty, _: u64) {}
fn is_banned(&self, _: SocketAddr) -> bool {
false
}
}

View file

@ -223,4 +223,7 @@ pub trait NetAdapter: ChainAdapter {
/// Heard total_difficulty from a connected peer (via ping/pong).
fn peer_difficulty(&self, SocketAddr, Difficulty, u64);
/// Is this peer currently banned?
fn is_banned(&self, addr: SocketAddr) -> bool;
}