aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-09-14 15:45:05 +0200
committerAlex Auvolat <alex@adnab.me>2022-09-14 15:45:05 +0200
commit1a413eef977690870dcd5c7bfad50e4fbf62aee7 (patch)
tree5c6e0c40296107ccd1edb7bcb0e9b67d8f906fa0
parent8ac109e3a84bd34550d66baf65fe59b86b63bca2 (diff)
downloadnetapp-1a413eef977690870dcd5c7bfad50e4fbf62aee7.tar.gz
netapp-1a413eef977690870dcd5c7bfad50e4fbf62aee7.zip
Add async version of parse_and_resolve_peer_addrv0.5.1
-rw-r--r--Cargo.toml2
-rw-r--r--src/util.rs18
2 files changed, 18 insertions, 2 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 4dce280..65f6c6b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "netapp"
-version = "0.5.0"
+version = "0.5.1"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license-file = "LICENSE"
diff --git a/src/util.rs b/src/util.rs
index 425d26f..4676e64 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -1,5 +1,4 @@
use std::net::SocketAddr;
-use std::net::ToSocketAddrs;
use log::info;
use serde::Serialize;
@@ -71,6 +70,8 @@ pub fn parse_peer_addr(peer: &str) -> Option<(NodeID, SocketAddr)> {
/// Parse and resolve a peer's address including public key, written in the format:
/// `<public key hex>@<ip or hostname>:<port>`
pub fn parse_and_resolve_peer_addr(peer: &str) -> Option<(NodeID, Vec<SocketAddr>)> {
+ use std::net::ToSocketAddrs;
+
let delim = peer.find('@')?;
let (key, host) = peer.split_at(delim);
let pubkey = NodeID::from_slice(&hex::decode(&key).ok()?)?;
@@ -80,3 +81,18 @@ pub fn parse_and_resolve_peer_addr(peer: &str) -> Option<(NodeID, Vec<SocketAddr
}
Some((pubkey, hosts))
}
+
+/// async version of parse_and_resolve_peer_addr
+pub async fn parse_and_resolve_peer_addr_async(peer: &str) -> Option<(NodeID, Vec<SocketAddr>)> {
+ let delim = peer.find('@')?;
+ let (key, host) = peer.split_at(delim);
+ let pubkey = NodeID::from_slice(&hex::decode(&key).ok()?)?;
+ let hosts = tokio::net::lookup_host(&host[1..])
+ .await
+ .ok()?
+ .collect::<Vec<_>>();
+ if hosts.is_empty() {
+ return None;
+ }
+ Some((pubkey, hosts))
+}