@@ -17,25 +17,26 @@ mod server;
17
17
#[ cfg( test) ]
18
18
mod tests;
19
19
20
- use std:: { net:: SocketAddr , sync :: Arc } ;
20
+ use std:: net:: SocketAddr ;
21
21
22
22
pub use client:: RustlsClientNetworking ;
23
+ use futures:: future:: Either ;
23
24
use futures:: TryFutureExt ;
24
25
use futures:: { future:: BoxFuture , FutureExt } ;
25
26
pub use server:: { RustlsListener , RustlsServerNetworking } ;
26
27
use swimos_api:: net:: Scheme ;
28
+ use swimos_remote:: net:: plain:: TokioPlainTextNetworking ;
27
29
use swimos_remote:: net:: {
28
- dns:: { BoxDnsResolver , Resolver } ,
29
- ClientConnections , ConnResult , IoResult , ServerConnections ,
30
+ dns:: BoxDnsResolver , ClientConnections , ConnResult , IoResult , ServerConnections ,
30
31
} ;
31
32
32
33
use crate :: {
33
- config:: { CertFormat , CertificateFile , TlsConfig } ,
34
+ config:: { CertFormat , CertificateFile } ,
34
35
errors:: TlsError ,
35
36
maybe:: MaybeTlsStream ,
36
37
} ;
37
38
38
- use self :: server:: MaybeRustlsListener ;
39
+ use self :: server:: MaybeRustTlsListener ;
39
40
40
41
fn load_cert_file ( file : CertificateFile ) -> Result < Vec < rustls:: Certificate > , TlsError > {
41
42
let CertificateFile { format, body } = file;
@@ -49,29 +50,32 @@ fn load_cert_file(file: CertificateFile) -> Result<Vec<rustls::Certificate>, Tls
49
50
Ok ( certs. into_iter ( ) . map ( rustls:: Certificate ) . collect ( ) )
50
51
}
51
52
52
- /// Combined implementation of [`ClientConnections`] and [`ServerConnections`] that wraps both
53
- /// [`RustlsClientNetworking`] and [`RustlsServerNetworking `]. The server part is adapted to
53
+ /// Combined implementation of [`ClientConnections`] and [`ServerConnections`] that wraps
54
+ /// [`RustlsClientNetworking`], [`RustlsServerNetworking`] and [`TokioPlainTextNetworking `]. The server part is adapted to
54
55
/// produce [`MaybeTlsStream`] connections so that there is a unified client/server socket type,
55
56
/// inducing an implementation of [`super::ExternalConnections`].
56
57
#[ derive( Clone ) ]
57
58
pub struct RustlsNetworking {
58
59
client : RustlsClientNetworking ,
59
- server : RustlsServerNetworking ,
60
+ server : Either < TokioPlainTextNetworking , RustlsServerNetworking > ,
60
61
}
61
62
62
63
impl RustlsNetworking {
63
- pub fn new ( client : RustlsClientNetworking , server : RustlsServerNetworking ) -> Self {
64
- RustlsNetworking { client, server }
64
+ pub fn new_plain_text (
65
+ client : RustlsClientNetworking ,
66
+ server : TokioPlainTextNetworking ,
67
+ ) -> Self {
68
+ RustlsNetworking {
69
+ client,
70
+ server : Either :: Left ( server) ,
71
+ }
65
72
}
66
73
67
- pub fn try_from_config ( resolver : Arc < Resolver > , config : TlsConfig ) -> Result < Self , TlsError > {
68
- let TlsConfig {
69
- client : client_conf,
70
- server : server_conf,
71
- } = config;
72
- let client = RustlsClientNetworking :: try_from_config ( resolver, client_conf) ?;
73
- let server = RustlsServerNetworking :: try_from ( server_conf) ?;
74
- Ok ( RustlsNetworking { client, server } )
74
+ pub fn new_tls ( client : RustlsClientNetworking , server : RustlsServerNetworking ) -> Self {
75
+ RustlsNetworking {
76
+ client,
77
+ server : Either :: Right ( server) ,
78
+ }
75
79
}
76
80
}
77
81
@@ -99,15 +103,21 @@ impl ClientConnections for RustlsNetworking {
99
103
impl ServerConnections for RustlsNetworking {
100
104
type ServerSocket = MaybeTlsStream ;
101
105
102
- type ListenerType = MaybeRustlsListener ;
106
+ type ListenerType = MaybeRustTlsListener ;
103
107
104
108
fn bind (
105
109
& self ,
106
110
addr : SocketAddr ,
107
111
) -> BoxFuture < ' static , ConnResult < ( SocketAddr , Self :: ListenerType ) > > {
108
- self . server
109
- . make_listener ( addr)
110
- . map_ok ( |( addr, listener) | ( addr, MaybeRustlsListener :: from ( listener) ) )
111
- . boxed ( )
112
+ match & self . server {
113
+ Either :: Left ( plain_text_server) => plain_text_server
114
+ . bind ( addr)
115
+ . map_ok ( |( addr, listener) | ( addr, MaybeRustTlsListener :: from ( listener) ) )
116
+ . boxed ( ) ,
117
+ Either :: Right ( tls_server) => tls_server
118
+ . make_listener ( addr)
119
+ . map_ok ( |( addr, listener) | ( addr, MaybeRustTlsListener :: from ( listener) ) )
120
+ . boxed ( ) ,
121
+ }
112
122
}
113
123
}
0 commit comments