melib/nntp: fix an ancient FIXME

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
pull/489/head
Manos Pitsidianakis 1 month ago
parent 571ae390b8
commit f78884ce02
No known key found for this signature in database
GPG Key ID: 7729C7707F7E09D0

@ -154,32 +154,41 @@ impl NntpStream {
}
{
// [ref:FIXME]: This is blocking
let socket = ret.stream.into_inner()?;
let mut conn_result = connector.connect(path, socket);
if let Err(native_tls::HandshakeError::WouldBlock(midhandshake_stream)) =
conn_result
{
let mut midhandshake_stream = Some(midhandshake_stream);
loop {
match midhandshake_stream.take().unwrap().handshake() {
Ok(r) => {
conn_result = Ok(r);
break;
}
Err(native_tls::HandshakeError::WouldBlock(stream)) => {
midhandshake_stream = Some(stream);
}
p => {
p.chain_err_kind(ErrorKind::Network(
NetworkErrorKind::InvalidTLSConnection,
))?;
let path = Arc::new(path.to_string());
let conn = smol::unblock({
let socket = ret.stream.into_inner()?;
let path = Arc::clone(&path);
move || {
let conn_result = connector.connect(&path, socket);
if let Err(native_tls::HandshakeError::WouldBlock(midhandshake_stream)) =
conn_result
{
let mut midhandshake_stream = Some(midhandshake_stream);
loop {
match midhandshake_stream.take().unwrap().handshake() {
Ok(r) => {
return Ok(r);
}
Err(native_tls::HandshakeError::WouldBlock(stream)) => {
midhandshake_stream = Some(stream);
}
Err(err) => {
return Err(Error::from(err).set_kind(ErrorKind::Network(
NetworkErrorKind::InvalidTLSConnection,
)));
}
}
}
}
conn_result.chain_err_kind(ErrorKind::Network(
NetworkErrorKind::InvalidTLSConnection,
))
}
}
})
.await
.chain_err_summary(|| format!("Could not initiate TLS negotiation to {}.", path))?;
ret.stream = AsyncWrapper::new({
let conn = Connection::new_tls(conn_result?);
let conn = Connection::new_tls(conn);
#[cfg(feature = "nntp-trace")]
{
conn.trace(true).with_id("nntp")

Loading…
Cancel
Save