Skip to content

Commit

Permalink
Merge pull request #1097 from sozu-proxy/devel/edemolis/fix/tls-flush
Browse files Browse the repository at this point in the history
Expose internal rustls buffers to ensure they are flushed
  • Loading branch information
FlorentinDUBOIS authored Apr 3, 2024
2 parents c17d173 + d83f399 commit f306a79
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 13 deletions.
6 changes: 3 additions & 3 deletions lib/src/protocol/kawa_h1/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,9 @@ impl HttpContext {
.map(ToOwned::to_owned);
}

if self.method == Some(Method::Get) && request.body_size == kawa::BodySize::Empty {
request.parsing_phase = kawa::ParsingPhase::Terminated;
}
// if self.method == Some(Method::Get) && request.body_size == kawa::BodySize::Empty {
// request.parsing_phase = kawa::ParsingPhase::Terminated;
// }

let public_ip = self.public_address.ip();
let public_port = self.public_address.port();
Expand Down
8 changes: 5 additions & 3 deletions lib/src/protocol/kawa_h1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ impl<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> Http<Front, L
self.response_stream.prepare(&mut kawa::h1::BlockConverter);

let bufs = self.response_stream.as_io_slice();
if bufs.is_empty() {
if bufs.is_empty() && !self.frontend_socket.socket_wants_write() {
self.frontend_readiness.interest.remove(Ready::WRITABLE);
return StateResult::Continue;
}
Expand All @@ -452,8 +452,6 @@ impl<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> Http<Front, L
count!("bytes_out", size as i64);
metrics.bout += size;
self.backend_readiness.interest.insert(Ready::READABLE);
} else {
self.frontend_readiness.event.remove(Ready::WRITABLE);
}

match socket_state {
Expand All @@ -475,6 +473,10 @@ impl<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> Http<Front, L
SocketResult::Continue => {}
}

if self.frontend_socket.socket_wants_write() {
return StateResult::Continue;
}

if self.response_stream.is_terminated() && self.response_stream.is_completed() {
self.log_request_success(metrics);
metrics.reset();
Expand Down
17 changes: 10 additions & 7 deletions lib/src/socket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,9 @@ pub enum TransportProtocol {
pub trait SocketHandler {
fn socket_read(&mut self, buf: &mut [u8]) -> (usize, SocketResult);
fn socket_write(&mut self, buf: &[u8]) -> (usize, SocketResult);
fn socket_write_vectored(&mut self, _buf: &[std::io::IoSlice]) -> (usize, SocketResult) {
unimplemented!()
fn socket_write_vectored(&mut self, _buf: &[std::io::IoSlice]) -> (usize, SocketResult);
fn socket_wants_write(&self) -> bool {
false
}
fn socket_ref(&self) -> &TcpStream;
fn socket_mut(&mut self) -> &mut TcpStream;
Expand Down Expand Up @@ -183,7 +184,7 @@ impl SocketHandler for FrontRustls {
counter += 1;
if counter > MAX_LOOP_ITERATIONS {
error!("MAX_LOOP_ITERATION reached in FrontRustls::socket_read");
incr!("socket.read.infinite_loop.error");
incr!("rustls.read.infinite_loop.error");
}

if size == buf.len() {
Expand Down Expand Up @@ -232,7 +233,6 @@ impl SocketHandler for FrontRustls {
Ok(0) => break,
Ok(sz) => {
size += sz;
can_read = true;
}
Err(e) => match e.kind() {
ErrorKind::WouldBlock => {
Expand Down Expand Up @@ -276,7 +276,7 @@ impl SocketHandler for FrontRustls {
counter += 1;
if counter > MAX_LOOP_ITERATIONS {
error!("MAX_LOOP_ITERATION reached in FrontRustls::socket_write");
incr!("socket.write.infinite_loop.error");
incr!("rustls.write.infinite_loop.error");
}
if buffered_size == buf.len() {
break;
Expand Down Expand Up @@ -392,11 +392,10 @@ impl SocketHandler for FrontRustls {
counter += 1;
if counter > MAX_LOOP_ITERATIONS {
error!("MAX_LOOP_ITERATION reached in FrontRustls::socket_write_vectored");
incr!("socket.write.infinite_loop.error");
incr!("rustls.write.infinite_loop.error");
}
match self.session.write_tls(&mut self.stream) {
Ok(0) => {
//can_write = false;
break;
}
Ok(_sz) => {}
Expand Down Expand Up @@ -433,6 +432,10 @@ impl SocketHandler for FrontRustls {
}
}

fn socket_wants_write(&self) -> bool {
self.session.wants_write()
}

fn socket_ref(&self) -> &TcpStream {
&self.stream
}
Expand Down

0 comments on commit f306a79

Please sign in to comment.