Skip to content

Commit b86f02a

Browse files
committed
Return socket addresses from DefaultMessageRouter
When there isn't a direct connection with the Destination of an OnionMessage, look up socket addresses from the NetworkGraph. This is used to signal to OnionMessenger that a direct connection is needed to send the message.
1 parent 1114c3c commit b86f02a

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

lightning/src/onion_message/messenger.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::ln::features::{InitFeatures, NodeFeatures};
2525
use crate::ln::msgs::{self, OnionMessage, OnionMessageHandler, SocketAddress};
2626
use crate::ln::onion_utils;
2727
use crate::ln::peer_handler::IgnoringMessageHandler;
28-
use crate::routing::gossip::NetworkGraph;
28+
use crate::routing::gossip::{NetworkGraph, NodeId};
2929
pub use super::packet::OnionMessageContents;
3030
use super::packet::ParsedOnionMessageContents;
3131
use super::offers::OffersMessageHandler;
@@ -282,10 +282,24 @@ where
282282
fn find_path(
283283
&self, _sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
284284
) -> Result<OnionMessagePath, ()> {
285-
if peers.contains(&destination.first_node()) {
285+
let first_node = destination.first_node();
286+
if peers.contains(&first_node) {
286287
Ok(OnionMessagePath { intermediate_nodes: vec![], destination, addresses: None })
287288
} else {
288-
Err(())
289+
let network_graph = self.network_graph.deref().read_only();
290+
let node_announcement = network_graph
291+
.node(&NodeId::from_pubkey(&first_node))
292+
.and_then(|node_info| node_info.announcement_info.as_ref())
293+
.and_then(|announcement_info| announcement_info.announcement_message.as_ref())
294+
.map(|node_announcement| &node_announcement.contents);
295+
296+
match node_announcement {
297+
Some(node_announcement) if node_announcement.features.supports_onion_messages() => {
298+
let addresses = Some(node_announcement.addresses.clone());
299+
Ok(OnionMessagePath { intermediate_nodes: vec![], destination, addresses })
300+
},
301+
_ => Err(()),
302+
}
289303
}
290304
}
291305
}

0 commit comments

Comments
 (0)