| use std::sync::Arc; | 
 |  | 
 | use std::net::TcpStream; | 
 | use std::io::{Read, Write, stdout}; | 
 |  | 
 | use rustls; | 
 | use rustls_native_certs; | 
 | use webpki; | 
 |  | 
 | use rustls::Session; | 
 |  | 
 | fn main() { | 
 |     let mut config = rustls::ClientConfig::new(); | 
 |     config.root_store = rustls_native_certs::load_native_certs() | 
 |         .expect("could not load platform certs"); | 
 |  | 
 |     let dns_name = webpki::DNSNameRef::try_from_ascii_str("google.com") | 
 |         .unwrap(); | 
 |     let mut sess = rustls::ClientSession::new(&Arc::new(config), dns_name); | 
 |     let mut sock = TcpStream::connect("google.com:443") | 
 |         .expect("cannot connect"); | 
 |     let mut tls = rustls::Stream::new(&mut sess, &mut sock); | 
 |     tls.write(concat!("GET / HTTP/1.1\r\n", | 
 |                       "Host: google.com\r\n", | 
 |                       "Connection: close\r\n", | 
 |                       "Accept-Encoding: identity\r\n", | 
 |                       "\r\n") | 
 |               .as_bytes()) | 
 |         .expect("write failed"); | 
 |     let ciphersuite = tls.sess.get_negotiated_ciphersuite() | 
 |         .expect("tls handshake failed"); | 
 |     writeln!(&mut std::io::stderr(), "Current ciphersuite: {:?}", ciphersuite.suite) | 
 |         .unwrap(); | 
 |     let mut plaintext = Vec::new(); | 
 |     tls.read_to_end(&mut plaintext) | 
 |         .unwrap(); | 
 |     stdout().write_all(&plaintext) | 
 |         .unwrap(); | 
 | } |