Skip to content

Commit

Permalink
feat: Add support for /dns multiaddrs to dns resolver
Browse files Browse the repository at this point in the history
- `Protocol::Dns` variant was missing from the system and tor DNS resolvers
- This allows one to use `/dns` multiaddrs
- [unrelated] async-trait should not be optional since
  #3056
  • Loading branch information
sdbondi committed Jul 18, 2021
1 parent 92993d7 commit db384c0
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 5 deletions.
4 changes: 2 additions & 2 deletions comms/Cargo.toml
Expand Up @@ -14,6 +14,7 @@ tari_crypto = "0.11.1"
tari_storage = { version = "^0.9", path = "../infrastructure/storage" }
tari_shutdown = { version="^0.9", path = "../infrastructure/shutdown" }

async-trait = "0.1.36"
bitflags = "1.0.4"
blake2 = "0.9.0"
bytes = { version = "0.5.x", features=["serde"] }
Expand Down Expand Up @@ -42,7 +43,6 @@ tower= "0.3.1"
yamux = "=0.4.7"

# RPC dependencies
async-trait = {version="0.1.36", optional=true}
tower-make = {version="0.3.0", optional=true}
anyhow = "1.0.32"

Expand All @@ -59,4 +59,4 @@ tari_common = { version = "^0.9", path="../common", features = ["build"]}

[features]
avx2 = ["tari_crypto/avx2"]
rpc = ["async-trait", "tower-make"]
rpc = ["tower-make"]
2 changes: 1 addition & 1 deletion comms/src/socks/client.rs
Expand Up @@ -394,7 +394,7 @@ where TSocket: AsyncRead + AsyncWrite + Unpin
self.len = 7 + len;
},
// Special case for Tor resolve
(Protocol::Dns4(domain), None) => {
(Protocol::Dns4(domain), None) | (Protocol::Dns(domain), None) => {
self.buf[3] = 0x03;
let domain = domain.as_bytes();
let len = domain.len();
Expand Down
2 changes: 1 addition & 1 deletion comms/src/transports/dns/common.rs
Expand Up @@ -26,7 +26,7 @@ use std::net::SocketAddr;

pub fn is_dns4_addr(addr: &Multiaddr) -> bool {
let proto = addr.iter().next();
matches!(proto, Some(Protocol::Dns4(_)))
matches!(proto, Some(Protocol::Dns4(_))) || matches!(proto, Some(Protocol::Dns(_)))
}

pub fn convert_tcpip_multiaddr_to_socketaddr(addr: &Multiaddr) -> Result<SocketAddr, DnsResolverError> {
Expand Down
4 changes: 3 additions & 1 deletion comms/src/transports/dns/system.rs
Expand Up @@ -46,7 +46,9 @@ impl DnsResolver for SystemDnsResolver {
};

match protos {
(Protocol::Dns4(domain), Protocol::Tcp(port)) => dns_lookup(format!("{}:{}", domain, port)).boxed(),
(Protocol::Dns(domain), Protocol::Tcp(port)) | (Protocol::Dns4(domain), Protocol::Tcp(port)) => {
dns_lookup(format!("{}:{}", domain, port)).boxed()
},
(Protocol::Ip4(host), Protocol::Tcp(port)) => boxed_ready(Ok((host, port).into())),
(Protocol::Ip6(host), Protocol::Tcp(port)) => boxed_ready(Ok((host, port).into())),
_ => boxed_ready(Err(DnsResolverError::UnsupportedAddress(addr))),
Expand Down
6 changes: 6 additions & 0 deletions comms/src/transports/dns/tor.rs
Expand Up @@ -101,5 +101,11 @@ mod test {
.await
.unwrap();
assert_eq!(addr.port(), 443);

let addr = resolver
.resolve("/dns/tari.com/tcp/443".parse().unwrap())
.await
.unwrap();
assert_eq!(addr.port(), 443);
}
}

0 comments on commit db384c0

Please sign in to comment.