@@ -128,7 +128,9 @@ use lightning::ln::channelmanager::{
128128} ;
129129use lightning:: ln:: peer_handler:: { IgnoringMessageHandler , MessageHandler } ;
130130use lightning:: ln:: { PaymentHash , PaymentPreimage } ;
131+ use lightning:: onion_message:: { CustomOnionMessageContents , Destination , OnionMessageContents } ;
131132use lightning:: routing:: scoring:: { ProbabilisticScorer , ProbabilisticScoringParameters } ;
133+ use lightning:: util:: ser:: { Writeable , Writer } ;
132134
133135use lightning:: util:: config:: { ChannelHandshakeConfig , ChannelHandshakeLimits , UserConfig } ;
134136use lightning:: util:: ser:: ReadableArgs ;
@@ -248,6 +250,23 @@ enum GossipSourceConfig {
248250 RapidGossipSync ( String ) ,
249251}
250252
253+ struct UserOnionMessageContents {
254+ tlv_type : u64 ,
255+ data : Vec < u8 > ,
256+ }
257+
258+ impl CustomOnionMessageContents for UserOnionMessageContents {
259+ fn tlv_type ( & self ) -> u64 {
260+ self . tlv_type
261+ }
262+ }
263+
264+ impl Writeable for UserOnionMessageContents {
265+ fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , std:: io:: Error > {
266+ w. write_all ( & self . data )
267+ }
268+ }
269+
251270/// A builder for an [`Node`] instance, allowing to set some configuration and module choices from
252271/// the getgo.
253272///
@@ -705,7 +724,7 @@ impl Builder {
705724 scorer,
706725 peer_store,
707726 payment_store,
708- _onion_messenger : onion_messenger,
727+ onion_messenger,
709728 } )
710729 }
711730}
@@ -732,7 +751,7 @@ pub struct Node<K: KVStore + Sync + Send + 'static> {
732751 scorer : Arc < Mutex < Scorer > > ,
733752 peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
734753 payment_store : Arc < PaymentStore < K , Arc < FilesystemLogger > > > ,
735- _onion_messenger : Arc < OnionMessenger > ,
754+ onion_messenger : Arc < OnionMessenger > ,
736755}
737756
738757impl < K : KVStore + Sync + Send + ' static > Node < K > {
@@ -1153,6 +1172,21 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
11531172 self . wallet . send_to_address ( address, None )
11541173 }
11551174
1175+ /// Send an onion message to the following address.
1176+ pub fn send_onion_message (
1177+ & self , node_pks : Vec < PublicKey > , destination_pk : PublicKey , tlv_type : u64 , data : Vec < u8 > ,
1178+ ) {
1179+ match self . onion_messenger . send_onion_message (
1180+ & node_pks,
1181+ Destination :: Node ( destination_pk) ,
1182+ OnionMessageContents :: Custom ( UserOnionMessageContents { tlv_type, data } ) ,
1183+ None ,
1184+ ) {
1185+ Ok ( ( ) ) => println ! ( "SUCCESS: forwarded onion message to first hop" ) ,
1186+ Err ( e) => println ! ( "ERROR: failed to send onion message: {:?}" , e) ,
1187+ }
1188+ }
1189+
11561190 /// Retrieve the currently spendable on-chain balance in satoshis.
11571191 pub fn spendable_onchain_balance_sats ( & self ) -> Result < u64 , Error > {
11581192 Ok ( self . wallet . get_balance ( ) . map ( |bal| bal. get_spendable ( ) ) ?)
0 commit comments