diff --git a/src/lib.rs b/src/lib.rs index af1fccf..74bd569 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,7 +14,7 @@ pub mod server; use common::Stream; use futures::{Async, Future, Poll}; -use rustls::{ClientConfig, ClientSession, ServerConfig, ServerSession}; +use rustls::{ClientConfig, ClientSession, ServerConfig, ServerSession, Session}; use std::sync::Arc; use std::{io, mem}; use tokio_io::{try_nb, AsyncRead, AsyncWrite}; @@ -64,6 +64,7 @@ impl TlsState { #[derive(Clone)] pub struct TlsConnector { inner: Arc, + buffer_limit: usize, #[cfg(feature = "early-data")] early_data: bool, } @@ -72,12 +73,14 @@ pub struct TlsConnector { #[derive(Clone)] pub struct TlsAcceptor { inner: Arc, + buffer_limit: usize, } impl From> for TlsConnector { fn from(inner: Arc) -> TlsConnector { TlsConnector { inner, + buffer_limit: 0, #[cfg(feature = "early-data")] early_data: false, } @@ -86,7 +89,10 @@ impl From> for TlsConnector { impl From> for TlsAcceptor { fn from(inner: Arc) -> TlsAcceptor { - TlsAcceptor { inner } + TlsAcceptor { + inner, + buffer_limit: 0, + } } } @@ -101,6 +107,11 @@ impl TlsConnector { self } + pub fn set_buffer_limit(mut self, limit: usize) -> TlsConnector { + self.buffer_limit = limit; + self + } + pub fn connect(&self, domain: DNSNameRef, stream: IO) -> Connect where IO: AsyncRead + AsyncWrite, @@ -115,6 +126,7 @@ impl TlsConnector { F: FnOnce(&mut ClientSession), { let mut session = ClientSession::new(&self.inner, domain); + session.set_buffer_limit(self.buffer_limit); f(&mut session); #[cfg(not(feature = "early-data"))] @@ -148,6 +160,11 @@ impl TlsConnector { } impl TlsAcceptor { + pub fn set_buffer_limit(mut self, limit: usize) -> TlsAcceptor { + self.buffer_limit = limit; + self + } + pub fn accept(&self, stream: IO) -> Accept where IO: AsyncRead + AsyncWrite, @@ -162,6 +179,7 @@ impl TlsAcceptor { F: FnOnce(&mut ServerSession), { let mut session = ServerSession::new(&self.inner); + session.set_buffer_limit(self.buffer_limit); f(&mut session); Accept(server::MidHandshake::Handshaking(server::TlsStream {