Skip to content

Commit c56cd1e

Browse files
committed
Forward gossip msgs
1 parent 9de22ae commit c56cd1e

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
658658
let pause_read = {
659659
let mut peers_lock = self.peers.lock().unwrap();
660660
let peers = &mut *peers_lock;
661+
let mut msgs_to_forward = Vec::new();
662+
let mut peer_node_id = None;
661663
let pause_read = match peers.peers.get_mut(peer_descriptor) {
662664
None => panic!("Descriptor for read_event is not already known to PeerManager"),
663665
Some(peer) => {
@@ -793,13 +795,18 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
793795
}
794796
};
795797

796-
if let Err(handling_error) = self.handle_message(&mut peers.peers_needing_send, peer, peer_descriptor.clone(), message){
797-
match handling_error {
798+
match self.handle_message(&mut peers.peers_needing_send, peer, peer_descriptor.clone(), message) {
799+
Err(handling_error) => match handling_error {
798800
MessageHandlingError::PeerHandleError(e) => { return Err(e) },
799801
MessageHandlingError::LightningError(e) => {
800802
try_potential_handleerror!(Err(e));
801803
},
802-
}
804+
},
805+
Ok(Some(msg)) => {
806+
peer_node_id = Some(peer.their_node_id.expect("After noise is complete, their_node_id is always set"));
807+
msgs_to_forward.push(msg);
808+
},
809+
Ok(None) => {},
803810
}
804811
}
805812
}
@@ -811,14 +818,19 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
811818
}
812819
};
813820

821+
for msg in msgs_to_forward.drain(..) {
822+
self.forward_broadcast_msg(peers, &msg, peer_node_id.as_ref());
823+
}
824+
814825
pause_read
815826
};
816827

817828
Ok(pause_read)
818829
}
819830

820831
/// Process an incoming message and return a decision (ok, lightning error, peer handling error) regarding the next action with the peer
821-
fn handle_message(&self, peers_needing_send: &mut HashSet<Descriptor>, peer: &mut Peer, peer_descriptor: Descriptor, message: wire::Message) -> Result<(), MessageHandlingError> {
832+
/// Returns the message back if it needs to be broadcasted to all other peers.
833+
fn handle_message(&self, peers_needing_send: &mut HashSet<Descriptor>, peer: &mut Peer, peer_descriptor: Descriptor, message: wire::Message) -> Result<Option<wire::Message>, MessageHandlingError> {
822834
log_trace!(self.logger, "Received message of type {} from {}", message.type_id(), log_pubkey!(peer.their_node_id.unwrap()));
823835

824836
// Need an Init as first message
@@ -828,6 +840,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
828840
return Err(PeerHandleError{ no_connection_possible: false }.into());
829841
}
830842

843+
let mut should_forward = None;
844+
831845
match message {
832846
// Setup and Control messages:
833847
wire::Message::Init(msg) => {
@@ -950,34 +964,28 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
950964
self.message_handler.chan_handler.handle_announcement_signatures(&peer.their_node_id.unwrap(), &msg);
951965
},
952966
wire::Message::ChannelAnnouncement(msg) => {
953-
let should_forward = match self.message_handler.route_handler.handle_channel_announcement(&msg) {
967+
if match self.message_handler.route_handler.handle_channel_announcement(&msg) {
954968
Ok(v) => v,
955969
Err(e) => { return Err(e.into()); },
956-
};
957-
958-
if should_forward {
959-
// TODO: forward msg along to all our other peers!
970+
} {
971+
should_forward = Some(wire::Message::ChannelAnnouncement(msg));
960972
}
961973
},
962974
wire::Message::NodeAnnouncement(msg) => {
963-
let should_forward = match self.message_handler.route_handler.handle_node_announcement(&msg) {
975+
if match self.message_handler.route_handler.handle_node_announcement(&msg) {
964976
Ok(v) => v,
965977
Err(e) => { return Err(e.into()); },
966-
};
967-
968-
if should_forward {
969-
// TODO: forward msg along to all our other peers!
978+
} {
979+
should_forward = Some(wire::Message::NodeAnnouncement(msg));
970980
}
971981
},
972982
wire::Message::ChannelUpdate(msg) => {
973983
self.message_handler.chan_handler.handle_channel_update(&peer.their_node_id.unwrap(), &msg);
974-
let should_forward = match self.message_handler.route_handler.handle_channel_update(&msg) {
984+
if match self.message_handler.route_handler.handle_channel_update(&msg) {
975985
Ok(v) => v,
976986
Err(e) => { return Err(e.into()); },
977-
};
978-
979-
if should_forward {
980-
// TODO: forward msg along to all our other peers!
987+
} {
988+
should_forward = Some(wire::Message::ChannelUpdate(msg));
981989
}
982990
},
983991
wire::Message::QueryShortChannelIds(msg) => {
@@ -1006,7 +1014,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
10061014
log_trace!(self.logger, "Received unknown odd message of type {}, ignoring", msg_type);
10071015
}
10081016
};
1009-
Ok(())
1017+
Ok(should_forward)
10101018
}
10111019

10121020
fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

0 commit comments

Comments
 (0)