Skip to content

Commit 6ca81ff

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 ce68f22 commit 6ca81ff

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 30 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,27 @@ 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+
682705
#[cfg(feature = "std")]
683706
impl BackgroundProcessor {
684707
/// Start a background thread that takes care of responsibilities enumerated in the [top-level
@@ -788,7 +811,9 @@ impl BackgroundProcessor {
788811
define_run_body!(
789812
persister, chain_monitor, chain_monitor.process_pending_events(&event_handler),
790813
channel_manager, channel_manager.process_pending_events(&event_handler),
791-
peer_manager, gossip_sync, logger, scorer, stop_thread.load(Ordering::Acquire),
814+
peer_manager,
815+
peer_manager.onion_message_handler().process_pending_events(&event_handler),
816+
gossip_sync, logger, scorer, stop_thread.load(Ordering::Acquire),
792817
{ Sleeper::from_two_futures(
793818
channel_manager.get_event_or_persistence_needed_future(),
794819
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
@@ -684,6 +684,8 @@ pub trait APeerManager {
684684
type NS: Deref<Target=Self::NST>;
685685
/// Gets a reference to the underlying [`PeerManager`].
686686
fn as_ref(&self) -> &PeerManager<Self::Descriptor, Self::CM, Self::RM, Self::OM, Self::L, Self::CMH, Self::NS>;
687+
/// Returns the peer manager's [`OnionMessageHandler`].
688+
fn onion_message_handler(&self) -> &Self::OMT;
687689
}
688690

689691
impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CMH: Deref, NS: Deref>
@@ -709,6 +711,9 @@ APeerManager for PeerManager<Descriptor, CM, RM, OM, L, CMH, NS> where
709711
type NST = <NS as Deref>::Target;
710712
type NS = NS;
711713
fn as_ref(&self) -> &PeerManager<Descriptor, CM, RM, OM, L, CMH, NS> { self }
714+
fn onion_message_handler(&self) -> &Self::OMT {
715+
self.message_handler.onion_message_handler.deref()
716+
}
712717
}
713718

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

0 commit comments

Comments
 (0)