|
76 | 76 | #![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
77 | 77 |
|
78 | 78 | mod builder;
|
| 79 | +mod connection; |
79 | 80 | mod error;
|
80 | 81 | mod event;
|
81 | 82 | mod fee_estimator;
|
@@ -116,6 +117,7 @@ pub use builder::BuildError;
|
116 | 117 | #[cfg(not(feature = "uniffi"))]
|
117 | 118 | pub use builder::NodeBuilder as Builder;
|
118 | 119 |
|
| 120 | +use connection::{connect_peer_if_necessary, do_connect_peer}; |
119 | 121 | use event::{EventHandler, EventQueue};
|
120 | 122 | use gossip::GossipSource;
|
121 | 123 | use liquidity::LiquiditySource;
|
@@ -1831,58 +1833,3 @@ impl Drop for Node {
|
1831 | 1833 | let _ = self.stop();
|
1832 | 1834 | }
|
1833 | 1835 | }
|
1834 |
| - |
1835 |
| -async fn connect_peer_if_necessary( |
1836 |
| - node_id: PublicKey, addr: SocketAddress, peer_manager: Arc<PeerManager>, |
1837 |
| - logger: Arc<FilesystemLogger>, |
1838 |
| -) -> Result<(), Error> { |
1839 |
| - for (pman_node_id, _pman_addr) in peer_manager.get_peer_node_ids() { |
1840 |
| - if node_id == pman_node_id { |
1841 |
| - return Ok(()); |
1842 |
| - } |
1843 |
| - } |
1844 |
| - |
1845 |
| - do_connect_peer(node_id, addr, peer_manager, logger).await |
1846 |
| -} |
1847 |
| - |
1848 |
| -async fn do_connect_peer( |
1849 |
| - node_id: PublicKey, addr: SocketAddress, peer_manager: Arc<PeerManager>, |
1850 |
| - logger: Arc<FilesystemLogger>, |
1851 |
| -) -> Result<(), Error> { |
1852 |
| - log_info!(logger, "Connecting to peer: {}@{}", node_id, addr); |
1853 |
| - |
1854 |
| - let socket_addr = addr |
1855 |
| - .to_socket_addrs() |
1856 |
| - .map_err(|e| { |
1857 |
| - log_error!(logger, "Failed to resolve network address: {}", e); |
1858 |
| - Error::InvalidSocketAddress |
1859 |
| - })? |
1860 |
| - .next() |
1861 |
| - .ok_or(Error::ConnectionFailed)?; |
1862 |
| - |
1863 |
| - match lightning_net_tokio::connect_outbound(Arc::clone(&peer_manager), node_id, socket_addr) |
1864 |
| - .await |
1865 |
| - { |
1866 |
| - Some(connection_closed_future) => { |
1867 |
| - let mut connection_closed_future = Box::pin(connection_closed_future); |
1868 |
| - loop { |
1869 |
| - match futures::poll!(&mut connection_closed_future) { |
1870 |
| - std::task::Poll::Ready(_) => { |
1871 |
| - log_info!(logger, "Peer connection closed: {}@{}", node_id, addr); |
1872 |
| - return Err(Error::ConnectionFailed); |
1873 |
| - } |
1874 |
| - std::task::Poll::Pending => {} |
1875 |
| - } |
1876 |
| - // Avoid blocking the tokio context by sleeping a bit |
1877 |
| - match peer_manager.get_peer_node_ids().iter().find(|(id, _addr)| *id == node_id) { |
1878 |
| - Some(_) => return Ok(()), |
1879 |
| - None => tokio::time::sleep(Duration::from_millis(10)).await, |
1880 |
| - } |
1881 |
| - } |
1882 |
| - } |
1883 |
| - None => { |
1884 |
| - log_error!(logger, "Failed to connect to peer: {}@{}", node_id, addr); |
1885 |
| - Err(Error::ConnectionFailed) |
1886 |
| - } |
1887 |
| - } |
1888 |
| -} |
0 commit comments