add checks for SRV records

This commit is contained in:
ari melody 2025-11-05 19:23:00 +00:00
parent 983ac7021e
commit 7c8c04573c
Signed by: ari
GPG key ID: CF99829C92678188
5 changed files with 163 additions and 7 deletions

View file

@ -5,6 +5,7 @@ use std::{env};
use mcstatusface::http::{HttpServer, StatusCode};
use mcstatusface::{MinecraftStatus};
use mcstatusface::dns::{resolve_srv_port};
#[derive(serde::Serialize)]
struct MinecraftStatusResponse<'a> {
@ -16,6 +17,8 @@ struct MinecraftStatusResponse<'a> {
motd: String,
}
const DEFAULT_PORT: u16 = 25565;
fn main() -> Result<()> {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
@ -33,7 +36,15 @@ env!("CARGO_PKG_VERSION"));
if args[1] != "serve" {
let mut address = String::from(args[1].as_str());
if !address.contains(":") { address.push_str(":25565"); }
if !address.contains(":") {
let port: u16 = match resolve_srv_port(&address) {
Some(port) => port,
None => DEFAULT_PORT,
};
address.push_str(":");
address.push_str(port.to_string().as_str());
}
let mut addrs_iter = address.to_socket_addrs().unwrap();
let address = addrs_iter.next().unwrap();
@ -98,7 +109,15 @@ env!("CARGO_PKG_VERSION"));
Some(query_address) => {
let mut address = query_address.to_string();
address = address.replace("%3A", ":");
if !address.contains(":") { address.push_str(":25565"); }
if !address.contains(":") {
let port: u16 = match resolve_srv_port(&address) {
Some(port) => port,
None => DEFAULT_PORT,
};
address.push_str(":");
address.push_str(port.to_string().as_str());
}
match address.to_socket_addrs() {
Err(_) => {
response.status(StatusCode::BadRequest);
@ -179,7 +198,15 @@ env!("CARGO_PKG_VERSION"));
Some(query_address) => {
let mut address = query_address.to_string();
address = address.replace("%3A", ":");
if !address.contains(":") { address.push_str(":25565"); }
if !address.contains(":") {
let port: u16 = match resolve_srv_port(&address) {
Some(port) => port,
None => DEFAULT_PORT,
};
address.push_str(":");
address.push_str(port.to_string().as_str());
}
match address.to_socket_addrs() {
Err(_) => {
response.status(StatusCode::BadRequest);