Skip to content

Commit 7113dbd

Browse files
committed
Send Init message immediately after handshake even if not initiator
We were waiting for the initiator, but the spec doesn't guarantee that they will send Init first, so we might theoretically wait forever. Also, lnprototest expects this behavior.
1 parent affefb6 commit 7113dbd

File tree

1 file changed

+3
-9
lines changed

1 file changed

+3
-9
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ enum InitSyncTracker{
233233

234234
struct Peer {
235235
channel_encryptor: PeerChannelEncryptor,
236-
outbound: bool,
237236
their_node_id: Option<PublicKey>,
238237
their_features: Option<InitFeatures>,
239238

@@ -465,7 +464,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
465464
let mut peers = self.peers.lock().unwrap();
466465
if peers.peers.insert(descriptor, Peer {
467466
channel_encryptor: peer_encryptor,
468-
outbound: true,
469467
their_node_id: None,
470468
their_features: None,
471469

@@ -502,7 +500,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
502500
let mut peers = self.peers.lock().unwrap();
503501
if peers.peers.insert(descriptor, Peer {
504502
channel_encryptor: peer_encryptor,
505-
outbound: false,
506503
their_node_id: None,
507504
their_features: None,
508505

@@ -744,6 +741,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
744741
peer.pending_read_is_header = true;
745742
peer.their_node_id = Some(their_node_id);
746743
insert_node_id!();
744+
let features = InitFeatures::known();
745+
let resp = msgs::Init { features };
746+
self.enqueue_message(&mut peers.peers_needing_send, peer, peer_descriptor.clone(), &resp);
747747
},
748748
NextNoiseStep::NoiseComplete => {
749749
if peer.pending_read_is_header {
@@ -854,12 +854,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
854854
return Err(PeerHandleError{ no_connection_possible: true }.into());
855855
}
856856

857-
if !peer.outbound {
858-
let features = InitFeatures::known();
859-
let resp = msgs::Init { features };
860-
self.enqueue_message(peers_needing_send, peer, peer_descriptor.clone(), &resp);
861-
}
862-
863857
self.message_handler.route_handler.sync_routing_table(&peer.their_node_id.unwrap(), &msg);
864858

865859
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap(), &msg);

0 commit comments

Comments
 (0)