X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fdownloader.rs;h=4fc3d51c6c005f610af7680af999068747c54a04;hb=f0ef17314840b4e30d08511dfc7773b4ffc8d343;hp=72e55c5673970c6481be403e1c001d8564b3c374;hpb=ebbd62f41d8150b31167c1f5a60efc080f2b2961;p=rapid-gossip-sync-server diff --git a/src/downloader.rs b/src/downloader.rs index 72e55c5..4fc3d51 100644 --- a/src/downloader.rs +++ b/src/downloader.rs @@ -1,6 +1,7 @@ use std::sync::{Arc, RwLock}; use bitcoin::secp256k1::PublicKey; +use lightning::ln::features::{InitFeatures, NodeFeatures}; use lightning::ln::msgs::{ChannelAnnouncement, ChannelUpdate, Init, LightningError, NodeAnnouncement, QueryChannelRange, QueryShortChannelIds, ReplyChannelRange, ReplyShortChannelIdsEnd, RoutingMessageHandler}; use lightning::routing::gossip::{NetworkGraph, P2PGossipSync}; use lightning::util::events::{MessageSendEvent, MessageSendEventsProvider}; @@ -30,16 +31,15 @@ impl GossipCounter { } pub(crate) struct GossipRouter { - native_router: P2PGossipSync>>, GossipChainAccess, Arc>, + native_router: P2PGossipSync>, GossipChainAccess, TestLogger>, pub(crate) counter: RwLock, sender: mpsc::Sender, } impl GossipRouter { - pub(crate) fn new(network_graph: Arc>>, sender: mpsc::Sender) -> Self { + pub(crate) fn new(network_graph: Arc>, sender: mpsc::Sender) -> Self { Self { - native_router: P2PGossipSync::new(network_graph, Some(Arc::new(ChainVerifier::new())), - Arc::new(TestLogger::new())), + native_router: P2PGossipSync::new(network_graph, Some(Arc::new(ChainVerifier::new())), TestLogger::new()), counter: RwLock::new(GossipCounter::new()), sender } @@ -58,18 +58,19 @@ impl RoutingMessageHandler for GossipRouter { } fn handle_channel_announcement(&self, msg: &ChannelAnnouncement) -> Result { - let mut counter = self.counter.write().unwrap(); - - let output_value = self.native_router.handle_channel_announcement(msg).map_err(|error| { - let error_string = format!("{:?}", error); - if error_string.contains("announced on an unknown chain"){ - return error; - } - counter.channel_announcements_with_mismatched_scripts += 1; - error - })?; - - counter.channel_announcements += 1; + let native_result = self.native_router.handle_channel_announcement(msg); + let output_value; + { + let mut counter = self.counter.write().unwrap(); + output_value = native_result.map_err(|error| { + if error.err.contains("didn't match on-chain script") { + counter.channel_announcements_with_mismatched_scripts += 1; + } + error + })?; + counter.channel_announcements += 1; + } + let gossip_message = GossipMessage::ChannelAnnouncement(msg.clone()); if let Err(err) = self.sender.try_send(gossip_message) { let gossip_message = match err { TrySendError::Full(msg)|TrySendError::Closed(msg) => msg }; @@ -84,8 +85,7 @@ impl RoutingMessageHandler for GossipRouter { fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result { let output_value = self.native_router.handle_channel_update(msg)?; - let mut counter = self.counter.write().unwrap(); - counter.channel_updates += 1; + self.counter.write().unwrap().channel_updates += 1; let gossip_message = GossipMessage::ChannelUpdate(msg.clone()); if let Err(err) = self.sender.try_send(gossip_message) { @@ -98,15 +98,15 @@ impl RoutingMessageHandler for GossipRouter { Ok(output_value) } - fn get_next_channel_announcements(&self, starting_point: u64, batch_amount: u8) -> Vec<(ChannelAnnouncement, Option, Option)> { - self.native_router.get_next_channel_announcements(starting_point, batch_amount) + fn get_next_channel_announcement(&self, starting_point: u64) -> Option<(ChannelAnnouncement, Option, Option)> { + self.native_router.get_next_channel_announcement(starting_point) } - fn get_next_node_announcements(&self, starting_point: Option<&PublicKey>, batch_amount: u8) -> Vec { - self.native_router.get_next_node_announcements(starting_point, batch_amount) + fn get_next_node_announcement(&self, starting_point: Option<&PublicKey>) -> Option { + self.native_router.get_next_node_announcement(starting_point) } - fn peer_connected(&self, their_node_id: &PublicKey, init: &Init) { + fn peer_connected(&self, their_node_id: &PublicKey, init: &Init) -> Result<(), ()> { self.native_router.peer_connected(their_node_id, init) } @@ -125,4 +125,12 @@ impl RoutingMessageHandler for GossipRouter { fn handle_query_short_channel_ids(&self, their_node_id: &PublicKey, msg: QueryShortChannelIds) -> Result<(), LightningError> { self.native_router.handle_query_short_channel_ids(their_node_id, msg) } + + fn provided_init_features(&self, their_node_id: &PublicKey) -> InitFeatures { + self.native_router.provided_init_features(their_node_id) + } + + fn provided_node_features(&self) -> NodeFeatures { + self.native_router.provided_node_features() + } }