]>
Commit | Line | Data |
---|---|---|
f7d4e4b5 | 1 | use anyhow::{Error}; |
fded1f31 DM |
2 | use futures::*; |
3 | ||
4 | // Simple H2 server to test H2 speed with h2client.rs | |
5 | ||
6 | use tokio::net::TcpListener; | |
74be6dc9 | 7 | use tokio::io::{AsyncRead, AsyncWrite}; |
fded1f31 | 8 | |
74be6dc9 | 9 | use proxmox_backup::client::pipe_to_stream::PipeToSendStream; |
fded1f31 | 10 | |
d973aa82 WB |
11 | fn main() -> Result<(), Error> { |
12 | proxmox_backup::tools::runtime::main(run()) | |
13 | } | |
14 | ||
15 | async 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 |
31 | async 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 | } |