Skip to content

Commit 7d30e0f

Browse files
committed
Refacto: Use proper type for WsServer
1 parent a33a889 commit 7d30e0f

File tree

6 files changed

+417
-406
lines changed

6 files changed

+417
-406
lines changed

‎src/main.rs‎

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::tunnel::connectors::{Socks5TunnelConnector, TcpTunnelConnector, UdpTu
1111
use crate::tunnel::listeners::{
1212
new_stdio_listener, new_udp_listener, HttpProxyTunnelListener, Socks5TunnelListener, TcpTunnelListener,
1313
};
14+
use crate::tunnel::server::{TlsServerConfig, WsServer, WsServerConfig};
1415
use crate::tunnel::{to_host_port, RemoteAddr, TransportAddr, TransportScheme};
1516
use base64::Engine;
1617
use clap::Parser;
@@ -20,16 +21,16 @@ use log::debug;
2021
use parking_lot::{Mutex, RwLock};
2122
use serde::{Deserialize, Serialize};
2223
use std::collections::BTreeMap;
23-
use std::fmt::{Debug, Formatter};
24+
use std::fmt::Debug;
25+
use std::io;
2426
use std::io::ErrorKind;
2527
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
2628
use std::path::PathBuf;
2729
use std::str::FromStr;
2830
use std::sync::Arc;
2931
use std::time::Duration;
30-
use std::{fmt, io};
3132
use tokio::select;
32-
use tokio_rustls::rustls::pki_types::{CertificateDer, DnsName, PrivateKeyDer};
33+
use tokio_rustls::rustls::pki_types::DnsName;
3334
use tracing::{error, info};
3435
use tracing_subscriber::filter::Directive;
3536
use tracing_subscriber::EnvFilter;
@@ -690,49 +691,6 @@ fn parse_server_url(arg: &str) -> Result<Url, io::Error> {
690691
Ok(url)
691692
}
692693

693-
#[derive(Debug)]
694-
pub struct TlsServerConfig {
695-
pub tls_certificate: Mutex<Vec<CertificateDer<'static>>>,
696-
pub tls_key: Mutex<PrivateKeyDer<'static>>,
697-
pub tls_client_ca_certificates: Option<Mutex<Vec<CertificateDer<'static>>>>,
698-
pub tls_certificate_path: Option<PathBuf>,
699-
pub tls_key_path: Option<PathBuf>,
700-
pub tls_client_ca_certs_path: Option<PathBuf>,
701-
}
702-
703-
pub struct WsServerConfig {
704-
pub socket_so_mark: Option<u32>,
705-
pub bind: SocketAddr,
706-
pub websocket_ping_frequency: Option<Duration>,
707-
pub timeout_connect: Duration,
708-
pub websocket_mask_frame: bool,
709-
pub tls: Option<TlsServerConfig>,
710-
pub dns_resolver: DnsResolver,
711-
pub restriction_config: Option<PathBuf>,
712-
}
713-
714-
impl Debug for WsServerConfig {
715-
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
716-
f.debug_struct("WsServerConfig")
717-
.field("socket_so_mark", &self.socket_so_mark)
718-
.field("bind", &self.bind)
719-
.field("websocket_ping_frequency", &self.websocket_ping_frequency)
720-
.field("timeout_connect", &self.timeout_connect)
721-
.field("websocket_mask_frame", &self.websocket_mask_frame)
722-
.field("restriction_config", &self.restriction_config)
723-
.field("tls", &self.tls.is_some())
724-
.field(
725-
"mTLS",
726-
&self
727-
.tls
728-
.as_ref()
729-
.map(|x| x.tls_client_ca_certificates.is_some())
730-
.unwrap_or(false),
731-
)
732-
.finish()
733-
}
734-
}
735-
736694
#[tokio::main]
737695
async fn main() -> anyhow::Result<()> {
738696
let args = Wstunnel::parse();
@@ -1194,18 +1152,17 @@ async fn main() -> anyhow::Result<()> {
11941152
.expect("Cannot create DNS resolver"),
11951153
restriction_config: args.restrict_config,
11961154
};
1155+
let server = WsServer::new(server_config);
11971156

11981157
info!(
11991158
"Starting wstunnel server v{} with config {:?}",
12001159
env!("CARGO_PKG_VERSION"),
1201-
server_config
1160+
server.config
12021161
);
12031162
debug!("Restriction rules: {:#?}", restrictions);
1204-
tunnel::server::run_server(Arc::new(server_config), restrictions)
1205-
.await
1206-
.unwrap_or_else(|err| {
1207-
panic!("Cannot start wstunnel server: {:?}", err);
1208-
});
1163+
server.serve(restrictions).await.unwrap_or_else(|err| {
1164+
panic!("Cannot start wstunnel server: {:?}", err);
1165+
});
12091166
}
12101167
}
12111168

‎src/protocols/tls/server.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::TlsServerConfig;
21
use anyhow::{anyhow, Context};
32
use std::fs::File;
43

@@ -10,6 +9,7 @@ use tokio::net::TcpStream;
109
use tokio_rustls::client::TlsStream;
1110

1211
use crate::tunnel::client::WsClientConfig;
12+
use crate::tunnel::server::TlsServerConfig;
1313
use crate::tunnel::TransportAddr;
1414
use tokio_rustls::rustls::client::danger::{HandshakeSignatureValid, ServerCertVerified, ServerCertVerifier};
1515
use tokio_rustls::rustls::pki_types::{CertificateDer, PrivateKeyDer, ServerName, UnixTime};

‎src/tunnel/mod.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ pub mod client;
22
pub mod connectors;
33
pub mod listeners;
44
pub mod server;
5-
pub mod tls_reloader;
5+
mod tls_reloader;
66
mod transport;
77

88
use crate::{LocalProtocol, TlsClientConfig};

‎src/tunnel/server/mod.rs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#![allow(clippy::module_inception)]
2+
mod server;
3+
4+
pub use server::TlsServerConfig;
5+
pub use server::WsServer;
6+
pub use server::WsServerConfig;

0 commit comments

Comments
 (0)