From 49d109544028b2e0e9cea44441826e0cfce9f34e Mon Sep 17 00:00:00 2001
From: _ <>
Date: Mon, 19 Jul 2021 09:53:08 -0500
Subject: [PATCH 01/14] :construction: patch out FLTK so the relay can build
---
prototypes/quic_demo/Cargo.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/prototypes/quic_demo/Cargo.toml b/prototypes/quic_demo/Cargo.toml
index ea603c0..2b9c2ac 100644
--- a/prototypes/quic_demo/Cargo.toml
+++ b/prototypes/quic_demo/Cargo.toml
@@ -10,7 +10,7 @@ license = "AGPL-3.0"
[dependencies]
anyhow = "1.0.38"
base64 = "0.13.0"
-fltk = "1.1.1"
+# fltk = "1.1.1"
futures-util = "0.3.9"
quinn = "0.7.2"
rcgen = "0.8.11"
From 584654a6b4c191b41625c0b86341499a82ccadcf Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 11:50:45 -0500
Subject: [PATCH 02/14] :pencil: testing plan for PTTH_QUIC
---
docs/how-to/test-ptth-quic.md | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 docs/how-to/test-ptth-quic.md
diff --git a/docs/how-to/test-ptth-quic.md b/docs/how-to/test-ptth-quic.md
new file mode 100644
index 0000000..ba2fca8
--- /dev/null
+++ b/docs/how-to/test-ptth-quic.md
@@ -0,0 +1,8 @@
+# How-to: Test PTTH_QUIC
+
+- Put a couple terminals in `prototypes/quic_demo`
+- Set up a relay `cargo run --bin quic_demo_relay_server`
+- Verify that the relay has no servers connected
+- Set up a server
+- The relay should refuse the server's connection if its API key is not recognized
+- Once the relay recognizes the API key, the server should automatically reconnect
From 5ffdb5800dd1aafbac3c29fc303067f5ec4bc1a5 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 12:08:15 -0500
Subject: [PATCH 03/14] 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::{
From f26748035f74333e6a7ccd2e12c490a321e84259 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 12:30:12 -0500
Subject: [PATCH 04/14] the HTTP server now lists which end servers are
connected
---
.../src/bin/quic_demo_relay_server.rs | 39 ++++++++++++-------
1 file changed, 24 insertions(+), 15 deletions(-)
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 3c57459..72e47d5 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
@@ -31,20 +31,22 @@ async fn main () -> anyhow::Result <()> {
println! ("Base64 cert: {}", base64::encode (&server_cert));
tokio::fs::write ("quic_server.crt", &server_cert).await?;
- let relay_state = RelayState::default ();
- let relay_state = Arc::new (relay_state);
+ let relay_state = Arc::new (RelayState::default ());
- let make_svc = make_service_fn (|_conn| {
-
-
- async {
- Ok::<_, String> (service_fn (move |req| {
-
-
- handle_http (req, ())
- }))
- }
- });
+ let make_svc = {
+ let relay_state = Arc::clone (&relay_state);
+ make_service_fn (move |_conn| {
+ let relay_state = Arc::clone (&relay_state);
+
+ async move {
+ Ok::<_, String> (service_fn (move |req| {
+ let relay_state = Arc::clone (&relay_state);
+
+ handle_http (req, relay_state)
+ }))
+ }
+ })
+ };
let http_addr = SocketAddr::from (([0, 0, 0, 0], 4004));
@@ -75,13 +77,20 @@ async fn main () -> anyhow::Result <()> {
Ok (())
}
-async fn handle_http (req: Request , _state: ())
+async fn handle_http (req: Request , relay_state: Arc )
-> anyhow::Result >
{
+ let debug_string;
+ {
+ let p4_server_proxies = relay_state.p4_server_proxies.lock ().await;
+
+ debug_string = format! ("{:#?}\n", p4_server_proxies.keys ().collect::> ());
+ }
+
let resp = Response::builder ()
.status (StatusCode::OK)
.header ("content-type", "text/plain")
- .body (Body::from ("pong\n"))?;
+ .body (Body::from (debug_string))?;
Ok (resp)
}
From d9949f3f688a565171e448272a7ddf2572288031 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 12:42:46 -0500
Subject: [PATCH 05/14] :white_check_mark: working on manual test plans for
PTTH_QUIC
---
docs/how-to/test-ptth-quic.md | 24 ++++++++++++++-----
.../quic_demo/src/bin/quic_demo_end_server.rs | 1 +
.../src/bin/quic_demo_relay_server.rs | 2 ++
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/docs/how-to/test-ptth-quic.md b/docs/how-to/test-ptth-quic.md
index ba2fca8..3bc15a8 100644
--- a/docs/how-to/test-ptth-quic.md
+++ b/docs/how-to/test-ptth-quic.md
@@ -1,8 +1,20 @@
# How-to: Test PTTH_QUIC
-- Put a couple terminals in `prototypes/quic_demo`
-- Set up a relay `cargo run --bin quic_demo_relay_server`
-- Verify that the relay has no servers connected
-- Set up a server
-- The relay should refuse the server's connection if its API key is not recognized
-- Once the relay recognizes the API key, the server should automatically reconnect
+## Initial setup
+
+- Open 3 terminals in `prototypes/quic_demo`
+- Use `export RUST_LOG=quic_demo_relay_server=debug` to enable debug logging
+for the terminal that will run the relay server
+- Use `export RUST_LOG=quic_demo_end_server=debug` for the terminal that
+will run the end server
+
+When the relay server is running, use curl to get the list of connected
+end servers: `curl 127.0.0.1:4004`
+
+## Test loop - Happy path
+
+- Start a relay `cargo run --bin quic_demo_relay_server`
+- Verify that the relay has no end servers connected
+- Start an end server `cargo run --bin quic_demo_end_server`
+- Verify that the end server connected
+
diff --git a/prototypes/quic_demo/src/bin/quic_demo_end_server.rs b/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
index 19ba94d..c5a9feb 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
@@ -31,6 +31,7 @@ async fn main () -> anyhow::Result <()> {
..
} = protocol::p4_connect_to_p3 (&endpoint, &relay_addr, &server_id).await?;
+ debug! ("Connected to relay server");
trace! ("Accepting bi streams from P3");
loop {
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 72e47d5..f2e51c9 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
@@ -56,6 +56,8 @@ async fn main () -> anyhow::Result <()> {
http_server.serve (make_svc).await
});
+ debug! ("Serving HTTP on {:?}", http_addr);
+
while let Some (conn) = incoming.next ().await {
let relay_state = Arc::clone (&relay_state);
From e1da97a5171a58c6c7907a675d149326b9f9e15c Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 14:16:38 -0500
Subject: [PATCH 06/14] add `--debug-echo` option for P4 end servers to run a
simulated P5 TCP echo server
This makes it possible to debug with only 4 processes instead of 5.
---
docs/how-to/test-ptth-quic.md | 12 +++--
.../quic_demo/src/bin/quic_demo_end_server.rs | 47 ++++++++++++-------
2 files changed, 37 insertions(+), 22 deletions(-)
diff --git a/docs/how-to/test-ptth-quic.md b/docs/how-to/test-ptth-quic.md
index 3bc15a8..ff92c1f 100644
--- a/docs/how-to/test-ptth-quic.md
+++ b/docs/how-to/test-ptth-quic.md
@@ -4,9 +4,11 @@
- Open 3 terminals in `prototypes/quic_demo`
- Use `export RUST_LOG=quic_demo_relay_server=debug` to enable debug logging
-for the terminal that will run the relay server
+for the terminal that will run the relay server (P3)
- Use `export RUST_LOG=quic_demo_end_server=debug` for the terminal that
-will run the end server
+will run the end server (P4)
+- Use `export RUST_LOG=quic_demo_client=debug` for the terminal that
+will run the client (P2)
When the relay server is running, use curl to get the list of connected
end servers: `curl 127.0.0.1:4004`
@@ -15,6 +17,8 @@ end servers: `curl 127.0.0.1:4004`
- Start a relay `cargo run --bin quic_demo_relay_server`
- Verify that the relay has no end servers connected
-- Start an end server `cargo run --bin quic_demo_end_server`
+- Start an end server `cargo run --bin quic_demo_end_server -- --debug-echo`
- Verify that the end server connected
-
+- Start a client `cargo run --bin quic_demo_client`
+- Connect to the client and verify that the debug echo server is running
+`nc 127.0.0.1 30381`
diff --git a/prototypes/quic_demo/src/bin/quic_demo_end_server.rs b/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
index c5a9feb..26c6c6d 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
@@ -10,21 +10,23 @@ struct Opt {
relay_addr: Option ,
#[structopt (long)]
server_id: Option ,
+ #[structopt (long)]
+ debug_echo: bool,
}
#[tokio::main]
async fn main () -> anyhow::Result <()> {
tracing_subscriber::fmt::init ();
- let opt = Opt::from_args ();
+ let opt = Arc::new (Opt::from_args ());
let server_cert = tokio::fs::read ("quic_server.crt").await?;
- let relay_addr = opt.relay_addr.unwrap_or_else (|| String::from ("127.0.0.1:30380")).parse ()?;
+ let relay_addr = opt.relay_addr.clone ().unwrap_or_else (|| String::from ("127.0.0.1:30380")).parse ()?;
let endpoint = make_client_endpoint ("0.0.0.0:0".parse ()?, &[&server_cert])?;
trace! ("Connecting to relay server");
- let server_id = opt.server_id.unwrap_or_else (|| "bogus_server".to_string ());
+ let server_id = opt.server_id.clone ().unwrap_or_else (|| "bogus_server".to_string ());
let quinn::NewConnection {
mut bi_streams,
@@ -37,11 +39,12 @@ async fn main () -> anyhow::Result <()> {
loop {
let (relay_send, relay_recv) = bi_streams.next ().await.ok_or_else (|| anyhow::anyhow! ("Relay server didn't open a bi stream"))??;
- tokio::spawn (handle_bi_stream (relay_send, relay_recv));
+ tokio::spawn (handle_bi_stream (Arc::clone (&opt), relay_send, relay_recv));
}
}
async fn handle_bi_stream (
+ opt: Arc ,
relay_send: quinn::SendStream,
mut relay_recv: quinn::RecvStream,
) -> anyhow::Result <()>
@@ -50,13 +53,14 @@ async fn handle_bi_stream (
protocol::P3ToP4Stream::NewPtthConnection {
client_id,
..
- } => handle_new_ptth_connection (relay_send, relay_recv, client_id).await?,
+ } => handle_new_ptth_connection (opt, relay_send, relay_recv, client_id).await?,
}
Ok (())
}
async fn handle_new_ptth_connection (
+ opt: Arc ,
mut relay_send: quinn::SendStream,
mut relay_recv: quinn::RecvStream,
_client_id: String,
@@ -73,19 +77,26 @@ async fn handle_new_ptth_connection (
debug! ("Started PTTH connection");
- let stream = TcpStream::connect (("127.0.0.1", p4_to_p5_req.port)).await?;
- let (local_recv, local_send) = stream.into_split ();
-
- trace! ("Relaying bytes...");
-
- let ptth_conn = quic_demo::connection::NewConnection {
- local_send,
- local_recv,
- relay_send,
- relay_recv,
- }.build ();
-
- ptth_conn.wait_for_close ().await?;
+ if opt.debug_echo {
+ relay_send.write (b"Connected to P4=P5 debug echo server\n").await?;
+ debug! ("Relaying bytes using internal debug echo server (P4=P5)");
+ tokio::io::copy (&mut relay_recv, &mut relay_send).await?;
+ }
+ else {
+ let stream = TcpStream::connect (("127.0.0.1", p4_to_p5_req.port)).await?;
+ let (local_recv, local_send) = stream.into_split ();
+
+ trace! ("Relaying bytes...");
+
+ let ptth_conn = quic_demo::connection::NewConnection {
+ local_send,
+ local_recv,
+ relay_send,
+ relay_recv,
+ }.build ();
+
+ ptth_conn.wait_for_close ().await?;
+ }
Ok (())
}
From 16bde3a2cfb8a06e2474bb78847042e8a1511b4b Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 15:36:03 -0500
Subject: [PATCH 07/14] :construction: wip: working on a way to make P2
optional
---
.../quic_demo/src/bin/quic_demo_client.rs | 66 +++++++------
.../src/bin/quic_demo_relay_server.rs | 92 ++++++++++++++-----
prototypes/quic_demo/src/prelude.rs | 1 +
3 files changed, 109 insertions(+), 50 deletions(-)
diff --git a/prototypes/quic_demo/src/bin/quic_demo_client.rs b/prototypes/quic_demo/src/bin/quic_demo_client.rs
index 6dbb1f6..9407d1d 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_client.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_client.rs
@@ -46,37 +46,45 @@ async fn main () -> anyhow::Result <()> {
let server_tcp_port = opt.server_tcp_port.unwrap_or (30382);
let listener = TcpListener::bind (("127.0.0.1", client_tcp_port)).await?;
- debug! ("Accepting local TCP connections from P1");
-
// End of per-port stuff
// Beginning of per-connection stuff
- loop {
- let (tcp_socket, _) = listener.accept ().await?;
- let connection = connection.clone ();
- let server_id = server_id.clone ();
+ let task_tcp_server = tokio::spawn (async move {
+ loop {
+ let (tcp_socket, _) = listener.accept ().await?;
+ let connection = connection.clone ();
+ let server_id = server_id.clone ();
+
+ tokio::spawn (async move {
+ let (local_recv, local_send) = tcp_socket.into_split ();
+
+ debug! ("Starting PTTH connection");
+
+ let (relay_send, relay_recv) = protocol::p2_connect_to_p5 (&connection, &server_id, server_tcp_port).await?;
+
+ trace! ("Relaying bytes...");
+
+ let ptth_conn = quic_demo::connection::NewConnection {
+ local_send,
+ local_recv,
+ relay_send,
+ relay_recv,
+ }.build ();
+
+ ptth_conn.wait_for_close ().await?;
+
+ debug! ("Ended PTTH connection");
+
+ Ok::<_, anyhow::Error> (())
+ });
+ }
- tokio::spawn (async move {
- let (local_recv, local_send) = tcp_socket.into_split ();
-
- debug! ("Starting PTTH connection");
-
- let (relay_send, relay_recv) = protocol::p2_connect_to_p5 (&connection, &server_id, server_tcp_port).await?;
-
- trace! ("Relaying bytes...");
-
- let ptth_conn = quic_demo::connection::NewConnection {
- local_send,
- local_recv,
- relay_send,
- relay_recv,
- }.build ();
-
- ptth_conn.wait_for_close ().await?;
-
- debug! ("Ended PTTH connection");
-
- Ok::<_, anyhow::Error> (())
- });
- }
+ Ok::<_, anyhow::Error> (())
+ });
+
+ debug! ("Accepting local TCP connections from P1");
+
+ task_tcp_server.await??;
+
+ Ok (())
}
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 f2e51c9..064c928 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
@@ -49,37 +49,87 @@ async fn main () -> anyhow::Result <()> {
};
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
+ let tcp_port = 30382;
+ let tcp_listener = TcpListener::bind (("127.0.0.1", tcp_port)).await?;
+
+ let task_quic_server = {
+ let relay_state = Arc::clone (&relay_state);
+ tokio::spawn (async move {
+ while let Some (conn) = incoming.next ().await {
+ let relay_state = Arc::clone (&relay_state);
+
+ // Each new peer QUIC connection gets its own task
+ tokio::spawn (async move {
+ let active = relay_state.stats.quic.connect ();
+ debug! ("QUIC connections: {}", active);
+
+ match handle_quic_connection (Arc::clone (&relay_state), conn).await {
+ Ok (_) => (),
+ Err (e) => warn! ("handle_quic_connection {:?}", e),
+ }
+
+ let active = relay_state.stats.quic.disconnect ();
+ debug! ("QUIC connections: {}", active);
+ });
+ }
+
+ Ok::<_, anyhow::Error> (())
+ })
+ };
+
+ let task_http_server = tokio::spawn (async move {
+ http_server.serve (make_svc).await?;
+ Ok::<_, anyhow::Error> (())
});
+ let task_tcp_server = {
+ let relay_state = Arc::clone (&relay_state);
+ tokio::spawn (async move {
+ loop {
+ let (tcp_socket, _) = tcp_listener.accept ().await?;
+
+ let server_id = "bogus_server".to_string ();
+
+ let relay_state = Arc::clone (&relay_state);
+ tokio::spawn (async move {
+ let (client_recv, client_send) = tcp_socket.into_split ();
+
+ debug! ("Accepted direct TCP connection P1 --> P3");
+
+ let p4_server_proxies = relay_state.p4_server_proxies.lock ().await;
+ let p4 = match p4_server_proxies.get ("bogus_server") {
+ Some (x) => x,
+ None => bail! ("That server isn't connected"),
+ };
+
+ unimplemented! ();
+ /*
+ p4.req_channel.send (RequestP2ToP4 {
+ client_send,
+ client_recv,
+ client_id: "bogus_client".to_string (),
+ }).await.map_err (|_| anyhow::anyhow! ("Can't send request to P4 server"))?;
+ */
+ Ok (())
+ });
+ }
+
+ Ok::<_, anyhow::Error> (())
+ })
+ };
+
debug! ("Serving HTTP on {:?}", http_addr);
- while let Some (conn) = incoming.next ().await {
- let relay_state = Arc::clone (&relay_state);
-
- // Each new peer QUIC connection gets its own task
- tokio::spawn (async move {
- let active = relay_state.stats.quic.connect ();
- debug! ("QUIC connections: {}", active);
-
- match handle_quic_connection (Arc::clone (&relay_state), conn).await {
- Ok (_) => (),
- Err (e) => warn! ("handle_quic_connection {:?}", e),
- }
-
- let active = relay_state.stats.quic.disconnect ();
- debug! ("QUIC connections: {}", active);
- });
- }
+ task_quic_server.await??;
+ task_http_server.await??;
+ task_tcp_server.await??;
Ok (())
}
-async fn handle_http (req: Request , relay_state: Arc )
+async fn handle_http (_req: Request , relay_state: Arc )
-> anyhow::Result >
{
let debug_string;
diff --git a/prototypes/quic_demo/src/prelude.rs b/prototypes/quic_demo/src/prelude.rs
index ef31ce8..03fc349 100644
--- a/prototypes/quic_demo/src/prelude.rs
+++ b/prototypes/quic_demo/src/prelude.rs
@@ -21,6 +21,7 @@ pub use tokio::{
AsyncReadExt,
AsyncWriteExt,
},
+ net::TcpListener,
sync::{
Mutex,
mpsc,
From 05ba4822f831cba1e3e15798722da766a8f0f46a Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 10 Sep 2021 16:02:36 -0500
Subject: [PATCH 08/14] :construction: wip
---
prototypes/quic_demo/src/bin/quic_demo_relay_server.rs | 6 +++---
prototypes/quic_demo/src/prelude.rs | 2 ++
2 files changed, 5 insertions(+), 3 deletions(-)
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 064c928..948eda9 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
@@ -199,8 +199,8 @@ struct RequestP2ToP4 {
client_id: String,
}
-struct PtthNewConnection {
- client_send: quinn::SendStream,
+struct PtthNewConnection {
+ client_send: ClientSend,
client_recv: quinn::RecvStream,
server_send: quinn::SendStream,
server_recv: quinn::RecvStream,
@@ -211,7 +211,7 @@ struct PtthConnection {
downlink_task: JoinHandle >,
}
-impl PtthNewConnection {
+impl PtthNewConnection {
fn build (self) -> PtthConnection {
let Self {
mut client_send,
diff --git a/prototypes/quic_demo/src/prelude.rs b/prototypes/quic_demo/src/prelude.rs
index 03fc349..b94e1d6 100644
--- a/prototypes/quic_demo/src/prelude.rs
+++ b/prototypes/quic_demo/src/prelude.rs
@@ -18,7 +18,9 @@ pub use anyhow::{
pub use futures_util::StreamExt;
pub use tokio::{
io::{
+ AsyncRead,
AsyncReadExt,
+ AsyncWrite,
AsyncWriteExt,
},
net::TcpListener,
From 7408d41d4778c1abc8bd18e589e5e0cf0a487c23 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 1 Oct 2021 10:41:44 -0500
Subject: [PATCH 09/14] Revert ":construction: wip"
This reverts commit 05ba4822f831cba1e3e15798722da766a8f0f46a.
---
prototypes/quic_demo/src/bin/quic_demo_relay_server.rs | 6 +++---
prototypes/quic_demo/src/prelude.rs | 2 --
2 files changed, 3 insertions(+), 5 deletions(-)
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 948eda9..064c928 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
@@ -199,8 +199,8 @@ struct RequestP2ToP4 {
client_id: String,
}
-struct PtthNewConnection {
- client_send: ClientSend,
+struct PtthNewConnection {
+ client_send: quinn::SendStream,
client_recv: quinn::RecvStream,
server_send: quinn::SendStream,
server_recv: quinn::RecvStream,
@@ -211,7 +211,7 @@ struct PtthConnection {
downlink_task: JoinHandle >,
}
-impl PtthNewConnection {
+impl PtthNewConnection {
fn build (self) -> PtthConnection {
let Self {
mut client_send,
diff --git a/prototypes/quic_demo/src/prelude.rs b/prototypes/quic_demo/src/prelude.rs
index b94e1d6..03fc349 100644
--- a/prototypes/quic_demo/src/prelude.rs
+++ b/prototypes/quic_demo/src/prelude.rs
@@ -18,9 +18,7 @@ pub use anyhow::{
pub use futures_util::StreamExt;
pub use tokio::{
io::{
- AsyncRead,
AsyncReadExt,
- AsyncWrite,
AsyncWriteExt,
},
net::TcpListener,
From 3a4d7c934e46efedc762629549efe6acb75748c3 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 1 Oct 2021 10:44:51 -0500
Subject: [PATCH 10/14] move cert output into a subdir so I can break it out
into a Docker volume
---
prototypes/quic_demo/src/bin/quic_demo_relay_server.rs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
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 064c928..dcb5d5e 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_relay_server.rs
@@ -29,7 +29,9 @@ async fn main () -> anyhow::Result <()> {
let listen_addr = opt.listen_addr.unwrap_or_else (|| String::from ("0.0.0.0:30380")).parse ()?;
let (mut incoming, server_cert) = make_server_endpoint (listen_addr)?;
println! ("Base64 cert: {}", base64::encode (&server_cert));
- tokio::fs::write ("quic_server.crt", &server_cert).await?;
+
+ tokio::fs::create_dir_all ("ptth_quic_output").await?;
+ tokio::fs::write ("ptth_quic_output/quic_server.crt", &server_cert).await?;
let relay_state = Arc::new (RelayState::default ());
From f7bd179bba17731b0a5c15ed93cd85532604f8a1 Mon Sep 17 00:00:00 2001
From: Trisha
Date: Fri, 1 Oct 2021 12:19:23 -0500
Subject: [PATCH 11/14] add `--cert-url` to GUI client
---
Cargo.lock | 5 +++--
prototypes/ptth_quic_client_gui/Cargo.toml | 1 +
prototypes/ptth_quic_client_gui/src/main.rs | 16 +++++++++++++---
3 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index e062511..2a4a2f6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1209,6 +1209,7 @@ dependencies = [
"fltk",
"quic_demo",
"quinn",
+ "reqwest",
"structopt",
"tokio",
"tracing",
@@ -1500,9 +1501,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.11.2"
+version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf12057f289428dbf5c591c74bf10392e4a8003f993405a902f20117019022d4"
+checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22"
dependencies = [
"base64",
"bytes",
diff --git a/prototypes/ptth_quic_client_gui/Cargo.toml b/prototypes/ptth_quic_client_gui/Cargo.toml
index 7281233..995a913 100644
--- a/prototypes/ptth_quic_client_gui/Cargo.toml
+++ b/prototypes/ptth_quic_client_gui/Cargo.toml
@@ -12,6 +12,7 @@ anyhow = "1.0.38"
fltk = "1.1.1"
quic_demo = { path = "../quic_demo" }
quinn = "0.7.2"
+reqwest = "0.11.4"
structopt = "0.3.20"
tokio = { version = "1.8.1", features = ["full"] }
tracing-subscriber = "0.2.16"
diff --git a/prototypes/ptth_quic_client_gui/src/main.rs b/prototypes/ptth_quic_client_gui/src/main.rs
index 4cfdfda..e11bfbe 100644
--- a/prototypes/ptth_quic_client_gui/src/main.rs
+++ b/prototypes/ptth_quic_client_gui/src/main.rs
@@ -25,6 +25,8 @@ struct Opt {
relay_addr: Option ,
#[structopt (long)]
client_id: Option ,
+ #[structopt (long)]
+ cert_url: Option ,
}
#[derive (Clone, Copy)]
@@ -103,8 +105,15 @@ fn main () -> anyhow::Result <()> {
wind.show ();
let connection_p2_p3 = rt.block_on (async move {
- let server_cert = tokio::fs::read ("quic_server.crt").await?;
- let relay_addr = opt.relay_addr.unwrap_or_else (|| String::from ("127.0.0.1:30380")).parse ()?;
+ let server_cert = match opt.cert_url.as_ref () {
+ Some (url) => reqwest::get (url).await?.bytes ().await?,
+ None => tokio::fs::read ("quic_server.crt").await?.into (),
+ };
+
+ let relay_addr = opt.relay_addr
+ .unwrap_or_else (|| String::from ("127.0.0.1:30380"))
+ .parse ()
+ .context ("relay_addr should be like 127.0.0.1:30380")?;
let endpoint = make_client_endpoint ("0.0.0.0:0".parse ()?, &[&server_cert])?;
trace! ("Connecting to relay server");
@@ -114,7 +123,8 @@ fn main () -> anyhow::Result <()> {
let quinn::NewConnection {
connection,
..
- } = protocol::p2_connect_to_p3 (&endpoint, &relay_addr, &client_id).await?;
+ } = protocol::p2_connect_to_p3 (&endpoint, &relay_addr, &client_id).await
+ .context ("P2 can't connect to P3")?;
Ok::<_, anyhow::Error> (connection)
})?;
From da10ad28dcacad83b9b0c86d89c15468d7db567a Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 1 Oct 2021 12:44:20 -0500
Subject: [PATCH 12/14] add `--cert-url` to end server too
---
Cargo.lock | 1 +
prototypes/quic_demo/Cargo.toml | 1 +
prototypes/quic_demo/src/bin/quic_demo_end_server.rs | 7 ++++++-
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/Cargo.lock b/Cargo.lock
index 2a4a2f6..ae75527 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1332,6 +1332,7 @@ dependencies = [
"hyper",
"quinn",
"rcgen",
+ "reqwest",
"rmp-serde",
"structopt",
"tokio",
diff --git a/prototypes/quic_demo/Cargo.toml b/prototypes/quic_demo/Cargo.toml
index a2e7d78..d10125b 100644
--- a/prototypes/quic_demo/Cargo.toml
+++ b/prototypes/quic_demo/Cargo.toml
@@ -15,6 +15,7 @@ futures-util = "0.3.9"
hyper = { version = "0.14.4", features = ["http1", "server", "stream", "tcp"] }
quinn = "0.7.2"
rcgen = "0.8.11"
+reqwest = "0.11.4"
rmp-serde = "0.15.5"
structopt = "0.3.20"
tokio = { version = "1.8.1", features = ["full"] }
diff --git a/prototypes/quic_demo/src/bin/quic_demo_end_server.rs b/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
index 26c6c6d..5f28433 100644
--- a/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
+++ b/prototypes/quic_demo/src/bin/quic_demo_end_server.rs
@@ -12,6 +12,8 @@ struct Opt {
server_id: Option ,
#[structopt (long)]
debug_echo: bool,
+ #[structopt (long)]
+ cert_url: Option ,
}
#[tokio::main]
@@ -20,7 +22,10 @@ async fn main () -> anyhow::Result <()> {
let opt = Arc::new (Opt::from_args ());
- let server_cert = tokio::fs::read ("quic_server.crt").await?;
+ let server_cert = match opt.cert_url.as_ref () {
+ Some (url) => reqwest::get (url).await?.bytes ().await?,
+ None => tokio::fs::read ("quic_server.crt").await?.into (),
+ };
let relay_addr = opt.relay_addr.clone ().unwrap_or_else (|| String::from ("127.0.0.1:30380")).parse ()?;
let endpoint = make_client_endpoint ("0.0.0.0:0".parse ()?, &[&server_cert])?;
From c5aadbe632c6cb34cbe6a9e5f2b9ab66f36ff6b9 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Fri, 1 Oct 2021 12:50:24 -0500
Subject: [PATCH 13/14] :package: add PTTH_QUIC end server to PTTH subpackage
---
build_ptth_server.bash | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/build_ptth_server.bash b/build_ptth_server.bash
index 6334552..71d612a 100755
--- a/build_ptth_server.bash
+++ b/build_ptth_server.bash
@@ -15,15 +15,19 @@ export LC_ALL="C"
TEMP_GIBBERISH="ptth_server_build_BIHWLQXQ"
DEST="$TEMP_GIBBERISH/ptth"
+rm -rf "$TEMP_GIBBERISH"
+
mkdir "$TEMP_GIBBERISH"
mkdir "$DEST"
cargo build --release -p ptth_server
+cargo build --release -p quic_demo --bin quic_demo_end_server
mkdir -p "$DEST/handlebars/server"
rsync -r handlebars/server/ "$DEST/handlebars/server/"
-cp target/release/ptth_server "$DEST/ptth_server"
+cp target/release/ptth_server "$DEST/"
+cp target/release/quic_demo_end_server "$DEST/"
(
cd "$TEMP_GIBBERISH" || exit
From b8c370a0a6b37ce41078c1fd3e03c6b60e3ab2c2 Mon Sep 17 00:00:00 2001
From: _ <>
Date: Sat, 2 Oct 2021 16:55:04 +0000
Subject: [PATCH 14/14] :pencil: readme draft
---
readme_draft.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/readme_draft.md b/readme_draft.md
index 5a0bee0..72ae65e 100644
--- a/readme_draft.md
+++ b/readme_draft.md
@@ -1,5 +1,7 @@
![The PTTH logo, a green box sitting on a black conveyor belt. The box has an arrow pointing left, and the text "PTTH", in white. The conveyor belt has an arrow pointing right, in white.](assets/logo-128-pixel.png)
+TODO: "Splitting a server in half" diagram
+
# PTTH
PTTH lets you run file servers from behind NAT / firewalls.