fix(http): fix encoding when buffer is full
This commit is contained in:
@@ -803,6 +803,8 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_conn_body_write_length() {
|
fn test_conn_body_write_length() {
|
||||||
|
extern crate pretty_env_logger;
|
||||||
|
let _ = pretty_env_logger::init();
|
||||||
let _: Result<(), ()> = future::lazy(|| {
|
let _: Result<(), ()> = future::lazy(|| {
|
||||||
let io = AsyncIo::new_buf(vec![], 0);
|
let io = AsyncIo::new_buf(vec![], 0);
|
||||||
let mut conn = Conn::<_, http::Chunk, ServerTransaction>::new(io, Default::default());
|
let mut conn = Conn::<_, http::Chunk, ServerTransaction>::new(io, Default::default());
|
||||||
|
|||||||
@@ -54,9 +54,12 @@ impl Encoder {
|
|||||||
chunked.encode(w, msg)
|
chunked.encode(w, msg)
|
||||||
},
|
},
|
||||||
Kind::Length(ref mut remaining) => {
|
Kind::Length(ref mut remaining) => {
|
||||||
|
if msg.is_empty() {
|
||||||
|
return Ok(0);
|
||||||
|
}
|
||||||
let n = {
|
let n = {
|
||||||
let max = cmp::min(*remaining as usize, msg.len());
|
let max = cmp::min(*remaining as usize, msg.len());
|
||||||
trace!("sized write, len = {}", max);
|
trace!("sized write, len = {}, remaining = {}", max, remaining);
|
||||||
let slice = &msg[..max];
|
let slice = &msg[..max];
|
||||||
|
|
||||||
try!(w.write_atomic(&[slice]))
|
try!(w.write_atomic(&[slice]))
|
||||||
|
|||||||
@@ -130,7 +130,12 @@ impl<T: AsyncRead + AsyncWrite> Buffered<T> {
|
|||||||
|
|
||||||
impl<T: Write> Write for Buffered<T> {
|
impl<T: Write> Write for Buffered<T> {
|
||||||
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
|
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
|
||||||
Ok(self.write_buf.buffer(data))
|
let n = self.write_buf.buffer(data);
|
||||||
|
if n == 0 {
|
||||||
|
Err(io::Error::from(io::ErrorKind::WouldBlock))
|
||||||
|
} else {
|
||||||
|
Ok(n)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flush(&mut self) -> io::Result<()> {
|
fn flush(&mut self) -> io::Result<()> {
|
||||||
|
|||||||
Reference in New Issue
Block a user