summaryrefslogtreecommitdiffstats
path: root/melib
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2020-09-12 21:33:25 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2020-09-12 21:33:25 +0300
commit7c6e3658c752c99382bcf0268719e8c2d3f49979 (patch)
treebb11b399e2a541535ad458e6a00efb8c2dd2aebb /melib
parent5079881a4c3dfd39b084f6a78b42899a55cde789 (diff)
melib/imap: try NOOPing in connect()
Diffstat (limited to 'melib')
-rw-r--r--melib/src/backends/imap/connection.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/melib/src/backends/imap/connection.rs b/melib/src/backends/imap/connection.rs
index 877347dc..64c5364f 100644
--- a/melib/src/backends/imap/connection.rs
+++ b/melib/src/backends/imap/connection.rs
@@ -526,8 +526,23 @@ impl ImapConnection {
self.stream = Err(err);
}
}
- if self.stream.is_ok() {
- return Ok(());
+ if debug!(self.stream.is_ok()) {
+ let mut ret = String::new();
+ if let Err(err) = try_await(async {
+ self.send_command(b"NOOP").await?;
+ self.read_response(&mut ret, RequiredResponses::empty())
+ .await
+ })
+ .await
+ {
+ debug!("connect(): connection is probably dead: {:?}", &err);
+ } else {
+ debug!(
+ "connect(): connection is probably alive, NOOP returned {:?}",
+ &ret
+ );
+ return Ok(());
+ }
}
let new_stream = debug!(ImapStream::new_connection(&self.server_conf).await);
if let Err(err) = new_stream.as_ref() {
@@ -714,6 +729,7 @@ impl ImapConnection {
}
Err(err)
} else {
+ *self.uid_store.is_online.lock().unwrap() = (Instant::now(), Ok(()));
Ok(())
}
}