Expose event-processing loop from peer_handler.

This commit is contained in:
Matt Corallo 2018-03-27 11:17:40 -04:00
parent 8e79c05a20
commit cf6308a5ae

View file

@ -219,7 +219,6 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
} }
fn do_read_event(&self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> { fn do_read_event(&self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
let mut upstream_events = Vec::new();
let pause_read = { let pause_read = {
let mut peers = self.peers.lock().unwrap(); let mut peers = self.peers.lock().unwrap();
let (should_insert_node_id, pause_read) = match peers.peers.get_mut(peer_descriptor) { let (should_insert_node_id, pause_read) = match peers.peers.get_mut(peer_descriptor) {
@ -463,11 +462,25 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
None => {} None => {}
}; };
pause_read
};
self.process_events();
Ok(pause_read)
}
/// Checks for any events generated by our handlers and processes them. May be needed after eg
/// calls to ChannelManager::process_pending_htlc_forward.
pub fn process_events(&self) {
let mut upstream_events = Vec::new();
{
// TODO: There are some DoS attacks here where you can flood someone's outbound send // TODO: There are some DoS attacks here where you can flood someone's outbound send
// buffer by doing things like announcing channels on another node. We should be willing to // buffer by doing things like announcing channels on another node. We should be willing to
// drop optional-ish messages when send buffers get full! // drop optional-ish messages when send buffers get full!
let mut events_generated = self.message_handler.chan_handler.get_and_clear_pending_events(); let mut events_generated = self.message_handler.chan_handler.get_and_clear_pending_events();
let mut peers = self.peers.lock().unwrap();
for event in events_generated.drain(..) { for event in events_generated.drain(..) {
macro_rules! get_peer_for_forwarding { macro_rules! get_peer_for_forwarding {
($node_id: expr, $handle_no_such_peer: block) => { ($node_id: expr, $handle_no_such_peer: block) => {
@ -573,16 +586,12 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
upstream_events.push(event); upstream_events.push(event);
} }
}
pause_read
};
let mut pending_events = self.pending_events.lock().unwrap(); let mut pending_events = self.pending_events.lock().unwrap();
for event in upstream_events.drain(..) { for event in upstream_events.drain(..) {
pending_events.push(event); pending_events.push(event);
} }
Ok(pause_read)
} }
/// Indicates that the given socket descriptor's connection is now closed. /// Indicates that the given socket descriptor's connection is now closed.