@@ -16,31 +16,31 @@ use crate::protocol::WSOptions;
1616
1717#[ derive( Deserialize , Debug , Serialize , Eq , Clone ) ]
1818pub struct Vless {
19- name : String ,
20- server : String ,
19+ pub name : String ,
20+ pub server : String ,
2121 #[ serde( deserialize_with = "deserialize_u16_or_string" ) ]
22- port : u16 ,
23- uuid : String ,
22+ pub port : u16 ,
23+ pub uuid : String ,
2424 #[ serde( skip_serializing_if = "Option::is_none" ) ]
25- flow : Option < String > ,
25+ pub flow : Option < String > ,
2626 #[ serde( skip_serializing_if = "Option::is_none" ) ]
27- tls : Option < bool > ,
27+ pub tls : Option < bool > ,
2828 #[ serde( skip_serializing_if = "Option::is_none" ) ]
29- udp : Option < bool > ,
29+ pub udp : Option < bool > ,
3030 #[ serde( skip_serializing_if = "Option::is_none" , rename = "skip-cert-verify" ) ]
31- skip_cert_verify : Option < bool > ,
31+ pub skip_cert_verify : Option < bool > ,
3232 #[ serde( skip_serializing_if = "Option::is_none" ) ]
33- fingerprint : Option < String > ,
33+ pub fingerprint : Option < String > ,
3434 #[ serde( skip_serializing_if = "Option::is_none" ) ]
35- servername : Option < String > ,
35+ pub servername : Option < String > ,
3636 #[ serde( skip_serializing_if = "Option::is_none" ) ]
37- network : Option < String > ,
37+ pub network : Option < String > ,
3838 #[ serde( skip_serializing_if = "Option::is_none" , rename = "ws-opts" ) ]
39- ws_opts : Option < WSOptions > ,
39+ pub ws_opts : Option < WSOptions > ,
4040 #[ serde( skip_serializing_if = "Option::is_none" , rename = "reality-opts" ) ]
41- reality_opts : Option < RealtyOptions > ,
41+ pub reality_opts : Option < RealtyOptions > ,
4242 #[ serde( skip_serializing_if = "Option::is_none" , rename = "grpc-opts" ) ]
43- grpc_opts : Option < GrpcOptions > ,
43+ pub grpc_opts : Option < GrpcOptions > ,
4444}
4545
4646impl PartialEq for Vless {
@@ -78,14 +78,16 @@ impl ProxyAdapter for Vless {
7878 }
7979
8080 let url = parts[ 0 ] ;
81+ let mut params_map: HashMap < & str , String > = HashMap :: new ( ) ;
8182 let parts = url. split ( "?" ) . collect :: < Vec < _ > > ( ) ;
8283
83- let params = parts[ 1 ] ;
84- let mut params_map: HashMap < & str , String > = HashMap :: new ( ) ;
85- for param in params. split ( "&" ) {
86- if let Some ( ( key, value) ) = param. split_once ( '=' ) {
87- let value = value. parse :: < String > ( ) . unwrap ( ) ;
88- params_map. insert ( key, value) ;
84+ if parts. len ( ) > 1 {
85+ let params = parts[ 1 ] ;
86+ for param in params. split ( "&" ) {
87+ if let Some ( ( key, value) ) = param. split_once ( '=' ) {
88+ let value = value. parse :: < String > ( ) . unwrap ( ) ;
89+ params_map. insert ( key, value) ;
90+ }
8991 }
9092 }
9193
0 commit comments