in src/worker.rs [139:186]
fn connect(
&mut self,
addr: SocketAddr,
ssl_session: Option<SslSession>,
) -> Result<Token, std::io::Error> {
CONNECT.increment();
let stream = TcpStream::connect(addr)?;
let mut session = if let Some(tls) = &self.tls {
if let Ok(mut connect_config) = tls.configure() {
if let Some(ssl_session) = ssl_session {
unsafe {
if connect_config.set_session(&ssl_session).is_err() {
return Err(Error::new(ErrorKind::Other, "tls session cache failure"));
}
}
}
match connect_config.connect("localhost", stream) {
Ok(stream) => {
if stream.ssl().session_reused() {
SESSION_REUSE.increment();
}
Session::tls_with_capacity(stream, 1024, 512 * 1024)
}
Err(HandshakeError::WouldBlock(stream)) => {
if stream.ssl().session_reused() {
SESSION_REUSE.increment();
}
Session::handshaking_with_capacity(stream, 1024, 512 * 1024)
}
Err(_) => {
return Err(Error::new(ErrorKind::Other, "tls failure"));
}
}
} else {
return Err(Error::new(ErrorKind::Other, "tls connect config failure"));
}
} else {
Session::plain_with_capacity(stream, 1024, 512 * 1024)
};
let entry = self.sessions.vacant_entry();
let token = Token(entry.key());
session.set_token(token);
session.set_timestamp(Instant::now());
entry.insert(session);
Ok(token)
}