diff --git a/crates/shadowsocks-service/src/dns/mod.rs b/crates/shadowsocks-service/src/dns/mod.rs index 08d70a2061c2..e1f25eb715bb 100644 --- a/crates/shadowsocks-service/src/dns/mod.rs +++ b/crates/shadowsocks-service/src/dns/mod.rs @@ -6,7 +6,12 @@ use shadowsocks::{dns_resolver::DnsResolver, net::ConnectOpts}; use crate::config::DnsConfig; #[allow(unused_variables, dead_code)] -pub async fn build_dns_resolver(dns: DnsConfig, ipv6_first: bool, dns_cache_size: Option, connect_opts: &ConnectOpts) -> Option { +pub async fn build_dns_resolver( + dns: DnsConfig, + ipv6_first: bool, + dns_cache_size: Option, + connect_opts: &ConnectOpts, +) -> Option { match dns { DnsConfig::System => { #[cfg(feature = "trust-dns")] @@ -41,18 +46,20 @@ pub async fn build_dns_resolver(dns: DnsConfig, ipv6_first: bool, dns_cache_size None } #[cfg(feature = "trust-dns")] - DnsConfig::TrustDns(dns) => match DnsResolver::trust_dns_resolver(dns, dns_cache_size, connect_opts.clone()).await { - Ok(r) => Some(r), - Err(err) => { - use log::warn; + DnsConfig::TrustDns(dns) => { + match DnsResolver::trust_dns_resolver(dns, dns_cache_size, connect_opts.clone()).await { + Ok(r) => Some(r), + Err(err) => { + use log::warn; - warn!( - "initialize trust-dns DNS resolver failed, fallback to default system resolver, error: {}", - err - ); - None + warn!( + "initialize trust-dns DNS resolver failed, fallback to default system resolver, error: {}", + err + ); + None + } } - }, + } #[cfg(feature = "local-dns")] DnsConfig::LocalDns(ns) => { use crate::local::dns::dns_resolver::DnsResolver as LocalDnsResolver; diff --git a/crates/shadowsocks-service/src/local/mod.rs b/crates/shadowsocks-service/src/local/mod.rs index d3d48cecc386..942488cd1311 100644 --- a/crates/shadowsocks-service/src/local/mod.rs +++ b/crates/shadowsocks-service/src/local/mod.rs @@ -165,7 +165,14 @@ impl Server { accept_opts.tcp.mptcp = config.mptcp; context.set_accept_opts(accept_opts); - if let Some(resolver) = build_dns_resolver(config.dns, config.ipv6_first, config.dns_cache_size, context.connect_opts_ref()).await { + if let Some(resolver) = build_dns_resolver( + config.dns, + config.ipv6_first, + config.dns_cache_size, + context.connect_opts_ref(), + ) + .await + { context.set_dns_resolver(Arc::new(resolver)); } diff --git a/crates/shadowsocks-service/src/local/socks/server/mod.rs b/crates/shadowsocks-service/src/local/socks/server/mod.rs index e868929d3648..1ccfd3b0bd19 100644 --- a/crates/shadowsocks-service/src/local/socks/server/mod.rs +++ b/crates/shadowsocks-service/src/local/socks/server/mod.rs @@ -12,6 +12,7 @@ use self::socks5::Socks5UdpServer; use super::config::Socks5AuthConfig; +#[allow(clippy::module_inception)] mod server; #[cfg(feature = "local-socks4")] mod socks4; diff --git a/crates/shadowsocks-service/src/local/tun/virt_device.rs b/crates/shadowsocks-service/src/local/tun/virt_device.rs index 887024c70f31..1dafb66a838f 100644 --- a/crates/shadowsocks-service/src/local/tun/virt_device.rs +++ b/crates/shadowsocks-service/src/local/tun/virt_device.rs @@ -22,6 +22,7 @@ pub struct VirtTunDevice { } impl VirtTunDevice { + #[allow(clippy::type_complexity)] pub fn new( capabilities: DeviceCapabilities, ) -> ( @@ -57,7 +58,7 @@ impl Device for VirtTunDevice { type RxToken<'a> = VirtRxToken<'a>; type TxToken<'a> = VirtTxToken<'a>; - fn receive<'a>(&'a mut self, _timestamp: Instant) -> Option<(Self::RxToken<'a>, Self::TxToken<'a>)> { + fn receive(&mut self, _timestamp: Instant) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { if let Ok(buffer) = self.in_buf.try_recv() { let rx = Self::RxToken { buffer, @@ -70,7 +71,7 @@ impl Device for VirtTunDevice { None } - fn transmit<'a>(&'a mut self, _timestamp: Instant) -> Option> { + fn transmit(&mut self, _timestamp: Instant) -> Option> { return Some(VirtTxToken(self)); } diff --git a/crates/shadowsocks-service/src/manager/mod.rs b/crates/shadowsocks-service/src/manager/mod.rs index 7dcea2d260a4..1aea53824088 100644 --- a/crates/shadowsocks-service/src/manager/mod.rs +++ b/crates/shadowsocks-service/src/manager/mod.rs @@ -64,7 +64,9 @@ pub async fn run(config: Config) -> io::Result<()> { accept_opts.tcp.keepalive = config.keep_alive.or(Some(SERVER_DEFAULT_KEEPALIVE_TIMEOUT)); accept_opts.tcp.mptcp = config.mptcp; - if let Some(resolver) = build_dns_resolver(config.dns, config.ipv6_first, config.dns_cache_size, &connect_opts).await { + if let Some(resolver) = + build_dns_resolver(config.dns, config.ipv6_first, config.dns_cache_size, &connect_opts).await + { manager_builder.set_dns_resolver(Arc::new(resolver)); } manager_builder.set_ipv6_first(config.ipv6_first); diff --git a/crates/shadowsocks-service/src/manager/server.rs b/crates/shadowsocks-service/src/manager/server.rs index c518fa3886d3..f281ef9cbe50 100644 --- a/crates/shadowsocks-service/src/manager/server.rs +++ b/crates/shadowsocks-service/src/manager/server.rs @@ -373,8 +373,8 @@ impl Manager { let server_config_path = self.server_config_path(port); - let _ = fs::remove_file(&pid_path); - let _ = fs::remove_file(&server_config_path); + let _ = fs::remove_file(pid_path); + let _ = fs::remove_file(server_config_path); } #[cfg(unix)] diff --git a/crates/shadowsocks-service/src/server/udprelay.rs b/crates/shadowsocks-service/src/server/udprelay.rs index e0da9f05e2b7..cb5cea3129bc 100644 --- a/crates/shadowsocks-service/src/server/udprelay.rs +++ b/crates/shadowsocks-service/src/server/udprelay.rs @@ -194,7 +194,8 @@ impl UdpServer { if (otx .send((peer_addr, target_addr, control, Bytes::copy_from_slice(&buffer[..n]))) - .await).is_err() + .await) + .is_err() { // If Result is error, the channel receiver is closed. We should exit the task. break; diff --git a/crates/shadowsocks/src/dns_resolver/resolver.rs b/crates/shadowsocks/src/dns_resolver/resolver.rs index 620e55b8434d..8ee7fbf2da33 100644 --- a/crates/shadowsocks/src/dns_resolver/resolver.rs +++ b/crates/shadowsocks/src/dns_resolver/resolver.rs @@ -227,7 +227,10 @@ impl DnsResolver { /// /// On *nix system, it will try to read configurations from `/etc/resolv.conf`. #[cfg(feature = "trust-dns")] - pub async fn trust_dns_system_resolver(dns_cache_size: Option, connect_opts: ConnectOpts) -> io::Result { + pub async fn trust_dns_system_resolver( + dns_cache_size: Option, + connect_opts: ConnectOpts, + ) -> io::Result { use super::trust_dns_resolver::create_resolver; let resolver = create_resolver(None, dns_cache_size, connect_opts.clone()).await?; @@ -258,9 +261,15 @@ impl DnsResolver { /// Use trust-dns DNS resolver (with DNS cache) #[cfg(feature = "trust-dns")] - pub async fn trust_dns_resolver(dns: ResolverConfig, dns_cache_size: Option, connect_opts: ConnectOpts) -> io::Result { + pub async fn trust_dns_resolver( + dns: ResolverConfig, + dns_cache_size: Option, + connect_opts: ConnectOpts, + ) -> io::Result { use super::trust_dns_resolver::create_resolver; - Ok(DnsResolver::TrustDns(create_resolver(Some(dns), dns_cache_size, connect_opts).await?)) + Ok(DnsResolver::TrustDns( + create_resolver(Some(dns), dns_cache_size, connect_opts).await?, + )) } /// Custom DNS resolver diff --git a/crates/shadowsocks/src/dns_resolver/trust_dns_resolver.rs b/crates/shadowsocks/src/dns_resolver/trust_dns_resolver.rs index eb5ad474e156..2fc27f7dce51 100644 --- a/crates/shadowsocks/src/dns_resolver/trust_dns_resolver.rs +++ b/crates/shadowsocks/src/dns_resolver/trust_dns_resolver.rs @@ -99,7 +99,11 @@ pub type ShadowDnsConnectionProvider = GenericConnector; /// Create a `trust-dns` asynchronous DNS resolver -pub async fn create_resolver(dns: Option, dns_cache_size: Option, connect_opts: ConnectOpts) -> ResolveResult { +pub async fn create_resolver( + dns: Option, + dns_cache_size: Option, + connect_opts: ConnectOpts, +) -> ResolveResult { // Customized dns resolution match dns { Some(conf) => { @@ -108,7 +112,9 @@ pub async fn create_resolver(dns: Option, dns_cache_size: Option // Since we want to use Happy Eyeballs to connect to both IPv4 and IPv6 addresses, we need both A and AAAA records. resolver_opts.ip_strategy = LookupIpStrategy::Ipv4AndIpv6; - if let Some(size) = dns_cache_size { resolver_opts.cache_size = size } + if let Some(size) = dns_cache_size { + resolver_opts.cache_size = size + } trace!( "initializing DNS resolver with config {:?} opts {:?}", diff --git a/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs b/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs index 812e29c3792b..180154cdb564 100644 --- a/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs +++ b/crates/shadowsocks/src/net/sys/unix/bsd/freebsd.rs @@ -1,5 +1,6 @@ use std::{ - io, mem, + io, + mem, net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, os::unix::io::{AsRawFd, RawFd}, pin::Pin, @@ -20,7 +21,9 @@ use tokio_tfo::TfoStream; use crate::net::{ sys::{set_common_sockopt_after_connect, set_common_sockopt_for_connect, socket_bind_dual_stack}, udp::{BatchRecvMessage, BatchSendMessage}, - AcceptOpts, AddrFamily, ConnectOpts, + AcceptOpts, + AddrFamily, + ConnectOpts, }; /// A `TcpStream` that supports TFO (TCP Fast Open) diff --git a/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs b/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs index eac9c8b78fbc..a730bd9c35b1 100644 --- a/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs +++ b/crates/shadowsocks/src/net/sys/unix/bsd/macos.rs @@ -21,7 +21,9 @@ use tokio_tfo::TfoStream; use crate::net::{ sys::{set_common_sockopt_after_connect, set_common_sockopt_for_connect, socket_bind_dual_stack}, udp::{BatchRecvMessage, BatchSendMessage}, - AcceptOpts, AddrFamily, ConnectOpts, + AcceptOpts, + AddrFamily, + ConnectOpts, }; /// A `TcpStream` that supports TFO (TCP Fast Open) diff --git a/crates/shadowsocks/src/net/sys/unix/linux/mod.rs b/crates/shadowsocks/src/net/sys/unix/linux/mod.rs index 1122f041d128..07acde426613 100644 --- a/crates/shadowsocks/src/net/sys/unix/linux/mod.rs +++ b/crates/shadowsocks/src/net/sys/unix/linux/mod.rs @@ -1,5 +1,6 @@ use std::{ - io, mem, + io, + mem, net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd}, pin::Pin, @@ -21,7 +22,9 @@ use tokio_tfo::TfoStream; use crate::net::{ sys::{set_common_sockopt_after_connect, set_common_sockopt_for_connect, socket_bind_dual_stack}, udp::{BatchRecvMessage, BatchSendMessage}, - AcceptOpts, AddrFamily, ConnectOpts, + AcceptOpts, + AddrFamily, + ConnectOpts, }; /// A `TcpStream` that supports TFO (TCP Fast Open) diff --git a/crates/shadowsocks/src/plugin/mod.rs b/crates/shadowsocks/src/plugin/mod.rs index 55ea2b0ec24f..b55f7c0b83a2 100644 --- a/crates/shadowsocks/src/plugin/mod.rs +++ b/crates/shadowsocks/src/plugin/mod.rs @@ -227,10 +227,8 @@ impl Drop for Plugin { } } - if !terminated { - if self.process.start_kill().is_ok() { - debug!("killed plugin process {:?}", self.process.id()); - } + if !terminated && self.process.start_kill().is_ok() { + debug!("killed plugin process {:?}", self.process.id()); } } } diff --git a/crates/shadowsocks/src/relay/udprelay/proxy_socket.rs b/crates/shadowsocks/src/relay/udprelay/proxy_socket.rs index 1ea9eb7d8827..812733048e04 100644 --- a/crates/shadowsocks/src/relay/udprelay/proxy_socket.rs +++ b/crates/shadowsocks/src/relay/udprelay/proxy_socket.rs @@ -458,6 +458,7 @@ impl ProxySocket { /// This function will use `recv_buf` to store intermediate data, so it has to be big enough to store the whole shadowsocks' packet /// /// It is recommended to allocate a buffer to have at least 65536 bytes. + #[allow(clippy::type_complexity)] pub async fn recv_from(&self, recv_buf: &mut [u8]) -> ProxySocketResult<(usize, SocketAddr, Address, usize)> { self.recv_from_with_ctrl(recv_buf) .await @@ -469,6 +470,7 @@ impl ProxySocket { /// This function will use `recv_buf` to store intermediate data, so it has to be big enough to store the whole shadowsocks' packet /// /// It is recommended to allocate a buffer to have at least 65536 bytes. + #[allow(clippy::type_complexity)] pub async fn recv_from_with_ctrl( &self, recv_buf: &mut [u8], @@ -502,6 +504,7 @@ impl ProxySocket { /// poll family functions. /// the recv_timeout is ignored. + #[allow(clippy::type_complexity)] pub fn poll_recv( &self, cx: &mut Context<'_>, @@ -512,6 +515,7 @@ impl ProxySocket { } /// poll family functions + #[allow(clippy::type_complexity)] pub fn poll_recv_with_ctrl( &self, cx: &mut Context<'_>, @@ -527,6 +531,8 @@ impl ProxySocket { } } + /// poll family functions + #[allow(clippy::type_complexity)] pub fn poll_recv_from( &self, cx: &mut Context<'_>, @@ -536,6 +542,8 @@ impl ProxySocket { .map(|r| r.map(|(n, sa, a, rn, _)| (n, sa, a, rn))) } + /// poll family functions + #[allow(clippy::type_complexity)] pub fn poll_recv_from_with_ctrl( &self, cx: &mut Context<'_>, @@ -550,6 +558,7 @@ impl ProxySocket { } } + /// poll family functions pub fn poll_recv_ready(&self, cx: &mut Context<'_>) -> Poll> { self.socket.poll_recv_ready(cx).map_err(|x| x.into()) } diff --git a/src/service/local.rs b/src/service/local.rs index a7b0313e53b3..9780f55918ef 100644 --- a/src/service/local.rs +++ b/src/service/local.rs @@ -14,7 +14,12 @@ use shadowsocks_service::shadowsocks::relay::socks5::Address; use shadowsocks_service::{ acl::AccessControl, config::{ - read_variable_field_value, Config, ConfigType, LocalConfig, LocalInstanceConfig, ProtocolType, + read_variable_field_value, + Config, + ConfigType, + LocalConfig, + LocalInstanceConfig, + ProtocolType, ServerInstanceConfig, }, local::{loadbalancing::PingBalancer, Server}, @@ -29,7 +34,8 @@ use shadowsocks_service::{ use crate::logging; use crate::{ config::{Config as ServiceConfig, RuntimeMode}, - monitor, vparser, + monitor, + vparser, }; #[cfg(feature = "local-dns")] diff --git a/src/service/manager.rs b/src/service/manager.rs index 895063170963..afb5171e53c3 100644 --- a/src/service/manager.rs +++ b/src/service/manager.rs @@ -24,7 +24,8 @@ use shadowsocks_service::{ use crate::logging; use crate::{ config::{Config as ServiceConfig, RuntimeMode}, - monitor, vparser, + monitor, + vparser, }; /// Defines command line options diff --git a/src/service/server.rs b/src/service/server.rs index 2bec03d6a03f..0b9213f79f46 100644 --- a/src/service/server.rs +++ b/src/service/server.rs @@ -22,7 +22,8 @@ use shadowsocks_service::{ use crate::logging; use crate::{ config::{Config as ServiceConfig, RuntimeMode}, - monitor, vparser, + monitor, + vparser, }; /// Defines command line options