@@ -8,15 +8,13 @@ use tokio::io::BufWriter;
8
8
9
9
use super :: capabilities:: Capabilities ;
10
10
use crate :: context:: Context ;
11
- use crate :: log:: { info, warn} ;
11
+ use crate :: log:: { LoggingStream , info, warn} ;
12
12
use crate :: login_param:: { ConnectionCandidate , ConnectionSecurity } ;
13
13
use crate :: net:: dns:: { lookup_host_with_cache, update_connect_timestamp} ;
14
14
use crate :: net:: proxy:: ProxyConfig ;
15
15
use crate :: net:: session:: SessionStream ;
16
16
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} ;
20
18
use crate :: tools:: time;
21
19
22
20
#[ derive( Debug ) ]
@@ -126,12 +124,12 @@ impl Client {
126
124
) ;
127
125
let res = match security {
128
126
ConnectionSecurity :: Tls => {
129
- Client :: connect_secure ( resolved_addr, host, strict_tls) . await
127
+ Client :: connect_secure ( context , resolved_addr, host, strict_tls) . await
130
128
}
131
129
ConnectionSecurity :: Starttls => {
132
- Client :: connect_starttls ( resolved_addr, host, strict_tls) . await
130
+ Client :: connect_starttls ( context , resolved_addr, host, strict_tls) . await
133
131
}
134
- ConnectionSecurity :: Plain => Client :: connect_insecure ( resolved_addr) . await ,
132
+ ConnectionSecurity :: Plain => Client :: connect_insecure ( context , resolved_addr) . await ,
135
133
} ;
136
134
match res {
137
135
Ok ( client) => {
@@ -202,8 +200,17 @@ impl Client {
202
200
}
203
201
}
204
202
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 ( tcp_stream, account_id, events) ;
213
+ let tls_stream = wrap_tls ( strict_tls, hostname, alpn ( addr. port ( ) ) , logging_stream) . await ?;
207
214
let buffered_stream = BufWriter :: new ( tls_stream) ;
208
215
let session_stream: Box < dyn SessionStream > = Box :: new ( buffered_stream) ;
209
216
let mut client = Client :: new ( session_stream) ;
@@ -214,9 +221,12 @@ impl Client {
214
221
Ok ( client)
215
222
}
216
223
217
- async fn connect_insecure ( addr : SocketAddr ) -> Result < Self > {
224
+ async fn connect_insecure ( context : & Context , addr : SocketAddr ) -> Result < Self > {
218
225
let tcp_stream = connect_tcp_inner ( addr) . await ?;
219
- let buffered_stream = BufWriter :: new ( tcp_stream) ;
226
+ let account_id = context. get_id ( ) ;
227
+ let events = context. events . clone ( ) ;
228
+ let logging_stream = LoggingStream :: new ( tcp_stream, account_id, events) ;
229
+ let buffered_stream = BufWriter :: new ( logging_stream) ;
220
230
let session_stream: Box < dyn SessionStream > = Box :: new ( buffered_stream) ;
221
231
let mut client = Client :: new ( session_stream) ;
222
232
let _greeting = client
@@ -226,9 +236,18 @@ impl Client {
226
236
Ok ( client)
227
237
}
228
238
229
- async fn connect_starttls ( addr : SocketAddr , host : & str , strict_tls : bool ) -> Result < Self > {
239
+ async fn connect_starttls (
240
+ context : & Context ,
241
+ addr : SocketAddr ,
242
+ host : & str ,
243
+ strict_tls : bool ,
244
+ ) -> Result < Self > {
230
245
let tcp_stream = connect_tcp_inner ( addr) . await ?;
231
246
247
+ let account_id = context. get_id ( ) ;
248
+ let events = context. events . clone ( ) ;
249
+ let tcp_stream = LoggingStream :: new ( tcp_stream, account_id, events) ;
250
+
232
251
// Run STARTTLS command and convert the client back into a stream.
233
252
let buffered_tcp_stream = BufWriter :: new ( tcp_stream) ;
234
253
let mut client = async_imap:: Client :: new ( buffered_tcp_stream) ;
@@ -246,7 +265,6 @@ impl Client {
246
265
let tls_stream = wrap_tls ( strict_tls, host, & [ ] , tcp_stream)
247
266
. await
248
267
. context ( "STARTTLS upgrade failed" ) ?;
249
-
250
268
let buffered_stream = BufWriter :: new ( tls_stream) ;
251
269
let session_stream: Box < dyn SessionStream > = Box :: new ( buffered_stream) ;
252
270
let client = Client :: new ( session_stream) ;
0 commit comments