@@ -88,6 +88,8 @@ pub use lightning_invoice;
88
88
89
89
pub use error:: Error ;
90
90
pub use event:: Event ;
91
+ pub use types:: NetAddress ;
92
+
91
93
use event:: { EventHandler , EventQueue } ;
92
94
use io:: fs_store:: FilesystemStore ;
93
95
use io:: { KVStore , CHANNEL_MANAGER_PERSISTENCE_KEY , CHANNEL_MANAGER_PERSISTENCE_NAMESPACE } ;
@@ -140,7 +142,7 @@ use rand::Rng;
140
142
use std:: convert:: TryInto ;
141
143
use std:: default:: Default ;
142
144
use std:: fs;
143
- use std:: net:: SocketAddr ;
145
+ use std:: net:: { SocketAddr , ToSocketAddrs } ;
144
146
use std:: sync:: atomic:: { AtomicBool , Ordering } ;
145
147
use std:: sync:: { Arc , Mutex , RwLock } ;
146
148
use std:: time:: { Duration , Instant , SystemTime } ;
@@ -754,7 +756,7 @@ impl Node {
754
756
{
755
757
if let Some ( peer_info) = connect_peer_store. get_peer ( & node_id) {
756
758
let _ = do_connect_peer (
757
- peer_info. pubkey ,
759
+ peer_info. node_id ,
758
760
peer_info. address ,
759
761
Arc :: clone ( & connect_pm) ,
760
762
Arc :: clone ( & connect_logger) ,
@@ -896,18 +898,18 @@ impl Node {
896
898
///
897
899
/// If `permanently` is set to `true`, we'll remember the peer and reconnect to it on restart.
898
900
pub fn connect (
899
- & self , node_id : PublicKey , address : SocketAddr , permanently : bool ,
901
+ & self , node_id : PublicKey , address : NetAddress , permanently : bool ,
900
902
) -> Result < ( ) , Error > {
901
903
let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
902
904
if rt_lock. is_none ( ) {
903
905
return Err ( Error :: NotRunning ) ;
904
906
}
905
907
let runtime = rt_lock. as_ref ( ) . unwrap ( ) ;
906
908
907
- let peer_info = PeerInfo { pubkey : node_id, address } ;
909
+ let peer_info = PeerInfo { node_id, address } ;
908
910
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 ( ) ;
911
913
let con_success = Arc :: new ( AtomicBool :: new ( false ) ) ;
912
914
let con_success_cloned = Arc :: clone ( & con_success) ;
913
915
let con_logger = Arc :: clone ( & self . logger ) ;
@@ -916,8 +918,7 @@ impl Node {
916
918
tokio:: task:: block_in_place ( move || {
917
919
runtime. block_on ( async move {
918
920
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 ;
921
922
con_success_cloned. store ( res. is_ok ( ) , Ordering :: Release ) ;
922
923
} )
923
924
} ) ;
@@ -926,7 +927,7 @@ impl Node {
926
927
return Err ( Error :: ConnectionFailed ) ;
927
928
}
928
929
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) ;
930
931
931
932
if permanently {
932
933
self . peer_store . add_peer ( peer_info) ?;
@@ -968,7 +969,7 @@ impl Node {
968
969
///
969
970
/// Returns a temporary channel id.
970
971
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 ,
972
973
push_to_counterparty_msat : Option < u64 > , announce_channel : bool ,
973
974
) -> Result < ( ) , Error > {
974
975
let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
@@ -983,10 +984,10 @@ impl Node {
983
984
return Err ( Error :: InsufficientFunds ) ;
984
985
}
985
986
986
- let peer_info = PeerInfo { pubkey : node_id, address } ;
987
+ let peer_info = PeerInfo { node_id, address } ;
987
988
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 ( ) ;
990
991
let con_success = Arc :: new ( AtomicBool :: new ( false ) ) ;
991
992
let con_success_cloned = Arc :: clone ( & con_success) ;
992
993
let con_logger = Arc :: clone ( & self . logger ) ;
@@ -995,8 +996,7 @@ impl Node {
995
996
tokio:: task:: block_in_place ( move || {
996
997
runtime. block_on ( async move {
997
998
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 ;
1000
1000
con_success_cloned. store ( res. is_ok ( ) , Ordering :: Release ) ;
1001
1001
} )
1002
1002
} ) ;
@@ -1022,7 +1022,7 @@ impl Node {
1022
1022
let user_channel_id: u128 = rand:: thread_rng ( ) . gen :: < u128 > ( ) ;
1023
1023
1024
1024
match self . channel_manager . create_channel (
1025
- peer_info. pubkey ,
1025
+ peer_info. node_id ,
1026
1026
channel_amount_sats,
1027
1027
push_msat,
1028
1028
user_channel_id,
@@ -1032,7 +1032,7 @@ impl Node {
1032
1032
log_info ! (
1033
1033
self . logger,
1034
1034
"Initiated channel creation with peer {}. " ,
1035
- peer_info. pubkey
1035
+ peer_info. node_id
1036
1036
) ;
1037
1037
self . peer_store . add_peer ( peer_info) ?;
1038
1038
Ok ( ( ) )
@@ -1438,44 +1438,52 @@ impl Drop for Node {
1438
1438
}
1439
1439
1440
1440
async 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 > ,
1442
1442
logger : Arc < FilesystemLogger > ,
1443
1443
) -> 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 {
1446
1446
return Ok ( ( ) ) ;
1447
1447
}
1448
1448
}
1449
1449
1450
- do_connect_peer ( pubkey , peer_addr , peer_manager, logger) . await
1450
+ do_connect_peer ( node_id , addr , peer_manager, logger) . await
1451
1451
}
1452
1452
1453
1453
async fn do_connect_peer (
1454
- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1454
+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
1455
1455
logger : Arc < FilesystemLogger > ,
1456
1456
) -> 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
1459
1467
{
1460
1468
Some ( connection_closed_future) => {
1461
1469
let mut connection_closed_future = Box :: pin ( connection_closed_future) ;
1462
1470
loop {
1463
1471
match futures:: poll!( & mut connection_closed_future) {
1464
1472
std:: task:: Poll :: Ready ( _) => {
1465
- log_info ! ( logger, "Peer connection closed: {}@{}" , pubkey , peer_addr ) ;
1473
+ log_info ! ( logger, "Peer connection closed: {}@{}" , node_id , addr ) ;
1466
1474
return Err ( Error :: ConnectionFailed ) ;
1467
1475
}
1468
1476
std:: task:: Poll :: Pending => { }
1469
1477
}
1470
1478
// 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 ) {
1472
1480
Some ( _) => return Ok ( ( ) ) ,
1473
1481
None => tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ,
1474
1482
}
1475
1483
}
1476
1484
}
1477
1485
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 ) ;
1479
1487
Err ( Error :: ConnectionFailed )
1480
1488
}
1481
1489
}
0 commit comments