From 5ffdb5800dd1aafbac3c29fc303067f5ec4bc1a5 Mon Sep 17 00:00:00 2001 From: _ <> Date: Fri, 10 Sep 2021 12:08:15 -0500 Subject: [PATCH] add HTTP server to the relay server for debugging --- Cargo.lock | 1 + prototypes/quic_demo/Cargo.toml | 1 + .../src/bin/quic_demo_relay_server.rs | 42 +++++++++++++++++++ prototypes/quic_demo/src/prelude.rs | 1 + 4 files changed, 45 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 5dd14f0..e062511 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1328,6 +1328,7 @@ dependencies = [ "anyhow", "base64", "futures-util", + "hyper", "quinn", "rcgen", "rmp-serde", diff --git a/prototypes/quic_demo/Cargo.toml b/prototypes/quic_demo/Cargo.toml index 2b9c2ac..a2e7d78 100644 --- a/prototypes/quic_demo/Cargo.toml +++ b/prototypes/quic_demo/Cargo.toml @@ -12,6 +12,7 @@ anyhow = "1.0.38" base64 = "0.13.0" # fltk = "1.1.1" futures-util = "0.3.9" +hyper = { version = "0.14.4", features = ["http1", "server", "stream", "tcp"] } quinn = "0.7.2" rcgen = "0.8.11" rmp-serde = "0.15.5" diff --git a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs index 171fc7c..3c57459 100644 --- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs +++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs @@ -1,3 +1,14 @@ +use hyper::{ + Body, + Request, + Response, + Server, + service::{ + make_service_fn, + service_fn, + }, + StatusCode, +}; use structopt::StructOpt; use quic_demo::prelude::*; @@ -23,6 +34,26 @@ async fn main () -> anyhow::Result <()> { let relay_state = RelayState::default (); let relay_state = Arc::new (relay_state); + let make_svc = make_service_fn (|_conn| { + + + async { + Ok::<_, String> (service_fn (move |req| { + + + handle_http (req, ()) + })) + } + }); + + let http_addr = SocketAddr::from (([0, 0, 0, 0], 4004)); + + let http_server = Server::bind (&http_addr); + + tokio::spawn (async move { + http_server.serve (make_svc).await + }); + while let Some (conn) = incoming.next ().await { let relay_state = Arc::clone (&relay_state); @@ -44,6 +75,17 @@ async fn main () -> anyhow::Result <()> { Ok (()) } +async fn handle_http (req: Request , _state: ()) +-> anyhow::Result > +{ + let resp = Response::builder () + .status (StatusCode::OK) + .header ("content-type", "text/plain") + .body (Body::from ("pong\n"))?; + + Ok (resp) +} + #[derive (Default)] struct RelayState { p4_server_proxies: Mutex >, diff --git a/prototypes/quic_demo/src/prelude.rs b/prototypes/quic_demo/src/prelude.rs index 0315eda..ef31ce8 100644 --- a/prototypes/quic_demo/src/prelude.rs +++ b/prototypes/quic_demo/src/prelude.rs @@ -1,5 +1,6 @@ pub use std::{ collections::*, + net::SocketAddr, sync::{ Arc, atomic::{