From e620398615753b1bc46a41999bd03f129ace0bb1 Mon Sep 17 00:00:00 2001 From: CosminPerRam Date: Sat, 27 May 2023 00:41:41 +0300 Subject: [PATCH] [Crate] Changed all address &str to &Ipv4Addr --- CHANGELOG.md | 2 ++ README.md | 4 +++- examples/master_querant.rs | 3 ++- examples/minecraft.rs | 2 +- examples/tf2.rs | 4 +++- src/games/aliens.rs | 3 ++- src/games/aoc.rs | 3 ++- src/games/arma2oa.rs | 3 ++- src/games/ase.rs | 3 ++- src/games/asrd.rs | 3 ++- src/games/avorion.rs | 3 ++- src/games/bat1944.rs | 3 ++- src/games/bb2.rs | 3 ++- src/games/bf1942.rs | 3 ++- src/games/bm.rs | 3 ++- src/games/bo.rs | 3 ++- src/games/ccure.rs | 3 ++- src/games/cosu.rs | 3 ++- src/games/cs.rs | 3 ++- src/games/cscz.rs | 3 ++- src/games/csgo.rs | 3 ++- src/games/css.rs | 3 ++- src/games/cw.rs | 3 ++- src/games/dod.rs | 3 ++- src/games/dods.rs | 3 ++- src/games/doi.rs | 3 ++- src/games/dst.rs | 3 ++- src/games/ffow.rs | 5 +++-- src/games/gm.rs | 3 ++- src/games/hl2dm.rs | 3 ++- src/games/hldms.rs | 3 ++- src/games/ins.rs | 3 ++- src/games/insmic.rs | 3 ++- src/games/inss.rs | 3 ++- src/games/l4d.rs | 3 ++- src/games/l4d2.rs | 3 ++- src/games/mc.rs | 11 +++++----- src/games/ohd.rs | 3 ++- src/games/onset.rs | 3 ++- src/games/pz.rs | 3 ++- src/games/ror2.rs | 3 ++- src/games/rust.rs | 3 ++- src/games/sc.rs | 3 ++- src/games/sdtd.rs | 3 ++- src/games/ss.rs | 3 ++- src/games/tf.rs | 3 ++- src/games/tf2.rs | 3 ++- src/games/tfc.rs | 3 ++- src/games/ts.rs | 3 ++- src/games/unturned.rs | 3 ++- src/games/ut.rs | 3 ++- src/games/vr.rs | 3 ++- src/lib.rs | 2 +- .../gamespy/protocols/one/protocol.rs | 7 +++--- .../gamespy/protocols/three/protocol.rs | 9 ++++---- src/protocols/minecraft/protocol/bedrock.rs | 5 +++-- src/protocols/minecraft/protocol/java.rs | 5 +++-- .../minecraft/protocol/legacy_bv1_8.rs | 5 +++-- .../minecraft/protocol/legacy_v1_4.rs | 5 +++-- .../minecraft/protocol/legacy_v1_6.rs | 5 +++-- src/protocols/minecraft/protocol/mod.rs | 11 +++++----- src/protocols/valve/protocol.rs | 7 +++--- src/services/valve_master_server/service.rs | 8 +++---- src/socket.rs | 22 ++++++++++++++----- src/utils.rs | 7 ++++-- 65 files changed, 171 insertions(+), 93 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f65ad09..7c3f879 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ Protocols: 1. Added standard and serde derives to `GatheringSettings`. ### Breaking: +- Every function that used `address: &str` has been changed to `address: &Ipv4Addr`. + Services: - Valve Master Query: 1. Removed Filter and SearchFilters lifetimes and changed `&'a str` to `String` and `&'a [&'a str]` to `Vec` diff --git a/README.md b/README.md index a35e905..87d7f30 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,9 @@ Pick a game/service/protocol (check the [GAMES](GAMES.md), [SERVICES](SERVICES.m use gamedig::games::tf2; fn main() { - let response = tf2::query("127.0.0.1", None); // None is the default port (which is 27015), could also be Some(27015) + let response = tf2::query(&"127.0.0.1".parse().unwrap(), None); + // None is the default port (which is 27015), could also be Some(27015) + match response { // Result type, must check what it is... Err(error) => println!("Couldn't query, error: {}", error), Ok(r) => println!("{:#?}", r) diff --git a/examples/master_querant.rs b/examples/master_querant.rs index 57247bd..51e96b5 100644 --- a/examples/master_querant.rs +++ b/examples/master_querant.rs @@ -4,6 +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}; use std::env; +use std::net::Ipv4Addr; fn main() -> GDResult<()> { let args: Vec = env::args().collect(); @@ -19,7 +20,7 @@ fn main() -> GDResult<()> { return Ok(()); } - let ip = args[2].as_str(); + let ip = &args[2].as_str().parse::().unwrap(); let port = match args.len() == 4 { false => { if args[1].starts_with("_") { diff --git a/examples/minecraft.rs b/examples/minecraft.rs index a61809a..1bfcf9f 100644 --- a/examples/minecraft.rs +++ b/examples/minecraft.rs @@ -3,7 +3,7 @@ use gamedig::games::mc; fn main() { // or Some(), None is the default protocol port (which is 25565 for java // and 19132 for bedrock) - let response = mc::query("127.0.0.1", None); + let response = mc::query(&"127.0.0.1".parse().unwrap(), None); match response { Err(error) => println!("Couldn't query, error: {}", error), diff --git a/examples/tf2.rs b/examples/tf2.rs index a4167d0..9f05813 100644 --- a/examples/tf2.rs +++ b/examples/tf2.rs @@ -1,7 +1,9 @@ use gamedig::games::tf2; fn main() { - let response = tf2::query("127.0.0.1", None); // or Some(27015), None is the default protocol port (which is 27015) + let response = tf2::query(&"127.0.0.1".parse().unwrap(), None); + // or Some(27015), None is the default protocol port (which is 27015) + match response { // Result type, must check what it is... Err(error) => println!("Couldn't query, error: {}", error), diff --git a/src/games/aliens.rs b/src/games/aliens.rs index 2144186..6a3ce2b 100644 --- a/src/games/aliens.rs +++ b/src/games/aliens.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/aoc.rs b/src/games/aoc.rs index c02d8e6..7a451a9 100644 --- a/src/games/aoc.rs +++ b/src/games/aoc.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/arma2oa.rs b/src/games/arma2oa.rs index 4c01c06..92863e0 100644 --- a/src/games/arma2oa.rs +++ b/src/games/arma2oa.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(2304), diff --git a/src/games/ase.rs b/src/games/ase.rs index 7b05fa3..55edf6d 100644 --- a/src/games/ase.rs +++ b/src/games/ase.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/asrd.rs b/src/games/asrd.rs index 57d6a70..38fa573 100644 --- a/src/games/asrd.rs +++ b/src/games/asrd.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/avorion.rs b/src/games/avorion.rs index b0c5ee2..e9236b6 100644 --- a/src/games/avorion.rs +++ b/src/games/avorion.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27020), diff --git a/src/games/bat1944.rs b/src/games/bat1944.rs index 1336176..f211d75 100644 --- a/src/games/bat1944.rs +++ b/src/games/bat1944.rs @@ -1,10 +1,11 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDError::TypeParse, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let mut valve_response = valve::query( address, port.unwrap_or(7780), diff --git a/src/games/bb2.rs b/src/games/bb2.rs index 7ccb040..b4b18e4 100644 --- a/src/games/bb2.rs +++ b/src/games/bb2.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/bf1942.rs b/src/games/bf1942.rs index 632db72..c0a934b 100644 --- a/src/games/bf1942.rs +++ b/src/games/bf1942.rs @@ -1,7 +1,8 @@ +use std::net::Ipv4Addr; use crate::protocols::gamespy; use crate::protocols::gamespy::one::Response; use crate::GDResult; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { gamespy::one::query(address, port.unwrap_or(23000), None) } diff --git a/src/games/bm.rs b/src/games/bm.rs index 7f99a96..c31e8e9 100644 --- a/src/games/bm.rs +++ b/src/games/bm.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/bo.rs b/src/games/bo.rs index 7576f81..4136720 100644 --- a/src/games/bo.rs +++ b/src/games/bo.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27016), diff --git a/src/games/ccure.rs b/src/games/ccure.rs index 23713bf..0acdc81 100644 --- a/src/games/ccure.rs +++ b/src/games/ccure.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/cosu.rs b/src/games/cosu.rs index 079e7c1..2018a90 100644 --- a/src/games/cosu.rs +++ b/src/games/cosu.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27004), diff --git a/src/games/cs.rs b/src/games/cs.rs index 1a926bc..a7cb8a0 100644 --- a/src/games/cs.rs +++ b/src/games/cs.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/cscz.rs b/src/games/cscz.rs index 19b83dc..82feb30 100644 --- a/src/games/cscz.rs +++ b/src/games/cscz.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/csgo.rs b/src/games/csgo.rs index 68dfef2..11b2df8 100644 --- a/src/games/csgo.rs +++ b/src/games/csgo.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/css.rs b/src/games/css.rs index 8d29825..1d43591 100644 --- a/src/games/css.rs +++ b/src/games/css.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/cw.rs b/src/games/cw.rs index 4c25e97..74a45e9 100644 --- a/src/games/cw.rs +++ b/src/games/cw.rs @@ -1,7 +1,8 @@ +use std::net::Ipv4Addr; use crate::protocols::gamespy; use crate::protocols::gamespy::three::Response; use crate::GDResult; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { gamespy::three::query(address, port.unwrap_or(64100), None) } diff --git a/src/games/dod.rs b/src/games/dod.rs index 1eeb355..b106ad9 100644 --- a/src/games/dod.rs +++ b/src/games/dod.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/dods.rs b/src/games/dods.rs index f0f6394..d585815 100644 --- a/src/games/dods.rs +++ b/src/games/dods.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/doi.rs b/src/games/doi.rs index f314a5c..fc85cee 100644 --- a/src/games/doi.rs +++ b/src/games/doi.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/dst.rs b/src/games/dst.rs index 218a461..2951173 100644 --- a/src/games/dst.rs +++ b/src/games/dst.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27016), diff --git a/src/games/ffow.rs b/src/games/ffow.rs index 3f7c1c2..a5face9 100644 --- a/src/games/ffow.rs +++ b/src/games/ffow.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::protocols::types::TimeoutSettings; use crate::protocols::valve::{Engine, Environment, Server, ValveProtocol}; use crate::GDResult; @@ -42,11 +43,11 @@ pub struct Response { pub time_left: u16, } -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { query_with_timeout(address, port, TimeoutSettings::default()) } -pub fn query_with_timeout(address: &str, port: Option, timeout_settings: TimeoutSettings) -> GDResult { +pub fn query_with_timeout(address: &Ipv4Addr, port: Option, timeout_settings: TimeoutSettings) -> GDResult { let mut client = ValveProtocol::new(address, port.unwrap_or(5478), Some(timeout_settings))?; let mut buffer = client.get_request_data( &Engine::GoldSrc(true), diff --git a/src/games/gm.rs b/src/games/gm.rs index 7fe0e70..429986a 100644 --- a/src/games/gm.rs +++ b/src/games/gm.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27016), diff --git a/src/games/hl2dm.rs b/src/games/hl2dm.rs index ecbf631..0e0bddb 100644 --- a/src/games/hl2dm.rs +++ b/src/games/hl2dm.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/hldms.rs b/src/games/hldms.rs index 5cbad74..77754e7 100644 --- a/src/games/hldms.rs +++ b/src/games/hldms.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/ins.rs b/src/games/ins.rs index bf4e9c4..1a99041 100644 --- a/src/games/ins.rs +++ b/src/games/ins.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/insmic.rs b/src/games/insmic.rs index 8f3bb33..a548450 100644 --- a/src/games/insmic.rs +++ b/src/games/insmic.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/inss.rs b/src/games/inss.rs index ad7f73e..f008adb 100644 --- a/src/games/inss.rs +++ b/src/games/inss.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27131), diff --git a/src/games/l4d.rs b/src/games/l4d.rs index 3e2d56d..1b8d761 100644 --- a/src/games/l4d.rs +++ b/src/games/l4d.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/l4d2.rs b/src/games/l4d2.rs index 524b496..bbfdc5d 100644 --- a/src/games/l4d2.rs +++ b/src/games/l4d2.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/mc.rs b/src/games/mc.rs index 84f6f3e..35d330a 100644 --- a/src/games/mc.rs +++ b/src/games/mc.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ protocols::minecraft::{self, BedrockResponse, JavaResponse, LegacyGroup}, GDError, @@ -6,7 +7,7 @@ use crate::{ /// Query with all the protocol variants one by one (Java -> Bedrock -> Legacy /// (1.6 -> 1.4 -> Beta 1.8)). -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { if let Ok(response) = query_java(address, port) { return Ok(response); } @@ -23,22 +24,22 @@ pub fn query(address: &str, port: Option) -> GDResult { } /// Query a Java Server. -pub fn query_java(address: &str, port: Option) -> GDResult { +pub fn query_java(address: &Ipv4Addr, port: Option) -> GDResult { minecraft::query_java(address, port_or_java_default(port), None) } /// Query a (Java) Legacy Server (1.6 -> 1.4 -> Beta 1.8). -pub fn query_legacy(address: &str, port: Option) -> GDResult { +pub fn query_legacy(address: &Ipv4Addr, port: Option) -> GDResult { minecraft::query_legacy(address, port_or_java_default(port), None) } /// Query a specific (Java) Legacy Server. -pub fn query_legacy_specific(group: LegacyGroup, address: &str, port: Option) -> GDResult { +pub fn query_legacy_specific(group: LegacyGroup, address: &Ipv4Addr, port: Option) -> GDResult { minecraft::query_legacy_specific(group, address, port_or_java_default(port), None) } /// Query a Bedrock Server. -pub fn query_bedrock(address: &str, port: Option) -> GDResult { +pub fn query_bedrock(address: &Ipv4Addr, port: Option) -> GDResult { minecraft::query_bedrock(address, port_or_bedrock_default(port), None) } diff --git a/src/games/ohd.rs b/src/games/ohd.rs index f12234e..271b316 100644 --- a/src/games/ohd.rs +++ b/src/games/ohd.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27005), diff --git a/src/games/onset.rs b/src/games/onset.rs index f73c073..f29ccd6 100644 --- a/src/games/onset.rs +++ b/src/games/onset.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(7776), diff --git a/src/games/pz.rs b/src/games/pz.rs index 14cdcfe..1466c13 100644 --- a/src/games/pz.rs +++ b/src/games/pz.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(16261), diff --git a/src/games/ror2.rs b/src/games/ror2.rs index e219b92..e3ca4c2 100644 --- a/src/games/ror2.rs +++ b/src/games/ror2.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27016), diff --git a/src/games/rust.rs b/src/games/rust.rs index 1482bfd..21277e1 100644 --- a/src/games/rust.rs +++ b/src/games/rust.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/sc.rs b/src/games/sc.rs index a7b2215..9811941 100644 --- a/src/games/sc.rs +++ b/src/games/sc.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/sdtd.rs b/src/games/sdtd.rs index 7dd5cc6..dd5ee93 100644 --- a/src/games/sdtd.rs +++ b/src/games/sdtd.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(26900), diff --git a/src/games/ss.rs b/src/games/ss.rs index 63463d7..57fd80f 100644 --- a/src/games/ss.rs +++ b/src/games/ss.rs @@ -1,7 +1,8 @@ +use std::net::Ipv4Addr; use crate::protocols::gamespy; use crate::protocols::gamespy::one::Response; use crate::GDResult; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { gamespy::one::query(address, port.unwrap_or(25601), None) } diff --git a/src/games/tf.rs b/src/games/tf.rs index dbf9b93..064c32b 100644 --- a/src/games/tf.rs +++ b/src/games/tf.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27016), diff --git a/src/games/tf2.rs b/src/games/tf2.rs index 4920bd2..2be6994 100644 --- a/src/games/tf2.rs +++ b/src/games/tf2.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/tfc.rs b/src/games/tfc.rs index a85f97c..0b966b1 100644 --- a/src/games/tfc.rs +++ b/src/games/tfc.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/ts.rs b/src/games/ts.rs index 4e6eb3c..1cdce9b 100644 --- a/src/games/ts.rs +++ b/src/games/ts.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, get_optional_extracted_data, Server, ServerPlayer, SteamApp}, GDResult, @@ -93,7 +94,7 @@ impl Response { } } -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/unturned.rs b/src/games/unturned.rs index c6e071f..1c5afda 100644 --- a/src/games/unturned.rs +++ b/src/games/unturned.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27015), diff --git a/src/games/ut.rs b/src/games/ut.rs index 27bfe68..3f96537 100644 --- a/src/games/ut.rs +++ b/src/games/ut.rs @@ -1,7 +1,8 @@ +use std::net::Ipv4Addr; use crate::protocols::gamespy; use crate::protocols::gamespy::one::Response; use crate::GDResult; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { gamespy::one::query(address, port.unwrap_or(7778), None) } diff --git a/src/games/vr.rs b/src/games/vr.rs index b391f32..31523e5 100644 --- a/src/games/vr.rs +++ b/src/games/vr.rs @@ -1,9 +1,10 @@ +use std::net::Ipv4Addr; use crate::{ protocols::valve::{self, game, SteamApp}, GDResult, }; -pub fn query(address: &str, port: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: Option) -> GDResult { let valve_response = valve::query( address, port.unwrap_or(27016), diff --git a/src/lib.rs b/src/lib.rs index 1ac2932..3254b53 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,7 @@ //! ``` //! use gamedig::games::tf2; //! -//! let response = tf2::query("127.0.0.1", None); // None is the default port (which is 27015), could also be Some(27015) +//! let response = tf2::query(&"127.0.0.1".parse().unwrap(), None); // None is the default port (which is 27015), could also be Some(27015) //! match response { // Result type, must check what it is... //! Err(error) => println!("Couldn't query, error: {}", error), //! Ok(r) => println!("{:#?}", r) diff --git a/src/protocols/gamespy/protocols/one/protocol.rs b/src/protocols/gamespy/protocols/one/protocol.rs index 4d32fe1..b688f81 100644 --- a/src/protocols/gamespy/protocols/one/protocol.rs +++ b/src/protocols/gamespy/protocols/one/protocol.rs @@ -11,9 +11,10 @@ use crate::{ use crate::protocols::gamespy::common::has_password; use std::collections::HashMap; +use std::net::Ipv4Addr; fn get_server_values( - address: &str, + address: &Ipv4Addr, port: u16, timeout_settings: Option, ) -> GDResult> { @@ -177,7 +178,7 @@ 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: &str, + address: &Ipv4Addr, port: u16, timeout_settings: Option, ) -> GDResult> { @@ -187,7 +188,7 @@ pub fn query_vars( /// 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: &str, port: u16, timeout_settings: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let mut server_vars = query_vars(address, port, timeout_settings)?; let players_maximum = server_vars diff --git a/src/protocols/gamespy/protocols/three/protocol.rs b/src/protocols/gamespy/protocols/three/protocol.rs index 08cbf6d..fb8cfe3 100644 --- a/src/protocols/gamespy/protocols/three/protocol.rs +++ b/src/protocols/gamespy/protocols/three/protocol.rs @@ -5,6 +5,7 @@ use crate::protocols::types::TimeoutSettings; use crate::socket::{Socket, UdpSocket}; use crate::{GDError, GDResult}; use std::collections::HashMap; +use std::net::Ipv4Addr; const THIS_SESSION_ID: u32 = 1; @@ -42,7 +43,7 @@ struct GameSpy3 { const PACKET_SIZE: usize = 2048; impl GameSpy3 { - fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = UdpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -103,7 +104,7 @@ impl GameSpy3 { } } -fn get_server_packets(address: &str, port: u16, timeout_settings: Option) -> GDResult>> { +fn get_server_packets(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult>> { let mut gs3 = GameSpy3::new(address, port, timeout_settings)?; let challenge = gs3.make_initial_handshake()?; @@ -164,7 +165,7 @@ 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: &str, + address: &Ipv4Addr, port: u16, timeout_settings: Option, ) -> GDResult> { @@ -307,7 +308,7 @@ 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: &str, port: u16, timeout_settings: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let packets = get_server_packets(address, port, 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 51899f0..6fa3632 100644 --- a/src/protocols/minecraft/protocol/bedrock.rs +++ b/src/protocols/minecraft/protocol/bedrock.rs @@ -1,6 +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::Ipv4Addr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -18,7 +19,7 @@ pub struct Bedrock { } impl Bedrock { - fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = UdpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -92,7 +93,7 @@ impl Bedrock { }) } - pub fn query(address: &str, port: u16, timeout_settings: Option) -> GDResult { + pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { Bedrock::new(address, port, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/java.rs b/src/protocols/minecraft/protocol/java.rs index 8d55d02..6e9b5f5 100644 --- a/src/protocols/minecraft/protocol/java.rs +++ b/src/protocols/minecraft/protocol/java.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -30,7 +31,7 @@ pub struct Java { } impl Java { - fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = TcpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -138,7 +139,7 @@ impl Java { }) } - pub fn query(address: &str, port: u16, timeout_settings: Option) -> GDResult { + pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { Java::new(address, port, 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 e977e44..9e742dd 100644 --- a/src/protocols/minecraft/protocol/legacy_bv1_8.rs +++ b/src/protocols/minecraft/protocol/legacy_bv1_8.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -15,7 +16,7 @@ pub struct LegacyBV1_8 { } impl LegacyBV1_8 { - fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = TcpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -59,7 +60,7 @@ impl LegacyBV1_8 { }) } - pub fn query(address: &str, port: u16, timeout_settings: Option) -> GDResult { + pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { LegacyBV1_8::new(address, port, 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 aed055d..ff79f57 100644 --- a/src/protocols/minecraft/protocol/legacy_v1_4.rs +++ b/src/protocols/minecraft/protocol/legacy_v1_4.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -15,7 +16,7 @@ pub struct LegacyV1_4 { } impl LegacyV1_4 { - fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = TcpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -63,7 +64,7 @@ impl LegacyV1_4 { }) } - pub fn query(address: &str, port: u16, timeout_settings: Option) -> GDResult { + pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { LegacyV1_4::new(address, port, 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 f901b79..1ff0545 100644 --- a/src/protocols/minecraft/protocol/legacy_v1_6.rs +++ b/src/protocols/minecraft/protocol/legacy_v1_6.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ bufferer::{Bufferer, Endianess}, protocols::{ @@ -15,7 +16,7 @@ pub struct LegacyV1_6 { } impl LegacyV1_6 { - fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = TcpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -92,7 +93,7 @@ impl LegacyV1_6 { LegacyV1_6::get_response(&mut buffer) } - pub fn query(address: &str, port: u16, timeout_settings: Option) -> GDResult { + pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { LegacyV1_6::new(address, port, timeout_settings)?.get_info() } } diff --git a/src/protocols/minecraft/protocol/mod.rs b/src/protocols/minecraft/protocol/mod.rs index 293c739..2911ab1 100644 --- a/src/protocols/minecraft/protocol/mod.rs +++ b/src/protocols/minecraft/protocol/mod.rs @@ -1,3 +1,4 @@ +use std::net::Ipv4Addr; use crate::{ protocols::minecraft::{ protocol::{ @@ -24,7 +25,7 @@ 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: &str, port: u16, timeout_settings: Option) -> GDResult { +pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { if let Ok(response) = query_java(address, port, timeout_settings.clone()) { return Ok(response); } @@ -41,12 +42,12 @@ pub fn query(address: &str, port: u16, timeout_settings: Option } /// Query a Java Server. -pub fn query_java(address: &str, port: u16, timeout_settings: Option) -> GDResult { +pub fn query_java(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { Java::query(address, port, timeout_settings) } /// Query a (Java) Legacy Server (1.6 -> 1.4 -> Beta 1.8). -pub fn query_legacy(address: &str, port: u16, timeout_settings: Option) -> GDResult { +pub fn query_legacy(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { if let Ok(response) = query_legacy_specific(LegacyGroup::V1_6, address, port, timeout_settings.clone()) { return Ok(response); } @@ -65,7 +66,7 @@ pub fn query_legacy(address: &str, port: u16, timeout_settings: Option, ) -> GDResult { @@ -77,6 +78,6 @@ pub fn query_legacy_specific( } /// Query a Bedrock Server. -pub fn query_bedrock(address: &str, port: u16, timeout_settings: Option) -> GDResult { +pub fn query_bedrock(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { Bedrock::query(address, port, timeout_settings) } diff --git a/src/protocols/valve/protocol.rs b/src/protocols/valve/protocol.rs index 87847ed..fa23c73 100644 --- a/src/protocols/valve/protocol.rs +++ b/src/protocols/valve/protocol.rs @@ -30,6 +30,7 @@ use bzip2_rs::decoder::Decoder; use crate::protocols::valve::Packet; use std::collections::HashMap; +use std::net::Ipv4Addr; #[derive(Debug)] #[allow(dead_code)] //remove this later on @@ -124,7 +125,7 @@ pub(crate) struct ValveProtocol { static PACKET_SIZE: usize = 6144; impl ValveProtocol { - pub fn new(address: &str, port: u16, timeout_settings: Option) -> GDResult { + pub fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option) -> GDResult { let socket = UdpSocket::new(address, port)?; socket.apply_timeout(timeout_settings)?; @@ -411,7 +412,7 @@ impl ValveProtocol { /// (GatherSettings::[default](GatheringSettings::default), /// TimeoutSettings::[default](TimeoutSettings::default)). pub fn query( - address: &str, + address: &Ipv4Addr, port: u16, engine: Engine, gather_settings: Option, @@ -428,7 +429,7 @@ pub fn query( } fn get_response( - address: &str, + address: &Ipv4Addr, port: u16, engine: Engine, gather_settings: GatheringSettings, diff --git a/src/services/valve_master_server/service.rs b/src/services/valve_master_server/service.rs index 169486d..30652a1 100644 --- a/src/services/valve_master_server/service.rs +++ b/src/services/valve_master_server/service.rs @@ -5,7 +5,7 @@ use crate::{GDError, GDResult}; use std::net::Ipv4Addr; /// The default master ip, which is the one for Source. -pub const DEFAULT_MASTER_IP: &str = "hl2master.steampowered.com"; +pub const DEFAULT_MASTER_IP: Ipv4Addr = Ipv4Addr::new(208, 64, 201, 194); // hl2master.steampowered.com /// The default master port. pub const DEFAULT_MASTER_PORT: u16 = 27011; @@ -43,7 +43,7 @@ pub struct ValveMasterServer { impl ValveMasterServer { /// Construct a new struct. - pub fn new(master_ip: &str, master_port: u16) -> GDResult { + pub fn new(master_ip: &Ipv4Addr, master_port: u16) -> GDResult { let socket = UdpSocket::new(master_ip, master_port)?; socket.apply_timeout(None)?; @@ -123,7 +123,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_IP, DEFAULT_MASTER_PORT)?; let mut ips = master_server.query_specific(region, &search_filters, "0.0.0.0", 0)?; @@ -138,7 +138,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_IP, DEFAULT_MASTER_PORT)?; master_server.query(region, search_filters) } diff --git a/src/socket.rs b/src/socket.rs index 37e78b6..abef48a 100644 --- a/src/socket.rs +++ b/src/socket.rs @@ -9,11 +9,12 @@ use std::{ io::{Read, Write}, net, }; +use std::net::Ipv4Addr; const DEFAULT_PACKET_SIZE: usize = 1024; pub trait Socket { - fn new(address: &str, port: u16) -> GDResult + fn new(address: &Ipv4Addr, port: u16) -> GDResult where Self: Sized; fn apply_timeout(&self, timeout_settings: Option) -> GDResult<()>; @@ -27,7 +28,7 @@ pub struct TcpSocket { } impl Socket for TcpSocket { - fn new(address: &str, port: u16) -> GDResult { + fn new(address: &Ipv4Addr, port: u16) -> GDResult { let complete_address = address_and_port_as_string(address, port); Ok(Self { @@ -64,7 +65,7 @@ pub struct UdpSocket { } impl Socket for UdpSocket { - fn new(address: &str, port: u16) -> GDResult { + fn new(address: &Ipv4Addr, port: u16) -> GDResult { let complete_address = address_and_port_as_string(address, port); let socket = net::UdpSocket::bind("0.0.0.0:0").map_err(|_| SocketBind)?; @@ -99,6 +100,7 @@ impl Socket for UdpSocket { #[cfg(test)] mod tests { + use std::net::IpAddr; use std::thread; use super::*; @@ -115,8 +117,13 @@ mod tests { stream.write(&buf).unwrap(); }); + let address = match bound_address.ip() { + IpAddr::V4(a) => a, + _ => panic!("address not ipv4!") + }; + // Create a TCP socket and send a message to the server - let mut socket = TcpSocket::new(&*bound_address.ip().to_string(), bound_address.port()).unwrap(); + let mut socket = TcpSocket::new(&address, bound_address.port()).unwrap(); let message = b"hello, world!"; socket.send(message).unwrap(); @@ -146,8 +153,13 @@ mod tests { socket.send_to(&buf, src_addr).unwrap(); }); + let address = match bound_address.ip() { + IpAddr::V4(a) => a, + _ => panic!("address not ipv4!") + }; + // Create a UDP socket and send a message to the server - let mut socket = UdpSocket::new(&*bound_address.ip().to_string(), bound_address.port()).unwrap(); + let mut socket = UdpSocket::new(&address, bound_address.port()).unwrap(); let message = b"hello, world!"; socket.send(message).unwrap(); diff --git a/src/utils.rs b/src/utils.rs index 42a0033..21bdc5a 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -4,6 +4,7 @@ use crate::{ }; use std::cmp::Ordering; +use std::net::Ipv4Addr; pub fn error_by_expected_size(expected: usize, size: usize) -> GDResult<()> { match size.cmp(&expected) { @@ -13,16 +14,18 @@ pub fn error_by_expected_size(expected: usize, size: usize) -> GDResult<()> { } } -pub fn address_and_port_as_string(address: &str, port: u16) -> String { format!("{}:{}", address, port) } +pub fn address_and_port_as_string(address: &Ipv4Addr, 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::Ipv4Addr; + #[test] fn address_and_port_as_string() { assert_eq!( - super::address_and_port_as_string("192.168.0.1", 27015), + super::address_and_port_as_string(&Ipv4Addr::new(192, 168, 0, 1), 27015), "192.168.0.1:27015" ); }