From b77788329c4472e6621c385b91ab67e854fb2629 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Wed, 9 Feb 2022 11:25:16 +0100 Subject: [PATCH] version negotiation --- Cargo.lock | 71 +++++++++++++++++++++++++++++++++++++++ README.md | 4 ++- amqp_transport/Cargo.toml | 2 ++ amqp_transport/src/lib.rs | 26 ++++++++++---- src/main.rs | 12 +++++++ 5 files changed, 107 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 921894d..c8271da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,9 +18,11 @@ name = "amqp_transport" version = "0.1.0" dependencies = [ "anyhow", + "rand", "tokio", "tracing", "tracing-subscriber", + "uuid", ] [[package]] @@ -56,6 +58,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "getrandom" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -188,6 +201,12 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + [[package]] name = "proc-macro2" version = "1.0.36" @@ -206,6 +225,46 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core", +] + [[package]] name = "redox_syscall" version = "0.2.10" @@ -359,12 +418,24 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" + [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + [[package]] name = "winapi" version = "0.3.9" diff --git a/README.md b/README.md index 838b29b..b9f4683 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# amqp \ No newline at end of file +# amqp + +https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf \ No newline at end of file diff --git a/amqp_transport/Cargo.toml b/amqp_transport/Cargo.toml index 1c416ba..5843ed1 100644 --- a/amqp_transport/Cargo.toml +++ b/amqp_transport/Cargo.toml @@ -7,6 +7,8 @@ edition = "2021" [dependencies] anyhow = "1.0.53" +rand = "0.8.4" tokio = { version = "1.16.1", features = ["full"] } tracing = "0.1.30" tracing-subscriber = "0.3.8" +uuid = "0.8.2" diff --git a/amqp_transport/src/lib.rs b/amqp_transport/src/lib.rs index b677d1a..acf635d 100644 --- a/amqp_transport/src/lib.rs +++ b/amqp_transport/src/lib.rs @@ -1,10 +1,22 @@ -use anyhow::{Context, Result}; -use tokio::io::AsyncWriteExt; +mod connection; + +use crate::connection::Connection; +use anyhow::Result; +use tokio::net; +use tracing::info; pub async fn do_thing_i_guess() -> Result<()> { - tokio::io::stdout() - .write(b"hello async world lol\n") - .await - .context("failed to write") - .map(drop) + info!("Binding TCP listener..."); + let listener = net::TcpListener::bind(("127.0.0.1", 5672)).await?; + info!(addr = ?listener.local_addr()?, "Successfully bound TCP listener"); + + loop { + let (stream, _) = listener.accept().await?; + + info!(local_addr = ?stream.local_addr(), "Accepted new connection"); + + let connection = Connection::new(stream); + + tokio::spawn(connection.start()); + } } diff --git a/src/main.rs b/src/main.rs index abc2afc..f7420b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,18 @@ use anyhow::Result; +use tracing::Level; #[tokio::main] async fn main() -> Result<()> { + setup_tracing(); amqp_transport::do_thing_i_guess().await } + +fn setup_tracing() { + tracing_subscriber::fmt() + .with_level(true) + .with_timer(tracing_subscriber::fmt::time::time()) + .with_ansi(true) + .with_thread_names(true) + .with_max_level(Level::DEBUG) + .init() +}