2626//! [`send_payment`], etc.:
2727//!
2828//! ```no_run
29- //! use ldk_node::Builder;
29+ //! use ldk_node::{ Builder, NetAddress} ;
3030//! use ldk_node::lightning_invoice::Invoice;
3131//! use ldk_node::bitcoin::secp256k1::PublicKey;
3232//! use std::str::FromStr;
4646//! node.sync_wallets().unwrap();
4747//!
4848//! let node_id = PublicKey::from_str("NODE_ID").unwrap();
49- //! let node_addr = "IP_ADDR:PORT".parse( ).unwrap();
49+ //! let node_addr = NetAddress::from_str( "IP_ADDR:PORT").unwrap();
5050//! node.connect_open_channel(node_id, node_addr, 10000, None, false).unwrap();
5151//!
5252//! let invoice = Invoice::from_str("INVOICE_STR").unwrap();
@@ -95,6 +95,8 @@ pub use error::Error as NodeError;
9595use error:: Error ;
9696
9797pub use event:: Event ;
98+ pub use types:: NetAddress ;
99+
98100use event:: { EventHandler , EventQueue } ;
99101use io:: fs_store:: FilesystemStore ;
100102use io:: { KVStore , CHANNEL_MANAGER_PERSISTENCE_KEY , CHANNEL_MANAGER_PERSISTENCE_NAMESPACE } ;
@@ -149,7 +151,7 @@ use rand::Rng;
149151use std:: convert:: TryInto ;
150152use std:: default:: Default ;
151153use std:: fs;
152- use std:: net:: SocketAddr ;
154+ use std:: net:: { SocketAddr , ToSocketAddrs } ;
153155use std:: str:: FromStr ;
154156use std:: sync:: atomic:: { AtomicBool , Ordering } ;
155157use std:: sync:: { Arc , Mutex , RwLock } ;
@@ -757,7 +759,7 @@ impl Node {
757759 {
758760 if let Some ( peer_info) = connect_peer_store. get_peer ( & node_id) {
759761 let _ = do_connect_peer (
760- peer_info. pubkey ,
762+ peer_info. node_id ,
761763 peer_info. address ,
762764 Arc :: clone ( & connect_pm) ,
763765 Arc :: clone ( & connect_logger) ,
@@ -909,18 +911,18 @@ impl Node {
909911 ///
910912 /// If `permanently` is set to `true`, we'll remember the peer and reconnect to it on restart.
911913 pub fn connect (
912- & self , node_id : PublicKey , address : SocketAddr , permanently : bool ,
914+ & self , node_id : PublicKey , address : NetAddress , permanently : bool ,
913915 ) -> Result < ( ) , Error > {
914916 let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
915917 if rt_lock. is_none ( ) {
916918 return Err ( Error :: NotRunning ) ;
917919 }
918920 let runtime = rt_lock. as_ref ( ) . unwrap ( ) ;
919921
920- let peer_info = PeerInfo { pubkey : node_id, address } ;
922+ let peer_info = PeerInfo { node_id, address } ;
921923
922- let con_peer_pubkey = peer_info. pubkey ;
923- let con_peer_addr = peer_info. address ;
924+ let con_node_id = peer_info. node_id ;
925+ let con_addr = peer_info. address . clone ( ) ;
924926 let con_success = Arc :: new ( AtomicBool :: new ( false ) ) ;
925927 let con_success_cloned = Arc :: clone ( & con_success) ;
926928 let con_logger = Arc :: clone ( & self . logger ) ;
@@ -929,8 +931,7 @@ impl Node {
929931 tokio:: task:: block_in_place ( move || {
930932 runtime. block_on ( async move {
931933 let res =
932- connect_peer_if_necessary ( con_peer_pubkey, con_peer_addr, con_pm, con_logger)
933- . await ;
934+ connect_peer_if_necessary ( con_node_id, con_addr, con_pm, con_logger) . await ;
934935 con_success_cloned. store ( res. is_ok ( ) , Ordering :: Release ) ;
935936 } )
936937 } ) ;
@@ -939,7 +940,7 @@ impl Node {
939940 return Err ( Error :: ConnectionFailed ) ;
940941 }
941942
942- log_info ! ( self . logger, "Connected to peer {}@{}. " , peer_info. pubkey , peer_info. address, ) ;
943+ log_info ! ( self . logger, "Connected to peer {}@{}. " , peer_info. node_id , peer_info. address) ;
943944
944945 if permanently {
945946 self . peer_store . add_peer ( peer_info) ?;
@@ -981,7 +982,7 @@ impl Node {
981982 ///
982983 /// Returns a temporary channel id.
983984 pub fn connect_open_channel (
984- & self , node_id : PublicKey , address : SocketAddr , channel_amount_sats : u64 ,
985+ & self , node_id : PublicKey , address : NetAddress , channel_amount_sats : u64 ,
985986 push_to_counterparty_msat : Option < u64 > , announce_channel : bool ,
986987 ) -> Result < ( ) , Error > {
987988 let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
@@ -996,10 +997,10 @@ impl Node {
996997 return Err ( Error :: InsufficientFunds ) ;
997998 }
998999
999- let peer_info = PeerInfo { pubkey : node_id, address } ;
1000+ let peer_info = PeerInfo { node_id, address } ;
10001001
1001- let con_peer_pubkey = peer_info. pubkey ;
1002- let con_peer_addr = peer_info. address ;
1002+ let con_node_id = peer_info. node_id ;
1003+ let con_addr = peer_info. address . clone ( ) ;
10031004 let con_success = Arc :: new ( AtomicBool :: new ( false ) ) ;
10041005 let con_success_cloned = Arc :: clone ( & con_success) ;
10051006 let con_logger = Arc :: clone ( & self . logger ) ;
@@ -1008,8 +1009,7 @@ impl Node {
10081009 tokio:: task:: block_in_place ( move || {
10091010 runtime. block_on ( async move {
10101011 let res =
1011- connect_peer_if_necessary ( con_peer_pubkey, con_peer_addr, con_pm, con_logger)
1012- . await ;
1012+ connect_peer_if_necessary ( con_node_id, con_addr, con_pm, con_logger) . await ;
10131013 con_success_cloned. store ( res. is_ok ( ) , Ordering :: Release ) ;
10141014 } )
10151015 } ) ;
@@ -1035,7 +1035,7 @@ impl Node {
10351035 let user_channel_id: u128 = rand:: thread_rng ( ) . gen :: < u128 > ( ) ;
10361036
10371037 match self . channel_manager . create_channel (
1038- peer_info. pubkey ,
1038+ peer_info. node_id ,
10391039 channel_amount_sats,
10401040 push_msat,
10411041 user_channel_id,
@@ -1045,7 +1045,7 @@ impl Node {
10451045 log_info ! (
10461046 self . logger,
10471047 "Initiated channel creation with peer {}. " ,
1048- peer_info. pubkey
1048+ peer_info. node_id
10491049 ) ;
10501050 self . peer_store . add_peer ( peer_info) ?;
10511051 Ok ( ( ) )
@@ -1446,9 +1446,9 @@ impl Node {
14461446 . list_peers ( )
14471447 . iter ( )
14481448 . map ( |p| PeerDetails {
1449- node_id : p. pubkey ,
1450- address : p. address ,
1451- is_connected : active_connected_peers. contains ( & p. pubkey ) ,
1449+ node_id : p. node_id ,
1450+ address : p. address . clone ( ) ,
1451+ is_connected : active_connected_peers. contains ( & p. node_id ) ,
14521452 } )
14531453 . collect ( )
14541454 }
@@ -1461,44 +1461,52 @@ impl Drop for Node {
14611461}
14621462
14631463async fn connect_peer_if_necessary (
1464- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1464+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
14651465 logger : Arc < FilesystemLogger > ,
14661466) -> Result < ( ) , Error > {
1467- for ( node_pubkey , _addr ) in peer_manager. get_peer_node_ids ( ) {
1468- if node_pubkey == pubkey {
1467+ for ( pman_node_id , _pman_addr ) in peer_manager. get_peer_node_ids ( ) {
1468+ if node_id == pman_node_id {
14691469 return Ok ( ( ) ) ;
14701470 }
14711471 }
14721472
1473- do_connect_peer ( pubkey , peer_addr , peer_manager, logger) . await
1473+ do_connect_peer ( node_id , addr , peer_manager, logger) . await
14741474}
14751475
14761476async fn do_connect_peer (
1477- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1477+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
14781478 logger : Arc < FilesystemLogger > ,
14791479) -> Result < ( ) , Error > {
1480- log_info ! ( logger, "Connecting to peer: {}@{}" , pubkey, peer_addr) ;
1481- match lightning_net_tokio:: connect_outbound ( Arc :: clone ( & peer_manager) , pubkey, peer_addr) . await
1480+ log_info ! ( logger, "Connecting to peer: {}@{}" , node_id, addr) ;
1481+
1482+ let socket_addr = addr
1483+ . to_socket_addrs ( )
1484+ . map_err ( |_| Error :: PeerInfoNotFound ) ?
1485+ . next ( )
1486+ . ok_or ( Error :: ConnectionFailed ) ?;
1487+
1488+ match lightning_net_tokio:: connect_outbound ( Arc :: clone ( & peer_manager) , node_id, socket_addr)
1489+ . await
14821490 {
14831491 Some ( connection_closed_future) => {
14841492 let mut connection_closed_future = Box :: pin ( connection_closed_future) ;
14851493 loop {
14861494 match futures:: poll!( & mut connection_closed_future) {
14871495 std:: task:: Poll :: Ready ( _) => {
1488- log_info ! ( logger, "Peer connection closed: {}@{}" , pubkey , peer_addr ) ;
1496+ log_info ! ( logger, "Peer connection closed: {}@{}" , node_id , addr ) ;
14891497 return Err ( Error :: ConnectionFailed ) ;
14901498 }
14911499 std:: task:: Poll :: Pending => { }
14921500 }
14931501 // Avoid blocking the tokio context by sleeping a bit
1494- match peer_manager. get_peer_node_ids ( ) . iter ( ) . find ( |( id, _addr) | * id == pubkey ) {
1502+ match peer_manager. get_peer_node_ids ( ) . iter ( ) . find ( |( id, _addr) | * id == node_id ) {
14951503 Some ( _) => return Ok ( ( ) ) ,
14961504 None => tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ,
14971505 }
14981506 }
14991507 }
15001508 None => {
1501- log_error ! ( logger, "Failed to connect to peer: {}@{}" , pubkey , peer_addr ) ;
1509+ log_error ! ( logger, "Failed to connect to peer: {}@{}" , node_id , addr ) ;
15021510 Err ( Error :: ConnectionFailed )
15031511 }
15041512 }
0 commit comments