@@ -123,7 +123,8 @@ fn with_net(mut net: Net, target_net: Option<Net>) -> Net {
123
123
124
124
impl Clash {
125
125
fn proxy_to_net ( & self , p : Proxy , target_net : Option < Net > ) -> Result < Net > {
126
- let net = match p. proxy_type . as_ref ( ) {
126
+ // TODO: http and socks5 has limited support
127
+ let net: Net = match p. proxy_type . as_ref ( ) {
127
128
"ss" => {
128
129
#[ derive( Debug , Deserialize ) ]
129
130
#[ serde( rename_all = "kebab-case" ) ]
@@ -193,6 +194,7 @@ impl Clash {
193
194
// udp is ignored
194
195
// udp: Option<bool>,
195
196
sni : Option < String > ,
197
+ #[ serde( rename = "skip-cert-verify" ) ]
196
198
skip_cert_verify : Option < bool > ,
197
199
}
198
200
let params: Param = serde_json:: from_value ( p. opt ) ?;
@@ -209,6 +211,40 @@ impl Clash {
209
211
target_net,
210
212
)
211
213
}
214
+ "http" => {
215
+ #[ derive( Debug , Deserialize ) ]
216
+ struct Param {
217
+ server : String ,
218
+ port : u16 ,
219
+ }
220
+ let params: Param = serde_json:: from_value ( p. opt ) ?;
221
+ with_net (
222
+ Net :: new (
223
+ "http" ,
224
+ json ! ( {
225
+ "server" : format!( "{}:{}" , params. server, params. port) ,
226
+ } ) ,
227
+ ) ,
228
+ target_net,
229
+ )
230
+ }
231
+ "socks5" => {
232
+ #[ derive( Debug , Deserialize ) ]
233
+ struct Param {
234
+ server : String ,
235
+ port : u16 ,
236
+ }
237
+ let params: Param = serde_json:: from_value ( p. opt ) ?;
238
+ with_net (
239
+ Net :: new (
240
+ "socks5" ,
241
+ json ! ( {
242
+ "server" : format!( "{}:{}" , params. server, params. port) ,
243
+ } ) ,
244
+ ) ,
245
+ target_net,
246
+ )
247
+ }
212
248
_ => return Err ( anyhow ! ( "Unsupported proxy type: {}" , p. proxy_type) ) ,
213
249
} ;
214
250
Ok ( net)
0 commit comments