Initial import

This commit is contained in:
reykfloeter 2019-11-29 21:38:59 +00:00
commit 88bab6d5b9
3 changed files with 76 additions and 0 deletions

15
Cargo.toml Normal file
View file

@ -0,0 +1,15 @@
[package]
name = "yodle"
version = "0.1.0"
authors = ["Reyk Floeter <contact@reykfloeter.com>"]
edition = "2018"
[dependencies]
derive_more = "0.99"
dirs = "2.0"
env_logger = "0.7"
futures = "0.3"
getopts = "0.2"
log = "0.4"
tokio = { version = "0.2", features = ["full"] }
tokio-libtls = "1.1.0-alpha.2"

1
rustfmt.toml Normal file
View file

@ -0,0 +1 @@
edition = "2018"

60
src/main.rs Normal file
View file

@ -0,0 +1,60 @@
// Copyright (c) 2019 Reyk Floeter <contact@reykfloeter.com>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#[macro_use]
extern crate log;
mod cert;
use cert::ServerKeyPair;
use log::LevelFilter;
use std::io;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio_libtls::prelude::*;
async fn async_https_connect(servername: String) -> io::Result<()> {
let request = format!(
"GET / HTTP/1.1\r\n\
Host: {}\r\n\
Connection: close\r\n\r\n",
servername
);
let config = TlsConfigBuilder::new().build()?;
let mut tls = AsyncTls::connect(&(servername + ":443"), &config, None).await?;
tls.write_all(request.as_bytes()).await?;
let mut buf = vec![0u8; 1024];
tls.read_exact(&mut buf).await?;
let ok = b"HTTP/1.1 200 OK\r\n";
assert_eq!(&buf[..ok.len()], ok);
Ok(())
}
#[tokio::main]
async fn main() {
env_logger::builder()
.filter_level(LevelFilter::Debug)
.init();
async_https_connect("www.example.com".to_owned())
.await
.unwrap();
let server_key = ServerKeyPair::new();
info!("{:?}", server_key);
}