Skip to content

Commit 01d9db2

Browse files
committed
feat: use logging stream for IMAP
1 parent 9ad7f78 commit 01d9db2

File tree

1 file changed

+46
-13
lines changed

1 file changed

+46
-13
lines changed

src/imap/client.rs

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ use tokio::io::BufWriter;
88

99
use super::capabilities::Capabilities;
1010
use crate::context::Context;
11-
use crate::log::{info, warn};
11+
use crate::log::{LoggingStream, info, warn};
1212
use crate::login_param::{ConnectionCandidate, ConnectionSecurity};
1313
use crate::net::dns::{lookup_host_with_cache, update_connect_timestamp};
1414
use crate::net::proxy::ProxyConfig;
1515
use crate::net::session::SessionStream;
1616
use crate::net::tls::wrap_tls;
17-
use crate::net::{
18-
connect_tcp_inner, connect_tls_inner, run_connection_attempts, update_connection_history,
19-
};
17+
use crate::net::{connect_tcp_inner, run_connection_attempts, update_connection_history};
2018
use crate::tools::time;
2119

2220
#[derive(Debug)]
@@ -126,12 +124,12 @@ impl Client {
126124
);
127125
let res = match security {
128126
ConnectionSecurity::Tls => {
129-
Client::connect_secure(resolved_addr, host, strict_tls).await
127+
Client::connect_secure(&context, resolved_addr, host, strict_tls).await
130128
}
131129
ConnectionSecurity::Starttls => {
132-
Client::connect_starttls(resolved_addr, host, strict_tls).await
130+
Client::connect_starttls(&context, resolved_addr, host, strict_tls).await
133131
}
134-
ConnectionSecurity::Plain => Client::connect_insecure(resolved_addr).await,
132+
ConnectionSecurity::Plain => Client::connect_insecure(&context, resolved_addr).await,
135133
};
136134
match res {
137135
Ok(client) => {
@@ -202,8 +200,22 @@ impl Client {
202200
}
203201
}
204202

205-
async fn connect_secure(addr: SocketAddr, hostname: &str, strict_tls: bool) -> Result<Self> {
206-
let tls_stream = connect_tls_inner(addr, hostname, strict_tls, alpn(addr.port())).await?;
203+
async fn connect_secure(
204+
context: &Context,
205+
addr: SocketAddr,
206+
hostname: &str,
207+
strict_tls: bool,
208+
) -> Result<Self> {
209+
let tcp_stream = connect_tcp_inner(addr).await?;
210+
let account_id = context.get_id();
211+
let events = context.events.clone();
212+
let logging_stream = LoggingStream::new(
213+
tcp_stream,
214+
format!("TLS IMAP stream {hostname} ({addr})"),
215+
account_id,
216+
events,
217+
);
218+
let tls_stream = wrap_tls(strict_tls, hostname, alpn(addr.port()), logging_stream).await?;
207219
let buffered_stream = BufWriter::new(tls_stream);
208220
let session_stream: Box<dyn SessionStream> = Box::new(buffered_stream);
209221
let mut client = Client::new(session_stream);
@@ -214,9 +226,17 @@ impl Client {
214226
Ok(client)
215227
}
216228

217-
async fn connect_insecure(addr: SocketAddr) -> Result<Self> {
229+
async fn connect_insecure(context: &Context, addr: SocketAddr) -> Result<Self> {
218230
let tcp_stream = connect_tcp_inner(addr).await?;
219-
let buffered_stream = BufWriter::new(tcp_stream);
231+
let account_id = context.get_id();
232+
let events = context.events.clone();
233+
let logging_stream = LoggingStream::new(
234+
tcp_stream,
235+
"some IMAP insecure TLS stream".to_string(),
236+
account_id,
237+
events,
238+
);
239+
let buffered_stream = BufWriter::new(logging_stream);
220240
let session_stream: Box<dyn SessionStream> = Box::new(buffered_stream);
221241
let mut client = Client::new(session_stream);
222242
let _greeting = client
@@ -226,9 +246,23 @@ impl Client {
226246
Ok(client)
227247
}
228248

229-
async fn connect_starttls(addr: SocketAddr, host: &str, strict_tls: bool) -> Result<Self> {
249+
async fn connect_starttls(
250+
context: &Context,
251+
addr: SocketAddr,
252+
host: &str,
253+
strict_tls: bool,
254+
) -> Result<Self> {
230255
let tcp_stream = connect_tcp_inner(addr).await?;
231256

257+
let account_id = context.get_id();
258+
let events = context.events.clone();
259+
let tcp_stream = LoggingStream::new(
260+
tcp_stream,
261+
format!("STARTTLS IMAP stream {host} ({addr})"),
262+
account_id,
263+
events,
264+
);
265+
232266
// Run STARTTLS command and convert the client back into a stream.
233267
let buffered_tcp_stream = BufWriter::new(tcp_stream);
234268
let mut client = async_imap::Client::new(buffered_tcp_stream);
@@ -246,7 +280,6 @@ impl Client {
246280
let tls_stream = wrap_tls(strict_tls, host, &[], tcp_stream)
247281
.await
248282
.context("STARTTLS upgrade failed")?;
249-
250283
let buffered_stream = BufWriter::new(tls_stream);
251284
let session_stream: Box<dyn SessionStream> = Box::new(buffered_stream);
252285
let client = Client::new(session_stream);

0 commit comments

Comments
 (0)