diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ccafe..9c79445 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Games: ### Breaking: - Every function that used `&str` for the address has been changed to `&IpAddr` (thanks [@Douile](https://github.com/Douile) for the re-re-write). +- Protocols now use `&SocketAddr` instead of `address: &str, port: u16`. Services: - Valve Master Query: diff --git a/examples/master_querant.rs b/examples/master_querant.rs index 6815146..2feba87 100644 --- a/examples/master_querant.rs +++ b/examples/master_querant.rs @@ -4,7 +4,7 @@ use gamedig::protocols::valve; use gamedig::protocols::valve::Engine; use gamedig::{aliens, aoc, arma2oa, ase, asrd, avorion, bat1944, bb2, bf1942, bm, bo, ccure, cosu, cs, cscz, csgo, css, dod, dods, doi, dst, ffow, gm, hl2dm, hldms, ins, insmic, inss, l4d, l4d2, mc, ohd, onset, pz, ror2, rust, sc, sdtd, ss, tf, tf2, tfc, ts, unturned, ut, vr, GDResult, cw, quake2, quake1, quake3a, hll, sof2}; use std::env; -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; fn main() -> GDResult<()> { let args: Vec = env::args().collect(); @@ -31,6 +31,7 @@ fn main() -> GDResult<()> { } true => Some(args[3].parse::().expect("Invalid port!")), }; + let address = &SocketAddr::new(ip.clone(), port.unwrap_or(0)); match args[1].as_str() { "aliens" => println!("{:#?}", aliens::query(ip, port)?), @@ -52,19 +53,19 @@ fn main() -> GDResult<()> { "_src" => { println!( "{:#?}", - valve::query(ip, port.unwrap(), Engine::Source(None), None, None)? + valve::query(address, Engine::Source(None), None, None)? ) } "_gld" => { println!( "{:#?}", - valve::query(ip, port.unwrap(), Engine::GoldSrc(false), None, None)? + valve::query(address, Engine::GoldSrc(false), None, None)? ) } "_gld_f" => { println!( "{:#?}", - valve::query(ip, port.unwrap(), Engine::GoldSrc(true), None, None)? + valve::query(address, Engine::GoldSrc(true), None, None)? ) } "mc" => println!("{:#?}", mc::query(ip, port)?), @@ -114,18 +115,18 @@ fn main() -> GDResult<()> { "avorion" => println!("{:#?}", avorion::query(ip, port)?), "ohd" => println!("{:#?}", ohd::query(ip, port)?), "vr" => println!("{:#?}", vr::query(ip, port)?), - "_gamespy1" => println!("{:#?}", gamespy::one::query(ip, port.unwrap(), None)), - "_gamespy1_vars" => println!("{:#?}", gamespy::one::query_vars(ip, port.unwrap(), None)), + "_gamespy1" => println!("{:#?}", gamespy::one::query(address, None)), + "_gamespy1_vars" => println!("{:#?}", gamespy::one::query_vars(address, None)), "ut" => println!("{:#?}", ut::query(ip, port)), "bf1942" => println!("{:#?}", bf1942::query(ip, port)), "ss" => println!("{:#?}", ss::query(ip, port)), - "_gamespy3" => println!("{:#?}", gamespy::three::query(ip, port.unwrap(), None)), - "_gamespy3_vars" => println!("{:#?}", gamespy::three::query_vars(ip, port.unwrap(), None)), + "_gamespy3" => println!("{:#?}", gamespy::three::query(address, None)), + "_gamespy3_vars" => println!("{:#?}", gamespy::three::query_vars(address, None)), "ffow" => println!("{:#?}", ffow::query(ip, port)), "cw" => println!("{:#?}", cw::query(ip, port)), - "_quake1" => println!("{:#?}", quake::one::query(ip, port.unwrap(), None)), - "_quake2" => println!("{:#?}", quake::two::query(ip, port.unwrap(), None)), - "_quake3" => println!("{:#?}", quake::three::query(ip, port.unwrap(), None)), + "_quake1" => println!("{:#?}", quake::one::query(address, None)), + "_quake2" => println!("{:#?}", quake::two::query(address, None)), + "_quake3" => println!("{:#?}", quake::three::query(address, None)), "quake2" => println!("{:#?}", quake2::query(ip, port)?), "quake1" => println!("{:#?}", quake1::query(ip, port)?), "quake3a" => println!("{:#?}", quake3a::query(ip, port)?), diff --git a/src/games/aliens.rs b/src/games/aliens.rs index 38b8771..c67886b 100644 --- a/src/games/aliens.rs +++ b/src/games/aliens.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::ALIENS.as_engine(), None, None, diff --git a/src/games/aoc.rs b/src/games/aoc.rs index 6324de6..5e05b25 100644 --- a/src/games/aoc.rs +++ b/src/games/aoc.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::AOC.as_engine(), None, None, diff --git a/src/games/arma2oa.rs b/src/games/arma2oa.rs index 5fc692b..20959d0 100644 --- a/src/games/arma2oa.rs +++ b/src/games/arma2oa.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(2304), + &SocketAddr::new(*address, port.unwrap_or(2304)), SteamApp::ARMA2OA.as_engine(), None, None, diff --git a/src/games/ase.rs b/src/games/ase.rs index 41734f2..544cd69 100644 --- a/src/games/ase.rs +++ b/src/games/ase.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::ASE.as_engine(), None, None, diff --git a/src/games/asrd.rs b/src/games/asrd.rs index a911bdd..99aba4f 100644 --- a/src/games/asrd.rs +++ b/src/games/asrd.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(2304)), SteamApp::ASRD.as_engine(), None, None, diff --git a/src/games/avorion.rs b/src/games/avorion.rs index 5defd51..881e51e 100644 --- a/src/games/avorion.rs +++ b/src/games/avorion.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27020), + &SocketAddr::new(*address, port.unwrap_or(27020)), SteamApp::AVORION.as_engine(), None, None, diff --git a/src/games/bat1944.rs b/src/games/bat1944.rs index fd02d4a..7a0aa0a 100644 --- a/src/games/bat1944.rs +++ b/src/games/bat1944.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDError::TypeParse, @@ -7,8 +7,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let mut valve_response = valve::query( - address, - port.unwrap_or(7780), + &SocketAddr::new(*address, port.unwrap_or(7780)), SteamApp::BAT1944.as_engine(), None, None, diff --git a/src/games/bb2.rs b/src/games/bb2.rs index 8b417f0..9452657 100644 --- a/src/games/bb2.rs +++ b/src/games/bb2.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::BB2.as_engine(), None, None, diff --git a/src/games/bf1942.rs b/src/games/bf1942.rs index 1eacd83..b3b1d6b 100644 --- a/src/games/bf1942.rs +++ b/src/games/bf1942.rs @@ -1,8 +1,8 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::protocols::gamespy; use crate::protocols::gamespy::one::Response; use crate::GDResult; pub fn query(address: &IpAddr, port: Option) -> GDResult { - gamespy::one::query(address, port.unwrap_or(23000), None) + gamespy::one::query(&SocketAddr::new(*address, port.unwrap_or(23000)), None) } diff --git a/src/games/bm.rs b/src/games/bm.rs index 2585a41..08f9af0 100644 --- a/src/games/bm.rs +++ b/src/games/bm.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::BM.as_engine(), None, None, diff --git a/src/games/bo.rs b/src/games/bo.rs index a35e02e..e07b996 100644 --- a/src/games/bo.rs +++ b/src/games/bo.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27016), + &SocketAddr::new(*address, port.unwrap_or(27016)), SteamApp::BO.as_engine(), None, None, diff --git a/src/games/ccure.rs b/src/games/ccure.rs index 9d06f4f..b266d9d 100644 --- a/src/games/ccure.rs +++ b/src/games/ccure.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::CCURE.as_engine(), None, None, diff --git a/src/games/cosu.rs b/src/games/cosu.rs index cecd25a..8812a86 100644 --- a/src/games/cosu.rs +++ b/src/games/cosu.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27004), + &SocketAddr::new(*address, port.unwrap_or(27004)), SteamApp::COSU.as_engine(), None, None, diff --git a/src/games/cs.rs b/src/games/cs.rs index e13ef13..f69426f 100644 --- a/src/games/cs.rs +++ b/src/games/cs.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::CS.as_engine(), None, None, diff --git a/src/games/cscz.rs b/src/games/cscz.rs index 61a7075..f69c03e 100644 --- a/src/games/cscz.rs +++ b/src/games/cscz.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::CSCZ.as_engine(), None, None, diff --git a/src/games/csgo.rs b/src/games/csgo.rs index d92eb7c..39a00ca 100644 --- a/src/games/csgo.rs +++ b/src/games/csgo.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::CSGO.as_engine(), None, None, diff --git a/src/games/css.rs b/src/games/css.rs index d93ee37..5f1c684 100644 --- a/src/games/css.rs +++ b/src/games/css.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::CSS.as_engine(), None, None, diff --git a/src/games/cw.rs b/src/games/cw.rs index 4ce41f9..926893a 100644 --- a/src/games/cw.rs +++ b/src/games/cw.rs @@ -1,8 +1,8 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::protocols::gamespy; use crate::protocols::gamespy::three::Response; use crate::GDResult; pub fn query(address: &IpAddr, port: Option) -> GDResult { - gamespy::three::query(address, port.unwrap_or(64100), None) + gamespy::three::query(&SocketAddr::new(*address, port.unwrap_or(64100)), None) } diff --git a/src/games/dod.rs b/src/games/dod.rs index 02273b4..9cbfc73 100644 --- a/src/games/dod.rs +++ b/src/games/dod.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::DOD.as_engine(), None, None, diff --git a/src/games/dods.rs b/src/games/dods.rs index cba01ba..20b17ec 100644 --- a/src/games/dods.rs +++ b/src/games/dods.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::DODS.as_engine(), None, None, diff --git a/src/games/doi.rs b/src/games/doi.rs index 4d5e4ed..b3e277a 100644 --- a/src/games/doi.rs +++ b/src/games/doi.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::DOI.as_engine(), None, None, diff --git a/src/games/dst.rs b/src/games/dst.rs index 7833477..c5417b3 100644 --- a/src/games/dst.rs +++ b/src/games/dst.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27016), + &SocketAddr::new(*address, port.unwrap_or(27016)), SteamApp::DST.as_engine(), None, None, diff --git a/src/games/ffow.rs b/src/games/ffow.rs index d0c51b0..4c972c4 100644 --- a/src/games/ffow.rs +++ b/src/games/ffow.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::protocols::types::TimeoutSettings; use crate::protocols::valve::{Engine, Environment, Server, ValveProtocol}; use crate::GDResult; @@ -48,7 +48,7 @@ pub fn query(address: &IpAddr, port: Option) -> GDResult { } pub fn query_with_timeout(address: &IpAddr, port: Option, timeout_settings: TimeoutSettings) -> GDResult { - let mut client = ValveProtocol::new(address, port.unwrap_or(5478), Some(timeout_settings))?; + let mut client = ValveProtocol::new(&SocketAddr::new(*address, port.unwrap_or(5478)), Some(timeout_settings))?; let mut buffer = client.get_request_data( &Engine::GoldSrc(true), 0, diff --git a/src/games/gm.rs b/src/games/gm.rs index 78ce488..f2a6b24 100644 --- a/src/games/gm.rs +++ b/src/games/gm.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27016), + &SocketAddr::new(*address, port.unwrap_or(27016)), SteamApp::GM.as_engine(), None, None, diff --git a/src/games/hl2dm.rs b/src/games/hl2dm.rs index 7608b62..3c8a2fc 100644 --- a/src/games/hl2dm.rs +++ b/src/games/hl2dm.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::HL2DM.as_engine(), None, None, diff --git a/src/games/hldms.rs b/src/games/hldms.rs index 776f0c4..70b8b26 100644 --- a/src/games/hldms.rs +++ b/src/games/hldms.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::HLDMS.as_engine(), None, None, diff --git a/src/games/hll.rs b/src/games/hll.rs index 152f8cf..e49d135 100644 --- a/src/games/hll.rs +++ b/src/games/hll.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(26420), + &SocketAddr::new(*address, port.unwrap_or(26420)), SteamApp::HLL.as_engine(), None, None, diff --git a/src/games/ins.rs b/src/games/ins.rs index be76fba..4381fbb 100644 --- a/src/games/ins.rs +++ b/src/games/ins.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::INS.as_engine(), None, None, diff --git a/src/games/insmic.rs b/src/games/insmic.rs index d6f6edf..6a987d1 100644 --- a/src/games/insmic.rs +++ b/src/games/insmic.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::INSMIC.as_engine(), None, None, diff --git a/src/games/inss.rs b/src/games/inss.rs index a39e1d6..f757224 100644 --- a/src/games/inss.rs +++ b/src/games/inss.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27131), + &SocketAddr::new(*address, port.unwrap_or(27131)), SteamApp::INSS.as_engine(), None, None, diff --git a/src/games/l4d.rs b/src/games/l4d.rs index b0a45f8..f7ae027 100644 --- a/src/games/l4d.rs +++ b/src/games/l4d.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::L4D.as_engine(), None, None, diff --git a/src/games/l4d2.rs b/src/games/l4d2.rs index 67934f3..2411484 100644 --- a/src/games/l4d2.rs +++ b/src/games/l4d2.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::L4D2.as_engine(), None, None, diff --git a/src/games/mc.rs b/src/games/mc.rs index 9a22b76..8111b9b 100644 --- a/src/games/mc.rs +++ b/src/games/mc.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::minecraft::{self, BedrockResponse, JavaResponse, LegacyGroup}, GDError, @@ -25,22 +25,22 @@ pub fn query(address: &IpAddr, port: Option) -> GDResult { /// Query a Java Server. pub fn query_java(address: &IpAddr, port: Option) -> GDResult { - minecraft::query_java(address, port_or_java_default(port), None) + minecraft::query_java(&SocketAddr::new(*address, port_or_java_default(port)), None) } /// Query a (Java) Legacy Server (1.6 -> 1.4 -> Beta 1.8). pub fn query_legacy(address: &IpAddr, port: Option) -> GDResult { - minecraft::query_legacy(address, port_or_java_default(port), None) + minecraft::query_legacy(&SocketAddr::new(*address, port_or_java_default(port)), None) } /// Query a specific (Java) Legacy Server. pub fn query_legacy_specific(group: LegacyGroup, address: &IpAddr, port: Option) -> GDResult { - minecraft::query_legacy_specific(group, address, port_or_java_default(port), None) + minecraft::query_legacy_specific(group, &SocketAddr::new(*address, port_or_java_default(port)), None) } /// Query a Bedrock Server. pub fn query_bedrock(address: &IpAddr, port: Option) -> GDResult { - minecraft::query_bedrock(address, port_or_bedrock_default(port), None) + minecraft::query_bedrock(&SocketAddr::new(*address, port_or_bedrock_default(port)), None) } fn port_or_java_default(port: Option) -> u16 { port.unwrap_or(25565) } diff --git a/src/games/ohd.rs b/src/games/ohd.rs index a94f97b..6beb3b7 100644 --- a/src/games/ohd.rs +++ b/src/games/ohd.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27005), + &SocketAddr::new(*address, port.unwrap_or(27005)), SteamApp::OHD.as_engine(), None, None, diff --git a/src/games/onset.rs b/src/games/onset.rs index d7c652e..eb2e6e7 100644 --- a/src/games/onset.rs +++ b/src/games/onset.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(7776), + &SocketAddr::new(*address, port.unwrap_or(7776)), SteamApp::ONSET.as_engine(), None, None, diff --git a/src/games/pz.rs b/src/games/pz.rs index 8aab755..3cf4549 100644 --- a/src/games/pz.rs +++ b/src/games/pz.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(16261), + &SocketAddr::new(*address, port.unwrap_or(16261)), SteamApp::PZ.as_engine(), None, None, diff --git a/src/games/quake1.rs b/src/games/quake1.rs index 1e4b603..708df38 100644 --- a/src/games/quake1.rs +++ b/src/games/quake1.rs @@ -1,9 +1,9 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::GDResult; use crate::protocols::quake; use crate::protocols::quake::Response; use crate::protocols::quake::one::Player; pub fn query(address: &IpAddr, port: Option) -> GDResult> { - quake::one::query(address, port.unwrap_or(27500), None) + quake::one::query(&SocketAddr::new(*address, port.unwrap_or(27500)), None) } diff --git a/src/games/quake2.rs b/src/games/quake2.rs index 4d83e90..f0097f9 100644 --- a/src/games/quake2.rs +++ b/src/games/quake2.rs @@ -1,9 +1,9 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::GDResult; use crate::protocols::quake; use crate::protocols::quake::Response; use crate::protocols::quake::two::Player; pub fn query(address: &IpAddr, port: Option) -> GDResult> { - quake::two::query(address, port.unwrap_or(27910), None) + quake::two::query(&SocketAddr::new(*address, port.unwrap_or(27910)), None) } diff --git a/src/games/quake3a.rs b/src/games/quake3a.rs index 737a4e1..4886957 100644 --- a/src/games/quake3a.rs +++ b/src/games/quake3a.rs @@ -1,9 +1,9 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::GDResult; use crate::protocols::quake; use crate::protocols::quake::Response; use crate::protocols::quake::two::Player; pub fn query(address: &IpAddr, port: Option) -> GDResult> { - quake::three::query(address, port.unwrap_or(27960), None) + quake::three::query(&SocketAddr::new(*address, port.unwrap_or(27960)), None) } diff --git a/src/games/ror2.rs b/src/games/ror2.rs index 0afb89f..23e8ec5 100644 --- a/src/games/ror2.rs +++ b/src/games/ror2.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27016), + &SocketAddr::new(*address, port.unwrap_or(27016)), SteamApp::ROR2.as_engine(), None, None, diff --git a/src/games/rust.rs b/src/games/rust.rs index 2dcb893..bd724f9 100644 --- a/src/games/rust.rs +++ b/src/games/rust.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::RUST.as_engine(), None, None, diff --git a/src/games/sc.rs b/src/games/sc.rs index d8418aa..8765345 100644 --- a/src/games/sc.rs +++ b/src/games/sc.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::SC.as_engine(), None, None, diff --git a/src/games/sdtd.rs b/src/games/sdtd.rs index cc4eb02..2c213e3 100644 --- a/src/games/sdtd.rs +++ b/src/games/sdtd.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(26900), + &SocketAddr::new(*address, port.unwrap_or(26900)), SteamApp::SDTD.as_engine(), None, None, diff --git a/src/games/sof2.rs b/src/games/sof2.rs index 8beceea..d8bd1a8 100644 --- a/src/games/sof2.rs +++ b/src/games/sof2.rs @@ -1,9 +1,9 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::GDResult; use crate::protocols::quake; use crate::protocols::quake::Response; use crate::protocols::quake::two::Player; pub fn query(address: &IpAddr, port: Option) -> GDResult> { - quake::three::query(address, port.unwrap_or(20100), None) + quake::three::query(&SocketAddr::new(*address, port.unwrap_or(20100)), None) } diff --git a/src/games/ss.rs b/src/games/ss.rs index 8cdcb3c..33f2175 100644 --- a/src/games/ss.rs +++ b/src/games/ss.rs @@ -1,8 +1,8 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::protocols::gamespy; use crate::protocols::gamespy::one::Response; use crate::GDResult; pub fn query(address: &IpAddr, port: Option) -> GDResult { - gamespy::one::query(address, port.unwrap_or(25601), None) + gamespy::one::query(&SocketAddr::new(*address, port.unwrap_or(25601)), None) } diff --git a/src/games/tf.rs b/src/games/tf.rs index 62d6830..88d18f0 100644 --- a/src/games/tf.rs +++ b/src/games/tf.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27016), + &SocketAddr::new(*address, port.unwrap_or(27016)), SteamApp::TF.as_engine(), None, None, diff --git a/src/games/tf2.rs b/src/games/tf2.rs index bbca879..7098bb7 100644 --- a/src/games/tf2.rs +++ b/src/games/tf2.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::TF2.as_engine(), None, None, diff --git a/src/games/tfc.rs b/src/games/tfc.rs index 154b05f..beac79d 100644 --- a/src/games/tfc.rs +++ b/src/games/tfc.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::TFC.as_engine(), None, None, diff --git a/src/games/ts.rs b/src/games/ts.rs index ebdb30c..a7356bf 100644 --- a/src/games/ts.rs +++ b/src/games/ts.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, get_optional_extracted_data, Server, ServerPlayer, SteamApp}, GDResult, @@ -96,8 +96,7 @@ impl Response { pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::TS.as_engine(), None, None, diff --git a/src/games/unturned.rs b/src/games/unturned.rs index 827a039..0f00d9c 100644 --- a/src/games/unturned.rs +++ b/src/games/unturned.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27015), + &SocketAddr::new(*address, port.unwrap_or(27015)), SteamApp::UNTURNED.as_engine(), None, None, diff --git a/src/games/ut.rs b/src/games/ut.rs index e7ddc89..9906b00 100644 --- a/src/games/ut.rs +++ b/src/games/ut.rs @@ -1,8 +1,8 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::protocols::gamespy; use crate::protocols::gamespy::one::Response; use crate::GDResult; pub fn query(address: &IpAddr, port: Option) -> GDResult { - gamespy::one::query(address, port.unwrap_or(7778), None) + gamespy::one::query(&SocketAddr::new(*address, port.unwrap_or(7778)), None) } diff --git a/src/games/vr.rs b/src/games/vr.rs index 89ac7b7..65887c5 100644 --- a/src/games/vr.rs +++ b/src/games/vr.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, @@ -6,8 +6,7 @@ use crate::{ pub fn query(address: &IpAddr, port: Option) -> GDResult { let valve_response = valve::query( - address, - port.unwrap_or(27016), + &SocketAddr::new(*address, port.unwrap_or(27016)), SteamApp::VR.as_engine(), None, None, diff --git a/src/protocols/gamespy/protocols/one/protocol.rs b/src/protocols/gamespy/protocols/one/protocol.rs index e377d58..43ba7dc 100644 --- a/src/protocols/gamespy/protocols/one/protocol.rs +++ b/src/protocols/gamespy/protocols/one/protocol.rs @@ -8,17 +8,15 @@ use crate::{ GDError, GDResult, }; - use crate::protocols::gamespy::common::has_password; use std::collections::HashMap; -use std::net::IpAddr; +use std::net::SocketAddr; fn get_server_values( - address: &IpAddr, - port: u16, + address: &SocketAddr, timeout_settings: Option, ) -> GDResult> { - let mut socket = UdpSocket::new(address, port)?; + let mut socket = UdpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; socket.send("\\status\\xserverquery".as_bytes())?; @@ -178,18 +176,17 @@ fn extract_players(server_vars: &mut HashMap, players_maximum: u /// If there are parsing problems using the `query` function, you can directly /// get the server's values using this function. pub fn query_vars( - address: &IpAddr, - port: u16, + address: &SocketAddr, timeout_settings: Option, ) -> GDResult> { - get_server_values(address, port, timeout_settings) + get_server_values(address, timeout_settings) } /// Query a server by providing the address, the port and timeout settings. /// Providing None to the timeout settings results in using the default values. /// (TimeoutSettings::[default](TimeoutSettings::default)). -pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let mut server_vars = query_vars(address, port, timeout_settings)?; +pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let mut server_vars = query_vars(address, timeout_settings)?; let players_maximum = server_vars .remove("maxplayers") diff --git a/src/protocols/gamespy/protocols/three/protocol.rs b/src/protocols/gamespy/protocols/three/protocol.rs index 2cd6afc..2283203 100644 --- a/src/protocols/gamespy/protocols/three/protocol.rs +++ b/src/protocols/gamespy/protocols/three/protocol.rs @@ -5,7 +5,7 @@ use crate::protocols::types::TimeoutSettings; use crate::socket::{Socket, UdpSocket}; use crate::{GDError, GDResult}; use std::collections::HashMap; -use std::net::IpAddr; +use std::net::SocketAddr; const THIS_SESSION_ID: u32 = 1; @@ -43,8 +43,8 @@ struct GameSpy3 { const PACKET_SIZE: usize = 2048; impl GameSpy3 { - fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = UdpSocket::new(address, port)?; + fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = UdpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -104,8 +104,8 @@ impl GameSpy3 { } } -fn get_server_packets(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult>> { - let mut gs3 = GameSpy3::new(address, port, timeout_settings)?; +fn get_server_packets(address: &SocketAddr, timeout_settings: Option) -> GDResult>> { + let mut gs3 = GameSpy3::new(address, timeout_settings)?; let challenge = gs3.make_initial_handshake()?; gs3.send_data_request(challenge)?; @@ -165,11 +165,10 @@ fn data_to_map(packet: &[u8]) -> GDResult<(HashMap, Vec)> { /// If there are parsing problems using the `query` function, you can directly /// get the server's values using this function. pub fn query_vars( - address: &IpAddr, - port: u16, + address: &SocketAddr, timeout_settings: Option, ) -> GDResult> { - let packets = get_server_packets(address, port, timeout_settings)?; + let packets = get_server_packets(address, timeout_settings)?; let mut vars = HashMap::new(); @@ -308,8 +307,8 @@ fn parse_players_and_teams(packets: Vec>) -> GDResult<(Vec, Vec< /// Query a server by providing the address, the port and timeout settings. /// Providing None to the timeout settings results in using the default values. /// (TimeoutSettings::[default](TimeoutSettings::default)). -pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let packets = get_server_packets(address, port, timeout_settings)?; +pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let packets = get_server_packets(address, timeout_settings)?; let (mut server_vars, remaining_data) = data_to_map(packets.get(0).ok_or(GDError::PacketBad)?)?; diff --git a/src/protocols/minecraft/protocol/bedrock.rs b/src/protocols/minecraft/protocol/bedrock.rs index 371bb05..bd1a2df 100644 --- a/src/protocols/minecraft/protocol/bedrock.rs +++ b/src/protocols/minecraft/protocol/bedrock.rs @@ -1,7 +1,7 @@ // This file has code that has been documented by the NodeJS GameDig library // (MIT) from https://github.com/gamedig/node-gamedig/blob/master/protocols/minecraftbedrock.js -use std::net::IpAddr; +use std::net::SocketAddr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -19,8 +19,8 @@ pub struct Bedrock { } impl Bedrock { - fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = UdpSocket::new(address, port)?; + fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = UdpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -93,7 +93,7 @@ impl Bedrock { }) } - pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - Bedrock::new(address, port, timeout_settings)?.get_info() + pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + Bedrock::new(address, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/java.rs b/src/protocols/minecraft/protocol/java.rs index f547bfd..eaf471a 100644 --- a/src/protocols/minecraft/protocol/java.rs +++ b/src/protocols/minecraft/protocol/java.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -31,8 +31,8 @@ pub struct Java { } impl Java { - fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = TcpSocket::new(address, port)?; + fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = TcpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -139,7 +139,7 @@ impl Java { }) } - pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - Java::new(address, port, timeout_settings)?.get_info() + pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + Java::new(address, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/legacy_bv1_8.rs b/src/protocols/minecraft/protocol/legacy_bv1_8.rs index bb2a045..183ffc6 100644 --- a/src/protocols/minecraft/protocol/legacy_bv1_8.rs +++ b/src/protocols/minecraft/protocol/legacy_bv1_8.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -16,8 +16,8 @@ pub struct LegacyBV1_8 { } impl LegacyBV1_8 { - fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = TcpSocket::new(address, port)?; + fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = TcpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -60,7 +60,7 @@ impl LegacyBV1_8 { }) } - pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - LegacyBV1_8::new(address, port, timeout_settings)?.get_info() + pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + LegacyBV1_8::new(address, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/legacy_v1_4.rs b/src/protocols/minecraft/protocol/legacy_v1_4.rs index 02a837e..44b6338 100644 --- a/src/protocols/minecraft/protocol/legacy_v1_4.rs +++ b/src/protocols/minecraft/protocol/legacy_v1_4.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -16,8 +16,8 @@ pub struct LegacyV1_4 { } impl LegacyV1_4 { - fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = TcpSocket::new(address, port)?; + fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = TcpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -64,7 +64,7 @@ impl LegacyV1_4 { }) } - pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - LegacyV1_4::new(address, port, timeout_settings)?.get_info() + pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + LegacyV1_4::new(address, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/legacy_v1_6.rs b/src/protocols/minecraft/protocol/legacy_v1_6.rs index c976bd0..46e4953 100644 --- a/src/protocols/minecraft/protocol/legacy_v1_6.rs +++ b/src/protocols/minecraft/protocol/legacy_v1_6.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -16,8 +16,8 @@ pub struct LegacyV1_6 { } impl LegacyV1_6 { - fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = TcpSocket::new(address, port)?; + fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = TcpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -93,7 +93,7 @@ impl LegacyV1_6 { LegacyV1_6::get_response(&mut buffer) } - pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - LegacyV1_6::new(address, port, timeout_settings)?.get_info() + pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + LegacyV1_6::new(address, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/mod.rs b/src/protocols/minecraft/protocol/mod.rs index a424b51..35090b6 100644 --- a/src/protocols/minecraft/protocol/mod.rs +++ b/src/protocols/minecraft/protocol/mod.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use crate::{ protocols::minecraft::{ protocol::{ @@ -25,16 +25,16 @@ mod legacy_v1_6; /// Queries a Minecraft server with all the protocol variants one by one (Java /// -> Bedrock -> Legacy (1.6 -> 1.4 -> Beta 1.8)). -pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - if let Ok(response) = query_java(address, port, timeout_settings.clone()) { +pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult { + if let Ok(response) = query_java(address, timeout_settings.clone()) { return Ok(response); } - if let Ok(response) = query_bedrock(address, port, timeout_settings.clone()) { + if let Ok(response) = query_bedrock(address, timeout_settings.clone()) { return Ok(JavaResponse::from_bedrock_response(response)); } - if let Ok(response) = query_legacy(address, port, timeout_settings) { + if let Ok(response) = query_legacy(address, timeout_settings) { return Ok(response); } @@ -42,21 +42,21 @@ pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - Java::query(address, port, timeout_settings) +pub fn query_java(address: &SocketAddr, timeout_settings: Option) -> GDResult { + Java::query(address, timeout_settings) } /// Query a (Java) Legacy Server (1.6 -> 1.4 -> Beta 1.8). -pub fn query_legacy(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - if let Ok(response) = query_legacy_specific(LegacyGroup::V1_6, address, port, timeout_settings.clone()) { +pub fn query_legacy(address: &SocketAddr, timeout_settings: Option) -> GDResult { + if let Ok(response) = query_legacy_specific(LegacyGroup::V1_6, address, timeout_settings.clone()) { return Ok(response); } - if let Ok(response) = query_legacy_specific(LegacyGroup::V1_4, address, port, timeout_settings.clone()) { + if let Ok(response) = query_legacy_specific(LegacyGroup::V1_4, address, timeout_settings.clone()) { return Ok(response); } - if let Ok(response) = query_legacy_specific(LegacyGroup::VB1_8, address, port, timeout_settings) { + if let Ok(response) = query_legacy_specific(LegacyGroup::VB1_8, address, timeout_settings) { return Ok(response); } @@ -66,18 +66,17 @@ pub fn query_legacy(address: &IpAddr, port: u16, timeout_settings: Option, ) -> GDResult { match group { - LegacyGroup::V1_6 => LegacyV1_6::query(address, port, timeout_settings), - LegacyGroup::V1_4 => LegacyV1_4::query(address, port, timeout_settings), - LegacyGroup::VB1_8 => LegacyBV1_8::query(address, port, timeout_settings), + LegacyGroup::V1_6 => LegacyV1_6::query(address, timeout_settings), + LegacyGroup::V1_4 => LegacyV1_4::query(address, timeout_settings), + LegacyGroup::VB1_8 => LegacyBV1_8::query(address, timeout_settings), } } /// Query a Bedrock Server. -pub fn query_bedrock(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - Bedrock::query(address, port, timeout_settings) +pub fn query_bedrock(address: &SocketAddr, timeout_settings: Option) -> GDResult { + Bedrock::query(address, timeout_settings) } diff --git a/src/protocols/quake/client.rs b/src/protocols/quake/client.rs index 5154c6f..595c33b 100644 --- a/src/protocols/quake/client.rs +++ b/src/protocols/quake/client.rs @@ -1,5 +1,5 @@ use std::collections::HashMap; -use std::net::IpAddr; +use std::net::SocketAddr; use std::slice::Iter; use crate::bufferer::{Bufferer, Endianess}; use crate::{GDError, GDResult}; @@ -15,8 +15,8 @@ pub(crate) trait QuakeClient { fn parse_player_string(data: Iter<&str>) -> GDResult; } -fn get_data(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let mut socket = UdpSocket::new(address, port)?; +fn get_data(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let mut socket = UdpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; socket.send(&[&[0xFF, 0xFF, 0xFF, 0xFF], Client::get_send_header().as_bytes(), &[0x00]].concat())?; @@ -78,8 +78,8 @@ fn get_players(bufferer: &mut Bufferer) -> GDResult(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult> { - let mut bufferer = get_data::(address, port, timeout_settings)?; +pub(crate) fn client_query(address: &SocketAddr, timeout_settings: Option) -> GDResult> { + let mut bufferer = get_data::(address, timeout_settings)?; let mut server_vars = get_server_values(&mut bufferer)?; let players = get_players::(&mut bufferer)?; diff --git a/src/protocols/quake/one.rs b/src/protocols/quake/one.rs index a0454dd..60fe4c0 100644 --- a/src/protocols/quake/one.rs +++ b/src/protocols/quake/one.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use std::slice::Iter; use crate::{GDError, GDResult}; use crate::protocols::quake::Response; @@ -72,6 +72,6 @@ impl QuakeClient for QuakeOne { } } -pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult> { - client_query::(address, port, timeout_settings) +pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult> { + client_query::(address, timeout_settings) } diff --git a/src/protocols/quake/three.rs b/src/protocols/quake/three.rs index b2982ba..819e1e5 100644 --- a/src/protocols/quake/three.rs +++ b/src/protocols/quake/three.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use std::slice::Iter; use crate::GDResult; use crate::protocols::quake::two::{Player, QuakeTwo}; @@ -23,6 +23,6 @@ impl QuakeClient for QuakeThree { } } -pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult> { - client_query::(address, port, timeout_settings) +pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult> { + client_query::(address, timeout_settings) } diff --git a/src/protocols/quake/two.rs b/src/protocols/quake/two.rs index 75480d5..6eca4a4 100644 --- a/src/protocols/quake/two.rs +++ b/src/protocols/quake/two.rs @@ -1,4 +1,4 @@ -use std::net::IpAddr; +use std::net::SocketAddr; use std::slice::Iter; use crate::{GDError, GDResult}; use crate::protocols::quake::one::QuakeOne; @@ -47,6 +47,6 @@ impl QuakeClient for QuakeTwo { } } -pub fn query(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult> { - client_query::(address, port, timeout_settings) +pub fn query(address: &SocketAddr, timeout_settings: Option) -> GDResult> { + client_query::(address, timeout_settings) } diff --git a/src/protocols/valve/protocol.rs b/src/protocols/valve/protocol.rs index 0867ed5..e4bc067 100644 --- a/src/protocols/valve/protocol.rs +++ b/src/protocols/valve/protocol.rs @@ -30,7 +30,7 @@ use bzip2_rs::decoder::Decoder; use crate::protocols::valve::Packet; use std::collections::HashMap; -use std::net::IpAddr; +use std::net::SocketAddr; #[derive(Debug)] #[allow(dead_code)] //remove this later on @@ -125,8 +125,8 @@ pub(crate) struct ValveProtocol { static PACKET_SIZE: usize = 6144; impl ValveProtocol { - pub fn new(address: &IpAddr, port: u16, timeout_settings: Option) -> GDResult { - let socket = UdpSocket::new(address, port)?; + pub fn new(address: &SocketAddr, timeout_settings: Option) -> GDResult { + let socket = UdpSocket::new(address)?; socket.apply_timeout(timeout_settings)?; Ok(Self { socket }) @@ -412,8 +412,7 @@ impl ValveProtocol { /// (GatherSettings::[default](GatheringSettings::default), /// TimeoutSettings::[default](TimeoutSettings::default)). pub fn query( - address: &IpAddr, - port: u16, + address: &SocketAddr, engine: Engine, gather_settings: Option, timeout_settings: Option, @@ -421,7 +420,6 @@ pub fn query( let response_gather_settings = gather_settings.unwrap_or_default(); get_response( address, - port, engine, response_gather_settings, timeout_settings, @@ -429,13 +427,12 @@ pub fn query( } fn get_response( - address: &IpAddr, - port: u16, + address: &SocketAddr, engine: Engine, gather_settings: GatheringSettings, timeout_settings: Option, ) -> GDResult { - let mut client = ValveProtocol::new(address, port, timeout_settings)?; + let mut client = ValveProtocol::new(address, timeout_settings)?; let info = client.get_server_info(&engine)?; let protocol = info.protocol; diff --git a/src/services/valve_master_server/service.rs b/src/services/valve_master_server/service.rs index f0f719a..4cf1918 100644 --- a/src/services/valve_master_server/service.rs +++ b/src/services/valve_master_server/service.rs @@ -2,12 +2,11 @@ use crate::bufferer::{Bufferer, Endianess}; use crate::socket::{Socket, UdpSocket}; use crate::valve_master_server::{Region, SearchFilters}; use crate::{GDError, GDResult}; -use std::net::{IpAddr, Ipv4Addr}; +use std::net::{IpAddr, Ipv4Addr, SocketAddr}; /// The default master ip, which is the one for Source. -pub const DEFAULT_MASTER_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(208, 64, 201, 194)); // hl2master.steampowered.com -/// The default master port. -pub const DEFAULT_MASTER_PORT: u16 = 27011; +pub const DEFAULT_MASTER_ADDRESS: SocketAddr + = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(208, 64, 201, 194)), 27011); // hl2master.steampowered.com fn construct_payload(region: Region, filters: &Option, last_ip: &str, last_port: u16) -> Vec { let filters_bytes: Vec = match filters { @@ -43,8 +42,8 @@ pub struct ValveMasterServer { impl ValveMasterServer { /// Construct a new struct. - pub fn new(master_ip: &IpAddr, master_port: u16) -> GDResult { - let socket = UdpSocket::new(master_ip, master_port)?; + pub fn new(master_address: &SocketAddr) -> GDResult { + let socket = UdpSocket::new(master_address)?; socket.apply_timeout(None)?; Ok(Self { socket }) @@ -123,7 +122,7 @@ impl ValveMasterServer { /// faster as it results in less packets being sent, received and processed but /// yields less ips. pub fn query_singular(region: Region, search_filters: Option) -> GDResult> { - let mut master_server = ValveMasterServer::new(&DEFAULT_MASTER_IP, DEFAULT_MASTER_PORT)?; + let mut master_server = ValveMasterServer::new(&DEFAULT_MASTER_ADDRESS)?; let mut ips = master_server.query_specific(region, &search_filters, "0.0.0.0", 0)?; @@ -138,7 +137,7 @@ pub fn query_singular(region: Region, search_filters: Option) -> /// Make a complete query. pub fn query(region: Region, search_filters: Option) -> GDResult> { - let mut master_server = ValveMasterServer::new(&DEFAULT_MASTER_IP, DEFAULT_MASTER_PORT)?; + let mut master_server = ValveMasterServer::new(&DEFAULT_MASTER_ADDRESS)?; master_server.query(region, search_filters) } diff --git a/src/socket.rs b/src/socket.rs index fcf617a..b0714b2 100644 --- a/src/socket.rs +++ b/src/socket.rs @@ -1,6 +1,5 @@ use crate::{ protocols::types::TimeoutSettings, - utils::address_and_port_as_string, GDError::{PacketReceive, PacketSend, SocketBind, SocketConnect}, GDResult, }; @@ -9,12 +8,12 @@ use std::{ io::{Read, Write}, net, }; -use std::net::IpAddr; +use std::net::SocketAddr; const DEFAULT_PACKET_SIZE: usize = 1024; pub trait Socket { - fn new(address: &IpAddr, port: u16) -> GDResult + fn new(address: &SocketAddr) -> GDResult where Self: Sized; fn apply_timeout(&self, timeout_settings: Option) -> GDResult<()>; @@ -28,11 +27,9 @@ pub struct TcpSocket { } impl Socket for TcpSocket { - fn new(address: &IpAddr, port: u16) -> GDResult { - let complete_address = address_and_port_as_string(address, port); - + fn new(address: &SocketAddr) -> GDResult { Ok(Self { - socket: net::TcpStream::connect(complete_address).map_err(|_| SocketConnect)?, + socket: net::TcpStream::connect(address).map_err(|_| SocketConnect)?, }) } @@ -61,17 +58,16 @@ impl Socket for TcpSocket { pub struct UdpSocket { socket: net::UdpSocket, - complete_address: String, + address: SocketAddr, } impl Socket for UdpSocket { - fn new(address: &IpAddr, port: u16) -> GDResult { - let complete_address = address_and_port_as_string(address, port); + fn new(address: &SocketAddr) -> GDResult { let socket = net::UdpSocket::bind("0.0.0.0:0").map_err(|_| SocketBind)?; Ok(Self { socket, - complete_address, + address: address.clone(), }) } @@ -85,7 +81,7 @@ impl Socket for UdpSocket { fn send(&mut self, data: &[u8]) -> GDResult<()> { self.socket - .send_to(data, &self.complete_address) + .send_to(data, &self.address) .map_err(|_| PacketSend)?; Ok(()) } @@ -116,10 +112,8 @@ mod tests { stream.write(&buf).unwrap(); }); - let address = bound_address.ip(); - // Create a TCP socket and send a message to the server - let mut socket = TcpSocket::new(&address, bound_address.port()).unwrap(); + let mut socket = TcpSocket::new(&bound_address).unwrap(); let message = b"hello, world!"; socket.send(message).unwrap(); @@ -149,10 +143,8 @@ mod tests { socket.send_to(&buf, src_addr).unwrap(); }); - let address = bound_address.ip(); - // Create a UDP socket and send a message to the server - let mut socket = UdpSocket::new(&address, bound_address.port()).unwrap(); + let mut socket = UdpSocket::new(&bound_address).unwrap(); let message = b"hello, world!"; socket.send(message).unwrap(); diff --git a/src/utils.rs b/src/utils.rs index df2e0de..f93f755 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -2,9 +2,7 @@ use crate::{ GDError::{PacketOverflow, PacketUnderflow}, GDResult, }; - use std::cmp::Ordering; -use std::net::IpAddr; pub fn error_by_expected_size(expected: usize, size: usize) -> GDResult<()> { match size.cmp(&expected) { @@ -14,22 +12,10 @@ pub fn error_by_expected_size(expected: usize, size: usize) -> GDResult<()> { } } -pub fn address_and_port_as_string(address: &IpAddr, port: u16) -> String { format!("{}:{}", address, port) } - pub fn u8_lower_upper(n: u8) -> (u8, u8) { (n & 15, n >> 4) } #[cfg(test)] mod tests { - use std::net::{IpAddr, Ipv4Addr}; - - #[test] - fn address_and_port_as_string() { - assert_eq!( - super::address_and_port_as_string(&IpAddr::V4(Ipv4Addr::new(192, 168, 0, 1)), 27015), - "192.168.0.1:27015" - ); - } - #[test] fn u8_lower_upper() { assert_eq!(super::u8_lower_upper(171), (11, 10));