rust-gamedig/crates/lib/CHANGELOG.md
CosminPerRam 41a3d88fb5
feat: add minetest master server service (#209)
* feat: add minetest master server service"

* restore tf2 example

* chore: replace default with None

* fix: make it available only on TLS and serde

* docs: update changelog
2024-07-21 03:01:10 +03:00

23 KiB

Who knows what the future holds...

0.X.Y - DD/MM/YYYY

Games:

Services:

  • MineTest Master Server support (available only on the tls and serde feature).

0.5.1 - 12/05/2024

Games:

Protocols:

  • Epic (EOS) support, available only on the tls feature.

Crate:

  • Updated some dependencies: crc32fast to 1.4.0, clap to 4.5.4 and ureq to ureq.

0.5.0 - 15/03/2024

Changes:

Games:

Crate:

  • Changed the serde feature to only enable serde derive for some types: serde and serde_json is now a dependecy by default.

Protocols:

  • Added the unreal2 protocol and its associated games: Darkest Hour, Devastation, Killing Floor, Red Orchestra, Unreal Tournament 2003, Unreal Tournament 2004 (by @Douile).
  • Added HTTPClient to allow use of HTTP(S) (and JSON) APIs (by @CosminPerRam & @Douile).

Crate:

  • Added a packet_capture feature to capture the raw packets sent and received by the socket (by @Douile).
  • Added packet emulation and socket retrevial using the packet_capture feature (by @Douile).
  • Added PCAP writing support to the packet_capture feature (by @Douile & @cainthebest).
  • Refactored socket to use a custom implementation of socket for packet capture when using the packet_capture feature (by @Douile).

CLI:

  • Added a CLI (by @cainthebest).
  • Added DNS lookup support (by @Douile).
  • Added JSON output option (by @Douile).
  • Added BSON output in hex or base64 (by @cainthebest).
  • Added XML output option (by @cainthebest).
  • Added ExtraRequestSettings as CLI arguments (by @Douile).
  • Added TimeoutSettings as CLI argument (by @Douile).
  • Added Comprehensive end-user documentation for the CLI interface (by @Douile & @cainthebest).
  • Tweaked compile-time flags to allow for a more preformant binary (by @cainthebest).
  • Added client for socket capture, dev tools are not included by default (by @Douile).
  • Added license information to the CLI (by @cainthebest).
  • Added source code information to the CLI (by @cainthebest).

Breaking:

Game:

  • Changed identifications of the following games as they weren't properly expecting the naming rules:
    • Left 4 Dead: left4dead -> l4d.
    • 7 Days to Die: 7d2d in definitions and sd2d in game declaration -> sdtd.
    • Quake 3 Arena: quake3arena -> q3a.
    • Unreal tournament 2003: ut2003 -> unrealtournament2003
    • Unreal tournament 2004: ut2004 -> unrealtournament2004
    • Darkest Hour: Europe '44-'45: darkesthour -> dhe4445
  • Minecraft:
    • Legacy 1.5 and 1.3 were renamed to 1.4 and beta 1.8 respectively to show the lowest version they support, this change includes Structs, Enum and game id renames, also removed the "v" from the game definition name.
    • Moved the Minecraft protocol implementation in the games folder as its proprietary.

Protocols:

  • Valve: Removed SteamApp due to it not being really useful at all, replaced all instances with Engine.

Query:

  • Added a connection timeout to TimeoutSettings (at the moment this only applies to TCP)
    • Sockets are now expected to apply timeout settings in new()

0.4.1 - 13/10/2023

Changes:

Game:

Crate:

  • Added Send and Sync on Error::source to fix some async issues.

Protocols:

  • Minecraft Java: Add derives to RequestSettings and add new_just_hostname that creates new settings just by specifying the hostname, protocol_version defaults to -1.

Games:

  • Organised game modules into protocols (when protocol used by other games), you can now access a game by its name or by its protocol name:
    • use gamedig::games::teamfortress2;
    • use gamedig::games::valve::teamfortress2;

Generics:

  • Added standard derives to ProprietaryProtocol, CommonResponseJson, CommonPlayerJson, TimeoutSettings and ExtraRequestSettings.

Breaking...

None, yaay!

0.4.0 - 07/10/2023

Changes:

Games:

Protocols:

  • Quake 2: Fixed a bug where the version tag wouldn't always be present.
  • The Ship: Removed instances of using unwrap without handling the panics.

Crate:

  • Updated byteorder dependency from 1.4 to 1.5.
  • Rich errors, capturing backtrace is done on RUST_BACKTRACE=1. (by @Douile)
  • Applied some nursery Clippy lints.
  • The retries field was added to TimeoutSettings that specifies the number of times to retry a failed request ( request being individual send, receive sequence, some protocols can include multiple requests in a single query). (by @Douile)
    • By default retries is set to 0, meaning no retries will be attempted

Generics:

  • Added ExtraRequestSettings containing all possible extra request settings. (by @Douile)
  • Added query_with_timeout_and_extra_settings() to allow generic queries with extra settings. (by @Douile)

Breaking...

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.
  • The Socket::apply_timeout method now borrows TimeoutSettings (&Option<TimeoutSettings>)
    • To make this easier to work with a new method was added to TimeoutSettings: TimeoutSettings::get_read_and_write_or_defaults this takes a borrowed optional TimeoutSettings and returns the contained read and write durations or the default read and write durations.

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.

Games:

  • Rename some game definitions and implementations to follow a stable ID naming system.

Protocols:

  • Valve:
  1. Renamed protocol to protocol_version.
  2. Renamed version to game_version.
  3. Renamed game to game_mode.
  4. Fixed player's score field being u32 when it needed to be i32, as specified in the protocol.
  5. 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. (by @Douile)
  6. Valve: Renamed SteamApp enum variants to match new definition names
  • 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. Renamed the player's frags to score and type from u32 to i32.
  2. Made Option the following response fields team, face, skin, mesh and secret to fix missing fields issues. (by @Douile)
  • Quake (1, 2):
  1. Renamed game_type to game_mode.
  2. Changed version type from Stringto Option<String>.
  • Minecraft Java
  1. Renamed version_protocol to protocol_version.
  2. Renamed version_name to game_version.
  3. Renamed players_sample to players.
  4. Added an optional parameter, RequestSettings, which contains fields that are used when creating the handshake packet (this solves some servers not responding to the query). (by @Douile)
  5. Legacy versions naming has been changed to represent up to what version they can query, LegacyBV1_8 (Beta 1.8 to 1.3) -> LegacyV1_3 and LegacyV1_4 (1.4 to 1.5) -> LegacyV1_5 (and their enums accordingly).
  • Minecraft Bedrock
  1. Renamed version_protocol to protocol_version.
  • Minecraft:
  1. Added an optional parameter, request_settings parameter to query.
  • 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.