mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-28 01:52:57 +01:00
flush encoder
This commit is contained in:
parent
fb2c78d9fc
commit
77ba1de305
@ -569,6 +569,7 @@ impl ContentEncoder {
|
|||||||
match encoder.finish() {
|
match encoder.finish() {
|
||||||
Ok(mut writer) => {
|
Ok(mut writer) => {
|
||||||
writer.encode_eof();
|
writer.encode_eof();
|
||||||
|
*self = ContentEncoder::Identity(writer);
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
Err(err) => Err(err),
|
Err(err) => Err(err),
|
||||||
@ -578,6 +579,7 @@ impl ContentEncoder {
|
|||||||
match encoder.finish() {
|
match encoder.finish() {
|
||||||
Ok(mut writer) => {
|
Ok(mut writer) => {
|
||||||
writer.encode_eof();
|
writer.encode_eof();
|
||||||
|
*self = ContentEncoder::Identity(writer);
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
Err(err) => Err(err),
|
Err(err) => Err(err),
|
||||||
@ -587,6 +589,7 @@ impl ContentEncoder {
|
|||||||
match encoder.finish() {
|
match encoder.finish() {
|
||||||
Ok(mut writer) => {
|
Ok(mut writer) => {
|
||||||
writer.encode_eof();
|
writer.encode_eof();
|
||||||
|
*self = ContentEncoder::Identity(writer);
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
Err(err) => Err(err),
|
Err(err) => Err(err),
|
||||||
@ -594,6 +597,7 @@ impl ContentEncoder {
|
|||||||
},
|
},
|
||||||
ContentEncoder::Identity(mut writer) => {
|
ContentEncoder::Identity(mut writer) => {
|
||||||
writer.encode_eof();
|
writer.encode_eof();
|
||||||
|
*self = ContentEncoder::Identity(writer);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,6 @@ impl<T: AsyncWrite> H1Writer<T> {
|
|||||||
match self.stream.write(buffer.as_ref()) {
|
match self.stream.write(buffer.as_ref()) {
|
||||||
Ok(n) => {
|
Ok(n) => {
|
||||||
buffer.split_to(n);
|
buffer.split_to(n);
|
||||||
self.written += n as u64;
|
|
||||||
},
|
},
|
||||||
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
|
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
|
||||||
if buffer.len() > MAX_WRITE_BUFFER_SIZE {
|
if buffer.len() > MAX_WRITE_BUFFER_SIZE {
|
||||||
@ -115,11 +114,7 @@ impl<T: AsyncWrite> Writer for H1Writer<T> {
|
|||||||
|
|
||||||
#[cfg_attr(feature = "cargo-clippy", allow(cast_lossless))]
|
#[cfg_attr(feature = "cargo-clippy", allow(cast_lossless))]
|
||||||
fn written(&self) -> u64 {
|
fn written(&self) -> u64 {
|
||||||
if self.written > self.headers_size as u64 {
|
self.written
|
||||||
self.written - self.headers_size as u64
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start(&mut self, req: &mut HttpMessage, msg: &mut HttpResponse)
|
fn start(&mut self, req: &mut HttpMessage, msg: &mut HttpResponse)
|
||||||
@ -191,6 +186,7 @@ impl<T: AsyncWrite> Writer for H1Writer<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Body::Binary(bytes) = body {
|
if let Body::Binary(bytes) = body {
|
||||||
|
self.written = bytes.len() as u64;
|
||||||
self.encoder.write(bytes.as_ref())?;
|
self.encoder.write(bytes.as_ref())?;
|
||||||
} else {
|
} else {
|
||||||
msg.replace_body(body);
|
msg.replace_body(body);
|
||||||
@ -199,6 +195,7 @@ impl<T: AsyncWrite> Writer for H1Writer<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn write(&mut self, payload: &[u8]) -> Result<WriterState, io::Error> {
|
fn write(&mut self, payload: &[u8]) -> Result<WriterState, io::Error> {
|
||||||
|
self.written += payload.len() as u64;
|
||||||
if !self.flags.contains(Flags::DISCONNECTED) {
|
if !self.flags.contains(Flags::DISCONNECTED) {
|
||||||
if self.flags.contains(Flags::STARTED) {
|
if self.flags.contains(Flags::STARTED) {
|
||||||
// TODO: add warning, write after EOF
|
// TODO: add warning, write after EOF
|
||||||
|
@ -167,6 +167,7 @@ impl Writer for H2Writer {
|
|||||||
|
|
||||||
if let Body::Binary(bytes) = body {
|
if let Body::Binary(bytes) = body {
|
||||||
self.flags.insert(Flags::EOF);
|
self.flags.insert(Flags::EOF);
|
||||||
|
self.written = bytes.len() as u64;
|
||||||
self.encoder.write(bytes.as_ref())?;
|
self.encoder.write(bytes.as_ref())?;
|
||||||
if let Some(ref mut stream) = self.stream {
|
if let Some(ref mut stream) = self.stream {
|
||||||
stream.reserve_capacity(cmp::min(self.encoder.len(), CHUNK_SIZE));
|
stream.reserve_capacity(cmp::min(self.encoder.len(), CHUNK_SIZE));
|
||||||
@ -179,6 +180,8 @@ impl Writer for H2Writer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn write(&mut self, payload: &[u8]) -> Result<WriterState, io::Error> {
|
fn write(&mut self, payload: &[u8]) -> Result<WriterState, io::Error> {
|
||||||
|
self.written = payload.len() as u64;
|
||||||
|
|
||||||
if !self.flags.contains(Flags::DISCONNECTED) {
|
if !self.flags.contains(Flags::DISCONNECTED) {
|
||||||
if self.flags.contains(Flags::STARTED) {
|
if self.flags.contains(Flags::STARTED) {
|
||||||
// TODO: add warning, write after EOF
|
// TODO: add warning, write after EOF
|
||||||
|
@ -677,6 +677,7 @@ impl<S, H> ProcessResponse<S, H> {
|
|||||||
// response is completed
|
// response is completed
|
||||||
match self.iostate {
|
match self.iostate {
|
||||||
IOState::Done => {
|
IOState::Done => {
|
||||||
|
io.write_eof();
|
||||||
self.resp.set_response_size(io.written());
|
self.resp.set_response_size(io.written());
|
||||||
Ok(FinishingMiddlewares::init(info, self.resp))
|
Ok(FinishingMiddlewares::init(info, self.resp))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user