rd_std/
socks5.rs

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}