[Protocol] Enable the use of Ipv6 addresses (#41)

Replace usages of Ipv4Addr with IpAddr which allows the use of either Ipv4 or Ipv6.

This patch essentially consists of running:
"sed -i 's/Ipv4Addr/IpAddr/g' src/**/*.rs examples/*"
and fixing the errors.
This commit is contained in:
Tom 2023-05-29 08:10:21 +00:00 committed by GitHub
parent e620398615
commit 3f654e0dfd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
60 changed files with 155 additions and 162 deletions

View file

@ -11,10 +11,10 @@ use crate::{
use crate::protocols::gamespy::common::has_password;
use std::collections::HashMap;
use std::net::Ipv4Addr;
use std::net::IpAddr;
fn get_server_values(
address: &Ipv4Addr,
address: &IpAddr,
port: u16,
timeout_settings: Option<TimeoutSettings>,
) -> GDResult<HashMap<String, String>> {
@ -178,7 +178,7 @@ fn extract_players(server_vars: &mut HashMap<String, String>, 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: &Ipv4Addr,
address: &IpAddr,
port: u16,
timeout_settings: Option<TimeoutSettings>,
) -> GDResult<HashMap<String, String>> {
@ -188,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: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Response> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Response> {
let mut server_vars = query_vars(address, port, timeout_settings)?;
let players_maximum = server_vars

View file

@ -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::Ipv4Addr;
use std::net::IpAddr;
const THIS_SESSION_ID: u32 = 1;
@ -43,7 +43,7 @@ struct GameSpy3 {
const PACKET_SIZE: usize = 2048;
impl GameSpy3 {
fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = UdpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -104,7 +104,7 @@ impl GameSpy3 {
}
}
fn get_server_packets(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Vec<Vec<u8>>> {
fn get_server_packets(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Vec<Vec<u8>>> {
let mut gs3 = GameSpy3::new(address, port, timeout_settings)?;
let challenge = gs3.make_initial_handshake()?;
@ -165,7 +165,7 @@ fn data_to_map(packet: &[u8]) -> GDResult<(HashMap<String, String>, Vec<u8>)> {
/// 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: &Ipv4Addr,
address: &IpAddr,
port: u16,
timeout_settings: Option<TimeoutSettings>,
) -> GDResult<HashMap<String, String>> {
@ -308,7 +308,7 @@ fn parse_players_and_teams(packets: Vec<Vec<u8>>) -> GDResult<(Vec<Player>, 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: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Response> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Response> {
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)?)?;

View file

@ -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::Ipv4Addr;
use std::net::IpAddr;
use crate::{
bufferer::{Bufferer, Endianess},
protocols::{
@ -19,7 +19,7 @@ pub struct Bedrock {
}
impl Bedrock {
fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = UdpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -93,7 +93,7 @@ impl Bedrock {
})
}
pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<BedrockResponse> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<BedrockResponse> {
Bedrock::new(address, port, timeout_settings)?.get_info()
}
}

View file

@ -1,4 +1,4 @@
use std::net::Ipv4Addr;
use std::net::IpAddr;
use crate::{
bufferer::{Bufferer, Endianess},
protocols::{
@ -31,7 +31,7 @@ pub struct Java {
}
impl Java {
fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = TcpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -139,7 +139,7 @@ impl Java {
})
}
pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
Java::new(address, port, timeout_settings)?.get_info()
}
}

View file

@ -1,4 +1,4 @@
use std::net::Ipv4Addr;
use std::net::IpAddr;
use crate::{
bufferer::{Bufferer, Endianess},
protocols::{
@ -16,7 +16,7 @@ pub struct LegacyBV1_8 {
}
impl LegacyBV1_8 {
fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = TcpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -60,7 +60,7 @@ impl LegacyBV1_8 {
})
}
pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
LegacyBV1_8::new(address, port, timeout_settings)?.get_info()
}
}

View file

@ -1,4 +1,4 @@
use std::net::Ipv4Addr;
use std::net::IpAddr;
use crate::{
bufferer::{Bufferer, Endianess},
protocols::{
@ -16,7 +16,7 @@ pub struct LegacyV1_4 {
}
impl LegacyV1_4 {
fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = TcpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -64,7 +64,7 @@ impl LegacyV1_4 {
})
}
pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
LegacyV1_4::new(address, port, timeout_settings)?.get_info()
}
}

View file

@ -1,4 +1,4 @@
use std::net::Ipv4Addr;
use std::net::IpAddr;
use crate::{
bufferer::{Bufferer, Endianess},
protocols::{
@ -16,7 +16,7 @@ pub struct LegacyV1_6 {
}
impl LegacyV1_6 {
fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = TcpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -93,7 +93,7 @@ impl LegacyV1_6 {
LegacyV1_6::get_response(&mut buffer)
}
pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
LegacyV1_6::new(address, port, timeout_settings)?.get_info()
}
}

View file

@ -1,4 +1,4 @@
use std::net::Ipv4Addr;
use std::net::IpAddr;
use crate::{
protocols::minecraft::{
protocol::{
@ -25,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: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
if let Ok(response) = query_java(address, port, timeout_settings.clone()) {
return Ok(response);
}
@ -42,12 +42,12 @@ pub fn query(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSett
}
/// Query a Java Server.
pub fn query_java(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query_java(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
Java::query(address, port, timeout_settings)
}
/// Query a (Java) Legacy Server (1.6 -> 1.4 -> Beta 1.8).
pub fn query_legacy(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
pub fn query_legacy(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<JavaResponse> {
if let Ok(response) = query_legacy_specific(LegacyGroup::V1_6, address, port, timeout_settings.clone()) {
return Ok(response);
}
@ -66,7 +66,7 @@ pub fn query_legacy(address: &Ipv4Addr, port: u16, timeout_settings: Option<Time
/// Query a specific (Java) Legacy Server.
pub fn query_legacy_specific(
group: LegacyGroup,
address: &Ipv4Addr,
address: &IpAddr,
port: u16,
timeout_settings: Option<TimeoutSettings>,
) -> GDResult<JavaResponse> {
@ -78,6 +78,6 @@ pub fn query_legacy_specific(
}
/// Query a Bedrock Server.
pub fn query_bedrock(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<BedrockResponse> {
pub fn query_bedrock(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<BedrockResponse> {
Bedrock::query(address, port, timeout_settings)
}

View file

@ -30,7 +30,7 @@ use bzip2_rs::decoder::Decoder;
use crate::protocols::valve::Packet;
use std::collections::HashMap;
use std::net::Ipv4Addr;
use std::net::IpAddr;
#[derive(Debug)]
#[allow(dead_code)] //remove this later on
@ -125,7 +125,7 @@ pub(crate) struct ValveProtocol {
static PACKET_SIZE: usize = 6144;
impl ValveProtocol {
pub fn new(address: &Ipv4Addr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
pub fn new(address: &IpAddr, port: u16, timeout_settings: Option<TimeoutSettings>) -> GDResult<Self> {
let socket = UdpSocket::new(address, port)?;
socket.apply_timeout(timeout_settings)?;
@ -412,7 +412,7 @@ impl ValveProtocol {
/// (GatherSettings::[default](GatheringSettings::default),
/// TimeoutSettings::[default](TimeoutSettings::default)).
pub fn query(
address: &Ipv4Addr,
address: &IpAddr,
port: u16,
engine: Engine,
gather_settings: Option<GatheringSettings>,
@ -429,7 +429,7 @@ pub fn query(
}
fn get_response(
address: &Ipv4Addr,
address: &IpAddr,
port: u16,
engine: Engine,
gather_settings: GatheringSettings,