]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/h2server.rs
update a chunk of stuff to the hyper release
[proxmox-backup.git] / src / bin / h2server.rs
1 use failure::*;
2 use futures::*;
3
4 // Simple H2 server to test H2 speed with h2client.rs
5
6 use tokio::net::TcpListener;
7 use tokio::io::{AsyncRead, AsyncWrite};
8
9 use proxmox_backup::client::pipe_to_stream::PipeToSendStream;
10
11 #[tokio::main]
12 async fn main() -> Result<(), Error> {
13 let mut listener = TcpListener::bind(std::net::SocketAddr::from(([127,0,0,1], 8008))).await?;
14
15 println!("listening on {:?}", listener.local_addr());
16
17 loop {
18 let (socket, _addr) = listener.accept().await?;
19 tokio::spawn(handle_connection(socket)
20 .map(|res| {
21 if let Err(err) = res {
22 eprintln!("Error: {}", err);
23 }
24 }));
25 }
26 }
27
28 async fn handle_connection<T: AsyncRead + AsyncWrite + Unpin>(socket: T) -> Result<(), Error> {
29 let mut conn = h2::server::handshake(socket).await?;
30
31 println!("H2 connection bound");
32
33 while let Some((request, mut respond)) = conn.try_next().await? {
34 println!("GOT request: {:?}", request);
35
36 let response = http::Response::builder()
37 .status(http::StatusCode::OK)
38 .body(())
39 .unwrap();
40
41 let send = respond.send_response(response, false).unwrap();
42 let data = vec![65u8; 1024*1024];
43 PipeToSendStream::new(bytes::Bytes::from(data), send).await?;
44 println!("DATA SENT");
45 }
46
47 Ok(())
48 }