@@ -25,6 +25,7 @@ use crate::ln::features::{InitFeatures, NodeFeatures};
2525use crate :: ln:: msgs:: { self , OnionMessage , OnionMessageHandler } ;
2626use crate :: ln:: onion_utils;
2727use crate :: ln:: peer_handler:: IgnoringMessageHandler ;
28+ use crate :: routing:: gossip:: { NetworkGraph , NodeId } ;
2829pub use super :: packet:: OnionMessageContents ;
2930use super :: packet:: ParsedOnionMessageContents ;
3031use super :: offers:: OffersMessageHandler ;
@@ -59,15 +60,17 @@ use crate::prelude::*;
5960/// ```
6061/// # extern crate bitcoin;
6162/// # use bitcoin::hashes::_export::_core::time::Duration;
63+ /// # use bitcoin::network::constants::Network;
6264/// # use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
6365/// # use lightning::blinded_path::BlindedPath;
6466/// # use lightning::sign::KeysManager;
6567/// # use lightning::ln::peer_handler::IgnoringMessageHandler;
6668/// # use lightning::onion_message::{OnionMessageContents, Destination, MessageRouter, OnionMessagePath, OnionMessenger};
69+ /// # use lightning::routing::gossip::NetworkGraph;
6770/// # use lightning::util::logger::{Logger, Record};
6871/// # use lightning::util::ser::{Writeable, Writer};
6972/// # use lightning::io;
70- /// # use std::sync::Arc;
73+ /// #
7174/// # struct FakeLogger;
7275/// # impl Logger for FakeLogger {
7376/// # fn log(&self, record: &Record) { unimplemented!() }
@@ -81,20 +84,21 @@ use crate::prelude::*;
8184/// # let seed = [42u8; 32];
8285/// # let time = Duration::from_secs(123456);
8386/// # let keys_manager = KeysManager::new(&seed, time.as_secs(), time.subsec_nanos());
84- /// # let logger = Arc::new(FakeLogger {});
87+ /// # let logger = FakeLogger {};
88+ /// # let network_graph = NetworkGraph::new(Network::Testnet, &logger);
8589/// # let node_secret = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
8690/// # let secp_ctx = Secp256k1::new();
8791/// # let hop_node_id1 = PublicKey::from_secret_key(&secp_ctx, &node_secret);
8892/// # let (hop_node_id2, hop_node_id3, hop_node_id4) = (hop_node_id1, hop_node_id1, hop_node_id1);
8993/// # let destination_node_id = hop_node_id1;
90- /// # let message_router = Arc::new( FakeMessageRouter {}) ;
94+ /// # let message_router = FakeMessageRouter {};
9195/// # let custom_message_handler = IgnoringMessageHandler {};
9296/// # let offers_message_handler = IgnoringMessageHandler {};
9397/// // Create the onion messenger. This must use the same `keys_manager` as is passed to your
9498/// // ChannelManager.
9599/// let onion_messenger = OnionMessenger::new(
96- /// &keys_manager, &keys_manager, logger, message_router , &offers_message_handler ,
97- /// &custom_message_handler
100+ /// &keys_manager, &keys_manager, &network_graph, &logger , &message_router ,
101+ /// &offers_message_handler, & custom_message_handler
98102/// );
99103///
100104/// # struct YourCustomMessage {}
@@ -136,17 +140,19 @@ use crate::prelude::*;
136140///
137141/// [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
138142/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
139- pub struct OnionMessenger < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
143+ pub struct OnionMessenger < ES : Deref , NS : Deref , G , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
140144where
141145 ES :: Target : EntropySource ,
142146 NS :: Target : NodeSigner ,
147+ G : Deref < Target =NetworkGraph < L > > ,
143148 L :: Target : Logger ,
144149 MR :: Target : MessageRouter ,
145150 OMH :: Target : OffersMessageHandler ,
146151 CMH :: Target : CustomOnionMessageHandler ,
147152{
148153 entropy_source : ES ,
149154 node_signer : NS ,
155+ network_graph : G ,
150156 logger : L ,
151157 message_buffers : Mutex < HashMap < PublicKey , OnionMessageBuffer > > ,
152158 secp_ctx : Secp256k1 < secp256k1:: All > ,
@@ -533,11 +539,12 @@ where
533539 }
534540}
535541
536- impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
537- OnionMessenger < ES , NS , L , MR , OMH , CMH >
542+ impl < ES : Deref , NS : Deref , G , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
543+ OnionMessenger < ES , NS , G , L , MR , OMH , CMH >
538544where
539545 ES :: Target : EntropySource ,
540546 NS :: Target : NodeSigner ,
547+ G : Deref < Target =NetworkGraph < L > > ,
541548 L :: Target : Logger ,
542549 MR :: Target : MessageRouter ,
543550 OMH :: Target : OffersMessageHandler ,
@@ -546,14 +553,15 @@ where
546553 /// Constructs a new `OnionMessenger` to send, forward, and delegate received onion messages to
547554 /// their respective handlers.
548555 pub fn new (
549- entropy_source : ES , node_signer : NS , logger : L , message_router : MR , offers_handler : OMH ,
550- custom_handler : CMH
556+ entropy_source : ES , node_signer : NS , network_graph : G , logger : L , message_router : MR ,
557+ offers_handler : OMH , custom_handler : CMH
551558 ) -> Self {
552559 let mut secp_ctx = Secp256k1 :: new ( ) ;
553560 secp_ctx. seeded_randomize ( & entropy_source. get_secure_random_bytes ( ) ) ;
554561 OnionMessenger {
555562 entropy_source,
556563 node_signer,
564+ network_graph,
557565 message_buffers : Mutex :: new ( HashMap :: new ( ) ) ,
558566 secp_ctx,
559567 logger,
@@ -687,11 +695,12 @@ fn outbound_buffer_full(peer_node_id: &PublicKey, buffer: &HashMap<PublicKey, On
687695 false
688696}
689697
690- impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref > OnionMessageHandler
691- for OnionMessenger < ES , NS , L , MR , OMH , CMH >
698+ impl < ES : Deref , NS : Deref , G , L : Deref , MR : Deref , OMH : Deref , CMH : Deref > OnionMessageHandler
699+ for OnionMessenger < ES , NS , G , L , MR , OMH , CMH >
692700where
693701 ES :: Target : EntropySource ,
694702 NS :: Target : NodeSigner ,
703+ G : Deref < Target =NetworkGraph < L > > ,
695704 L :: Target : Logger ,
696705 MR :: Target : MessageRouter ,
697706 OMH :: Target : OffersMessageHandler ,
@@ -830,6 +839,7 @@ where
830839pub type SimpleArcOnionMessenger < M , T , F , L > = OnionMessenger <
831840 Arc < KeysManager > ,
832841 Arc < KeysManager > ,
842+ Arc < NetworkGraph < L > > ,
833843 Arc < L > ,
834844 Arc < DefaultMessageRouter > ,
835845 Arc < SimpleArcChannelManager < M , T , F , L > > ,
@@ -849,6 +859,7 @@ pub type SimpleRefOnionMessenger<
849859> = OnionMessenger <
850860 & ' a KeysManager ,
851861 & ' a KeysManager ,
862+ & ' g NetworkGraph < & ' b L > ,
852863 & ' b L ,
853864 & ' i DefaultMessageRouter ,
854865 & ' j SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , M , T , F , L > ,
0 commit comments