1- #![ feature( async_await) ]
2-
31use async_std:: io;
42use async_std:: io:: Write ;
53use async_std:: net:: TcpStream ;
64use async_std:: task;
75use async_tls:: TlsConnector ;
6+
87use rustls:: ClientConfig ;
9- use std:: sync:: Arc ;
10- use std:: fs:: File ;
11- use std:: io:: BufReader ;
8+
9+ use std:: io:: Cursor ;
1210use std:: net:: ToSocketAddrs ;
1311use std:: path:: { Path , PathBuf } ;
12+ use std:: sync:: Arc ;
13+
1414use structopt:: StructOpt ;
1515
1616#[ derive( StructOpt ) ]
@@ -48,15 +48,17 @@ fn main() -> io::Result<()> {
4848 // Create a bare bones HTTP GET request
4949 let http_request = format ! ( "GET / HTTP/1.0\r \n Host: {}\r \n \r \n " , domain) ;
5050
51- // Create default connector comes preconfigured with all you need to safely connect
52- // to remote servers!
53- let connector = if let Some ( cafile) = & options. cafile {
54- connector_for_ca_file ( cafile) ?
55- } else {
56- TlsConnector :: default ( )
57- } ;
51+ let cafile = & options. cafile ;
52+
53+ task:: block_on ( async move {
54+ // Create default connector comes preconfigured with all you need to safely connect
55+ // to remote servers!
56+ let connector = if let Some ( cafile) = cafile {
57+ connector_for_ca_file ( cafile) . await ?
58+ } else {
59+ TlsConnector :: default ( )
60+ } ;
5861
59- task:: block_on ( async {
6062 // Open a normal TCP connection, just as you are used to
6163 let tcp_stream = TcpStream :: connect ( & addr) . await ?;
6264
@@ -81,12 +83,13 @@ fn main() -> io::Result<()> {
8183 } )
8284}
8385
84- fn connector_for_ca_file ( cafile : & Path ) -> io:: Result < TlsConnector > {
86+ async fn connector_for_ca_file ( cafile : & Path ) -> io:: Result < TlsConnector > {
8587 let mut config = ClientConfig :: new ( ) ;
86- let mut pem = BufReader :: new ( File :: open ( cafile) ?) ;
88+ let file = async_std:: fs:: read ( cafile) . await ?;
89+ let mut pem = Cursor :: new ( file) ;
8790 config
8891 . root_store
8992 . add_pem_file ( & mut pem)
9093 . map_err ( |_| io:: Error :: new ( io:: ErrorKind :: InvalidInput , "invalid cert" ) ) ?;
9194 Ok ( TlsConnector :: from ( Arc :: new ( config) ) )
92- }
95+ }
0 commit comments