@@ -50,6 +50,7 @@ use crate::io_extras::read_to_end;
5050use core:: fmt;
5151use core:: fmt:: Debug ;
5252use core:: fmt:: Display ;
53+ use core:: ops:: Deref ;
5354#[ cfg( feature = "std" ) ]
5455use core:: str:: FromStr ;
5556#[ cfg( feature = "std" ) ]
@@ -2074,6 +2075,26 @@ pub trait BaseMessageHandler {
20742075 -> Result < ( ) , ( ) > ;
20752076}
20762077
2078+ impl < T : BaseMessageHandler + ?Sized , B : Deref < Target = T > > BaseMessageHandler for B {
2079+ fn get_and_clear_pending_msg_events ( & self ) -> Vec < MessageSendEvent > {
2080+ self . deref ( ) . get_and_clear_pending_msg_events ( )
2081+ }
2082+ fn peer_disconnected ( & self , their_node_id : PublicKey ) {
2083+ self . deref ( ) . peer_disconnected ( their_node_id)
2084+ }
2085+ fn provided_node_features ( & self ) -> NodeFeatures {
2086+ self . deref ( ) . provided_node_features ( )
2087+ }
2088+ fn provided_init_features ( & self , their_node_id : PublicKey ) -> InitFeatures {
2089+ self . deref ( ) . provided_init_features ( their_node_id)
2090+ }
2091+ fn peer_connected (
2092+ & self , their_node_id : PublicKey , msg : & Init , inbound : bool ,
2093+ ) -> Result < ( ) , ( ) > {
2094+ self . deref ( ) . peer_connected ( their_node_id, msg, inbound)
2095+ }
2096+ }
2097+
20772098/// A trait to describe an object which can receive channel messages.
20782099///
20792100/// Messages MAY be called in parallel when they originate from different `their_node_ids`, however
@@ -2214,6 +2235,137 @@ pub trait ChannelMessageHandler: BaseMessageHandler {
22142235 fn message_received ( & self ) ;
22152236}
22162237
2238+ impl < T : ChannelMessageHandler + ?Sized , C : Deref < Target = T > > ChannelMessageHandler for C {
2239+ fn handle_open_channel ( & self , their_node_id : PublicKey , msg : & OpenChannel ) {
2240+ self . deref ( ) . handle_open_channel ( their_node_id, msg)
2241+ }
2242+ fn handle_open_channel_v2 ( & self , their_node_id : PublicKey , msg : & OpenChannelV2 ) {
2243+ self . deref ( ) . handle_open_channel_v2 ( their_node_id, msg)
2244+ }
2245+ fn handle_accept_channel ( & self , their_node_id : PublicKey , msg : & AcceptChannel ) {
2246+ self . deref ( ) . handle_accept_channel ( their_node_id, msg)
2247+ }
2248+ fn handle_accept_channel_v2 ( & self , their_node_id : PublicKey , msg : & AcceptChannelV2 ) {
2249+ self . deref ( ) . handle_accept_channel_v2 ( their_node_id, msg)
2250+ }
2251+ fn handle_funding_created ( & self , their_node_id : PublicKey , msg : & FundingCreated ) {
2252+ self . deref ( ) . handle_funding_created ( their_node_id, msg)
2253+ }
2254+ fn handle_funding_signed ( & self , their_node_id : PublicKey , msg : & FundingSigned ) {
2255+ self . deref ( ) . handle_funding_signed ( their_node_id, msg)
2256+ }
2257+ fn handle_channel_ready ( & self , their_node_id : PublicKey , msg : & ChannelReady ) {
2258+ self . deref ( ) . handle_channel_ready ( their_node_id, msg)
2259+ }
2260+ fn handle_peer_storage ( & self , their_node_id : PublicKey , msg : PeerStorage ) {
2261+ self . deref ( ) . handle_peer_storage ( their_node_id, msg)
2262+ }
2263+ fn handle_peer_storage_retrieval ( & self , their_node_id : PublicKey , msg : PeerStorageRetrieval ) {
2264+ self . deref ( ) . handle_peer_storage_retrieval ( their_node_id, msg)
2265+ }
2266+ fn handle_shutdown ( & self , their_node_id : PublicKey , msg : & Shutdown ) {
2267+ self . deref ( ) . handle_shutdown ( their_node_id, msg)
2268+ }
2269+ fn handle_closing_signed ( & self , their_node_id : PublicKey , msg : & ClosingSigned ) {
2270+ self . deref ( ) . handle_closing_signed ( their_node_id, msg)
2271+ }
2272+ #[ cfg( simple_close) ]
2273+ fn handle_closing_complete ( & self , their_node_id : PublicKey , msg : ClosingComplete ) {
2274+ self . deref ( ) . handle_closing_complete ( their_node_id, msg)
2275+ }
2276+ #[ cfg( simple_close) ]
2277+ fn handle_closing_sig ( & self , their_node_id : PublicKey , msg : ClosingSig ) {
2278+ self . deref ( ) . handle_closing_sig ( their_node_id, msg)
2279+ }
2280+ fn handle_stfu ( & self , their_node_id : PublicKey , msg : & Stfu ) {
2281+ self . deref ( ) . handle_stfu ( their_node_id, msg)
2282+ }
2283+ fn handle_splice_init ( & self , their_node_id : PublicKey , msg : & SpliceInit ) {
2284+ self . deref ( ) . handle_splice_init ( their_node_id, msg)
2285+ }
2286+ fn handle_splice_ack ( & self , their_node_id : PublicKey , msg : & SpliceAck ) {
2287+ self . deref ( ) . handle_splice_ack ( their_node_id, msg)
2288+ }
2289+ fn handle_splice_locked ( & self , their_node_id : PublicKey , msg : & SpliceLocked ) {
2290+ self . deref ( ) . handle_splice_locked ( their_node_id, msg)
2291+ }
2292+ fn handle_tx_add_input ( & self , their_node_id : PublicKey , msg : & TxAddInput ) {
2293+ self . deref ( ) . handle_tx_add_input ( their_node_id, msg)
2294+ }
2295+ fn handle_tx_add_output ( & self , their_node_id : PublicKey , msg : & TxAddOutput ) {
2296+ self . deref ( ) . handle_tx_add_output ( their_node_id, msg)
2297+ }
2298+ fn handle_tx_remove_input ( & self , their_node_id : PublicKey , msg : & TxRemoveInput ) {
2299+ self . deref ( ) . handle_tx_remove_input ( their_node_id, msg)
2300+ }
2301+ fn handle_tx_remove_output ( & self , their_node_id : PublicKey , msg : & TxRemoveOutput ) {
2302+ self . deref ( ) . handle_tx_remove_output ( their_node_id, msg)
2303+ }
2304+ fn handle_tx_complete ( & self , their_node_id : PublicKey , msg : & TxComplete ) {
2305+ self . deref ( ) . handle_tx_complete ( their_node_id, msg)
2306+ }
2307+ fn handle_tx_signatures ( & self , their_node_id : PublicKey , msg : & TxSignatures ) {
2308+ self . deref ( ) . handle_tx_signatures ( their_node_id, msg)
2309+ }
2310+ fn handle_tx_init_rbf ( & self , their_node_id : PublicKey , msg : & TxInitRbf ) {
2311+ self . deref ( ) . handle_tx_init_rbf ( their_node_id, msg)
2312+ }
2313+ fn handle_tx_ack_rbf ( & self , their_node_id : PublicKey , msg : & TxAckRbf ) {
2314+ self . deref ( ) . handle_tx_ack_rbf ( their_node_id, msg)
2315+ }
2316+ fn handle_tx_abort ( & self , their_node_id : PublicKey , msg : & TxAbort ) {
2317+ self . deref ( ) . handle_tx_abort ( their_node_id, msg)
2318+ }
2319+ fn handle_update_add_htlc ( & self , their_node_id : PublicKey , msg : & UpdateAddHTLC ) {
2320+ self . deref ( ) . handle_update_add_htlc ( their_node_id, msg)
2321+ }
2322+ fn handle_update_fulfill_htlc ( & self , their_node_id : PublicKey , msg : UpdateFulfillHTLC ) {
2323+ self . deref ( ) . handle_update_fulfill_htlc ( their_node_id, msg)
2324+ }
2325+ fn handle_update_fail_htlc ( & self , their_node_id : PublicKey , msg : & UpdateFailHTLC ) {
2326+ self . deref ( ) . handle_update_fail_htlc ( their_node_id, msg)
2327+ }
2328+ fn handle_update_fail_malformed_htlc (
2329+ & self , their_node_id : PublicKey , msg : & UpdateFailMalformedHTLC ,
2330+ ) {
2331+ self . deref ( ) . handle_update_fail_malformed_htlc ( their_node_id, msg)
2332+ }
2333+ fn handle_commitment_signed ( & self , their_node_id : PublicKey , msg : & CommitmentSigned ) {
2334+ self . deref ( ) . handle_commitment_signed ( their_node_id, msg)
2335+ }
2336+ fn handle_commitment_signed_batch (
2337+ & self , their_node_id : PublicKey , channel_id : ChannelId , batch : Vec < CommitmentSigned > ,
2338+ ) {
2339+ self . deref ( ) . handle_commitment_signed_batch ( their_node_id, channel_id, batch)
2340+ }
2341+ fn handle_revoke_and_ack ( & self , their_node_id : PublicKey , msg : & RevokeAndACK ) {
2342+ self . deref ( ) . handle_revoke_and_ack ( their_node_id, msg)
2343+ }
2344+ fn handle_update_fee ( & self , their_node_id : PublicKey , msg : & UpdateFee ) {
2345+ self . deref ( ) . handle_update_fee ( their_node_id, msg)
2346+ }
2347+ fn handle_announcement_signatures (
2348+ & self , their_node_id : PublicKey , msg : & AnnouncementSignatures ,
2349+ ) {
2350+ self . deref ( ) . handle_announcement_signatures ( their_node_id, msg)
2351+ }
2352+ fn handle_channel_reestablish ( & self , their_node_id : PublicKey , msg : & ChannelReestablish ) {
2353+ self . deref ( ) . handle_channel_reestablish ( their_node_id, msg)
2354+ }
2355+ fn handle_channel_update ( & self , their_node_id : PublicKey , msg : & ChannelUpdate ) {
2356+ self . deref ( ) . handle_channel_update ( their_node_id, msg)
2357+ }
2358+ fn handle_error ( & self , their_node_id : PublicKey , msg : & ErrorMessage ) {
2359+ self . deref ( ) . handle_error ( their_node_id, msg)
2360+ }
2361+ fn get_chain_hashes ( & self ) -> Option < Vec < ChainHash > > {
2362+ self . deref ( ) . get_chain_hashes ( )
2363+ }
2364+ fn message_received ( & self ) {
2365+ self . deref ( ) . message_received ( )
2366+ }
2367+ }
2368+
22172369/// A trait to describe an object which can receive routing messages.
22182370///
22192371/// # Implementor DoS Warnings
@@ -2288,6 +2440,57 @@ pub trait RoutingMessageHandler: BaseMessageHandler {
22882440 fn processing_queue_high ( & self ) -> bool ;
22892441}
22902442
2443+ impl < T : RoutingMessageHandler + ?Sized , R : Deref < Target = T > > RoutingMessageHandler for R {
2444+ fn handle_node_announcement (
2445+ & self , their_node_id : Option < PublicKey > , msg : & NodeAnnouncement ,
2446+ ) -> Result < bool , LightningError > {
2447+ self . deref ( ) . handle_node_announcement ( their_node_id, msg)
2448+ }
2449+ fn handle_channel_announcement (
2450+ & self , their_node_id : Option < PublicKey > , msg : & ChannelAnnouncement ,
2451+ ) -> Result < bool , LightningError > {
2452+ self . deref ( ) . handle_channel_announcement ( their_node_id, msg)
2453+ }
2454+ fn handle_channel_update (
2455+ & self , their_node_id : Option < PublicKey > , msg : & ChannelUpdate ,
2456+ ) -> Result < Option < ( NodeId , NodeId ) > , LightningError > {
2457+ self . deref ( ) . handle_channel_update ( their_node_id, msg)
2458+ }
2459+ fn get_next_channel_announcement (
2460+ & self , starting_point : u64 ,
2461+ ) -> Option < ( ChannelAnnouncement , Option < ChannelUpdate > , Option < ChannelUpdate > ) > {
2462+ self . deref ( ) . get_next_channel_announcement ( starting_point)
2463+ }
2464+ fn get_next_node_announcement (
2465+ & self , starting_point : Option < & NodeId > ,
2466+ ) -> Option < NodeAnnouncement > {
2467+ self . deref ( ) . get_next_node_announcement ( starting_point)
2468+ }
2469+ fn handle_reply_channel_range (
2470+ & self , their_node_id : PublicKey , msg : ReplyChannelRange ,
2471+ ) -> Result < ( ) , LightningError > {
2472+ self . deref ( ) . handle_reply_channel_range ( their_node_id, msg)
2473+ }
2474+ fn handle_reply_short_channel_ids_end (
2475+ & self , their_node_id : PublicKey , msg : ReplyShortChannelIdsEnd ,
2476+ ) -> Result < ( ) , LightningError > {
2477+ self . deref ( ) . handle_reply_short_channel_ids_end ( their_node_id, msg)
2478+ }
2479+ fn handle_query_channel_range (
2480+ & self , their_node_id : PublicKey , msg : QueryChannelRange ,
2481+ ) -> Result < ( ) , LightningError > {
2482+ self . deref ( ) . handle_query_channel_range ( their_node_id, msg)
2483+ }
2484+ fn handle_query_short_channel_ids (
2485+ & self , their_node_id : PublicKey , msg : QueryShortChannelIds ,
2486+ ) -> Result < ( ) , LightningError > {
2487+ self . deref ( ) . handle_query_short_channel_ids ( their_node_id, msg)
2488+ }
2489+ fn processing_queue_high ( & self ) -> bool {
2490+ self . deref ( ) . processing_queue_high ( )
2491+ }
2492+ }
2493+
22912494/// A handler for received [`OnionMessage`]s and for providing generated ones to send.
22922495pub trait OnionMessageHandler : BaseMessageHandler {
22932496 /// Handle an incoming `onion_message` message from the given peer.
@@ -2304,13 +2507,27 @@ pub trait OnionMessageHandler: BaseMessageHandler {
23042507 fn timer_tick_occurred ( & self ) ;
23052508}
23062509
2510+ impl < T : OnionMessageHandler + ?Sized , O : Deref < Target = T > > OnionMessageHandler for O {
2511+ fn handle_onion_message ( & self , peer_node_id : PublicKey , msg : & OnionMessage ) {
2512+ self . deref ( ) . handle_onion_message ( peer_node_id, msg)
2513+ }
2514+ fn next_onion_message_for_peer ( & self , peer_node_id : PublicKey ) -> Option < OnionMessage > {
2515+ self . deref ( ) . next_onion_message_for_peer ( peer_node_id)
2516+ }
2517+ fn timer_tick_occurred ( & self ) {
2518+ self . deref ( ) . timer_tick_occurred ( )
2519+ }
2520+ }
2521+
23072522/// A handler which can only be used to send messages.
23082523///
23092524/// This is implemented by [`ChainMonitor`].
23102525///
23112526/// [`ChainMonitor`]: crate::chain::chainmonitor::ChainMonitor
23122527pub trait SendOnlyMessageHandler : BaseMessageHandler { }
23132528
2529+ impl < T : SendOnlyMessageHandler + ?Sized , S : Deref < Target = T > > SendOnlyMessageHandler for S { }
2530+
23142531#[ derive( Clone , Debug , PartialEq , Eq ) ]
23152532/// Information communicated in the onion to the recipient for multi-part tracking and proof that
23162533/// the payment is associated with an invoice.
0 commit comments