Skip to content

Commit aa31c7f

Browse files
cleanup
1 parent 3de29d1 commit aa31c7f

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

src/chunked.rs

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ pub struct ChunkedDecoder<R: BufRead> {
3232
/// Current state.
3333
state: State,
3434
/// Trailer channel sender.
35-
trailer_sender: Sender<(HeaderName, HeaderValue)>,
35+
trailer_sender: Sender<Vec<(HeaderName, HeaderValue)>>,
3636
/// Trailer channel receiver.
37-
trailer_receiver: Receiver<(HeaderName, HeaderValue)>,
37+
trailer_receiver: Receiver<Vec<(HeaderName, HeaderValue)>>,
3838
}
3939

4040
impl<R: BufRead> ChunkedDecoder<R> {
@@ -52,7 +52,7 @@ impl<R: BufRead> ChunkedDecoder<R> {
5252
}
5353
}
5454

55-
pub fn trailer(&self) -> Receiver<(HeaderName, HeaderValue)> {
55+
pub fn trailer(&self) -> Receiver<Vec<(HeaderName, HeaderValue)>> {
5656
self.trailer_receiver.clone()
5757
}
5858
}
@@ -124,6 +124,8 @@ fn decode_trailer(buffer: Block<'static>, pos: &Position) -> io::Result<DecodeRe
124124

125125
match httparse::parse_headers(&buffer[pos.start..pos.end], &mut headers) {
126126
Ok(Status::Complete((used, headers))) => {
127+
dbg!(&headers);
128+
127129
let headers = headers
128130
.iter()
129131
.map(|header| {
@@ -169,18 +171,26 @@ impl<R: BufRead + Unpin + Send + 'static> ChunkedDecoder<R> {
169171
let remaining = (len - current) as usize;
170172
let mut to_read = std::cmp::min(remaining, buf.len());
171173
let mut new_current = current;
174+
let mut start = 0;
172175

173176
// first drain the buffer
174177
if pos.len() > 0 {
175178
let to_read_buf = std::cmp::min(to_read, pos.len());
179+
dbg!(std::str::from_utf8(&buffer[pos.start..pos.start + to_read_buf]).unwrap());
176180
buf[..to_read_buf].copy_from_slice(&buffer[pos.start..pos.start + to_read_buf]);
177181
to_read -= to_read_buf;
178182
new_pos.start += to_read_buf;
179183
new_current += to_read_buf as u64;
184+
start += to_read_buf;
180185
}
181186

182187
if to_read > 0 {
183-
let n = match Pin::new(&mut self.inner).poll_read(cx, &mut buf[..to_read]) {
188+
dbg!("reading");
189+
dbg!(to_read);
190+
dbg!(start);
191+
let n = match Pin::new(&mut self.inner)
192+
.poll_read(cx, &mut buf[start..start + to_read])
193+
{
184194
Poll::Ready(val) => val?,
185195
Poll::Pending => {
186196
return Ok(DecodeResult::Some {
@@ -232,21 +242,22 @@ impl<R: BufRead + Unpin + Send + 'static> ChunkedDecoder<R> {
232242
}
233243
State::TrailerDone(ref mut headers) => {
234244
let headers = std::mem::replace(headers, Vec::new());
235-
for (name, value) in headers.into_iter() {
236-
let mut fut = Box::pin(self.trailer_sender.send((name, value)));
237-
match Pin::new(&mut fut).poll(cx) {
238-
Poll::Ready(_) => {}
239-
Poll::Pending => {
240-
return Ok(DecodeResult::Some {
241-
read: 0,
242-
new_state: self.state.clone(),
243-
new_pos: pos.clone(),
244-
buffer,
245-
pending: true,
246-
});
247-
}
245+
dbg!("headers send");
246+
let mut fut = Box::pin(self.trailer_sender.send(headers));
247+
match Pin::new(&mut fut).poll(cx) {
248+
Poll::Ready(_) => {}
249+
Poll::Pending => {
250+
dbg!("pending send");
251+
return Ok(DecodeResult::Some {
252+
read: 0,
253+
new_state: self.state.clone(),
254+
new_pos: pos.clone(),
255+
buffer,
256+
pending: true,
257+
});
248258
}
249259
}
260+
250261
Ok(DecodeResult::Some {
251262
read: 0,
252263
new_state: State::Done,
@@ -520,10 +531,10 @@ mod tests {
520531
let trailer = decoder.trailer().recv().await;
521532
assert_eq!(
522533
trailer,
523-
Some((
534+
Some(vec![(
524535
"Expires".parse().unwrap(),
525536
"Wed, 21 Oct 2015 07:28:00 GMT".parse().unwrap(),
526-
))
537+
)])
527538
);
528539
});
529540
}

0 commit comments

Comments
 (0)