]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/h2server.rs
add code to test H2 speed
[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
8 use proxmox_backup::client::pipe_to_stream::*;
9
10 pub fn main() -> Result<(), Error> {
11
12 start_h2_server()?;
13
14 Ok(())
15 }
16
17 pub fn start_h2_server() -> Result<(), Error> {
18
19 let listener = TcpListener::bind(&"127.0.0.1:8008".parse().unwrap()).unwrap();
20
21 println!("listening on {:?}", listener.local_addr());
22
23 let server = listener.incoming().for_each(move |socket| {
24
25 let connection = h2::server::handshake(socket)
26 .map_err(Error::from)
27 .and_then(|conn| {
28 println!("H2 connection bound");
29
30 conn
31 .map_err(Error::from)
32 .for_each(|(request, mut respond)| {
33 println!("GOT request: {:?}", request);
34
35 let response = http::Response::builder().status(http::StatusCode::OK).body(()).unwrap();
36
37 let send = respond.send_response(response, false).unwrap();
38 let data = vec![65u8; 1024*1024];
39 PipeToSendStream::new(bytes::Bytes::from(data), send)
40 .and_then(|_| {
41 println!("DATA SENT");
42 Ok(())
43 })
44 })
45 })
46 .and_then(|_| {
47 println!("H2 connection CLOSE !");
48 Ok(())
49 })
50 .then(|res| {
51 if let Err(e) = res {
52 println!(" -> err={:?}", e);
53 }
54 Ok(())
55 });
56
57 tokio::spawn(Box::new(connection));
58 Ok(())
59 })
60 .map_err(|e| eprintln!("accept error: {}", e));
61
62 tokio::run(server);
63
64 Ok(())
65 }