mirror of
https://git.mentality.rip/numas13/xash3d-master.git
synced 2025-02-02 02:04:16 +00:00
master: resolve addr for update_addr config
Set required client version to 0.19 and newer. Set game server challenge timeout to 10 seconds.
This commit is contained in:
parent
44448da7a6
commit
e30d1c2a65
@ -10,7 +10,7 @@ port = 27010
|
|||||||
|
|
||||||
[server.timeout]
|
[server.timeout]
|
||||||
# Time in seconds while challenge is valid
|
# Time in seconds while challenge is valid
|
||||||
challenge = 300
|
challenge = 10
|
||||||
# Time in seconds while server is valid
|
# Time in seconds while server is valid
|
||||||
server = 300
|
server = 300
|
||||||
# TIme in seconds before next admin request is allowed after wrong password
|
# TIme in seconds before next admin request is allowed after wrong password
|
||||||
@ -18,10 +18,10 @@ admin = 10
|
|||||||
|
|
||||||
[client]
|
[client]
|
||||||
# If client version is less then show update message
|
# If client version is less then show update message
|
||||||
version = "0.20"
|
version = "0.19"
|
||||||
update_title = "https://github.com/FWGS/xash3d-fwgs"
|
update_title = "https://github.com/FWGS/xash3d-fwgs"
|
||||||
update_map = "Update please"
|
update_map = "Update please"
|
||||||
update_addr = "127.0.0.1:27010"
|
update_addr = "mentality.rip:27010"
|
||||||
|
|
||||||
[hash]
|
[hash]
|
||||||
len = 64
|
len = 64
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddrV4};
|
use std::net::{IpAddr, Ipv4Addr};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
@ -16,6 +16,7 @@ pub const DEFAULT_CONFIG_PATH: &str = "config/main.toml";
|
|||||||
|
|
||||||
pub const DEFAULT_MASTER_SERVER_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
|
pub const DEFAULT_MASTER_SERVER_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
|
||||||
pub const DEFAULT_MASTER_SERVER_PORT: u16 = 27010;
|
pub const DEFAULT_MASTER_SERVER_PORT: u16 = 27010;
|
||||||
|
pub const DEFAULT_CHALLENGE_TIMEOUT: u32 = 10;
|
||||||
pub const DEFAULT_TIMEOUT: u32 = 300;
|
pub const DEFAULT_TIMEOUT: u32 = 300;
|
||||||
pub const DEFAULT_ADMIN_TIMEOUT: u32 = 10;
|
pub const DEFAULT_ADMIN_TIMEOUT: u32 = 10;
|
||||||
|
|
||||||
@ -83,7 +84,7 @@ impl Default for ServerConfig {
|
|||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
#[serde(deny_unknown_fields)]
|
#[serde(deny_unknown_fields)]
|
||||||
pub struct TimeoutConfig {
|
pub struct TimeoutConfig {
|
||||||
#[serde(default = "default_timeout")]
|
#[serde(default = "default_challenge_timeout")]
|
||||||
pub challenge: u32,
|
pub challenge: u32,
|
||||||
#[serde(default = "default_timeout")]
|
#[serde(default = "default_timeout")]
|
||||||
pub server: u32,
|
pub server: u32,
|
||||||
@ -94,7 +95,7 @@ pub struct TimeoutConfig {
|
|||||||
impl Default for TimeoutConfig {
|
impl Default for TimeoutConfig {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
challenge: default_timeout(),
|
challenge: default_challenge_timeout(),
|
||||||
server: default_timeout(),
|
server: default_timeout(),
|
||||||
admin: default_admin_timeout(),
|
admin: default_admin_timeout(),
|
||||||
}
|
}
|
||||||
@ -112,7 +113,7 @@ pub struct ClientConfig {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub update_title: Box<str>,
|
pub update_title: Box<str>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub update_addr: Option<SocketAddrV4>,
|
pub update_addr: Option<Box<str>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Default, Debug)]
|
#[derive(Deserialize, Default, Debug)]
|
||||||
@ -145,6 +146,10 @@ fn default_server_port() -> u16 {
|
|||||||
DEFAULT_MASTER_SERVER_PORT
|
DEFAULT_MASTER_SERVER_PORT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn default_challenge_timeout() -> u32 {
|
||||||
|
DEFAULT_CHALLENGE_TIMEOUT
|
||||||
|
}
|
||||||
|
|
||||||
fn default_timeout() -> u32 {
|
fn default_timeout() -> u32 {
|
||||||
DEFAULT_TIMEOUT
|
DEFAULT_TIMEOUT
|
||||||
}
|
}
|
||||||
|
@ -124,18 +124,51 @@ struct MasterServer {
|
|||||||
blocklist: HashSet<Ipv4Addr>,
|
blocklist: HashSet<Ipv4Addr>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn resolve_socket_addr<A>(addr: A) -> io::Result<Option<SocketAddrV4>>
|
||||||
|
where
|
||||||
|
A: ToSocketAddrs,
|
||||||
|
{
|
||||||
|
for i in addr.to_socket_addrs()? {
|
||||||
|
match i {
|
||||||
|
SocketAddr::V4(i) => return Ok(Some(i)),
|
||||||
|
SocketAddr::V6(_) => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
|
||||||
impl MasterServer {
|
impl MasterServer {
|
||||||
fn new(cfg: Config) -> Result<Self, Error> {
|
fn new(cfg: Config) -> Result<Self, Error> {
|
||||||
let addr = SocketAddr::new(cfg.server.ip, cfg.server.port);
|
let addr = SocketAddr::new(cfg.server.ip, cfg.server.port);
|
||||||
info!("Listen address: {}", addr);
|
info!("Listen address: {}", addr);
|
||||||
let sock = UdpSocket::bind(addr).map_err(Error::BindSocket)?;
|
let sock = UdpSocket::bind(addr).map_err(Error::BindSocket)?;
|
||||||
let update_addr =
|
|
||||||
cfg.client
|
let update_addr = {
|
||||||
.update_addr
|
let mut addr = None;
|
||||||
.unwrap_or_else(|| match sock.local_addr().unwrap() {
|
|
||||||
SocketAddr::V4(addr) => addr,
|
if let Some(update_addr) = cfg.client.update_addr {
|
||||||
_ => todo!(),
|
addr = match resolve_socket_addr(&*update_addr) {
|
||||||
});
|
Ok(None) => {
|
||||||
|
error!(
|
||||||
|
"update address: failed to resolve IPv4 for \"{}\"",
|
||||||
|
update_addr
|
||||||
|
);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
error!("update address: {}", e);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
Ok(addr) => addr,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// fallback to local address
|
||||||
|
addr.unwrap_or_else(|| match sock.local_addr().unwrap() {
|
||||||
|
SocketAddr::V4(a) => a,
|
||||||
|
_ => todo!(),
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
sock,
|
sock,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user