@@ -632,7 +632,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
632
632
None => panic ! ( "Descriptor for read_event is not already known to PeerManager" ) ,
633
633
Some ( peer) => peer
634
634
} ;
635
- self . do_read_event ( peer_descriptor, data , peer. outbound , & mut peer . post_init_state , & mut peer . transport , & mut peer . pending_outbound_buffer , & mut peers. node_id_to_descriptor , & mut peers . peers_needing_send )
635
+ self . do_read_event ( peer_descriptor, peer, & mut peers . peers_needing_send , & mut peers. node_id_to_descriptor , data )
636
636
} ;
637
637
638
638
match result {
@@ -685,19 +685,19 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
685
685
}
686
686
687
687
// Add an Init message to the outbound queue
688
- fn queue_init_message ( & self , peers_needing_send : & mut HashSet < Descriptor > , message_queuer : & mut impl MessageQueuer , pending_outbound_buffer : & mut impl PayloadQueuer , descriptor : & Descriptor , should_request_full_sync : bool ) {
688
+ fn queue_init_message ( & self , descriptor : & Descriptor , peer : & mut Peer < TransportImpl > , peers_needing_send : & mut HashSet < Descriptor > ) {
689
689
let mut features = InitFeatures :: known ( ) ;
690
- if !should_request_full_sync {
690
+ if !self . message_handler . route_handler . should_request_full_sync ( & peer . transport . get_their_node_id ( ) ) {
691
691
features. clear_initial_routing_sync ( ) ;
692
692
}
693
693
694
694
let resp = msgs:: Init { features } ;
695
- self . enqueue_message ( peers_needing_send, message_queuer , pending_outbound_buffer, descriptor, & resp) ;
695
+ self . enqueue_message ( peers_needing_send, & mut peer . transport , & mut peer . pending_outbound_buffer , descriptor, & resp) ;
696
696
}
697
697
698
698
// Process an incoming Init message and set Peer and PeerManager state accordingly
699
- fn process_init_message ( & self , message : Message , descriptor : & Descriptor , peers_needing_send : & mut HashSet < Descriptor > , node_id_to_descriptor : & mut HashMap < PublicKey , Descriptor > , pending_outbound_buffer : & mut impl PayloadQueuer , outbound : bool , transport : & mut impl ITransport , post_init_state : & mut Option < PostInitState > ) -> Result < ( ) , PeerHandleError > {
700
- let their_node_id = transport. get_their_node_id ( ) ;
699
+ fn process_init_message ( & self , message : Message , descriptor : & Descriptor , peer : & mut Peer < TransportImpl > , peers_needing_send : & mut HashSet < Descriptor > , node_id_to_descriptor : & mut HashMap < PublicKey , Descriptor > ) -> Result < ( ) , PeerHandleError > {
700
+ let their_node_id = peer . transport . get_their_node_id ( ) ;
701
701
702
702
match message {
703
703
Message :: Init ( ref init_message) => {
@@ -713,12 +713,14 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
713
713
peers_needing_send. insert ( descriptor. clone ( ) ) ;
714
714
}
715
715
716
- if !outbound {
717
- self . queue_init_message ( peers_needing_send , transport , pending_outbound_buffer , descriptor , self . message_handler . route_handler . should_request_full_sync ( & their_node_id ) ) ;
716
+ if !peer . outbound {
717
+ self . queue_init_message ( descriptor , peer , peers_needing_send ) ;
718
718
}
719
719
node_id_to_descriptor. insert ( their_node_id. clone ( ) , descriptor. clone ( ) ) ;
720
720
self . message_handler . chan_handler . peer_connected ( & their_node_id, init_message) ;
721
- * post_init_state = Some ( new_post_init_state) ;
721
+
722
+ assert ! ( peer. post_init_state. is_none( ) ) ;
723
+ peer. post_init_state = Some ( new_post_init_state) ;
722
724
}
723
725
_ => {
724
726
log_trace ! ( self . logger, "Peer {} sent non-Init first message" , log_pubkey!( & their_node_id) ) ;
@@ -729,43 +731,35 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
729
731
Ok ( ( ) )
730
732
}
731
733
732
- fn do_read_event ( & self ,
733
- peer_descriptor : & mut Descriptor ,
734
- data : & [ u8 ] ,
735
- outbound : bool ,
736
- post_init_state : & mut Option < PostInitState > ,
737
- transport : & mut impl ITransport ,
738
- pending_outbound_buffer : & mut impl PayloadQueuer ,
739
- node_id_to_descriptor : & mut HashMap < PublicKey , Descriptor > ,
740
- peers_needing_send : & mut HashSet < Descriptor > ) -> Result < bool , PeerHandleError > {
734
+ fn do_read_event ( & self , peer_descriptor : & mut Descriptor , peer : & mut Peer < TransportImpl > , peers_needing_send : & mut HashSet < Descriptor > , node_id_to_descriptor : & mut HashMap < PublicKey , Descriptor > , data : & [ u8 ] ) -> Result < bool , PeerHandleError > {
741
735
let pause_read = {
742
- match transport. process_input ( data, pending_outbound_buffer) {
736
+ match peer . transport . process_input ( data, & mut peer . pending_outbound_buffer ) {
743
737
Err ( e) => {
744
738
log_trace ! ( self . logger, "Error while processing input: {}" , e) ;
745
739
return Err ( PeerHandleError { no_connection_possible : false } )
746
740
} ,
747
741
Ok ( newly_connected) => {
748
742
if newly_connected {
749
- log_trace ! ( self . logger, "Finished noise handshake for connection with {}" , log_pubkey!( & transport. get_their_node_id( ) ) ) ;
743
+ log_trace ! ( self . logger, "Finished noise handshake for connection with {}" , log_pubkey!( & peer . transport. get_their_node_id( ) ) ) ;
750
744
}
751
745
752
- if newly_connected && outbound {
753
- self . queue_init_message ( peers_needing_send , transport , pending_outbound_buffer , peer_descriptor , self . message_handler . route_handler . should_request_full_sync ( & transport . get_their_node_id ( ) ) ) ;
746
+ if newly_connected && peer . outbound {
747
+ self . queue_init_message ( peer_descriptor , peer , peers_needing_send ) ;
754
748
}
755
749
756
750
// If the transport layer placed items in the outbound queue, we need
757
751
// to schedule ourselves for flush during the next process_events()
758
- if !pending_outbound_buffer. is_empty ( ) {
752
+ if !peer . pending_outbound_buffer . is_empty ( ) {
759
753
peers_needing_send. insert ( peer_descriptor. clone ( ) ) ;
760
754
}
761
755
}
762
756
}
763
757
764
- let mut received_messages = transport. drain_messages ( & * self . logger ) ?;
758
+ let mut received_messages = peer . transport . drain_messages ( & * self . logger ) ?;
765
759
766
- if transport. is_connected ( ) && post_init_state. is_none ( ) && received_messages. len ( ) > 0 {
760
+ if peer . transport . is_connected ( ) && peer . post_init_state . is_none ( ) && received_messages. len ( ) > 0 {
767
761
let init_message = received_messages. remove ( 0 ) ;
768
- self . process_init_message ( init_message, peer_descriptor, peers_needing_send , node_id_to_descriptor , pending_outbound_buffer , outbound , transport , post_init_state ) ?;
762
+ self . process_init_message ( init_message, peer_descriptor, peer , peers_needing_send , node_id_to_descriptor ) ?;
769
763
}
770
764
771
765
for message in received_messages {
@@ -786,7 +780,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
786
780
} ,
787
781
msgs:: ErrorAction :: SendErrorMessage { msg } => {
788
782
log_trace!( self . logger, "Got Err handling message, sending Error message because {}" , e. err) ;
789
- self . enqueue_message( peers_needing_send, transport, pending_outbound_buffer, peer_descriptor, & msg) ;
783
+ self . enqueue_message( peers_needing_send, & mut peer . transport, & mut peer . pending_outbound_buffer, peer_descriptor, & msg) ;
790
784
continue ;
791
785
} ,
792
786
}
@@ -795,7 +789,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
795
789
}
796
790
}
797
791
798
- if let Err ( handling_error) = self . handle_message ( peers_needing_send , peer_descriptor, message , post_init_state , transport . get_their_node_id ( ) , transport , pending_outbound_buffer ) {
792
+ if let Err ( handling_error) = self . handle_message ( message , peer_descriptor, peer , peers_needing_send ) {
799
793
match handling_error {
800
794
MessageHandlingError :: PeerHandleError ( e) => { return Err ( e) } ,
801
795
MessageHandlingError :: LightningError ( e) => {
@@ -805,22 +799,21 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
805
799
}
806
800
}
807
801
808
- pending_outbound_buffer. queue_space ( ) == 0 // pause_read
802
+ peer . pending_outbound_buffer . queue_space ( ) == 0 // pause_read
809
803
} ;
810
804
811
805
Ok ( pause_read)
812
806
}
813
807
814
808
/// Process an incoming message and return a decision (ok, lightning error, peer handling error) regarding the next action with the peer
815
809
fn handle_message ( & self ,
816
- peers_needing_send : & mut HashSet < Descriptor > ,
817
- peer_descriptor : & mut Descriptor ,
818
810
message : wire:: Message ,
819
- post_init_state : & mut Option < PostInitState > ,
820
- their_node_id : PublicKey ,
821
- message_queuer : & mut impl MessageQueuer ,
822
- pending_outbound_buffer : & mut impl PayloadQueuer
823
- ) -> Result < ( ) , MessageHandlingError > {
811
+ peer_descriptor : & mut Descriptor ,
812
+ peer : & mut Peer < TransportImpl > ,
813
+ peers_needing_send : & mut HashSet < Descriptor > ) -> Result < ( ) , MessageHandlingError > {
814
+
815
+ let their_node_id = peer. transport . get_their_node_id ( ) ;
816
+ let post_init_state = peer. post_init_state . as_mut ( ) . unwrap ( ) ;
824
817
log_trace ! ( self . logger, "Received message of type {} from {}" , message. type_id( ) , log_pubkey!( & their_node_id) ) ;
825
818
826
819
match message {
@@ -852,33 +845,19 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
852
845
wire:: Message :: Ping ( msg) => {
853
846
if msg. ponglen < 65532 {
854
847
let resp = msgs:: Pong { byteslen : msg. ponglen } ;
855
- self . enqueue_message ( peers_needing_send, message_queuer , pending_outbound_buffer, & peer_descriptor, & resp) ;
848
+ self . enqueue_message ( peers_needing_send, & mut peer . transport , & mut peer . pending_outbound_buffer , & peer_descriptor, & resp) ;
856
849
}
857
850
} ,
858
851
wire:: Message :: Pong ( _msg) => {
859
- if let Some ( ref mut state) = post_init_state {
860
- state. awaiting_pong = false ;
861
- } else {
862
- panic ! ( "Received Pong before Init and didn't catch it earlier!" ) ;
863
- }
852
+ post_init_state. awaiting_pong = false ;
864
853
} ,
865
854
866
855
// Channel messages:
867
856
wire:: Message :: OpenChannel ( msg) => {
868
- match post_init_state {
869
- None => panic ! ( "Received OpenChannel before Init and didn't catch it earlier!" ) ,
870
- Some ( state) => {
871
- self . message_handler . chan_handler . handle_open_channel ( & their_node_id, state. their_features . clone ( ) , & msg) ;
872
- }
873
- }
857
+ self . message_handler . chan_handler . handle_open_channel ( & their_node_id, post_init_state. their_features . clone ( ) , & msg) ;
874
858
} ,
875
859
wire:: Message :: AcceptChannel ( msg) => {
876
- match post_init_state {
877
- None => panic ! ( "Received AcceptChannel before Init and didn't catch it earlier!" ) ,
878
- Some ( state) => {
879
- self . message_handler . chan_handler . handle_accept_channel ( & their_node_id, state. their_features . clone ( ) , & msg) ;
880
- }
881
- }
860
+ self . message_handler . chan_handler . handle_accept_channel ( & their_node_id, post_init_state. their_features . clone ( ) , & msg) ;
882
861
} ,
883
862
884
863
wire:: Message :: FundingCreated ( msg) => {
0 commit comments