@@ -157,8 +157,8 @@ impl RoutingMessageHandler for IgnoringMessageHandler {
157157 }
158158 fn handle_channel_update (
159159 & self , _their_node_id : Option < PublicKey > , _msg : & msgs:: ChannelUpdate ,
160- ) -> Result < bool , LightningError > {
161- Ok ( false )
160+ ) -> Result < Option < ( NodeId , NodeId ) > , LightningError > {
161+ Ok ( None )
162162 }
163163 fn get_next_channel_announcement (
164164 & self , _starting_point : u64 ,
@@ -611,6 +611,19 @@ where
611611 pub send_only_message_handler : SM ,
612612}
613613
614+ /// A gossip message to be forwarded to all peers.
615+ enum BroadcastGossipMessage {
616+ ChannelAnnouncement ( msgs:: ChannelAnnouncement ) ,
617+ NodeAnnouncement ( msgs:: NodeAnnouncement ) ,
618+ ChannelUpdate {
619+ msg : msgs:: ChannelUpdate ,
620+ /// One of the two channel endpoints.
621+ node_id_1 : NodeId ,
622+ /// One of the two channel endpoints.
623+ node_id_2 : NodeId ,
624+ } ,
625+ }
626+
614627/// Provides an object which can be used to send data to and which uniquely identifies a connection
615628/// to a remote host. You will need to be able to generate multiple of these which meet Eq and
616629/// implement Hash to meet the PeerManager API.
@@ -2045,10 +2058,7 @@ where
20452058 message : wire:: Message <
20462059 <<CMH as Deref >:: Target as wire:: CustomMessageReader >:: CustomMessage ,
20472060 > ,
2048- ) -> Result <
2049- Option < wire:: Message < <<CMH as Deref >:: Target as wire:: CustomMessageReader >:: CustomMessage > > ,
2050- MessageHandlingError ,
2051- > {
2061+ ) -> Result < Option < BroadcastGossipMessage > , MessageHandlingError > {
20522062 let their_node_id = peer_lock
20532063 . their_node_id
20542064 . expect ( "We know the peer's public key by the time we receive messages" )
@@ -2390,10 +2400,7 @@ where
23902400 <<CMH as Deref >:: Target as wire:: CustomMessageReader >:: CustomMessage ,
23912401 > ,
23922402 their_node_id : PublicKey , logger : & WithContext < ' a , L > ,
2393- ) -> Result <
2394- Option < wire:: Message < <<CMH as Deref >:: Target as wire:: CustomMessageReader >:: CustomMessage > > ,
2395- MessageHandlingError ,
2396- > {
2403+ ) -> Result < Option < BroadcastGossipMessage > , MessageHandlingError > {
23972404 if is_gossip_msg ( message. type_id ( ) ) {
23982405 log_gossip ! ( logger, "Received message {:?} from {}" , message, their_node_id) ;
23992406 } else {
@@ -2575,7 +2582,7 @@ where
25752582 . handle_channel_announcement ( Some ( their_node_id) , & msg)
25762583 . map_err ( |e| -> MessageHandlingError { e. into ( ) } ) ?
25772584 {
2578- should_forward = Some ( wire :: Message :: ChannelAnnouncement ( msg) ) ;
2585+ should_forward = Some ( BroadcastGossipMessage :: ChannelAnnouncement ( msg) ) ;
25792586 }
25802587 self . update_gossip_backlogged ( ) ;
25812588 } ,
@@ -2585,7 +2592,7 @@ where
25852592 . handle_node_announcement ( Some ( their_node_id) , & msg)
25862593 . map_err ( |e| -> MessageHandlingError { e. into ( ) } ) ?
25872594 {
2588- should_forward = Some ( wire :: Message :: NodeAnnouncement ( msg) ) ;
2595+ should_forward = Some ( BroadcastGossipMessage :: NodeAnnouncement ( msg) ) ;
25892596 }
25902597 self . update_gossip_backlogged ( ) ;
25912598 } ,
@@ -2594,11 +2601,12 @@ where
25942601 chan_handler. handle_channel_update ( their_node_id, & msg) ;
25952602
25962603 let route_handler = & self . message_handler . route_handler ;
2597- if route_handler
2604+ if let Some ( ( node_id_1 , node_id_2 ) ) = route_handler
25982605 . handle_channel_update ( Some ( their_node_id) , & msg)
25992606 . map_err ( |e| -> MessageHandlingError { e. into ( ) } ) ?
26002607 {
2601- should_forward = Some ( wire:: Message :: ChannelUpdate ( msg) ) ;
2608+ should_forward =
2609+ Some ( BroadcastGossipMessage :: ChannelUpdate { msg, node_id_1, node_id_2 } ) ;
26022610 }
26032611 self . update_gossip_backlogged ( ) ;
26042612 } ,
@@ -2652,12 +2660,11 @@ where
26522660 /// unless `allow_large_buffer` is set, in which case the message will be treated as critical
26532661 /// and delivered no matter the available buffer space.
26542662 fn forward_broadcast_msg (
2655- & self , peers : & HashMap < Descriptor , Mutex < Peer > > ,
2656- msg : & wire:: Message < <<CMH as Deref >:: Target as wire:: CustomMessageReader >:: CustomMessage > ,
2663+ & self , peers : & HashMap < Descriptor , Mutex < Peer > > , msg : & BroadcastGossipMessage ,
26572664 except_node : Option < & PublicKey > , allow_large_buffer : bool ,
26582665 ) {
26592666 match msg {
2660- wire :: Message :: ChannelAnnouncement ( ref msg) => {
2667+ BroadcastGossipMessage :: ChannelAnnouncement ( ref msg) => {
26612668 log_gossip ! ( self . logger, "Sending message to all peers except {:?} or the announced channel's counterparties: {:?}" , except_node, msg) ;
26622669 let encoded_msg = encode_msg ! ( msg) ;
26632670
@@ -2696,7 +2703,7 @@ where
26962703 peer. gossip_broadcast_buffer . push_back ( encoded_message) ;
26972704 }
26982705 } ,
2699- wire :: Message :: NodeAnnouncement ( ref msg) => {
2706+ BroadcastGossipMessage :: NodeAnnouncement ( ref msg) => {
27002707 log_gossip ! (
27012708 self . logger,
27022709 "Sending message to all peers except {:?} or the announced node: {:?}" ,
@@ -2738,7 +2745,7 @@ where
27382745 peer. gossip_broadcast_buffer . push_back ( encoded_message) ;
27392746 }
27402747 } ,
2741- wire :: Message :: ChannelUpdate ( ref msg) => {
2748+ BroadcastGossipMessage :: ChannelUpdate { msg, node_id_1 : _ , node_id_2 : _ } => {
27422749 log_gossip ! (
27432750 self . logger,
27442751 "Sending message to all peers except {:?}: {:?}" ,
@@ -2775,9 +2782,6 @@ where
27752782 peer. gossip_broadcast_buffer . push_back ( encoded_message) ;
27762783 }
27772784 } ,
2778- _ => {
2779- debug_assert ! ( false , "We shouldn't attempt to forward anything but gossip messages" )
2780- } ,
27812785 }
27822786 }
27832787
@@ -3129,13 +3133,15 @@ where
31293133 } ,
31303134 MessageSendEvent :: BroadcastChannelAnnouncement { msg, update_msg } => {
31313135 log_debug ! ( self . logger, "Handling BroadcastChannelAnnouncement event in peer_handler for short channel id {}" , msg. contents. short_channel_id) ;
3136+ let node_id_1 = msg. contents . node_id_1 ;
3137+ let node_id_2 = msg. contents . node_id_2 ;
31323138 match route_handler. handle_channel_announcement ( None , & msg) {
31333139 Ok ( _)
31343140 | Err ( LightningError {
31353141 action : msgs:: ErrorAction :: IgnoreDuplicateGossip ,
31363142 ..
31373143 } ) => {
3138- let forward = wire :: Message :: ChannelAnnouncement ( msg) ;
3144+ let forward = BroadcastGossipMessage :: ChannelAnnouncement ( msg) ;
31393145 self . forward_broadcast_msg (
31403146 peers,
31413147 & forward,
@@ -3152,7 +3158,11 @@ where
31523158 action : msgs:: ErrorAction :: IgnoreDuplicateGossip ,
31533159 ..
31543160 } ) => {
3155- let forward = wire:: Message :: ChannelUpdate ( msg) ;
3161+ let forward = BroadcastGossipMessage :: ChannelUpdate {
3162+ msg,
3163+ node_id_1,
3164+ node_id_2,
3165+ } ;
31563166 self . forward_broadcast_msg (
31573167 peers,
31583168 & forward,
@@ -3164,15 +3174,19 @@ where
31643174 }
31653175 }
31663176 } ,
3167- MessageSendEvent :: BroadcastChannelUpdate { msg, .. } => {
3177+ MessageSendEvent :: BroadcastChannelUpdate { msg, node_id_1 , node_id_2 } => {
31683178 log_debug ! ( self . logger, "Handling BroadcastChannelUpdate event in peer_handler for contents {:?}" , msg. contents) ;
31693179 match route_handler. handle_channel_update ( None , & msg) {
31703180 Ok ( _)
31713181 | Err ( LightningError {
31723182 action : msgs:: ErrorAction :: IgnoreDuplicateGossip ,
31733183 ..
31743184 } ) => {
3175- let forward = wire:: Message :: ChannelUpdate ( msg) ;
3185+ let forward = BroadcastGossipMessage :: ChannelUpdate {
3186+ msg,
3187+ node_id_1,
3188+ node_id_2,
3189+ } ;
31763190 self . forward_broadcast_msg (
31773191 peers,
31783192 & forward,
@@ -3191,7 +3205,7 @@ where
31913205 action : msgs:: ErrorAction :: IgnoreDuplicateGossip ,
31923206 ..
31933207 } ) => {
3194- let forward = wire :: Message :: NodeAnnouncement ( msg) ;
3208+ let forward = BroadcastGossipMessage :: NodeAnnouncement ( msg) ;
31953209 self . forward_broadcast_msg (
31963210 peers,
31973211 & forward,
@@ -3668,7 +3682,7 @@ where
36683682 let _ = self . message_handler . route_handler . handle_node_announcement ( None , & msg) ;
36693683 self . forward_broadcast_msg (
36703684 & * self . peers . read ( ) . unwrap ( ) ,
3671- & wire :: Message :: NodeAnnouncement ( msg) ,
3685+ & BroadcastGossipMessage :: NodeAnnouncement ( msg) ,
36723686 None ,
36733687 true ,
36743688 ) ;
0 commit comments