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();
@@ -88,6 +88,8 @@ pub use lightning_invoice;
8888
8989pub use error:: Error ;
9090pub use event:: Event ;
91+ pub use types:: NetAddress ;
92+
9193use event:: { EventHandler , EventQueue } ;
9294use io:: fs_store:: FilesystemStore ;
9395use io:: { KVStore , CHANNEL_MANAGER_PERSISTENCE_KEY , CHANNEL_MANAGER_PERSISTENCE_NAMESPACE } ;
@@ -140,7 +142,7 @@ use rand::Rng;
140142use std:: convert:: TryInto ;
141143use std:: default:: Default ;
142144use std:: fs;
143- use std:: net:: SocketAddr ;
145+ use std:: net:: { SocketAddr , ToSocketAddrs } ;
144146use std:: sync:: atomic:: { AtomicBool , Ordering } ;
145147use std:: sync:: { Arc , Mutex , RwLock } ;
146148use std:: time:: { Duration , Instant , SystemTime } ;
@@ -754,7 +756,7 @@ impl Node {
754756 {
755757 if let Some ( peer_info) = connect_peer_store. get_peer ( & node_id) {
756758 let _ = do_connect_peer (
757- peer_info. pubkey ,
759+ peer_info. node_id ,
758760 peer_info. address ,
759761 Arc :: clone ( & connect_pm) ,
760762 Arc :: clone ( & connect_logger) ,
@@ -896,18 +898,18 @@ impl Node {
896898 ///
897899 /// If `permanently` is set to `true`, we'll remember the peer and reconnect to it on restart.
898900 pub fn connect (
899- & self , node_id : PublicKey , address : SocketAddr , permanently : bool ,
901+ & self , node_id : PublicKey , address : NetAddress , permanently : bool ,
900902 ) -> Result < ( ) , Error > {
901903 let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
902904 if rt_lock. is_none ( ) {
903905 return Err ( Error :: NotRunning ) ;
904906 }
905907 let runtime = rt_lock. as_ref ( ) . unwrap ( ) ;
906908
907- let peer_info = PeerInfo { pubkey : node_id, address } ;
909+ let peer_info = PeerInfo { node_id, address } ;
908910
909- let con_peer_pubkey = peer_info. pubkey ;
910- let con_peer_addr = peer_info. address ;
911+ let con_node_id = peer_info. node_id ;
912+ let con_addr = peer_info. address . clone ( ) ;
911913 let con_success = Arc :: new ( AtomicBool :: new ( false ) ) ;
912914 let con_success_cloned = Arc :: clone ( & con_success) ;
913915 let con_logger = Arc :: clone ( & self . logger ) ;
@@ -916,8 +918,7 @@ impl Node {
916918 tokio:: task:: block_in_place ( move || {
917919 runtime. block_on ( async move {
918920 let res =
919- connect_peer_if_necessary ( con_peer_pubkey, con_peer_addr, con_pm, con_logger)
920- . await ;
921+ connect_peer_if_necessary ( con_node_id, con_addr, con_pm, con_logger) . await ;
921922 con_success_cloned. store ( res. is_ok ( ) , Ordering :: Release ) ;
922923 } )
923924 } ) ;
@@ -926,7 +927,7 @@ impl Node {
926927 return Err ( Error :: ConnectionFailed ) ;
927928 }
928929
929- log_info ! ( self . logger, "Connected to peer {}@{}. " , peer_info. pubkey , peer_info. address, ) ;
930+ log_info ! ( self . logger, "Connected to peer {}@{}. " , peer_info. node_id , peer_info. address) ;
930931
931932 if permanently {
932933 self . peer_store . add_peer ( peer_info) ?;
@@ -968,7 +969,7 @@ impl Node {
968969 ///
969970 /// Returns a temporary channel id.
970971 pub fn connect_open_channel (
971- & self , node_id : PublicKey , address : SocketAddr , channel_amount_sats : u64 ,
972+ & self , node_id : PublicKey , address : NetAddress , channel_amount_sats : u64 ,
972973 push_to_counterparty_msat : Option < u64 > , announce_channel : bool ,
973974 ) -> Result < ( ) , Error > {
974975 let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
@@ -983,10 +984,10 @@ impl Node {
983984 return Err ( Error :: InsufficientFunds ) ;
984985 }
985986
986- let peer_info = PeerInfo { pubkey : node_id, address } ;
987+ let peer_info = PeerInfo { node_id, address } ;
987988
988- let con_peer_pubkey = peer_info. pubkey ;
989- let con_peer_addr = peer_info. address ;
989+ let con_node_id = peer_info. node_id ;
990+ let con_addr = peer_info. address . clone ( ) ;
990991 let con_success = Arc :: new ( AtomicBool :: new ( false ) ) ;
991992 let con_success_cloned = Arc :: clone ( & con_success) ;
992993 let con_logger = Arc :: clone ( & self . logger ) ;
@@ -995,8 +996,7 @@ impl Node {
995996 tokio:: task:: block_in_place ( move || {
996997 runtime. block_on ( async move {
997998 let res =
998- connect_peer_if_necessary ( con_peer_pubkey, con_peer_addr, con_pm, con_logger)
999- . await ;
999+ connect_peer_if_necessary ( con_node_id, con_addr, con_pm, con_logger) . await ;
10001000 con_success_cloned. store ( res. is_ok ( ) , Ordering :: Release ) ;
10011001 } )
10021002 } ) ;
@@ -1022,7 +1022,7 @@ impl Node {
10221022 let user_channel_id: u128 = rand:: thread_rng ( ) . gen :: < u128 > ( ) ;
10231023
10241024 match self . channel_manager . create_channel (
1025- peer_info. pubkey ,
1025+ peer_info. node_id ,
10261026 channel_amount_sats,
10271027 push_msat,
10281028 user_channel_id,
@@ -1032,7 +1032,7 @@ impl Node {
10321032 log_info ! (
10331033 self . logger,
10341034 "Initiated channel creation with peer {}. " ,
1035- peer_info. pubkey
1035+ peer_info. node_id
10361036 ) ;
10371037 self . peer_store . add_peer ( peer_info) ?;
10381038 Ok ( ( ) )
@@ -1438,44 +1438,52 @@ impl Drop for Node {
14381438}
14391439
14401440async fn connect_peer_if_necessary (
1441- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1441+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
14421442 logger : Arc < FilesystemLogger > ,
14431443) -> Result < ( ) , Error > {
1444- for ( node_pubkey , _addr ) in peer_manager. get_peer_node_ids ( ) {
1445- if node_pubkey == pubkey {
1444+ for ( pman_node_id , _pman_addr ) in peer_manager. get_peer_node_ids ( ) {
1445+ if node_id == pman_node_id {
14461446 return Ok ( ( ) ) ;
14471447 }
14481448 }
14491449
1450- do_connect_peer ( pubkey , peer_addr , peer_manager, logger) . await
1450+ do_connect_peer ( node_id , addr , peer_manager, logger) . await
14511451}
14521452
14531453async fn do_connect_peer (
1454- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1454+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
14551455 logger : Arc < FilesystemLogger > ,
14561456) -> Result < ( ) , Error > {
1457- log_info ! ( logger, "Connecting to peer: {}@{}" , pubkey, peer_addr) ;
1458- match lightning_net_tokio:: connect_outbound ( Arc :: clone ( & peer_manager) , pubkey, peer_addr) . await
1457+ log_info ! ( logger, "Connecting to peer: {}@{}" , node_id, addr) ;
1458+
1459+ let socket_addr = addr
1460+ . to_socket_addrs ( )
1461+ . map_err ( |_| Error :: PeerInfoNotFound ) ?
1462+ . next ( )
1463+ . ok_or ( Error :: ConnectionFailed ) ?;
1464+
1465+ match lightning_net_tokio:: connect_outbound ( Arc :: clone ( & peer_manager) , node_id, socket_addr)
1466+ . await
14591467 {
14601468 Some ( connection_closed_future) => {
14611469 let mut connection_closed_future = Box :: pin ( connection_closed_future) ;
14621470 loop {
14631471 match futures:: poll!( & mut connection_closed_future) {
14641472 std:: task:: Poll :: Ready ( _) => {
1465- log_info ! ( logger, "Peer connection closed: {}@{}" , pubkey , peer_addr ) ;
1473+ log_info ! ( logger, "Peer connection closed: {}@{}" , node_id , addr ) ;
14661474 return Err ( Error :: ConnectionFailed ) ;
14671475 }
14681476 std:: task:: Poll :: Pending => { }
14691477 }
14701478 // Avoid blocking the tokio context by sleeping a bit
1471- match peer_manager. get_peer_node_ids ( ) . iter ( ) . find ( |( id, _addr) | * id == pubkey ) {
1479+ match peer_manager. get_peer_node_ids ( ) . iter ( ) . find ( |( id, _addr) | * id == node_id ) {
14721480 Some ( _) => return Ok ( ( ) ) ,
14731481 None => tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ,
14741482 }
14751483 }
14761484 }
14771485 None => {
1478- log_error ! ( logger, "Failed to connect to peer: {}@{}" , pubkey , peer_addr ) ;
1486+ log_error ! ( logger, "Failed to connect to peer: {}@{}" , node_id , addr ) ;
14791487 Err ( Error :: ConnectionFailed )
14801488 }
14811489 }
0 commit comments