refactor dns resolver
This commit is contained in:
+4
-4
@@ -6,9 +6,9 @@ use color_eyre::eyre::OptionExt as _;
|
||||
use crate::event::{AppEvent, Event};
|
||||
use crate::{config::Config, proxy::Proxy, utils::pretty_error};
|
||||
|
||||
pub async fn check_all<R: reqwest::dns::Resolve + 'static>(
|
||||
pub async fn check_all<R: reqwest::dns::Resolve + Clone + 'static>(
|
||||
config: Arc<Config>,
|
||||
dns_resolver: Arc<R>,
|
||||
dns_resolver: R,
|
||||
proxies: Vec<Proxy>,
|
||||
token: tokio_util::sync::CancellationToken,
|
||||
#[cfg(feature = "tui")] tx: tokio::sync::mpsc::UnboundedSender<Event>,
|
||||
@@ -33,7 +33,7 @@ pub async fn check_all<R: reqwest::dns::Resolve + 'static>(
|
||||
for _ in 0..workers_count {
|
||||
let queue = Arc::clone(&queue);
|
||||
let config = Arc::clone(&config);
|
||||
let dns_resolver = Arc::clone(&dns_resolver);
|
||||
let dns_resolver = dns_resolver.clone();
|
||||
let checked_proxies = Arc::clone(&checked_proxies);
|
||||
let token = token.clone();
|
||||
#[cfg(feature = "tui")]
|
||||
@@ -46,7 +46,7 @@ pub async fn check_all<R: reqwest::dns::Resolve + 'static>(
|
||||
let Some(mut proxy) = queue.lock().pop() else {
|
||||
break;
|
||||
};
|
||||
let check_result = proxy.check(&config, Arc::clone(&dns_resolver)).await;
|
||||
let check_result = proxy.check(&config, dns_resolver.clone()).await;
|
||||
#[cfg(feature = "tui")]
|
||||
drop(tx.send(Event::App(AppEvent::ProxyChecked(proxy.protocol))));
|
||||
match check_result {
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ pub struct BasicAuth {
|
||||
pub password: Option<compact_str::CompactString>,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct HickoryDnsResolver(Arc<hickory_resolver::TokioResolver>);
|
||||
|
||||
impl HickoryDnsResolver {
|
||||
@@ -163,7 +164,7 @@ impl reqwest_middleware::Middleware for RetryMiddleware {
|
||||
|
||||
pub fn create_reqwest_client<R: reqwest::dns::Resolve + 'static>(
|
||||
config: &Config,
|
||||
dns_resolver: Arc<R>,
|
||||
dns_resolver: R,
|
||||
) -> reqwest::Result<reqwest_middleware::ClientWithMiddleware> {
|
||||
let mut builder = reqwest::ClientBuilder::new()
|
||||
.user_agent(config.scraping.user_agent.as_bytes())
|
||||
|
||||
+2
-2
@@ -171,9 +171,9 @@ async fn main_task(
|
||||
event::Event,
|
||||
>,
|
||||
) -> crate::Result<()> {
|
||||
let dns_resolver = Arc::new(http::HickoryDnsResolver::new().await?);
|
||||
let dns_resolver = http::HickoryDnsResolver::new().await?;
|
||||
let http_client =
|
||||
http::create_reqwest_client(&config, Arc::clone(&dns_resolver))?;
|
||||
http::create_reqwest_client(&config, dns_resolver.clone())?;
|
||||
|
||||
let ((), mut proxies) = tokio::try_join!(
|
||||
download_output_dependencies(
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
use std::{
|
||||
hash::{Hash, Hasher},
|
||||
str::FromStr,
|
||||
sync::Arc,
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
@@ -126,7 +125,7 @@ impl Proxy {
|
||||
pub async fn check<R: reqwest::dns::Resolve + 'static>(
|
||||
&mut self,
|
||||
config: &Config,
|
||||
dns_resolver: Arc<R>,
|
||||
dns_resolver: R,
|
||||
) -> crate::Result<()> {
|
||||
if let Some(check_url) = config.checking.check_url.clone() {
|
||||
let builder = reqwest::ClientBuilder::new()
|
||||
|
||||
Reference in New Issue
Block a user