projects
/
rust-lightning
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Expose `parse_onion_address` publicly in `no-std`
[rust-lightning]
/
lightning
/
src
/
routing
/
gossip.rs
diff --git
a/lightning/src/routing/gossip.rs
b/lightning/src/routing/gossip.rs
index c15a7547b996e455bfc752b8befae2ab83b86c84..ef776a44dc11c484526f7f5baeb64db06498710b 100644
(file)
--- a/
lightning/src/routing/gossip.rs
+++ b/
lightning/src/routing/gossip.rs
@@
-23,8
+23,9
@@
use bitcoin::network::constants::Network;
use bitcoin::blockdata::constants::genesis_block;
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
use bitcoin::blockdata::constants::genesis_block;
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
+use crate::ln::ChannelId;
use crate::ln::features::{ChannelFeatures, NodeFeatures, InitFeatures};
use crate::ln::features::{ChannelFeatures, NodeFeatures, InitFeatures};
-use crate::ln::msgs::{DecodeError, ErrorAction, Init, LightningError, RoutingMessageHandler,
N
etAddress, MAX_VALUE_MSAT};
+use crate::ln::msgs::{DecodeError, ErrorAction, Init, LightningError, RoutingMessageHandler,
Sock
etAddress, MAX_VALUE_MSAT};
use crate::ln::msgs::{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement, GossipTimestampFilter};
use crate::ln::msgs::{QueryChannelRange, ReplyChannelRange, QueryShortChannelIds, ReplyShortChannelIdsEnd};
use crate::ln::msgs;
use crate::ln::msgs::{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement, GossipTimestampFilter};
use crate::ln::msgs::{QueryChannelRange, ReplyChannelRange, QueryShortChannelIds, ReplyShortChannelIdsEnd};
use crate::ln::msgs;
@@
-254,7
+255,7
@@
pub struct P2PGossipSync<G: Deref<Target=NetworkGraph<L>>, U: Deref, L: Deref>
where U::Target: UtxoLookup, L::Target: Logger
{
network_graph: G,
where U::Target: UtxoLookup, L::Target: Logger
{
network_graph: G,
- utxo_lookup:
Option<U
>,
+ utxo_lookup:
RwLock<Option<U>
>,
#[cfg(feature = "std")]
full_syncs_requested: AtomicUsize,
pending_events: Mutex<Vec<MessageSendEvent>>,
#[cfg(feature = "std")]
full_syncs_requested: AtomicUsize,
pending_events: Mutex<Vec<MessageSendEvent>>,
@@
-273,7
+274,7
@@
where U::Target: UtxoLookup, L::Target: Logger
network_graph,
#[cfg(feature = "std")]
full_syncs_requested: AtomicUsize::new(0),
network_graph,
#[cfg(feature = "std")]
full_syncs_requested: AtomicUsize::new(0),
- utxo_lookup,
+ utxo_lookup
: RwLock::new(utxo_lookup)
,
pending_events: Mutex::new(vec![]),
logger,
}
pending_events: Mutex::new(vec![]),
logger,
}
@@
-282,8
+283,8
@@
where U::Target: UtxoLookup, L::Target: Logger
/// Adds a provider used to check new announcements. Does not affect
/// existing announcements unless they are updated.
/// Add, update or remove the provider would replace the current one.
/// Adds a provider used to check new announcements. Does not affect
/// existing announcements unless they are updated.
/// Add, update or remove the provider would replace the current one.
- pub fn add_utxo_lookup(&
mut
self, utxo_lookup: Option<U>) {
-
self.utxo_lookup
= utxo_lookup;
+ pub fn add_utxo_lookup(&self, utxo_lookup: Option<U>) {
+
*self.utxo_lookup.write().unwrap()
= utxo_lookup;
}
/// Gets a reference to the underlying [`NetworkGraph`] which was provided in
}
/// Gets a reference to the underlying [`NetworkGraph`] which was provided in
@@
-382,7
+383,7
@@
macro_rules! secp_verify_sig {
err: format!("Invalid signature on {} message", $msg_type),
action: ErrorAction::SendWarningMessage {
msg: msgs::WarningMessage {
err: format!("Invalid signature on {} message", $msg_type),
action: ErrorAction::SendWarningMessage {
msg: msgs::WarningMessage {
- channel_id:
[0; 32]
,
+ channel_id:
ChannelId::new_zero()
,
data: format!("Invalid signature on {} message", $msg_type),
},
log_level: Level::Trace,
data: format!("Invalid signature on {} message", $msg_type),
},
log_level: Level::Trace,
@@
-400,7
+401,7
@@
macro_rules! get_pubkey_from_node_id {
err: format!("Invalid public key on {} message", $msg_type),
action: ErrorAction::SendWarningMessage {
msg: msgs::WarningMessage {
err: format!("Invalid public key on {} message", $msg_type),
action: ErrorAction::SendWarningMessage {
msg: msgs::WarningMessage {
- channel_id:
[0; 32]
,
+ channel_id:
ChannelId::new_zero()
,
data: format!("Invalid public key on {} message", $msg_type),
},
log_level: Level::Trace
data: format!("Invalid public key on {} message", $msg_type),
},
log_level: Level::Trace
@@
-443,7
+444,7
@@
where U::Target: UtxoLookup, L::Target: Logger
}
fn handle_channel_announcement(&self, msg: &msgs::ChannelAnnouncement) -> Result<bool, LightningError> {
}
fn handle_channel_announcement(&self, msg: &msgs::ChannelAnnouncement) -> Result<bool, LightningError> {
- self.network_graph.update_channel_from_announcement(msg, &
self.utxo_lookup
)?;
+ self.network_graph.update_channel_from_announcement(msg, &
*self.utxo_lookup.read().unwrap()
)?;
Ok(msg.contents.excess_data.len() <= MAX_EXCESS_BYTES_FOR_RELAY)
}
Ok(msg.contents.excess_data.len() <= MAX_EXCESS_BYTES_FOR_RELAY)
}
@@
-1127,7
+1128,7
@@
pub struct NodeAnnouncementInfo {
impl NodeAnnouncementInfo {
/// Internet-level addresses via which one can connect to the node
impl NodeAnnouncementInfo {
/// Internet-level addresses via which one can connect to the node
- pub fn addresses(&self) -> &[
N
etAddress] {
+ pub fn addresses(&self) -> &[
Sock
etAddress] {
self.announcement_message.as_ref()
.map(|msg| msg.contents.addresses.as_slice())
.unwrap_or_default()
self.announcement_message.as_ref()
.map(|msg| msg.contents.addresses.as_slice())
.unwrap_or_default()
@@
-1136,7
+1137,7
@@
impl NodeAnnouncementInfo {
impl Writeable for NodeAnnouncementInfo {
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
impl Writeable for NodeAnnouncementInfo {
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
- let empty_addresses = Vec::<
N
etAddress>::new();
+ let empty_addresses = Vec::<
Sock
etAddress>::new();
write_tlv_fields!(writer, {
(0, self.features, required),
(2, self.last_update, required),
write_tlv_fields!(writer, {
(0, self.features, required),
(2, self.last_update, required),
@@
-1151,7
+1152,7
@@
impl Writeable for NodeAnnouncementInfo {
impl Readable for NodeAnnouncementInfo {
fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
impl Readable for NodeAnnouncementInfo {
fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
- _init_and_read_tlv_fields!(reader, {
+ _init_and_read_
len_prefixed_
tlv_fields!(reader, {
(0, features, required),
(2, last_update, required),
(4, rgb, required),
(0, features, required),
(2, last_update, required),
(4, rgb, required),
@@
-1159,7
+1160,7
@@
impl Readable for NodeAnnouncementInfo {
(8, announcement_message, option),
(10, _addresses, optional_vec), // deprecated, not used anymore
});
(8, announcement_message, option),
(10, _addresses, optional_vec), // deprecated, not used anymore
});
- let _: Option<Vec<
N
etAddress>> = _addresses;
+ let _: Option<Vec<
Sock
etAddress>> = _addresses;
Ok(Self { features: features.0.unwrap(), last_update: last_update.0.unwrap(), rgb: rgb.0.unwrap(),
alias: alias.0.unwrap(), announcement_message })
}
Ok(Self { features: features.0.unwrap(), last_update: last_update.0.unwrap(), rgb: rgb.0.unwrap(),
alias: alias.0.unwrap(), announcement_message })
}
@@
-1235,7
+1236,7
@@
impl Writeable for NodeInfo {
}
// A wrapper allowing for the optional deserialization of `NodeAnnouncementInfo`. Utilizing this is
}
// A wrapper allowing for the optional deserialization of `NodeAnnouncementInfo`. Utilizing this is
-// necessary to maintain compatibility with previous serializations of `
N
etAddress` that have an
+// necessary to maintain compatibility with previous serializations of `
Sock
etAddress` that have an
// invalid hostname set. We ignore and eat all errors until we are either able to read a
// `NodeAnnouncementInfo` or hit a `ShortRead`, i.e., read the TLV field to the end.
struct NodeAnnouncementInfoDeserWrapper(NodeAnnouncementInfo);
// invalid hostname set. We ignore and eat all errors until we are either able to read a
// `NodeAnnouncementInfo` or hit a `ShortRead`, i.e., read the TLV field to the end.
struct NodeAnnouncementInfoDeserWrapper(NodeAnnouncementInfo);
@@
-1259,7
+1260,7
@@
impl Readable for NodeInfo {
// with zero inbound fees, causing that heuristic to provide little gain. Worse, because it
// requires additional complexity and lookups during routing, it ends up being a
// performance loss. Thus, we simply ignore the old field here and no longer track it.
// with zero inbound fees, causing that heuristic to provide little gain. Worse, because it
// requires additional complexity and lookups during routing, it ends up being a
// performance loss. Thus, we simply ignore the old field here and no longer track it.
- _init_and_read_tlv_fields!(reader, {
+ _init_and_read_
len_prefixed_
tlv_fields!(reader, {
(0, _lowest_inbound_channel_fees, option),
(2, announcement_info_wrap, upgradable_option),
(4, channels, required_vec),
(0, _lowest_inbound_channel_fees, option),
(2, announcement_info_wrap, upgradable_option),
(4, channels, required_vec),
@@
-2038,7
+2039,7
@@
impl ReadOnlyNetworkGraph<'_> {
/// Get network addresses by node id.
/// Returns None if the requested node is completely unknown,
/// or if node announcement for the node was never received.
/// Get network addresses by node id.
/// Returns None if the requested node is completely unknown,
/// or if node announcement for the node was never received.
- pub fn get_addresses(&self, pubkey: &PublicKey) -> Option<Vec<
N
etAddress>> {
+ pub fn get_addresses(&self, pubkey: &PublicKey) -> Option<Vec<
Sock
etAddress>> {
self.nodes.get(&NodeId::from_pubkey(&pubkey))
.and_then(|node| node.announcement_info.as_ref().map(|ann| ann.addresses().to_vec()))
}
self.nodes.get(&NodeId::from_pubkey(&pubkey))
.and_then(|node| node.announcement_info.as_ref().map(|ann| ann.addresses().to_vec()))
}