From fc2f793d19409831eaf9d8a24382374bd0b7e9d9 Mon Sep 17 00:00:00 2001 From: psycho-pirate Date: Wed, 16 Mar 2022 04:03:09 +0530 Subject: [PATCH] Argument added in lightning-net-tokio/src/lib.rs and comments updated --- lightning-net-tokio/src/lib.rs | 28 ++++++++++++++++++++++++---- lightning/src/ln/msgs.rs | 8 ++++---- lightning/src/ln/peer_handler.rs | 29 +++++++++++++++++------------ 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs index af2f57d3..a9fd861b 100644 --- a/lightning-net-tokio/src/lib.rs +++ b/lightning-net-tokio/src/lib.rs @@ -81,10 +81,11 @@ use tokio::io::{AsyncReadExt, AsyncWrite, AsyncWriteExt}; use lightning::ln::peer_handler; use lightning::ln::peer_handler::SocketDescriptor as LnSocketTrait; use lightning::ln::peer_handler::CustomMessageHandler; -use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler}; +use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, NetAddress}; use lightning::util::logger::Logger; use std::task; +use std::net::IpAddr; use std::net::SocketAddr; use std::net::TcpStream as StdTcpStream; use std::sync::{Arc, Mutex}; @@ -222,11 +223,21 @@ pub fn setup_inbound(peer_manager: Arc Some(NetAddress::IPv4 { + addr: ip.octets(), + port: ip_addr.port(), + }), + IpAddr::V6(ip) => Some(NetAddress::IPv6 { + addr: ip.octets(), + port: ip_addr.port(), + }), + }) { Some(tokio::spawn(Connection::schedule_read(peer_manager, us, reader, read_receiver, write_receiver))) } else { // Note that we will skip socket_disconnected here, in accordance with the PeerManager @@ -263,11 +274,20 @@ pub fn setup_outbound(peer_manager: Arc Some(NetAddress::IPv4 { + addr: ip.octets(), + port: ip_addr.port(), + }), + IpAddr::V6(ip) => Some(NetAddress::IPv6 { + addr: ip.octets(), + port: ip_addr.port(), + }), + }) { Some(tokio::spawn(async move { // We should essentially always have enough room in a TCP socket buffer to send the // initial 10s of bytes. However, tokio running in single-threaded mode will always diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index 132e6c20..ef07d4c9 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -75,10 +75,10 @@ pub enum DecodeError { pub struct Init { /// The relevant features which the sender supports pub features: InitFeatures, - /// The receipient's network address. This adds the option to report a remote IP address + /// The receipient's network address. This adds the option to report a remote IP address /// back to a connecting peer using the init message. A node can decide to use that information /// to discover a potential update to its public IPv4 address (NAT) and use - /// that for a node_announcement update message containg the new address. + /// that for a node_announcement update message containing the new address. pub remote_network_address: Option, } @@ -2479,9 +2479,9 @@ mod tests { }), }; let encoded_value = init_msg.encode(); - let target_value = hex::decode("000000000307017f00000103e8").unwrap(); + let target_value = hex::decode("000000000307017f00000103e8").unwrap(); assert_eq!(encoded_value, target_value); - assert_eq!(msgs::Init::read(&mut Cursor::new(&target_value)).unwrap(),init_msg); + assert_eq!(msgs::Init::read(&mut Cursor::new(&target_value)).unwrap(), init_msg); } #[test] diff --git a/lightning/src/ln/peer_handler.rs b/lightning/src/ln/peer_handler.rs index 120a7535..558097cf 100644 --- a/lightning/src/ln/peer_handler.rs +++ b/lightning/src/ln/peer_handler.rs @@ -502,21 +502,21 @@ impl core::fmt::Display for OptionalFromDebugger<'_> { fn filter_addresses(ip_address: Option) -> Option { match ip_address{ // For IPv4 range 10.0.0.0 - 10.255.255.255 (10/8) - Some(NetAddress::IPv4{addr: [0xA, 0x00..=0xFF, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [10, _, _, _], port: _}) => None, // For IPv4 range 0.0.0.0 - 0.255.255.255 (0/8) - Some(NetAddress::IPv4{addr: [0x0, 0x0..=0xFF, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [0, _, _, _], port: _}) => None, // For IPv4 range 100.64.0.0 - 100.127.255.255 (100.64/10) - Some(NetAddress::IPv4{addr: [0x64, 0x40..=0x7F, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [100, 64..=127, _, _], port: _}) => None, // For IPv4 range 127.0.0.0 - 127.255.255.255 (127/8) - Some(NetAddress::IPv4{addr: [0x7F, 0x0..=0xFF, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [127, _, _, _], port: _}) => None, // For IPv4 range 169.254.0.0 - 169.254.255.255 (169.254/16) - Some(NetAddress::IPv4{addr: [0xA9, 0xFE, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [169, 254, _, _], port: _}) => None, // For IPv4 range 172.16.0.0 - 172.31.255.255 (172.16/12) - Some(NetAddress::IPv4{addr: [0xAC, 0x10..=0x1F, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [172, 16..=31, _, _], port: _}) => None, // For IPv4 range 192.168.0.0 - 192.168.255.255 (192.168/16) - Some(NetAddress::IPv4{addr: [0xC0, 0xA8, _, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [192, 168, _, _], port: _}) => None, // For IPv4 range 192.88.99.0 - 192.88.99.255 (192.88.99/24) - Some(NetAddress::IPv4{addr: [0xC0, 0x58, 0x63, _], port: _}) => None, + Some(NetAddress::IPv4{addr: [192, 88, 99, _], port: _}) => None, // For IPv6 range 2000:0000:0000:0000:0000:0000:0000:0000 - 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff (2000::/3) Some(NetAddress::IPv6{addr: [0x20..=0x3F, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _], port: _}) => ip_address, // For remaining addresses @@ -576,9 +576,10 @@ impl P /// Indicates a new outbound connection has been established to a node with the given node_id /// and an optional remote network address. + /// /// The remote network address adds the option to report a remote IP address back to a connecting - /// peer using the init message. - /// The user should pass the remote network address to whatever host they are connected to. + /// peer using the init message. + /// The user should pass the remote network address of the host they are connected to. /// /// Note that if an Err is returned here you MUST NOT call socket_disconnected for the new /// descriptor but must disconnect the connection immediately. @@ -623,6 +624,10 @@ impl P /// Indicates a new inbound connection has been established to a node with an optional remote /// network address. /// + /// The remote network address adds the option to report a remote IP address back to a connecting + /// peer using the init message. + /// The user should pass the remote network address of the host they are connected to. + /// /// May refuse the connection by returning an Err, but will never write bytes to the remote end /// (outbound connector always speaks first). Note that if an Err is returned here you MUST NOT /// call socket_disconnected for the new descriptor but must disconnect the connection @@ -903,7 +908,7 @@ impl P peer.their_node_id = Some(their_node_id); insert_node_id!(); let features = InitFeatures::known(); - let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone())}; + let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone())}; self.enqueue_message(peer, &resp); peer.awaiting_pong_timer_tick_intervals = 0; }, @@ -914,7 +919,7 @@ impl P peer.their_node_id = Some(their_node_id); insert_node_id!(); let features = InitFeatures::known(); - let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone())}; + let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone())}; self.enqueue_message(peer, &resp); peer.awaiting_pong_timer_tick_intervals = 0; }, -- 2.30.2