From c0ca538a386b14afea7f76c67c161635904e8aa8 Mon Sep 17 00:00:00 2001 From: clerie Date: Sun, 1 Jun 2025 17:55:04 +0200 Subject: [PATCH] Make XML stream request --- Cargo.lock | 1 + Cargo.toml | 2 +- src/main.rs | 30 +++++++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 20de2c3..c02053b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -452,6 +452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", + "bytes", "libc", "mio", "pin-project-lite", diff --git a/Cargo.toml b/Cargo.toml index 2557432..0107e0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,4 +6,4 @@ edition = "2021" [dependencies] axum = "0.8.4" serde = { version = "1.0.219", features = ["derive"] } -tokio = { version = "1.45.1", features = ["rt-multi-thread"] } +tokio = { version = "1.45.1", features = ["io-util", "rt-multi-thread"] } diff --git a/src/main.rs b/src/main.rs index 27cdcca..3a47fb8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,14 @@ use axum::{ Router, }; use serde::Deserialize; +use tokio::io::{ + AsyncBufReadExt, + AsyncWriteExt, + BufReader, +}; +use tokio::net::{ + TcpStream, +}; #[derive(Deserialize)] struct ProbeClientToServerQuery { @@ -46,7 +54,7 @@ async fn main() { let listener = tokio::net::TcpListener::bind(listen).await.unwrap(); println!("Server listening on: http://{}", listener.local_addr().unwrap()); println!("Probe with:"); - println!(" http://{}/probe-client-to-server?domain=fem-net.de&hostname=xmpp-2.net.clerie.de&port=5222", listener.local_addr().unwrap()); + println!(" http://{}/probe-client-to-server?domain=fem-net.de&hostname=xmpp-2.fem-net.de&port=5222", listener.local_addr().unwrap()); axum::serve(listener, app).await.unwrap(); } @@ -55,9 +63,29 @@ async fn route_index() -> String { return String::from("Prometheus exporter for checking XMPP server availability"); } +async fn probe_client_to_server(domain: &str, hostname: &str, port: u16) -> Result<(), String> { + let mut stream = TcpStream::connect((hostname, port)).await.unwrap(); + + let connect_string = format!("", domain); + + stream.write_all(connect_string.as_bytes()).await.unwrap(); + + let mut stream = BufReader::new(stream); + + let mut response = String::new(); + stream.read_line(&mut response).await.unwrap(); + + println!("{}", response); + + Ok(()) +} + async fn route_probe_client_to_server( Query(query): Query, ) -> Result { + + probe_client_to_server(&query.domain, &query.hostname, query.port).await.unwrap(); + let mut out = String::new(); out.push_str(&format!("{} {}:{}", query.domain, query.hostname, query.port));