mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-14 15:01:57 +00:00
46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
extern crate native_tls;
|
|
|
|
use native_tls::{Identity, TlsAcceptor, TlsStream};
|
|
use std::fs::File;
|
|
use std::io::{Read, Write};
|
|
use std::net::{TcpListener, TcpStream};
|
|
use std::sync::Arc;
|
|
use std::thread;
|
|
|
|
fn main() {
|
|
let mut cert_file = File::open("test/cert.pem").unwrap();
|
|
let mut certs = vec![];
|
|
cert_file.read_to_end(&mut certs).unwrap();
|
|
let mut key_file = File::open("test/key.pem").unwrap();
|
|
let mut key = vec![];
|
|
key_file.read_to_end(&mut key).unwrap();
|
|
let pkcs8 = Identity::from_pkcs8(&certs, &key).unwrap();
|
|
|
|
let acceptor = TlsAcceptor::new(pkcs8).unwrap();
|
|
let acceptor = Arc::new(acceptor);
|
|
|
|
let listener = TcpListener::bind("0.0.0.0:8443").unwrap();
|
|
|
|
fn handle_client(mut stream: TlsStream<TcpStream>) {
|
|
let mut buf = [0; 1024];
|
|
let read = stream.read(&mut buf).unwrap();
|
|
let received = std::str::from_utf8(&buf[0..read]).unwrap();
|
|
stream
|
|
.write_all(format!("received '{}'", received).as_bytes())
|
|
.unwrap();
|
|
}
|
|
|
|
for stream in listener.incoming() {
|
|
match stream {
|
|
Ok(stream) => {
|
|
let acceptor = acceptor.clone();
|
|
thread::spawn(move || {
|
|
let stream = acceptor.accept(stream).unwrap();
|
|
handle_client(stream);
|
|
});
|
|
}
|
|
Err(_e) => { /* connection failed */ }
|
|
}
|
|
}
|
|
}
|