mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +01:00
Expose event-processing loop from peer_handler.
This commit is contained in:
parent
8e79c05a20
commit
cf6308a5ae
1 changed files with 15 additions and 6 deletions
|
@ -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.
|
||||||
|
|
Loading…
Add table
Reference in a new issue