@@ -659,6 +659,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
659
659
let pause_read = {
660
660
let mut peers_lock = self . peers . lock ( ) . unwrap ( ) ;
661
661
let peers = & mut * peers_lock;
662
+ let mut msgs_to_forward = Vec :: new ( ) ;
663
+ let mut peer_node_id = None ;
662
664
let pause_read = match peers. peers . get_mut ( peer_descriptor) {
663
665
None => panic ! ( "Descriptor for read_event is not already known to PeerManager" ) ,
664
666
Some ( peer) => {
@@ -794,13 +796,18 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
794
796
}
795
797
} ;
796
798
797
- if let Err ( handling_error ) = self . handle_message ( & mut peers. peers_needing_send , peer, peer_descriptor. clone ( ) , message) {
798
- match handling_error {
799
+ match self . handle_message ( & mut peers. peers_needing_send , peer, peer_descriptor. clone ( ) , message) {
800
+ Err ( handling_error ) => match handling_error {
799
801
MessageHandlingError :: PeerHandleError ( e) => { return Err ( e) } ,
800
802
MessageHandlingError :: LightningError ( e) => {
801
803
try_potential_handleerror ! ( Err ( e) ) ;
802
804
} ,
803
- }
805
+ } ,
806
+ Ok ( Some ( msg) ) => {
807
+ peer_node_id = Some ( peer. their_node_id . expect ( "After noise is complete, their_node_id is always set" ) ) ;
808
+ msgs_to_forward. push ( msg) ;
809
+ } ,
810
+ Ok ( None ) => { } ,
804
811
}
805
812
}
806
813
}
@@ -812,14 +819,19 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
812
819
}
813
820
} ;
814
821
822
+ for msg in msgs_to_forward. drain ( ..) {
823
+ self . forward_broadcast_msg ( peers, & msg, peer_node_id. as_ref ( ) ) ;
824
+ }
825
+
815
826
pause_read
816
827
} ;
817
828
818
829
Ok ( pause_read)
819
830
}
820
831
821
832
/// Process an incoming message and return a decision (ok, lightning error, peer handling error) regarding the next action with the peer
822
- fn handle_message ( & self , peers_needing_send : & mut HashSet < Descriptor > , peer : & mut Peer , peer_descriptor : Descriptor , message : wire:: Message ) -> Result < ( ) , MessageHandlingError > {
833
+ /// Returns the message back if it needs to be broadcasted to all other peers.
834
+ fn handle_message ( & self , peers_needing_send : & mut HashSet < Descriptor > , peer : & mut Peer , peer_descriptor : Descriptor , message : wire:: Message ) -> Result < Option < wire:: Message > , MessageHandlingError > {
823
835
log_trace ! ( self . logger, "Received message of type {} from {}" , message. type_id( ) , log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
824
836
825
837
// Need an Init as first message
@@ -829,6 +841,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
829
841
return Err ( PeerHandleError { no_connection_possible : false } . into ( ) ) ;
830
842
}
831
843
844
+ let mut should_forward = None ;
845
+
832
846
match message {
833
847
// Setup and Control messages:
834
848
wire:: Message :: Init ( msg) => {
@@ -951,34 +965,28 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
951
965
self . message_handler . chan_handler . handle_announcement_signatures ( & peer. their_node_id . unwrap ( ) , & msg) ;
952
966
} ,
953
967
wire:: Message :: ChannelAnnouncement ( msg) => {
954
- let should_forward = match self . message_handler . route_handler . handle_channel_announcement ( & msg) {
968
+ if match self . message_handler . route_handler . handle_channel_announcement ( & msg) {
955
969
Ok ( v) => v,
956
970
Err ( e) => { return Err ( e. into ( ) ) ; } ,
957
- } ;
958
-
959
- if should_forward {
960
- // TODO: forward msg along to all our other peers!
971
+ } {
972
+ should_forward = Some ( wire:: Message :: ChannelAnnouncement ( msg) ) ;
961
973
}
962
974
} ,
963
975
wire:: Message :: NodeAnnouncement ( msg) => {
964
- let should_forward = match self . message_handler . route_handler . handle_node_announcement ( & msg) {
976
+ if match self . message_handler . route_handler . handle_node_announcement ( & msg) {
965
977
Ok ( v) => v,
966
978
Err ( e) => { return Err ( e. into ( ) ) ; } ,
967
- } ;
968
-
969
- if should_forward {
970
- // TODO: forward msg along to all our other peers!
979
+ } {
980
+ should_forward = Some ( wire:: Message :: NodeAnnouncement ( msg) ) ;
971
981
}
972
982
} ,
973
983
wire:: Message :: ChannelUpdate ( msg) => {
974
984
self . message_handler . chan_handler . handle_channel_update ( & peer. their_node_id . unwrap ( ) , & msg) ;
975
- let should_forward = match self . message_handler . route_handler . handle_channel_update ( & msg) {
985
+ if match self . message_handler . route_handler . handle_channel_update ( & msg) {
976
986
Ok ( v) => v,
977
987
Err ( e) => { return Err ( e. into ( ) ) ; } ,
978
- } ;
979
-
980
- if should_forward {
981
- // TODO: forward msg along to all our other peers!
988
+ } {
989
+ should_forward = Some ( wire:: Message :: ChannelUpdate ( msg) ) ;
982
990
}
983
991
} ,
984
992
wire:: Message :: QueryShortChannelIds ( msg) => {
@@ -1007,7 +1015,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
1007
1015
log_trace ! ( self . logger, "Received unknown odd message of type {}, ignoring" , msg_type) ;
1008
1016
}
1009
1017
} ;
1010
- Ok ( ( ) )
1018
+ Ok ( should_forward )
1011
1019
}
1012
1020
1013
1021
fn forward_broadcast_msg ( & self , peers : & mut PeerHolder < Descriptor > , msg : & wire:: Message , except_node : Option < & PublicKey > ) {
0 commit comments