Skip to content

Commit 1c28cc0

Browse files
OnionMessenger: support generating peer connection events.
Useful if we are in the mode of interception OMs for offline peers, so users know when to re-inject intercepted OMs.
1 parent e8f7fe1 commit 1c28cc0

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

lightning/src/events/mod.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,18 @@ pub enum Event {
10531053
/// The onion message intended to be forwarded to `peer_node_id`.
10541054
message: msgs::OnionMessage,
10551055
},
1056+
/// Indicates that an onion message supporting peer has come online and it may
1057+
/// be time to forward any onion messages that were previously intercepted for
1058+
/// them. This event will only be generated if the `OnionMessenger` was
1059+
/// initialized with
1060+
/// [`OnionMessenger::new_with_offline_peer_interception`], see its docs.
1061+
///
1062+
/// [`OnionMessenger::new_with_offline_peer_interception`]: crate::onion_message::messenger::OnionMessenger::new_with_offline_peer_interception
1063+
OnionMessagePeerConnected {
1064+
/// The node id of the peer we just connected to, who advertises support for
1065+
/// onion messages.
1066+
peer_node_id: PublicKey,
1067+
}
10561068
}
10571069

10581070
impl Writeable for Event {
@@ -1304,6 +1316,12 @@ impl Writeable for Event {
13041316
(0, peer_node_id, required),
13051317
(2, message, required),
13061318
});
1319+
},
1320+
&Event::OnionMessagePeerConnected { ref peer_node_id } => {
1321+
39u8.write(writer)?;
1322+
write_tlv_fields!(writer, {
1323+
(0, peer_node_id, required),
1324+
});
13071325
}
13081326
// Note that, going forward, all new events must only write data inside of
13091327
// `write_tlv_fields`. Versions 0.0.101+ will ignore odd-numbered events that write
@@ -1728,6 +1746,17 @@ impl MaybeReadable for Event {
17281746
};
17291747
f()
17301748
},
1749+
39u8 => {
1750+
let mut f = || {
1751+
_init_and_read_len_prefixed_tlv_fields!(reader, {
1752+
(0, peer_node_id, required),
1753+
});
1754+
Ok(Some(Event::OnionMessagePeerConnected {
1755+
peer_node_id: peer_node_id.0.unwrap()
1756+
}))
1757+
};
1758+
f()
1759+
},
17311760
// Versions prior to 0.0.100 did not ignore odd types, instead returning InvalidValue.
17321761
// Version 0.0.100 failed to properly ignore odd types, possibly resulting in corrupt
17331762
// reads.

lightning/src/onion_message/messenger.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1140,6 +1140,11 @@ where
11401140
.entry(*their_node_id)
11411141
.or_insert_with(|| OnionMessageRecipient::ConnectedPeer(VecDeque::new()))
11421142
.mark_connected();
1143+
if self.intercept_messages_for_offline_peers {
1144+
self.pending_events.lock().unwrap().push(
1145+
Event::OnionMessagePeerConnected { peer_node_id: *their_node_id }
1146+
);
1147+
}
11431148
} else {
11441149
self.message_recipients.lock().unwrap().remove(their_node_id);
11451150
}

0 commit comments

Comments
 (0)