smol/examples/tls-client.rs

36 lines
1.0 KiB
Rust
Raw Normal View History

2020-04-21 15:51:07 +00:00
// TODO: document
2020-04-05 11:50:09 +00:00
use std::net::TcpStream;
use anyhow::Result;
2020-04-06 20:19:54 +00:00
use async_native_tls::{Certificate, TlsConnector};
2020-04-05 11:50:09 +00:00
use futures::io;
use futures::prelude::*;
2020-04-21 15:51:07 +00:00
use piper::Mutex;
2020-04-05 11:50:09 +00:00
use smol::Async;
fn main() -> Result<()> {
2020-04-07 16:52:12 +00:00
// Create a TLS connector that is able to connect to 127.0.0.1:7001
2020-04-05 11:50:09 +00:00
let mut builder = native_tls::TlsConnector::builder();
2020-04-06 20:19:54 +00:00
builder.add_root_certificate(Certificate::from_pem(include_bytes!("../certificate.pem"))?);
let tls = TlsConnector::from(builder);
2020-04-05 11:50:09 +00:00
smol::run(async {
let stdin = smol::reader(std::io::stdin());
let mut stdout = smol::writer(std::io::stdout());
2020-04-07 16:52:12 +00:00
let stream = Async::<TcpStream>::connect("127.0.0.1:7001").await?;
let stream = tls.connect("127.0.0.1", stream).await?;
2020-04-05 11:50:09 +00:00
println!("Connected to {}", stream.get_ref().get_ref().peer_addr()?);
2020-04-21 15:51:07 +00:00
let stream = Mutex::new(stream);
2020-04-05 11:50:09 +00:00
future::try_join(
io::copy(stdin, &mut &stream),
io::copy(&stream, &mut stdout),
)
.await?;
Ok(())
})
}