Make XML stream request
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -452,6 +452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
"libc",
|
||||
"mio",
|
||||
"pin-project-lite",
|
||||
|
@@ -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"] }
|
||||
|
30
src/main.rs
30
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!("<stream:stream to='{}' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' xml:lang='en' version='1.0'></stream:stream>", 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<ProbeClientToServerQuery>,
|
||||
) -> Result<String, String> {
|
||||
|
||||
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));
|
||||
|
||||
|
Reference in New Issue
Block a user