rust-gamedig/CHANGELOG.md

16 KiB

Who knows what the future holds...

0.X.Y - DD/MM/2023

Changes:

Protocols:

  • Quake 2: Fixed a bug where the version tag wouldn't always be present.
  • Valve: Added the field check_app_id to GatherSettings which controls if the app id specified to the request and reported by the server are the same, errors if not, enabled by default.
  • Valve: Fixed player's score field being u32 when it needed to be i32, as specified in the protocol.
  • The Ship: Fixed some instances of using unwrap without handling the panics.

Crate:

  • Rich errors, capturing backtrace is done on RUST_BACKTRACE=1.
  • Applied some nursery Clippy lints.

Breaking...

Protocols:

  • Gamespy 1: Renamed the players frags field to score to be more inline with the other protocols.
  • Quake: The version field has been changed from Stringto Option<String>.

Crate:

  • The enum used for errors, GDError has been renamed to GDErrorKind.
  • GDError is now a struct that holds its kind, the source and a backtrace.

Generics:

  • Renamed CommonResponseJson's game field (and the function) to game_mode.
  • Changed players_maximum and players_online (and their functions) types from u64 to u32.
  • Changed score type (and the function) of player from u32 to i32.

Protocol:

  • Valve:
  1. Renamed protocol to protocol_version.
  2. Renamed version to game_version.
  3. Renamed game to game_mode.
  4. Changed score type of player from u32 to i32.
  • GameSpy (1, 2, 3):
  1. Renamed version to game_version.
  2. Changed players_maximum and players_online (and their functions) types from usize to u32.
  • GameSpy 1:
  1. Changed score type of player from u32 to i32.
  • Quake (1, 2):
  1. Renamed game_type to game_mode.
  • Minecraft Java
  1. Renamed version_protocol to protocol_version.
  2. Renamed version_name to game_version.
  3. Renamed players_sample to players.
  • Minecraft Bedrock
  1. Renamed version_protocol to protocol_version.
  • The Ship:
  1. Renamed protocol to protocol_version.
  2. Renamed max_players to players_maximum and changed its type from u64 to u32.
  3. Renamed bots to players_bots. and changed its type from u64 to u32.
  4. Renamed players to players_online.
  5. Renamed players_details to players.
  6. Renamed game to game_mode.
  7. Added field game_version.
  8. Changed players_bots type from Option<u64> to Option<u32>.
  9. Changed score type of player from u32 to i32.
  • Frontlines: Fuel of War:
  1. Renamed game_mode to game.
  2. Renamed version to game_version.
  3. Renamed protocol to protocol_version.
  4. Renamed game to game_mode.
  5. Changed players_maximum and players_minimum types from usize to u32.
  • Just Cause 2: Multiplayer:
  1. Renamed version to game_version.
  2. Changed players_maximum and players_minimum types from usize to u32.

0.3.0 - 18/07/2023

Changes:

Protocols:

  • GameSpy 2 support.
  • Quake 2: Added Optional address field to Player.

Generic query:

  • Added generic queries (by @Douile) which come with a common struct for the response fields.
  • The supported games list is available programmatically.

Games:

Internal:

  • Buffer reader rewrite, resulting in more data checks and better code quality (thanks @cainthebest).
  • Better CI to never break accidentally MSRV again (thanks @Douile).

Breaking...

Protocols:

  • Quake 2: Renamed the players frags field to score to be more inline with the other protocols.

Crate:

  • no_games and no_services have been changed to games and services, this better represents that they are present by default (by @Douile).
  • Fixed crate's rust-version, it is now 1.60.0 (was 1.56.1)

0.2.3 - 02/06/2023

Changes:

Protocols:

  • Valve:
  1. Added standard and serde derives to GatheringSettings.
  • Quake 1, 2 and 3 support.

Games:

Breaking:

  • Every function that used &str for the address has been changed to &IpAddr (thanks @Douile for the re-re-write).
  • Protocols now use &SocketAddr instead of address: &str, port: u16.

Services:

  • Valve Master Query:
  1. Removed Filter and SearchFilters lifetimes and changed &'a str to String and &'a [&'a str] to Vec<String>

0.2.2 - 01/05/2023

Changes:

Crate:

  • General optimizations thanks to cargo clippy and @cainthebest.
  • Added feature serde which enables json serialization/deserialization for all types (by @cainthebest).
  • Documentation improvements.

Protocols:

  • GameSpy 1: Add key admin as a possible variable for admin_name.
  • GameSpy 3 support.

Games:

Services:

Breaking:

Protocols:

  • Valve: Request type enums have been renamed from all caps to starting-only uppercase, ex: INFO to Info
  • GameSpy 1: players_minimum is now an Option<u8> instead of an u8
  • GameSpy 1: Is now under protocols::gamespy::one instead of protocols::gamespy

0.2.1 - 03/03/2023

Changes:

Crate:

  • Added feature no_games which disables the supported games (useful when only the protocols/services are needed, also saves storage space).

Games:

Protocols:

  • Valve:
  1. Reversed (from 0.1.0) "Players with no name are no more added to the players_details field.", also added a note in the protocols file regarding this.
  2. Fixed querying while multiple challenge responses might happen.
  • GameSpy 1 support.

Breaking:

None.

0.2.0 - 18/02/2023

Changes:

Games:

Protocols:

  • Valve:
  1. appid is now a field in the Response struct.

Breaking:

Protocols:

  • Valve: due to some games being able to host a server from within the game AND from a dedicated server, if you were to query one of them, the query would fail for the other one, as the SteamID enum for that game could specify only one id.
  1. SteamID is now SteamApp, was an u32 enum, and now it's a simple enum.
  2. App is now Engine, the Source enum's structure has been changed from Option<u32> to Option<u32, Option<u32>>, where the first parameter is the game app id and the second is the dedicated server app id (if there is one).

0.1.0 - 17/01/2023

Changes:

Games:

Protocols:

  • Valve: Players with no name are no more added to the players_details field.
  • Valve: Split packets are now appending in the correct order.

Crate:

  • MSRV is now 1.56.1 (was 1.58.1)

Breaking:

Protocols:

  • Valve: The rules field is now a HashMap<String, String> instead of a Vec<ServerRule> (where the ServerRule structure had a name and a value fields).
  • Valve: Structs that contained the players, max_players and bots fields have been renamed to players_online, players_maximum and players_bots respectively.
  • Minecraft: Structs that contained the online_players, max_players and sample_players fields have been renamed to players_online, players_maximum and players_sample respectively.
  • Minecraft: The Java query response struct named Response has been renamed to JavaResponse.

Errors:

  • Besides the BadGame error, now no other errors returns details about what happened (as it was quite pointless).

Crate:

  • package.metadata.msrv has been replaced with package.rust-version

0.0.7 - 03/01/2023

Changes:

Minecraft bedrock edition support.
Fix Minecraft legacy v1.6 max/online players count being reversed.
Added query_legacy_specific method to the Minecraft protocol.

Breaking:

Removed query_specific from the mc protocol in favor of query_java, query_legacy and query_legacy_specific.
Some public functions that are meant to be used only internally were made private.

0.0.6 - 28/11/2022

Minecraft support (bedrock not supported yet).
7 Days To Die support.
ARK: Survival Evolved support.
Unturned support.
The Forest support.
Team Fortress Classic support.
Sven Co-op support.
Rust support.
Counter-Strike support.
Arma 2: Operation Arrowhead support.
Day of Infamy support.
Half-Life Deathmatch: Source support.
Successfully tested Alien Swarm and Insurgency: Modern Infantry Combat.
Restored rules response for Counter-Strike: Global Offensive (note: for a full player list response, the cvar host_players_show must be set to 2).
Increased Valve Protocol PACKET_SIZE from 1400 to 6144 (because some games send larger packets than the specified protocol size).
Removed DNS resolving as it was not needed.
Valve Protocol minor optimizations.

0.0.5 - 15/11/2022

Added SocketBind error, regarding failing to bind a socket.
Socket custom timeout capability (with an error if provided durations are zero).
Because of this, a parameter similar to GatherSettings has been added on the Valve Protocol Query. Support for GoldSrc split packets and obsolete A2S_INFO response.
Changed the Valve Protocol app parameter to represent the engine responses. It is now an enum of:

  • Source(Option<u32>) - A Source response with optionally, the id (if the id is present and the response id is not the same, the query fails), if it isn't provided, find it.
  • GoldSrc(bool) - A GoldSrc response with the option to enforce the obsolete A2S_INFO response.

Fixed Source multi-packet response crash due to when a certain app with a certain protocol doesn't have the Size field.
Reduced Valve Protocol PACKET_SIZE to be as specified from 2048 to 1400.
Counter-Strike: Condition Zero implementation.
Day of Defeat implementation.
Games besides CSGO and TS now have the same response structure.

0.0.4 - 23/10/2022

Queries now support DNS resolve.
Changed uses a bit, example: from use gamedig::valve::ValveProtocol::query to use gamedig::protocols::valve::query.
Changed Valve Protocol Query parameters to (ip, port, app, gather_settings), changes include:

  • the app is now optional, being None means to anonymously query the server.
  • gather_settings is now also an optional, being None means all query settings.

Valve Protocol now supports querying anonymous apps (see previous lines).
Better bad game error.
Alien Swarm implementation (not tested).
Alien Swarm: Reactive Drop implementation.
Insurgency implementation.
Insurgency: Sandstorm implementation.
Insurgency: Modern Infantry Combat implementation (not tested).

0.0.3 - 22/10/2022

Valve protocol now properly supports multi-packet responses (compressed ones not tested).
CSGO, TF2 and TS now have independent Responses, if you want a generic one, query the protocol.
Counter Strike: Source implementation (if protocol is 7, queries with multi-packet responses will crash).
Day of Defeat: Source implementation.
Garry's Mod implementation.
Half-Life 2 Deathmatch implementation.
Left 4 Dead implementation.
Left 4 Dead 2 implementation.

0.0.2 - 20/10/2022

Further implementation of the Valve protocol (PLAYERS and RULES queries).
Counter Strike: Global Offensive implementation.
The Ship implementation.
The library now has error handling.

0.0.1 - 16/10/2022

The first usable version of the crate, yay!
It brings:
Initial implementation of the Valve server query protocol.
Initial Team Fortress 2 support.

0.0.0 - 15/10/2022

The first markdown, the crate is unusable as it doesn't contain anything helpful.