@@ -71,7 +71,7 @@ pub enum Socks5 {
71
71
Awaiting ,
72
72
Reading ( u8 , u8 ) ,
73
73
Active ( NetAddr < HostName > ) ,
74
- Rejected ( ServerError ) ,
74
+ Rejected ( ServerError , u8 , u8 ) ,
75
75
Failed ( Error ) ,
76
76
}
77
77
@@ -116,10 +116,10 @@ impl Socks5 {
116
116
}
117
117
if input[ 1 ] != 0x00 {
118
118
let err = ServerError :: from ( input[ 1 ] ) ;
119
- * self = Socks5 :: Rejected ( err) ;
120
- return Err ( Error :: Closed ) ;
119
+ * self = Socks5 :: Rejected ( err, input[ 3 ] , input[ 4 ] ) ;
120
+ } else {
121
+ * self = Socks5 :: Reading ( input[ 3 ] , input[ 4 ] ) ;
121
122
}
122
- * self = Socks5 :: Reading ( input[ 3 ] , input[ 4 ] ) ;
123
123
Ok ( vec ! [ ] )
124
124
}
125
125
Socks5 :: Reading ( code1, code2) => {
@@ -132,7 +132,7 @@ impl Socks5 {
132
132
Ok ( vec ! [ ] )
133
133
}
134
134
Socks5 :: Active ( _) => Err ( Error :: Completed ) ,
135
- Socks5 :: Rejected ( _) | Socks5 :: Failed ( _) => Err ( Error :: Closed ) ,
135
+ Socks5 :: Rejected ( _, _ , _ ) | Socks5 :: Failed ( _) => Err ( Error :: Closed ) ,
136
136
}
137
137
}
138
138
@@ -141,11 +141,13 @@ impl Socks5 {
141
141
Socks5 :: Initial ( _, _) => 0 ,
142
142
Socks5 :: Connected ( _) => 2 ,
143
143
Socks5 :: Awaiting => 5 ,
144
- Socks5 :: Reading ( ty, _) if * ty == IPV4 => 5 ,
145
- Socks5 :: Reading ( ty, _) if * ty == IPV6 => 17 ,
146
- Socks5 :: Reading ( ty, len) if * ty == DOMAIN => * len as usize + 1 ,
147
- Socks5 :: Reading ( _, _) => 1 ,
148
- Socks5 :: Active ( _) | Socks5 :: Rejected ( _) | Socks5 :: Failed ( _) => 0 ,
144
+ Socks5 :: Reading ( ty, _) | Socks5 :: Rejected ( _, ty, _) if * ty == IPV4 => 5 ,
145
+ Socks5 :: Reading ( ty, _) | Socks5 :: Rejected ( _, ty, _) if * ty == IPV6 => 17 ,
146
+ Socks5 :: Reading ( ty, len) | Socks5 :: Rejected ( _, ty, len) if * ty == DOMAIN => {
147
+ * len as usize + 1
148
+ }
149
+ Socks5 :: Reading ( _, _) | Socks5 :: Rejected ( _, _, _) => 1 ,
150
+ Socks5 :: Active ( _) | Socks5 :: Failed ( _) => 0 ,
149
151
}
150
152
}
151
153
}
0 commit comments