44 lines
914 B
Rust
44 lines
914 B
Rust
use std::str::FromStr;
|
|
|
|
use anyhow::{bail, Result};
|
|
use trust_dns_resolver::{
|
|
config::{ResolverConfig, ResolverOpts},
|
|
Resolver,
|
|
};
|
|
|
|
fn main() -> Result<()> {
|
|
let (port, host) = resolve_dns("daeken.dev")?;
|
|
|
|
dbg!(port);
|
|
dbg!(host);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
// TODO: How to cache this?
|
|
fn resolve_dns(server: &str) -> Result<(u16, String)> {
|
|
let name = format!("_hypercosm._tls.{}", server);
|
|
|
|
let resp = make_dns_client()?
|
|
.srv_lookup(name)?
|
|
.into_iter()
|
|
.collect::<Vec<_>>();
|
|
|
|
// TODO: Ensure exactly 1 result: I think.
|
|
let srv = &resp[0];
|
|
|
|
// TODO: Handle priority and weight.
|
|
let port = srv.port();
|
|
// TODO: Should this be ascii or utf8
|
|
let name = srv.target().to_ascii();
|
|
|
|
Ok((port, name))
|
|
}
|
|
|
|
fn make_dns_client() -> Result<Resolver> {
|
|
Ok(Resolver::new(
|
|
ResolverConfig::cloudflare_tls(),
|
|
ResolverOpts::default(),
|
|
)?)
|
|
}
|