Skip to content

Commit d285f15

Browse files
finish chunked fixes
1 parent a2afd7c commit d285f15

File tree

1 file changed

+34
-89
lines changed

1 file changed

+34
-89
lines changed

src/chunked.rs

Lines changed: 34 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,9 @@ impl<R: Read> ChunkedDecoder<R> {
5858
}
5959

6060
fn decode_init(buffer: Block<'static>, pos: &Position) -> io::Result<DecodeResult> {
61-
dbg!(pos);
62-
dbg!(std::str::from_utf8(&buffer[pos.start..pos.end]));
63-
6461
use httparse::Status;
6562
match httparse::parse_chunk_size(&buffer[pos.start..pos.end]) {
6663
Ok(Status::Complete((used, chunk_len))) => {
67-
dbg!((used, chunk_len));
6864
let new_pos = Position {
6965
start: pos.start + used,
7066
end: pos.end,
@@ -90,9 +86,6 @@ fn decode_init(buffer: Block<'static>, pos: &Position) -> io::Result<DecodeResul
9086
}
9187

9288
fn decode_chunk_end(buffer: Block<'static>, pos: &Position) -> io::Result<DecodeResult> {
93-
dbg!(pos);
94-
dbg!(std::str::from_utf8(&buffer[pos.start..pos.end]));
95-
9689
if pos.len() < 2 {
9790
return Ok(DecodeResult::None(buffer));
9891
}
@@ -119,20 +112,17 @@ fn decode_trailer(buffer: Block<'static>, pos: &Position) -> io::Result<DecodeRe
119112

120113
// read headers
121114
let mut headers = [httparse::EMPTY_HEADER; 16];
122-
dbg!(pos);
123-
dbg!(std::str::from_utf8(&buffer[pos.start..pos.end]));
124115

125116
match httparse::parse_headers(&buffer[pos.start..pos.end], &mut headers) {
126117
Ok(Status::Complete((used, headers))) => {
127-
dbg!(&headers);
128-
129118
let headers = headers
130119
.iter()
131120
.map(|header| {
132121
// TODO: error propagation
133122
let name = HeaderName::from_str(header.name).unwrap();
134123
let value =
135-
HeaderValue::from_str(std::str::from_utf8(header.value).unwrap()).unwrap();
124+
HeaderValue::from_str(&std::string::String::from_utf8_lossy(header.value))
125+
.unwrap();
136126
(name, value)
137127
})
138128
.collect();
@@ -162,36 +152,24 @@ impl<R: Read + Unpin> ChunkedDecoder<R> {
162152
current: u64,
163153
len: u64,
164154
) -> io::Result<DecodeResult> {
165-
dbg!("poll_read_chunk");
166-
dbg!(pos);
167-
dbg!(std::str::from_utf8(&buffer[pos.start..pos.end]));
168-
dbg!(len);
169-
dbg!(current);
170-
171155
let mut new_pos = pos.clone();
172156
let remaining = (len - current) as usize;
173-
let mut to_read = std::cmp::min(remaining, buf.len());
157+
let to_read = std::cmp::min(remaining, buf.len());
174158

175159
let mut new_current = current;
176-
let mut start = 0;
160+
161+
// position into buf
162+
let mut read = 0;
177163

178164
// first drain the buffer
179165
if new_pos.len() > 0 {
180166
let to_read_buf = std::cmp::min(to_read, pos.len());
181-
dbg!(to_read_buf);
182-
dbg!(to_read);
183-
dbg!(new_pos);
184-
dbg!(std::str::from_utf8(
185-
&buffer[new_pos.start..new_pos.start + to_read_buf]
186-
));
187167
buf[..to_read_buf].copy_from_slice(&buffer[new_pos.start..new_pos.start + to_read_buf]);
188168

189-
// to_read -= to_read_buf;
190169
new_pos.start += to_read_buf;
191170
new_current += to_read_buf as u64;
192-
// start += to_read_buf;
171+
read += to_read_buf;
193172

194-
let read = new_current as usize - current as usize;
195173
let new_state = if new_current == len {
196174
State::ChunkEnd
197175
} else {
@@ -207,55 +185,35 @@ impl<R: Read + Unpin> ChunkedDecoder<R> {
207185
});
208186
}
209187

210-
while to_read > 0 {
211-
dbg!("poll_read_chunk_loop");
212-
213-
dbg!(to_read);
214-
dbg!(start);
215-
dbg!(new_pos);
216-
dbg!(new_current);
217-
218-
dbg!("reading");
219-
let n = match Pin::new(&mut self.inner).poll_read(cx, &mut buf[start..start + to_read])
220-
{
221-
Poll::Ready(val) => val?,
222-
Poll::Pending => {
223-
dbg!("pending");
224-
return Ok(DecodeResult::Some {
225-
read: 0,
226-
new_state: State::Chunk(new_current, len),
227-
new_pos,
228-
buffer,
229-
pending: true,
230-
});
231-
}
232-
};
188+
match Pin::new(&mut self.inner).poll_read(cx, &mut buf[read..read + to_read]) {
189+
Poll::Ready(val) => {
190+
let n = val?;
191+
new_current += n as u64;
192+
read += n;
193+
let new_state = if new_current == len {
194+
State::ChunkEnd
195+
} else {
196+
State::Chunk(new_current, len)
197+
};
233198

234-
dbg!(n);
235-
to_read -= n;
236-
new_current += n as u64;
237-
start += n;
199+
Ok(DecodeResult::Some {
200+
read,
201+
new_state,
202+
new_pos,
203+
buffer,
204+
pending: false,
205+
})
206+
}
207+
Poll::Pending => {
208+
return Ok(DecodeResult::Some {
209+
read: 0,
210+
new_state: State::Chunk(new_current, len),
211+
new_pos,
212+
buffer,
213+
pending: true,
214+
});
215+
}
238216
}
239-
240-
let read = new_current as usize - current as usize;
241-
let new_state = if new_current == len {
242-
State::ChunkEnd
243-
} else {
244-
State::Chunk(new_current, len)
245-
};
246-
dbg!(read);
247-
dbg!(&new_state);
248-
dbg!(new_current);
249-
dbg!(len);
250-
dbg!(current);
251-
252-
Ok(DecodeResult::Some {
253-
read,
254-
new_state,
255-
new_pos,
256-
buffer,
257-
pending: false,
258-
})
259217
}
260218

261219
fn poll_read_inner(
@@ -265,8 +223,6 @@ impl<R: Read + Unpin> ChunkedDecoder<R> {
265223
pos: &Position,
266224
buf: &mut [u8],
267225
) -> io::Result<DecodeResult> {
268-
dbg!(&self.state);
269-
270226
match self.state {
271227
State::Init => {
272228
// Initial read
@@ -283,12 +239,10 @@ impl<R: Read + Unpin> ChunkedDecoder<R> {
283239
}
284240
State::TrailerDone(ref mut headers) => {
285241
let headers = std::mem::replace(headers, Vec::new());
286-
dbg!("headers send");
287242
let mut fut = Box::pin(self.trailer_sender.send(headers));
288243
match Pin::new(&mut fut).poll(cx) {
289244
Poll::Ready(_) => {}
290245
Poll::Pending => {
291-
dbg!("pending send");
292246
return Ok(DecodeResult::Some {
293247
read: 0,
294248
new_state: self.state.clone(),
@@ -325,7 +279,6 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
325279
cx: &mut Context<'_>,
326280
buf: &mut [u8],
327281
) -> Poll<io::Result<usize>> {
328-
dbg!("poll_read");
329282
let this = &mut *self;
330283

331284
let mut n = std::mem::replace(&mut this.current, Position::default());
@@ -336,7 +289,6 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
336289
true
337290
};
338291

339-
dbg!(n);
340292
let mut buffer = if n.len() > 0 && this.initial_decode {
341293
match this.poll_read_inner(cx, buffer, &n, buf)? {
342294
DecodeResult::Some {
@@ -372,10 +324,8 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
372324
};
373325

374326
loop {
375-
dbg!("loop");
376327
if n.len() >= buffer.capacity() {
377328
if buffer.capacity() + 1024 <= MAX_CAPACITY {
378-
dbg!("resizing buffer");
379329
buffer.realloc(buffer.capacity() + 1024);
380330
} else {
381331
std::mem::replace(&mut this.buffer, buffer);
@@ -388,7 +338,6 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
388338
}
389339

390340
if needs_read {
391-
dbg!("reading");
392341
let bytes_read = match Pin::new(&mut this.inner).poll_read(cx, &mut buffer[n.end..])
393342
{
394343
Poll::Ready(result) => result?,
@@ -402,7 +351,6 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
402351
return Poll::Pending;
403352
}
404353
};
405-
dbg!(bytes_read);
406354
n.end += bytes_read;
407355
}
408356
match this.poll_read_inner(cx, buffer, &n, buf)? {
@@ -413,7 +361,6 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
413361
new_state,
414362
pending,
415363
} => {
416-
dbg!("some");
417364
// current buffer might now contain more data inside, so we need to attempt
418365
// to decode it next time
419366
this.initial_decode = true;
@@ -436,8 +383,6 @@ impl<R: Read + Unpin> Read for ChunkedDecoder<R> {
436383
continue;
437384
}
438385
DecodeResult::None(buf) => {
439-
dbg!("none");
440-
441386
buffer = buf;
442387

443388
if this.buffer.is_empty() || n.is_zero() {

0 commit comments

Comments
 (0)