@@ -8,15 +8,13 @@ use tokio::io::BufWriter;
88
99use super :: capabilities:: Capabilities ;
1010use crate :: context:: Context ;
11- use crate :: log:: { info, warn} ;
11+ use crate :: log:: { LoggingStream , info, warn} ;
1212use crate :: login_param:: { ConnectionCandidate , ConnectionSecurity } ;
1313use crate :: net:: dns:: { lookup_host_with_cache, update_connect_timestamp} ;
1414use crate :: net:: proxy:: ProxyConfig ;
1515use crate :: net:: session:: SessionStream ;
1616use 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} ;
2018use 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