Merge branch 'reqwest-follow-up' into 'next'

move resolver logic into the resolver

See merge request famedly/conduit!571
This commit is contained in:
Charles Hall 2024-01-24 23:24:00 +00:00
commit ca198c51fa

View file

@ -109,11 +109,11 @@ impl Default for RotationHandler {
pub struct Resolver { pub struct Resolver {
inner: GaiResolver, inner: GaiResolver,
overrides: Box<dyn Fn(&str) -> Option<SocketAddr> + Send + Sync>, overrides: Arc<RwLock<TlsNameMap>>,
} }
impl Resolver { impl Resolver {
pub fn new(overrides: Box<dyn Fn(&str) -> Option<SocketAddr> + Send + Sync>) -> Resolver { pub fn new(overrides: Arc<RwLock<TlsNameMap>>) -> Self {
Resolver { Resolver {
inner: GaiResolver::new(), inner: GaiResolver::new(),
overrides, overrides,
@ -123,16 +123,26 @@ impl Resolver {
impl Resolve for Resolver { impl Resolve for Resolver {
fn resolve(&self, name: Name) -> Resolving { fn resolve(&self, name: Name) -> Resolving {
if let Some(addr) = (self.overrides)(name.as_str()) { self.overrides
let once: Box<dyn Iterator<Item = SocketAddr> + Send> = Box::new(iter::once(addr)); .read()
return Box::pin(future::ready(Ok(once))); .expect("lock should not be poisoned")
} .get(name.as_str())
let this = &mut self.inner.clone(); .and_then(|(override_name, port)| {
Box::pin(HyperService::<Name>::call(this, name).map(|result| { override_name.get(0).map(|first_name| {
result let x: Box<dyn Iterator<Item = SocketAddr> + Send> =
.map(|addrs| -> Addrs { Box::new(addrs) }) Box::new(iter::once(SocketAddr::new(*first_name, *port)));
.map_err(|err| -> Box<dyn StdError + Send + Sync> { Box::new(err) }) let x: Resolving = Box::pin(future::ready(Ok(x)));
})) x
})
})
.unwrap_or_else(|| {
let this = &mut self.inner.clone();
Box::pin(HyperService::<Name>::call(this, name).map(|result| {
result
.map(|addrs| -> Addrs { Box::new(addrs) })
.map_err(|err| -> Box<dyn StdError + Send + Sync> { Box::new(err) })
}))
})
} }
} }
@ -157,14 +167,8 @@ impl Service {
.map(|secret| jsonwebtoken::DecodingKey::from_secret(secret.as_bytes())); .map(|secret| jsonwebtoken::DecodingKey::from_secret(secret.as_bytes()));
let default_client = reqwest_client_builder(&config)?.build()?; let default_client = reqwest_client_builder(&config)?.build()?;
let name_override = Arc::clone(&tls_name_override);
let federation_client = reqwest_client_builder(&config)? let federation_client = reqwest_client_builder(&config)?
.dns_resolver(Arc::new(Resolver::new(Box::new(move |domain| { .dns_resolver(Arc::new(Resolver::new(tls_name_override.clone())))
let read_guard = name_override.read().unwrap();
let (override_name, port) = read_guard.get(domain)?;
let first_name = override_name.get(0)?;
Some(SocketAddr::new(*first_name, *port))
}))))
.build()?; .build()?;
// Supported and stable room versions // Supported and stable room versions