nemicosm/src/main.rs

44 lines
914 B
Rust
Raw Normal View History

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