1mod client;
2mod common;
3pub mod protocol;
4mod server;
5
6pub use client::Socks5Client;
7pub use server::Socks5Server;
8
9use rd_interface::{
10 registry::{NetFactory, ServerFactory},
11 util::get_one_net,
12 Net, Registry, Result,
13};
14use serde_derive::Deserialize;
15
16#[derive(Debug, Deserialize)]
17pub struct Config {
18 address: String,
19 port: u16,
20}
21
22#[derive(Debug, Deserialize)]
23pub struct ServerConfig {
24 bind: String,
25}
26
27impl NetFactory for Socks5Client {
28 const NAME: &'static str = "socks5";
29 type Config = Config;
30 type Net = Self;
31
32 fn new(net: Vec<rd_interface::Net>, config: Self::Config) -> Result<Self> {
33 Ok(Socks5Client::new(
34 get_one_net(net)?,
35 config.address,
36 config.port,
37 ))
38 }
39}
40
41impl ServerFactory for server::Socks5 {
42 const NAME: &'static str = "socks5";
43 type Config = ServerConfig;
44 type Server = Self;
45
46 fn new(listen_net: Net, net: Net, Self::Config { bind }: Self::Config) -> Result<Self> {
47 Ok(server::Socks5::new(listen_net, net, bind))
48 }
49}
50
51pub fn init(registry: &mut Registry) -> Result<()> {
52 registry.add_net::<Socks5Client>();
53 registry.add_server::<server::Socks5>();
54 Ok(())
55}