handle announcements
This commit is contained in:
parent
ec1b982b52
commit
c132775bb1
@ -200,15 +200,47 @@ impl LightProtocol {
|
|||||||
sent_head: pending.sent_head,
|
sent_head: pending.sent_head,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle an announcement.
|
// Handle an announcement.
|
||||||
fn announcement(&self, peer: &PeerId, io: &NetworkContext, data: UntrustedRlp) -> Result<(), Error> {
|
fn announcement(&self, peer: &PeerId, io: &NetworkContext, data: UntrustedRlp) -> Result<(), Error> {
|
||||||
const MAX_NEW_HASHES: usize = 256;
|
if !self.peers.read().contains_key(peer) {
|
||||||
|
debug!(target: "les", "Ignoring announcement from unknown peer");
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
unimplemented!()
|
let announcement = try!(status::parse_announcement(data));
|
||||||
|
let mut peers = self.peers.write();
|
||||||
|
|
||||||
|
let peer_info = match peers.get_mut(peer) {
|
||||||
|
Some(info) => info,
|
||||||
|
None => return Ok(()),
|
||||||
|
};
|
||||||
|
|
||||||
|
// update status.
|
||||||
|
{
|
||||||
|
// TODO: punish peer if they've moved backwards.
|
||||||
|
let status = &mut peer_info.status;
|
||||||
|
let last_head = status.head_hash;
|
||||||
|
status.head_hash = announcement.head_hash;
|
||||||
|
status.head_td = announcement.head_td;
|
||||||
|
status.head_num = announcement.head_num;
|
||||||
|
status.last_head = Some((last_head, announcement.reorg_depth));
|
||||||
|
}
|
||||||
|
|
||||||
|
// update capabilities.
|
||||||
|
{
|
||||||
|
let caps = &mut peer_info.capabilities;
|
||||||
|
caps.serve_headers = caps.serve_headers || announcement.serve_headers;
|
||||||
|
caps.serve_state_since = caps.serve_state_since.or(announcement.serve_state_since);
|
||||||
|
caps.serve_chain_since = caps.serve_chain_since.or(announcement.serve_chain_since);
|
||||||
|
caps.tx_relay = caps.tx_relay || announcement.tx_relay;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: notify listeners if new best block.
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle a request for block headers.
|
// Handle a request for block headers.
|
||||||
|
Loading…
Reference in New Issue
Block a user