@@ -147,48 +147,51 @@ impl PProxy {
147
147
148
148
loop {
149
149
let mut buf = [ 0u8 ; 30000 ] ;
150
- match stream. read ( & mut buf) . await {
151
- Err ( _) => break ,
152
- Ok ( 0 ) => break ,
153
- Ok ( n) => {
154
- response. extend_from_slice ( & buf[ ..n] ) ;
155
-
156
- if full_length. not_parsed ( ) {
157
- let mut headers = [ httparse:: EMPTY_HEADER ; 1024 ] ;
158
- let mut resp_checker = httparse:: Response :: new ( & mut headers) ;
159
- let res = resp_checker. parse ( & response) ?;
160
- if res. is_complete ( ) {
161
- let content_length =
162
- resp_checker. headers . iter ( ) . find_map ( |h| {
163
- if h. name . to_lowercase ( ) != "content-length" {
164
- return None ;
165
- }
166
- let Ok ( value) = std:: str:: from_utf8 ( h. value ) else {
167
- return None ;
168
- } ;
169
- value. parse :: < usize > ( ) . ok ( )
170
- } ) ;
171
-
172
- match content_length {
173
- Some ( content_length) => {
174
- let header_length = res. unwrap ( ) ;
175
- full_length =
176
- FullLength :: Parsed ( header_length + content_length)
177
- }
178
- None => {
179
- full_length = FullLength :: NotSet ;
180
- }
181
- }
182
- }
183
- }
184
150
185
- if let FullLength :: Parsed ( full_length) = full_length {
186
- if response. len ( ) >= full_length {
187
- break ;
151
+ let Ok ( Ok ( n) ) =
152
+ timeout ( std:: time:: Duration :: from_secs ( 5 ) , stream. read ( & mut buf) ) . await
153
+ else {
154
+ break ;
155
+ } ;
156
+
157
+ if n == 0 {
158
+ break ;
159
+ }
160
+
161
+ response. extend_from_slice ( & buf[ ..n] ) ;
162
+
163
+ if full_length. not_parsed ( ) {
164
+ let mut headers = [ httparse:: EMPTY_HEADER ; 1024 ] ;
165
+ let mut resp_checker = httparse:: Response :: new ( & mut headers) ;
166
+ let res = resp_checker. parse ( & response) ?;
167
+ if res. is_complete ( ) {
168
+ let content_length = resp_checker. headers . iter ( ) . find_map ( |h| {
169
+ if h. name . to_lowercase ( ) != "content-length" {
170
+ return None ;
171
+ }
172
+ let Ok ( value) = std:: str:: from_utf8 ( h. value ) else {
173
+ return None ;
174
+ } ;
175
+ value. parse :: < usize > ( ) . ok ( )
176
+ } ) ;
177
+
178
+ match content_length {
179
+ Some ( content_length) => {
180
+ let header_length = res. unwrap ( ) ;
181
+ full_length = FullLength :: Parsed ( header_length + content_length)
182
+ }
183
+ None => {
184
+ full_length = FullLength :: NotSet ;
188
185
}
189
186
}
190
187
}
191
188
}
189
+
190
+ if let FullLength :: Parsed ( full_length) = full_length {
191
+ if response. len ( ) >= full_length {
192
+ break ;
193
+ }
194
+ }
192
195
}
193
196
194
197
if response. is_empty ( ) {
0 commit comments