Merge branch 'reqwest-follow-up' into 'next'
move resolver logic into the resolver See merge request famedly/conduit!571
This commit is contained in:
commit
ca198c51fa
1 changed files with 23 additions and 19 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue