@@ -60,6 +60,9 @@ pub(super) trait ITransport {
60
60
/// Returns true if the connection is established and encrypted messages can be sent.
61
61
fn is_connected ( & self ) -> bool ;
62
62
63
+ /// Returns the node_id of the remote node. Panics if not connected.
64
+ fn get_their_node_id ( & self ) -> PublicKey ;
65
+
63
66
/// Returns all Messages that have been received and can be parsed by the Transport
64
67
fn drain_messages < L : Deref > ( & mut self , logger : L ) -> Result < Vec < Message > , PeerHandleError > where L :: Target : Logger ;
65
68
@@ -193,7 +196,6 @@ enum InitSyncTracker{
193
196
struct Peer {
194
197
transport : Transport ,
195
198
outbound : bool ,
196
- their_node_id : Option < PublicKey > ,
197
199
their_features : Option < InitFeatures > ,
198
200
199
201
pending_outbound_buffer : OutboundQueue ,
@@ -339,7 +341,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
339
341
if !p. transport . is_connected ( ) || p. their_features . is_none ( ) {
340
342
return None ;
341
343
}
342
- p . their_node_id
344
+ Some ( p . transport . get_their_node_id ( ) )
343
345
} ) . collect ( )
344
346
}
345
347
@@ -372,7 +374,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
372
374
if peers. peers . insert ( descriptor, Peer {
373
375
transport,
374
376
outbound : true ,
375
- their_node_id : Some ( their_node_id. clone ( ) ) ,
376
377
their_features : None ,
377
378
378
379
pending_outbound_buffer : OutboundQueue :: new ( MSG_BUFF_SIZE ) ,
@@ -400,7 +401,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
400
401
if peers. peers . insert ( descriptor, Peer {
401
402
transport : Transport :: new_inbound ( & self . our_node_secret , & self . get_ephemeral_key ( ) ) ,
402
403
outbound : false ,
403
- their_node_id : None ,
404
404
their_features : None ,
405
405
406
406
pending_outbound_buffer : OutboundQueue :: new ( MSG_BUFF_SIZE ) ,
@@ -539,22 +539,20 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
539
539
540
540
// If the transport is newly connected, do the appropriate set up for the connection
541
541
if peer. transport . is_connected ( ) {
542
- let their_node_id = peer. transport . their_node_id . unwrap ( ) ;
542
+ let their_node_id = peer. transport . get_their_node_id ( ) ;
543
543
544
544
match peers. node_id_to_descriptor . entry ( their_node_id. clone ( ) ) {
545
545
hash_map:: Entry :: Occupied ( entry) => {
546
546
if entry. get ( ) != peer_descriptor {
547
547
// Existing entry in map is from a different descriptor, this is a duplicate
548
548
log_trace ! ( self . logger, "Got second connection with {}, closing" , log_pubkey!( & their_node_id) ) ;
549
- peer. their_node_id = None ;
550
549
return Err ( PeerHandleError { no_connection_possible : false } ) ;
551
550
} else {
552
551
// read_event for existing peer
553
552
}
554
553
} ,
555
554
hash_map:: Entry :: Vacant ( entry) => {
556
555
log_trace ! ( self . logger, "Finished noise handshake for connection with {}" , log_pubkey!( & their_node_id) ) ;
557
- peer. their_node_id = Some ( their_node_id. clone ( ) ) ;
558
556
559
557
if peer. outbound {
560
558
let mut features = InitFeatures :: known ( ) ;
@@ -625,12 +623,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
625
623
626
624
/// Process an incoming message and return a decision (ok, lightning error, peer handling error) regarding the next action with the peer
627
625
fn handle_message ( & self , peers_needing_send : & mut HashSet < Descriptor > , peer : & mut Peer , peer_descriptor : Descriptor , message : wire:: Message ) -> Result < ( ) , MessageHandlingError > {
628
- log_trace ! ( self . logger, "Received message of type {} from {}" , message. type_id( ) , log_pubkey!( peer. their_node_id . unwrap ( ) ) ) ;
626
+ log_trace ! ( self . logger, "Received message of type {} from {}" , message. type_id( ) , log_pubkey!( peer. transport . get_their_node_id ( ) ) ) ;
629
627
630
628
// Need an Init as first message
631
629
if let wire:: Message :: Init ( _) = message {
632
630
} else if peer. their_features . is_none ( ) {
633
- log_trace ! ( self . logger, "Peer {} sent non-Init first message" , log_pubkey!( peer. their_node_id . unwrap ( ) ) ) ;
631
+ log_trace ! ( self . logger, "Peer {} sent non-Init first message" , log_pubkey!( peer. transport . get_their_node_id ( ) ) ) ;
634
632
return Err ( PeerHandleError { no_connection_possible : false } . into ( ) ) ;
635
633
}
636
634
@@ -663,21 +661,21 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
663
661
peers_needing_send. insert ( peer_descriptor. clone ( ) ) ;
664
662
}
665
663
if !msg. features . supports_static_remote_key ( ) {
666
- log_debug ! ( self . logger, "Peer {} does not support static remote key, disconnecting with no_connection_possible" , log_pubkey!( peer. their_node_id . unwrap ( ) ) ) ;
664
+ log_debug ! ( self . logger, "Peer {} does not support static remote key, disconnecting with no_connection_possible" , log_pubkey!( peer. transport . get_their_node_id ( ) ) ) ;
667
665
return Err ( PeerHandleError { no_connection_possible : true } . into ( ) ) ;
668
666
}
669
667
670
668
if !peer. outbound {
671
669
let mut features = InitFeatures :: known ( ) ;
672
- if !self . message_handler . route_handler . should_request_full_sync ( & peer. their_node_id . unwrap ( ) ) {
670
+ if !self . message_handler . route_handler . should_request_full_sync ( & peer. transport . get_their_node_id ( ) ) {
673
671
features. clear_initial_routing_sync ( ) ;
674
672
}
675
673
676
674
let resp = msgs:: Init { features } ;
677
675
self . enqueue_message ( peers_needing_send, & mut peer. transport , & mut peer. pending_outbound_buffer , & peer_descriptor, & resp) ;
678
676
}
679
677
680
- self . message_handler . chan_handler . peer_connected ( & peer. their_node_id . unwrap ( ) , & msg) ;
678
+ self . message_handler . chan_handler . peer_connected ( & peer. transport . get_their_node_id ( ) , & msg) ;
681
679
peer. their_features = Some ( msg. features ) ;
682
680
} ,
683
681
wire:: Message :: Error ( msg) => {
@@ -690,11 +688,11 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
690
688
}
691
689
692
690
if data_is_printable {
693
- log_debug ! ( self . logger, "Got Err message from {}: {}" , log_pubkey!( peer. their_node_id . unwrap ( ) ) , msg. data) ;
691
+ log_debug ! ( self . logger, "Got Err message from {}: {}" , log_pubkey!( peer. transport . get_their_node_id ( ) ) , msg. data) ;
694
692
} else {
695
- log_debug ! ( self . logger, "Got Err message from {} with non-ASCII error message" , log_pubkey!( peer. their_node_id . unwrap ( ) ) ) ;
693
+ log_debug ! ( self . logger, "Got Err message from {} with non-ASCII error message" , log_pubkey!( peer. transport . get_their_node_id ( ) ) ) ;
696
694
}
697
- self . message_handler . chan_handler . handle_error ( & peer. their_node_id . unwrap ( ) , & msg) ;
695
+ self . message_handler . chan_handler . handle_error ( & peer. transport . get_their_node_id ( ) , & msg) ;
698
696
if msg. channel_id == [ 0 ; 32 ] {
699
697
return Err ( PeerHandleError { no_connection_possible : true } . into ( ) ) ;
700
698
}
@@ -712,59 +710,59 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
712
710
713
711
// Channel messages:
714
712
wire:: Message :: OpenChannel ( msg) => {
715
- self . message_handler . chan_handler . handle_open_channel ( & peer. their_node_id . unwrap ( ) , peer. their_features . clone ( ) . unwrap ( ) , & msg) ;
713
+ self . message_handler . chan_handler . handle_open_channel ( & peer. transport . get_their_node_id ( ) , peer. their_features . clone ( ) . unwrap ( ) , & msg) ;
716
714
} ,
717
715
wire:: Message :: AcceptChannel ( msg) => {
718
- self . message_handler . chan_handler . handle_accept_channel ( & peer. their_node_id . unwrap ( ) , peer. their_features . clone ( ) . unwrap ( ) , & msg) ;
716
+ self . message_handler . chan_handler . handle_accept_channel ( & peer. transport . get_their_node_id ( ) , peer. their_features . clone ( ) . unwrap ( ) , & msg) ;
719
717
} ,
720
718
721
719
wire:: Message :: FundingCreated ( msg) => {
722
- self . message_handler . chan_handler . handle_funding_created ( & peer. their_node_id . unwrap ( ) , & msg) ;
720
+ self . message_handler . chan_handler . handle_funding_created ( & peer. transport . get_their_node_id ( ) , & msg) ;
723
721
} ,
724
722
wire:: Message :: FundingSigned ( msg) => {
725
- self . message_handler . chan_handler . handle_funding_signed ( & peer. their_node_id . unwrap ( ) , & msg) ;
723
+ self . message_handler . chan_handler . handle_funding_signed ( & peer. transport . get_their_node_id ( ) , & msg) ;
726
724
} ,
727
725
wire:: Message :: FundingLocked ( msg) => {
728
- self . message_handler . chan_handler . handle_funding_locked ( & peer. their_node_id . unwrap ( ) , & msg) ;
726
+ self . message_handler . chan_handler . handle_funding_locked ( & peer. transport . get_their_node_id ( ) , & msg) ;
729
727
} ,
730
728
731
729
wire:: Message :: Shutdown ( msg) => {
732
- self . message_handler . chan_handler . handle_shutdown ( & peer. their_node_id . unwrap ( ) , & msg) ;
730
+ self . message_handler . chan_handler . handle_shutdown ( & peer. transport . get_their_node_id ( ) , & msg) ;
733
731
} ,
734
732
wire:: Message :: ClosingSigned ( msg) => {
735
- self . message_handler . chan_handler . handle_closing_signed ( & peer. their_node_id . unwrap ( ) , & msg) ;
733
+ self . message_handler . chan_handler . handle_closing_signed ( & peer. transport . get_their_node_id ( ) , & msg) ;
736
734
} ,
737
735
738
736
// Commitment messages:
739
737
wire:: Message :: UpdateAddHTLC ( msg) => {
740
- self . message_handler . chan_handler . handle_update_add_htlc ( & peer. their_node_id . unwrap ( ) , & msg) ;
738
+ self . message_handler . chan_handler . handle_update_add_htlc ( & peer. transport . get_their_node_id ( ) , & msg) ;
741
739
} ,
742
740
wire:: Message :: UpdateFulfillHTLC ( msg) => {
743
- self . message_handler . chan_handler . handle_update_fulfill_htlc ( & peer. their_node_id . unwrap ( ) , & msg) ;
741
+ self . message_handler . chan_handler . handle_update_fulfill_htlc ( & peer. transport . get_their_node_id ( ) , & msg) ;
744
742
} ,
745
743
wire:: Message :: UpdateFailHTLC ( msg) => {
746
- self . message_handler . chan_handler . handle_update_fail_htlc ( & peer. their_node_id . unwrap ( ) , & msg) ;
744
+ self . message_handler . chan_handler . handle_update_fail_htlc ( & peer. transport . get_their_node_id ( ) , & msg) ;
747
745
} ,
748
746
wire:: Message :: UpdateFailMalformedHTLC ( msg) => {
749
- self . message_handler . chan_handler . handle_update_fail_malformed_htlc ( & peer. their_node_id . unwrap ( ) , & msg) ;
747
+ self . message_handler . chan_handler . handle_update_fail_malformed_htlc ( & peer. transport . get_their_node_id ( ) , & msg) ;
750
748
} ,
751
749
752
750
wire:: Message :: CommitmentSigned ( msg) => {
753
- self . message_handler . chan_handler . handle_commitment_signed ( & peer. their_node_id . unwrap ( ) , & msg) ;
751
+ self . message_handler . chan_handler . handle_commitment_signed ( & peer. transport . get_their_node_id ( ) , & msg) ;
754
752
} ,
755
753
wire:: Message :: RevokeAndACK ( msg) => {
756
- self . message_handler . chan_handler . handle_revoke_and_ack ( & peer. their_node_id . unwrap ( ) , & msg) ;
754
+ self . message_handler . chan_handler . handle_revoke_and_ack ( & peer. transport . get_their_node_id ( ) , & msg) ;
757
755
} ,
758
756
wire:: Message :: UpdateFee ( msg) => {
759
- self . message_handler . chan_handler . handle_update_fee ( & peer. their_node_id . unwrap ( ) , & msg) ;
757
+ self . message_handler . chan_handler . handle_update_fee ( & peer. transport . get_their_node_id ( ) , & msg) ;
760
758
} ,
761
759
wire:: Message :: ChannelReestablish ( msg) => {
762
- self . message_handler . chan_handler . handle_channel_reestablish ( & peer. their_node_id . unwrap ( ) , & msg) ;
760
+ self . message_handler . chan_handler . handle_channel_reestablish ( & peer. transport . get_their_node_id ( ) , & msg) ;
763
761
} ,
764
762
765
763
// Routing messages:
766
764
wire:: Message :: AnnouncementSignatures ( msg) => {
767
- self . message_handler . chan_handler . handle_announcement_signatures ( & peer. their_node_id . unwrap ( ) , & msg) ;
765
+ self . message_handler . chan_handler . handle_announcement_signatures ( & peer. transport . get_their_node_id ( ) , & msg) ;
768
766
} ,
769
767
wire:: Message :: ChannelAnnouncement ( msg) => {
770
768
let should_forward = match self . message_handler . route_handler . handle_channel_announcement ( & msg) {
@@ -1009,13 +1007,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
1009
1007
!peer. should_forward_channel_announcement ( msg. contents . short_channel_id ) {
1010
1008
continue
1011
1009
}
1012
- match peer. their_node_id {
1013
- None => continue ,
1014
- Some ( their_node_id) => {
1015
- if their_node_id == msg. contents . node_id_1 || their_node_id == msg. contents . node_id_2 {
1016
- continue
1017
- }
1018
- }
1010
+
1011
+ let their_node_id = peer. transport . get_their_node_id ( ) ;
1012
+ if their_node_id == msg. contents . node_id_1 || their_node_id == msg. contents . node_id_2 {
1013
+ continue
1019
1014
}
1020
1015
if peer. transport . is_connected ( ) {
1021
1016
peer. transport . enqueue_message ( msg, & mut peer. pending_outbound_buffer , & * self . logger ) ;
@@ -1128,12 +1123,17 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
1128
1123
match peer_option {
1129
1124
None => panic ! ( "Descriptor for disconnect_event is not already known to PeerManager" ) ,
1130
1125
Some ( peer) => {
1131
- match peer. their_node_id {
1132
- Some ( node_id) => {
1126
+ if peer. transport . is_connected ( ) {
1127
+ let node_id = peer. transport . get_their_node_id ( ) ;
1128
+
1129
+ if peers. node_id_to_descriptor . get ( & node_id) . unwrap ( ) == descriptor {
1133
1130
peers. node_id_to_descriptor . remove ( & node_id) ;
1134
1131
self . message_handler . chan_handler . peer_disconnected ( & node_id, no_connection_possible) ;
1135
- } ,
1136
- None => { }
1132
+ } else {
1133
+ // This must have been generated from a duplicate connection error
1134
+ }
1135
+ } else {
1136
+ // Unconnected nodes never make it into node_id_to_descriptor
1137
1137
}
1138
1138
}
1139
1139
} ;
@@ -1156,18 +1156,11 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
1156
1156
if peer. awaiting_pong {
1157
1157
peers_needing_send. remove ( descriptor) ;
1158
1158
descriptors_needing_disconnect. push ( descriptor. clone ( ) ) ;
1159
- match peer. their_node_id {
1160
- Some ( node_id) => {
1161
- log_trace ! ( self . logger, "Disconnecting peer with id {} due to ping timeout" , node_id) ;
1162
- node_id_to_descriptor. remove ( & node_id) ;
1163
- self . message_handler . chan_handler . peer_disconnected ( & node_id, false ) ;
1164
- }
1165
- None => {
1166
- // This can't actually happen as we should have hit
1167
- // is_connected() previously on this same peer.
1168
- unreachable ! ( ) ;
1169
- } ,
1170
- }
1159
+ let their_node_id = peer. transport . get_their_node_id ( ) ;
1160
+ log_trace ! ( self . logger, "Disconnecting peer with id {} due to ping timeout" , their_node_id) ;
1161
+ node_id_to_descriptor. remove ( & their_node_id) ;
1162
+ self . message_handler . chan_handler . peer_disconnected ( & their_node_id, false ) ;
1163
+
1171
1164
return false ;
1172
1165
}
1173
1166
0 commit comments