Make XML stream request

This commit is contained in:
2025-06-01 17:55:04 +02:00
parent e002c3a8c3
commit c0ca538a38
3 changed files with 31 additions and 2 deletions

View File

@@ -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));