Skip to content

Commit 5acadea

Browse files
committed
Process OnionMessageHandler events in background
OnionMessageHandler implementations now also implement EventsProvider. Update lightning-background-processor to also process any events the PeerManager's OnionMessageHandler provides.
1 parent abbae6a commit 5acadea

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,9 @@ macro_rules! define_run_body {
273273
(
274274
$persister: ident, $chain_monitor: ident, $process_chain_monitor_events: expr,
275275
$channel_manager: ident, $process_channel_manager_events: expr,
276-
$peer_manager: ident, $gossip_sync: ident, $logger: ident, $scorer: ident,
277-
$loop_exit_check: expr, $await: expr, $get_timer: expr, $timer_elapsed: expr,
278-
$check_slow_await: expr
276+
$peer_manager: ident, $process_onion_message_handler_events: expr, $gossip_sync: ident,
277+
$logger: ident, $scorer: ident, $loop_exit_check: expr, $await: expr, $get_timer: expr,
278+
$timer_elapsed: expr, $check_slow_await: expr
279279
) => { {
280280
log_trace!($logger, "Calling ChannelManager's timer_tick_occurred on startup");
281281
$channel_manager.timer_tick_occurred();
@@ -292,6 +292,7 @@ macro_rules! define_run_body {
292292
loop {
293293
$process_channel_manager_events;
294294
$process_chain_monitor_events;
295+
$process_onion_message_handler_events;
295296

296297
// Note that the PeerManager::process_events may block on ChannelManager's locks,
297298
// hence it comes last here. When the ChannelManager finishes whatever it's doing,
@@ -655,7 +656,8 @@ where
655656
persister, chain_monitor,
656657
chain_monitor.process_pending_events_async(async_event_handler).await,
657658
channel_manager, channel_manager.process_pending_events_async(async_event_handler).await,
658-
peer_manager, gossip_sync, logger, scorer, should_break, {
659+
peer_manager, process_onion_message_handler_events_async(&peer_manager, async_event_handler).await,
660+
gossip_sync, logger, scorer, should_break, {
659661
let fut = Selector {
660662
a: channel_manager.get_event_or_persistence_needed_future(),
661663
b: chain_monitor.get_update_future(),
@@ -679,6 +681,28 @@ where
679681
)
680682
}
681683

684+
#[cfg(feature = "futures")]
685+
async fn process_onion_message_handler_events_async<
686+
EventHandlerFuture: core::future::Future<Output = ()>,
687+
EventHandler: Fn(Event) -> EventHandlerFuture,
688+
PM: 'static + Deref + Send + Sync,
689+
>(
690+
peer_manager: &PM, handler: EventHandler
691+
)
692+
where
693+
PM::Target: APeerManager + Send + Sync,
694+
{
695+
use lightning::events::EventsProvider;
696+
697+
let events = core::cell::RefCell::new(Vec::new());
698+
peer_manager.onion_message_handler().process_pending_events(&|e| events.borrow_mut().push(e));
699+
700+
for event in events.into_inner() {
701+
handler(event).await
702+
}
703+
}
704+
705+
682706
#[cfg(feature = "std")]
683707
impl BackgroundProcessor {
684708
/// Start a background thread that takes care of responsibilities enumerated in the [top-level
@@ -788,7 +812,9 @@ impl BackgroundProcessor {
788812
define_run_body!(
789813
persister, chain_monitor, chain_monitor.process_pending_events(&event_handler),
790814
channel_manager, channel_manager.process_pending_events(&event_handler),
791-
peer_manager, gossip_sync, logger, scorer, stop_thread.load(Ordering::Acquire),
815+
peer_manager,
816+
peer_manager.onion_message_handler().process_pending_events(&event_handler),
817+
gossip_sync, logger, scorer, stop_thread.load(Ordering::Acquire),
792818
{ Sleeper::from_two_futures(
793819
channel_manager.get_event_or_persistence_needed_future(),
794820
chain_monitor.get_update_future()

lightning/src/ln/peer_handler.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,8 @@ pub trait APeerManager {
672672
type NS: Deref<Target=Self::NST>;
673673
/// Gets a reference to the underlying [`PeerManager`].
674674
fn as_ref(&self) -> &PeerManager<Self::Descriptor, Self::CM, Self::RM, Self::OM, Self::L, Self::CMH, Self::NS>;
675+
/// Returns the peer manager's [`OnionMessageHandler`].
676+
fn onion_message_handler(&self) -> &Self::OMT;
675677
}
676678

677679
impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CMH: Deref, NS: Deref>
@@ -697,6 +699,9 @@ APeerManager for PeerManager<Descriptor, CM, RM, OM, L, CMH, NS> where
697699
type NST = <NS as Deref>::Target;
698700
type NS = NS;
699701
fn as_ref(&self) -> &PeerManager<Descriptor, CM, RM, OM, L, CMH, NS> { self }
702+
fn onion_message_handler(&self) -> &Self::OMT {
703+
self.message_handler.onion_message_handler.deref()
704+
}
700705
}
701706

702707
/// A PeerManager manages a set of peers, described by their [`SocketDescriptor`] and marshalls

0 commit comments

Comments
 (0)