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