Kaynağa Gözat

net: Add socks5+tls support

parazyd 1 yıl önce
ebeveyn
işleme
01ba2431a6
1 değiştirilmiş dosya ile 18 ekleme ve 0 silme
  1. 18 0
      src/net/transport/mod.rs

+ 18 - 0
src/net/transport/mod.rs

@@ -78,6 +78,9 @@ pub enum DialerVariant {
 
 
     /// SOCKS5 proxy
     /// SOCKS5 proxy
     Socks5(socks5::Socks5Dialer),
     Socks5(socks5::Socks5Dialer),
+
+    /// SOCKS5 proxy with TLS
+    Socks5Tls(socks5::Socks5Dialer),
 }
 }
 
 
 /// Listener variants
 /// Listener variants
@@ -200,6 +203,14 @@ impl Dialer {
                 Ok(Self { endpoint, variant })
                 Ok(Self { endpoint, variant })
             }
             }
 
 
+            "socks5+tls" => {
+                // Build a SOCKS5 dialer with TLS encapsulation
+                enforce_hostport!(endpoint);
+                let variant = socks5::Socks5Dialer::new(&endpoint).await?;
+                let variant = DialerVariant::Socks5Tls(variant);
+                Ok(Self { endpoint, variant })
+            }
+
             x => {
             x => {
                 error!("[P2P] Requested unsupported transport: {}", x);
                 error!("[P2P] Requested unsupported transport: {}", x);
                 Err(io::Error::from_raw_os_error(libc::ENETUNREACH))
                 Err(io::Error::from_raw_os_error(libc::ENETUNREACH))
@@ -271,6 +282,13 @@ impl Dialer {
                 let stream = dialer.do_dial().await?;
                 let stream = dialer.do_dial().await?;
                 Ok(Box::new(stream))
                 Ok(Box::new(stream))
             }
             }
+
+            DialerVariant::Socks5Tls(dialer) => {
+                let stream = dialer.do_dial().await?;
+                let tlsupgrade = tls::TlsUpgrade::new().await;
+                let stream = tlsupgrade.upgrade_dialer_tls(stream).await?;
+                Ok(Box::new(stream))
+            }
         }
         }
     }
     }