5 Commits

Author SHA1 Message Date
eric
9ce32284fb v0.9.2
Some checks failed
ci / test (macos-latest) (push) Has been cancelled
ci / test (ubuntu-latest) (push) Has been cancelled
ci / build-bin-cross (aarch64-unknown-linux-musl) (push) Has been cancelled
ci / build-bin-cross (arm-unknown-linux-musleabi) (push) Has been cancelled
ci / build-bin-cross (armv7-unknown-linux-musleabihf) (push) Has been cancelled
ci / build-bin-cross (i686-unknown-linux-musl) (push) Has been cancelled
ci / build-bin-cross (mips-unknown-linux-musl) (push) Has been cancelled
ci / build-bin-cross (mipsel-unknown-linux-musl) (push) Has been cancelled
ci / build-bin-cross (x86_64-pc-windows-gnu) (push) Has been cancelled
ci / build-bin-cross (x86_64-unknown-linux-musl) (push) Has been cancelled
ci / build-bin-local (macos-latest, x86_64-apple-darwin) (push) Has been cancelled
ci / build-apple (push) Has been cancelled
ci / build-android (push) Has been cancelled
releases / build-bin-cross (aarch64-unknown-linux-musl) (push) Has been cancelled
releases / build-bin-cross (mips-unknown-linux-musl) (push) Has been cancelled
releases / build-bin-cross (x86_64-pc-windows-gnu) (push) Has been cancelled
releases / build-bin-cross (x86_64-unknown-linux-musl) (push) Has been cancelled
releases / build-bin-local (macos-latest, x86_64-apple-darwin) (push) Has been cancelled
releases / build-apple (push) Has been cancelled
releases / build-android (push) Has been cancelled
releases / create-release (push) Has been cancelled
releases / release-bin (aarch64-unknown-linux-musl) (push) Has been cancelled
releases / release-bin (mips-unknown-linux-musl) (push) Has been cancelled
releases / release-bin (x86_64-apple-darwin) (push) Has been cancelled
releases / release-bin (x86_64-pc-windows-gnu) (push) Has been cancelled
releases / release-bin (x86_64-unknown-linux-musl) (push) Has been cancelled
releases / release-mobile-libs (push) Has been cancelled
2023-06-15 23:34:14 +08:00
eric
fdd4fab348 outbound/failover: use the last resort outbound when all scheduled outbounds failed 2023-06-15 23:33:36 +08:00
eric
fa72ab315e Fix deps 2023-06-02 09:26:54 +08:00
eric
b5011c6b6b config/conf: use default ALPN http/1.1 for QUIC 2023-05-29 18:18:23 +08:00
eric
da5c041c97 outbound/quic: fix host name resolving 2023-05-29 17:35:26 +08:00
6 changed files with 41 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
[package]
name = "leaf-bin"
version = "0.9.1"
version = "0.9.2"
authors = ["eycorsican <eric.y.corsican@gmail.com>"]
edition = "2021"

View File

@@ -989,6 +989,7 @@ pub fn to_internal(conf: &mut Config) -> Result<internal::Config> {
if let Some(ext_sni) = &ext_proxy.sni {
quic_settings.server_name = ext_sni.clone();
}
quic_settings.alpn = vec!["http/1.1".to_string()];
if let Some(ext_tls_cert) = &ext_proxy.tls_cert {
let cert = Path::new(ext_tls_cert);
if cert.is_absolute() {

View File

@@ -96,6 +96,8 @@ impl OutboundDatagramHandler for Handler {
let schedule = self.schedule.lock().await.clone();
// Use the last resort outbound if all outbounds have failed in
// the last health check.
if schedule.is_empty() && self.last_resort.is_some() {
let a = &self.last_resort.as_ref().unwrap();
debug!(
@@ -163,6 +165,23 @@ impl OutboundDatagramHandler for Handler {
}
}
// Use the last resort outbound if all scheduled outbounds have
// failed.
if let Some(a) = self.last_resort.as_ref() {
debug!(
"failover handles udp [{}] to last resort [{}]",
sess.destination,
a.tag()
);
return a
.datagram()?
.handle(
sess,
connect_datagram_outbound(sess, self.dns_client.clone(), a).await?,
)
.await;
}
Err(io::Error::new(
io::ErrorKind::Other,
"all outbound attempts failed",

View File

@@ -135,6 +135,8 @@ impl OutboundStreamHandler for Handler {
let schedule = self.schedule.lock().await.clone();
// Use the last resort outbound if all outbounds have failed in
// the last health check.
if schedule.is_empty() && self.last_resort.is_some() {
let a = &self.last_resort.as_ref().unwrap();
debug!(
@@ -212,6 +214,21 @@ impl OutboundStreamHandler for Handler {
}
}
if let Some(a) = self.last_resort.as_ref() {
debug!(
"failover handles tcp [{}] to last resort [{}]",
sess.destination,
a.tag()
);
return a
.stream()?
.handle(
sess,
connect_stream_outbound(sess, self.dns_client.clone(), a).await?,
)
.await;
}
Err(io::Error::new(
io::ErrorKind::Other,
"all outbound attempts failed",

View File

@@ -149,7 +149,7 @@ impl Manager {
self.dns_client
.read()
.await
.lookup(&self.address)
.direct_lookup(&self.address)
.map_err(|e| {
io::Error::new(
io::ErrorKind::Other,

View File

@@ -31,7 +31,7 @@ mod dangerous {
use std::time::SystemTime;
use tokio_rustls::rustls::{
client::{ServerCertVerified, ServerCertVerifier},
Certificate, ServerName,
Certificate, Error, ServerName,
};
pub(super) struct NotVerified;
@@ -45,7 +45,7 @@ mod dangerous {
_scts: &mut dyn Iterator<Item = &[u8]>,
_ocsp_response: &[u8],
_now: SystemTime,
) -> core::result::Result<ServerCertVerified, rustls::Error> {
) -> core::result::Result<ServerCertVerified, Error> {
log::debug!("TLS cert for {:?} not verified", server_name);
Ok(ServerCertVerified::assertion())
}