22 KiB
Who knows what the future holds...
0.X.Y - DD/MM/YYYY
Games:
- Mordhau support.
- Enshrouded support.
- Myth of Empires support.
- Pirates, Vikings, and Knights II support.
0.5.0 - 15/03/2024
Changes:
Games:
- Valheim support.
- The Front support.
- Conan Exiles support.
- Post Scriptum support.
- Squad support.
- Savage 2 support.
- Rising World support.
- ATLAS support.
- America's Army: Proving Grounds support.
- Base Defense support.
- Zombie Panic: Source support.
- Added a valve protocol query example.
- Made all of Just Cause 2: Multiplayer Response and Player fields public.
- Mindustry support.
- Eco support.
- Call Of Duty: Black Ops 3 support.
- Counter-Strike 2 support.
- Double Action: Boogaloo support.
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_capturefeature to capture the raw packets sent and received by the socket (by @Douile). - Added packet emulation and socket retrevial using the
packet_capturefeature (by @Douile). - Added PCAP writing support to the
packet_capturefeature (by @Douile & @cainthebest). - Refactored socket to use a custom implementation of socket for packet capture when using the
packet_capturefeature (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.
- Left 4 Dead:
-
- 7 Days to Die:
7d2din definitions andsd2din game declaration ->sdtd.
- 7 Days to Die:
-
- Quake 3 Arena:
quake3arena->q3a.
- Quake 3 Arena:
-
- Unreal tournament 2003:
ut2003->unrealtournament2003
- Unreal tournament 2003:
-
- Unreal tournament 2004:
ut2004->unrealtournament2004
- Unreal tournament 2004:
-
- Darkest Hour: Europe '44-'45:
darkesthour->dhe4445
- Darkest Hour: Europe '44-'45:
- 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
SteamAppdue to it not being really useful at all, replaced all instances withEngine.
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:
- Added Barotrauma support.
Crate:
- Added
SendandSynconError::sourceto fix some async issues.
Protocols:
- Minecraft Java: Add derives to
RequestSettingsand addnew_just_hostnamethat creates new settings just by specifying the hostname,protocol_versiondefaults 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,TimeoutSettingsandExtraRequestSettings.
Breaking...
None, yaay!
0.4.0 - 07/10/2023
Changes:
Games:
- Creativerse support.
Protocols:
- Quake 2: Fixed a bug where the version tag wouldn't always be present.
- The Ship: Removed instances of using
unwrapwithout 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
retriesfield was added toTimeoutSettingsthat 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
retriesis set to0, meaning no retries will be attempted
- By default
Generics:
- Added
ExtraRequestSettingscontaining 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,
GDErrorhas been renamed toGDErrorKind. GDErroris now a struct that holds its kind, the source and a backtrace.- The
Socket::apply_timeoutmethod now borrowsTimeoutSettings(&Option<TimeoutSettings>)- To make this easier to work with a new method was added to
TimeoutSettings:TimeoutSettings::get_read_and_write_or_defaultsthis takes a borrowed optionalTimeoutSettingsand returns the contained read and write durations or the default read and write durations.
- To make this easier to work with a new method was added to
Generics:
- Renamed
CommonResponseJson'sgamefield (and the function) togame_mode. - Changed
players_maximumandplayers_online(and their functions) types fromu64tou32. - Changed
scoretype (and the function) of player fromu32toi32.
Games:
- Rename some game definitions and implementations to follow a stable ID naming system.
Protocols:
- Valve:
- Renamed
protocoltoprotocol_version. - Renamed
versiontogame_version. - Renamed
gametogame_mode. - Fixed
player'sscorefield beingu32when it needed to bei32, as specified in the protocol. - Added the field
check_app_idtoGatherSettingswhich 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) - Valve: Renamed SteamApp enum variants to match new definition names
- GameSpy (1, 2, 3):
- Renamed
versiontogame_version. - Changed
players_maximumandplayers_online(and their functions) types fromusizetou32.
- GameSpy 1:
- Renamed the player's
fragstoscoreand type fromu32toi32. - Made
Optionthe following response fieldsteam,face,skin,meshandsecretto fix missing fields issues. (by @Douile)
- Quake (1, 2):
- Renamed
game_typetogame_mode. - Changed
versiontype fromStringtoOption<String>.
- Minecraft Java
- Renamed
version_protocoltoprotocol_version. - Renamed
version_nametogame_version. - Renamed
players_sampletoplayers. - 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) - Legacy versions naming has been changed to represent up to what version they can query,
LegacyBV1_8(Beta 1.8 to 1.3) ->LegacyV1_3andLegacyV1_4(1.4 to 1.5) ->LegacyV1_5(and their enums accordingly).
- Minecraft Bedrock
- Renamed
version_protocoltoprotocol_version.
- Minecraft:
- Added an optional parameter,
request_settingsparameter toquery.
- The Ship:
- Renamed
protocoltoprotocol_version. - Renamed
max_playerstoplayers_maximumand changed its type fromu64tou32. - Renamed
botstoplayers_bots. and changed its type fromu64tou32. - Renamed
playerstoplayers_online. - Renamed
players_detailstoplayers. - Renamed
gametogame_mode. - Added field
game_version. - Changed
players_botstype fromOption<u64>toOption<u32>. - Changed
scoretype of player fromu32toi32.
- Frontlines: Fuel of War:
- Renamed
game_modetogame. - Renamed
versiontogame_version. - Renamed
protocoltoprotocol_version. - Renamed
gametogame_mode. - Changed
players_maximumandplayers_minimumtypes fromusizetou32.
- Just Cause 2: Multiplayer:
- Renamed
versiontogame_version. - Changed
players_maximumandplayers_minimumtypes fromusizetou32.
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:
- Halo: Combat Evolved support.
- Just Cause 2: Multiplayer support.
- Warsow support.
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
fragsfield toscoreto be more inline with the other protocols.
Crate:
no_gamesandno_serviceshave been changed togamesandservices, this better represents that they are present by default (by @Douile).- Fixed crate's
rust-version, it is now1.60.0(was1.56.1)
0.2.3 - 02/06/2023
Changes:
Protocols:
- Valve:
- Added standard and serde derives to
GatheringSettings.
- Quake 1, 2 and 3 support.
Games:
- Quake 2 support.
- Quake 1 support.
- Quake 3: Arena support.
- Hell Let Loose support.
- Soldier of Fortune 2 support.
Breaking:
- Every function that used
&strfor the address has been changed to&IpAddr(thanks @Douile for the re-re-write). - Protocols now use
&SocketAddrinstead ofaddress: &str, port: u16.
Services:
- Valve Master Query:
- Removed Filter and SearchFilters lifetimes and changed
&'a strtoStringand&'a [&'a str]toVec<String>
0.2.2 - 01/05/2023
Changes:
Crate:
- General optimizations thanks to cargo clippy and @cainthebest.
- Added feature
serdewhich enables json serialization/deserialization for all types (by @cainthebest). - Documentation improvements.
Protocols:
- GameSpy 1: Add key
adminas a possible variable foradmin_name. - GameSpy 3 support.
Games:
- Serious Sam support.
- Frontlines: Fuel of War support.
- Crysis Wars support.
Services:
- Valve Master Server Query support.
- Added feature
no_serviceswhich disables the supported services.
Breaking:
Protocols:
- Valve: Request type enums have been renamed from all caps to starting-only uppercase, ex:
INFOtoInfo - GameSpy 1:
players_minimumis now anOption<u8>instead of anu8 - GameSpy 1: Is now under
protocols::gamespy::oneinstead ofprotocols::gamespy
0.2.1 - 03/03/2023
Changes:
Crate:
- Added feature
no_gameswhich disables the supported games (useful when only the protocols/services are needed, also saves storage space).
Games:
- V Rising support.
- Unreal Tournament support.
- Battlefield 1942 support.
Protocols:
- Valve:
- Reversed (from
0.1.0) "Players with no name are no more added to theplayers_detailsfield.", also added a note in the protocols file regarding this. - Fixed querying while multiple challenge responses might happen.
- GameSpy 1 support.
Breaking:
None.
0.2.0 - 18/02/2023
Changes:
Games:
- Don't Starve Together support.
- Colony Survival support.
- Onset support.
- Codename CURE support.
- Ballistic Overkill support.
- BrainBread 2 support.
- Avorion support.
- Operation: Harsh Doorstop support.
Protocols:
- Valve:
appidis now a field in theResponsestruct.
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
SteamIDenum for that game could specify only one id.
SteamIDis nowSteamApp, was an u32 enum, and now it's a simple enum.Appis nowEngine, theSourceenum's structure has been changed fromOption<u32>toOption<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:
- Risk of Rain 2 support.
- Battalion 1944 support.
- Black Mesa support.
- Project Zomboid support.
- Age of Chivalry support.
Protocols:
- Valve: Players with no name are no more added to the
players_detailsfield. - Valve: Split packets are now appending in the correct order.
Crate:
MSRVis now1.56.1(was1.58.1)
Breaking:
Protocols:
- Valve: The rules field is now a
HashMap<String, String>instead of aVec<ServerRule>(where theServerRulestructure had a name and a value fields). - Valve: Structs that contained the
players,max_playersandbotsfields have been renamed toplayers_online,players_maximumandplayers_botsrespectively. - Minecraft: Structs that contained the
online_players,max_playersandsample_playersfields have been renamed toplayers_online,players_maximumandplayers_samplerespectively. - Minecraft: The Java query response struct named
Responsehas been renamed toJavaResponse.
Errors:
- Besides the
BadGameerror, now no other errors returns details about what happened (as it was quite pointless).
Crate:
package.metadata.msrvhas been replaced withpackage.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.