@@ -128,13 +128,17 @@ use logger::{log_error, log_info, log_trace, FilesystemLogger, Logger};
128128
129129use lightning:: chain:: keysinterface:: EntropySource ;
130130use lightning:: chain:: Confirm ;
131+ use lightning:: io:: Read ;
131132use lightning:: ln:: channelmanager:: { self , PaymentId , RecipientOnionFields , Retry } ;
133+ use lightning:: ln:: msgs:: DecodeError ;
132134use lightning:: ln:: { PaymentHash , PaymentPreimage } ;
133- use lightning:: onion_message:: { CustomOnionMessageContents , Destination , OnionMessageContents } ;
135+ use lightning:: onion_message:: {
136+ CustomOnionMessageContents , CustomOnionMessageHandler , Destination , OnionMessageContents ,
137+ } ;
134138
135- use lightning:: util:: ser:: { Writeable , Writer } ;
136139use lightning:: util:: config:: { ChannelConfig , ChannelHandshakeConfig , UserConfig } ;
137140pub use lightning:: util:: logger:: Level as LogLevel ;
141+ use lightning:: util:: ser:: { Writeable , Writer } ;
138142
139143use lightning_background_processor:: process_events_async;
140144
@@ -152,8 +156,10 @@ use bitcoin::{Address, Txid};
152156
153157use rand:: Rng ;
154158
159+ use std:: collections:: VecDeque ;
155160use std:: default:: Default ;
156161use std:: net:: ToSocketAddrs ;
162+ use std:: ops:: Deref ;
157163use std:: sync:: { Arc , Mutex , RwLock } ;
158164use std:: time:: { Duration , Instant , SystemTime } ;
159165
@@ -214,6 +220,34 @@ impl Writeable for UserOnionMessageContents {
214220 }
215221}
216222
223+ // An extremely basic message handler needed for our integration tests.
224+ pub struct OnionMessageHandler {
225+ pub messages : Mutex < VecDeque < UserOnionMessageContents > > ,
226+ }
227+
228+ impl CustomOnionMessageHandler for OnionMessageHandler {
229+ type CustomMessage = UserOnionMessageContents ;
230+
231+ fn handle_custom_message ( & self , msg : Self :: CustomMessage ) {
232+ println ! ( "Received a new custom message!" ) ;
233+ self . messages . lock ( ) . unwrap ( ) . push_back ( msg) ;
234+ }
235+
236+ fn read_custom_message < R : Read > (
237+ & self , message_type : u64 , buffer : & mut R ,
238+ ) -> Result < Option < Self :: CustomMessage > , DecodeError > {
239+ unimplemented ! ( ) ;
240+ }
241+ }
242+
243+ impl Deref for OnionMessageHandler {
244+ type Target = OnionMessageHandler ;
245+
246+ fn deref ( & self ) -> & Self :: Target {
247+ & self
248+ }
249+ }
250+
217251#[ derive( Debug , Clone ) ]
218252/// Represents the configuration of an [`Node`] instance.
219253///
@@ -309,6 +343,7 @@ pub struct Node<K: KVStore + Sync + Send + 'static> {
309343 peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
310344 payment_store : Arc < PaymentStore < K , Arc < FilesystemLogger > > > ,
311345 onion_messenger : Arc < OnionMessenger > ,
346+ pub custom_handler : Arc < OnionMessageHandler > ,
312347}
313348
314349impl < K : KVStore + Sync + Send + ' static > Node < K > {
0 commit comments