Commit Graph
100 Commits
Author SHA1 Message Date
Lion Kortlepel 4045727c8b fix unit-tests crashing due to sol::object::~object 2026-04-19 20:15:58 +00:00
Lion Kortlepel c97d7b1b73 fix server cmake version 2026-04-19 19:27:17 +00:00
Lion Kortlepel dd6d90a986 force enable SOL_ALL_SAFETIES_ON 2026-04-19 19:16:37 +00:00
Lion Kortlepel 8f2b8b25e8 add AGPL headers to more new files 2026-04-19 18:41:06 +00:00
Lion Kortlepel f820d75851 fix TLuaValue handling to be less odd 2026-04-19 18:17:54 +00:00
Lion Kortlepel 9ca12fc7a6 fix std::weak_ptr locking and expiry checks
You're supposed to .lock() instead of TOCTOU checking, of course.
Not sure what I was thinking when I built that. .lock() returns a
default constructed std::shared_ptr on error, which is `false` via
`operator bool`.
2026-04-19 18:17:54 +00:00
Lion Kortlepel 98fb12bbcc fix holding lock during sleep
oops
2026-04-19 18:17:54 +00:00
Lion Kortlepel 3e12e487ab fix success/error handling in lua engine 2026-04-19 18:17:54 +00:00
Lion Kortlepel b3e8d86cef refactor Lua result handling for safety
this massively improves thread safety and cleanly serializes accesses
into the lua engine's result objects where accesses before were
extremely unsafe and could access a corrupt/invalid stack.

this fixes various obscure crashes related to accessing results,
without changing any observable behavior.
2026-04-19 18:17:54 +00:00
Lion Kortlepel 0c864665bb fix missing semicolon 2026-04-19 18:17:54 +00:00
Lion Kortlepel 4bb7232a41 fix GetIdentifiers building the wrong kind of table 2026-04-19 18:17:54 +00:00
Lion Kortlepel 58d9f2e980 fix GetIdentifiers() 2026-04-19 18:17:54 +00:00
Lion Kortlepel 66f5f2b8b6 fix error handling from SetErrorMessageFromResult 2026-04-19 18:17:54 +00:00
Lion Kortlepel e260de55af fix sol::error crash 2026-04-19 18:17:54 +00:00
Lion Kortlepel 7096fe058a fix PanicHandler crashing itself with another panic inside sol2
When sol2 does stack::get, it can panic, which causes the stack to
explode, corrupt it, and then any subsequent action crashes the server.
2026-04-19 18:17:54 +00:00
Lion Kortlepel 7089e5da9a fix race on disconnect
between the time we check for `is_open` and the actual disconnect, the
socket could already have been disconnected by another thread (TOCTOU).
Furthermore, the disconnects can race causing a segfault or similar
issue in the asio's internals.
2026-04-19 18:17:53 +00:00
Lion Kortlepel e9ce71d39a make send file accept a non-blocking socket 2026-04-19 18:17:53 +00:00
Lion Kortlepel d26e53a975 handle error cases early 2026-04-19 18:17:53 +00:00
Lion Kortlepel 4da5a7440a increase http curl pool to 128 2026-04-19 18:17:53 +00:00
Lion Kortlepel b1946ef1d9 use ReadWithTimeout until fully completed auth 2026-04-19 18:17:53 +00:00
Lion Kortlepel c08eefdf69 move TIoPollThread out and use it in TServer
the previous IoCtx was never being polled
2026-04-19 18:17:53 +00:00
Lion Kortlepel be0d8d5334 make connection reject msg a debug message, avoiding spam on ddos 2026-04-19 18:17:53 +00:00
Lion Kortlepel 1f55c35f2b fix ReadSocketWithTimeout to use dedicated io context polled on a new jthread
jthread so it's cancellable
2026-04-19 18:17:53 +00:00
Lion Kortlepel a3cfe47e78 fix http connections eating all fds
with this many http connnections, we were exhausting all available file
descriptors, leading to a dead server that keeps CLOSE_WAIT tcp sockets.
Because we want to retain the behavior that we keep connections open for
reuse, we instead make a pool of 8 curl instances now, shared between
all the different requests.
2026-04-19 18:17:53 +00:00
Lion Kortlepel 58e5317687 refactor ReadWithTimeout to not spawn a thread + use an fd each read
this was exhausting file descriptors with enough concurrent reads, from
what I can tell. Either way, spawning a new OS thread per read is not
the way.
Because this is so critical, I added unit-tests for that behavior.
2026-04-19 18:17:53 +00:00
Lion Kortlepel be6f3a2fd1 fix spammy logs on guard release 2026-04-19 18:17:53 +00:00
Lion Kortlepel 0ac5da2366 add connection limiter stats to status command 2026-04-19 18:17:53 +00:00
Lion Kortlepel b5642247a6 accept without EP, explicitly (and fallibly) get the endpoint 2026-04-19 18:17:53 +00:00
Lion Kortlepel a46f2d3204 set moved-from ip to explicitly obvious moved-from string 2026-04-19 18:17:53 +00:00
Lion Kortlepel a59f7296d0 avoid logging moved-from ip 2026-04-19 18:17:53 +00:00
Lion Kortlepel 6fca901aa2 implement connection limiter to replace manual limiting code 2026-04-08 12:31:35 +00:00
Lion Kortlepel 7925caf1a2 catch boost tcp's remote_endpoint() throwing and crashing the server
this happens when, somehow, the client disconnects before we get here.
I had this happen when breaking in the debugger and continuing, which
leads to clients timing out (client-side timeouts).
2026-04-07 21:19:33 +00:00
Lion Kortlepel 8cdee376c6 use jthread to join thread on scope exit 2026-04-07 20:25:17 +00:00
Lion fc208770dd Fix postPlayerAuth and add reason value (#395)
Closes #393 and #394
This PR cleans up and fixes the code in TNetwork::Authentication and
sends the kick reason to lua.
The event is now `function postPlayerAuth(Kicked: bool, Reason: string,
Name: string, Role: string, Guest: bool, Identifiers: table)`

---

By creating this pull request, I understand that code that is AI
generated or otherwise automatically generated may be rejected without
further discussion.
I declare that I fully understand all code I pushed into this PR, and
wrote all this code myself and own the rights to this code.
2024-11-25 10:15:20 +01:00
Lion 17e9c05f46 add PR template 2024-11-13 16:21:49 +01:00
Lion 71e3cb83ae Allow for empty icon param in MP.SendNotification (#389)
This PR allows you to call MP.SendNotification with only a player ID and
a message, removing the requirement for an icon.
2024-11-12 13:32:58 +01:00
Lion ef557ebfc4 Fix backend heartbeat (#385) 2024-11-01 17:40:33 +01:00
Lion Kortlepel 576d765557 fix crash when double closing 2024-11-01 15:07:54 +01:00
Lion Kortlepel e3416804e4 bump version 2024-11-01 12:50:11 +01:00
Lion 9ad4f61209 Information packet (#382)
This PR adds an "I" packet which returns the server information. This
can be used by external programs and the launcher to get information
about a server without having to connect it to. It can be toggled in the
config and in lua.
2024-11-01 12:27:31 +01:00
Lion 5e41cefa87 Paint packet (#381)
Adds a packet for live color updating `vid:[{}]`
2024-11-01 12:18:06 +01:00
Lion 03b0bd4d2c Add 'P' packet on UDP (#379)
This can be used to check if UDP works :)

I've tested this a bit with snep ingame, even spamming this on localhost
with a large number of connections seems to not impact gameplay at all.
2024-10-20 18:29:12 +02:00
Lion Kortlepel f40d4c1ddd add 'P' packet on UDP
this can be used to check if UDP works :)
2024-10-13 22:13:05 +02:00
Lion 4f052a3e0a Make modlist an empty array by default instead of null (#377)
Related launcher PR: https://github.com/BeamMP/BeamMP-Launcher/pull/136
2024-10-12 21:06:41 +02:00
Lion 89c906232d Report correct client minimum version to the backend (#376) 2024-10-09 18:06:03 +02:00
LionandTixx c39beb5b72 reuse minclientversion where possible
Co-authored-by: Tixx <83774803+WiserTixx@users.noreply.github.com>
2024-10-09 18:03:01 +02:00
Lion Kortlepel 7dd2d89ad9 clarify auth version reject message 2024-10-09 16:48:40 +02:00
Lion Kortlepel 3403c8acba fix version check on auth 2024-10-09 16:44:38 +02:00
Lion Kortlepel 0a6eecee69 report correct client minimum version to the backend 2024-10-09 16:37:16 +02:00
Lion cf3985ce00 Add Lua function to get a player's role (#366)
Adds `MP.GetPlayerRole(player_id)` to the Lua API to get a player's role
("USER", "EA", "MDEV", "STAFF", "ET") by their player id.
Currently you can only get someone's role in onPlayerAuth from the
parameters and in onVehicleSpawned and onVehicleEdited from the packet
data, but not in onPlayerJoin for example without storing it.
2024-10-05 16:09:37 +02:00
Lion Kortlepel b04c5068ea bump version 2024-10-05 16:09:02 +02:00
Lion 077bb6b1cd Add player limit bypass to onPlayerAuth (#372)
With this PR, returning 2 in onPlayerAuth will allow the player to join
without checking if the server is full. This makes it easier for plugin
developers to allow for example their staff to join without having to
change the max player count.
2024-10-05 16:07:53 +02:00
Lion 0850cde1fb Add MP.SendNotification (#373)
Adds MP.SendNotification(message, icon, category (optional) ) to the Lua
api. Uses the newly added "N" packet in the mod.
2024-10-05 16:07:27 +02:00
Lion 611e53b484 Mod hashing + better download (#374) 2024-10-04 23:29:11 +02:00
Lion Kortlepel 5d34090952 fix stupid read size error leading to corrupt zip 2024-09-29 01:34:38 +02:00
Lion Kortlepel 88ca17236a remove two-socket download 2024-09-29 01:15:48 +02:00
Lion Kortlepel a4b62d013c implement mod hashing + new download 2024-09-29 00:32:52 +02:00
Lion 55f1a3c734 Add MP.Get (#369)
Adds `MP.Get(ConfigID)` to the lua api to get the current server
settings.

```lua
lua> print(MP.Get(MP.Settings.Name]))
[LUA] BeamMP Server
lua> MP.Set(MP.Settings.Name, 'Hello World')
[INFO] Set `Name` to Hello World
lua> print(MP.Get(MP.Settings.Name))
[LUA] Hello World
```

Closes #146
2024-09-28 20:30:14 +02:00
Lion 7f69e336a9 Fix exception propagation on packet decompression (#365) 2024-09-20 11:39:36 +02:00
Lion f08dfc0585 fix MaxPlayers setting using value of MaxCars (#367) 2024-09-20 11:39:22 +02:00
Lion Kortlepel 5319c2878a bump version to v3.5.1 2024-09-19 17:24:57 +02:00
Lion Kortlepel 73f494041a fix exception propagation on packet decompression 2024-09-19 16:59:17 +02:00
Lion Kortlepel 530d605bc1 fix release 2024-09-19 01:54:16 +02:00
Lion 63b2a8e4a3 Add post event(s) (#364)
Adds `post*` events which are triggered after the respective `on*` event
has completed and the results have been sent.

They have the same arguments as the `on*` function, with the exception
that another argument is added in the beginning which contains whether
the `on*` variant was cancelled.
2024-09-19 01:37:17 +02:00
Lion a7a19d9a30 Fix disconnect not calling onVehicleDeleted (#336)
OnDisconnect sent a packet to the client, which was already
disconnected.
2024-09-18 18:08:46 +02:00
Lion Kortlepel 3068a0e5c4 add back car deletion 2024-09-18 16:46:11 +02:00
Lion Kortlepel f70514a021 add postVehicleEdited
why the fuck is it in past tense
2024-09-18 16:34:56 +02:00
Lion Kortlepel 94768c916d add postChatMessage 2024-09-18 16:30:49 +02:00
Lion Kortlepel 86b37e8ae1 move postPlayerAuth later again, after client insert 2024-09-18 16:26:26 +02:00
Lion Kortlepel 8f9db10474 move postPlayerAuth to after kick 2024-09-18 16:26:20 +02:00
Lion Kortlepel afa5a04043 add postPlayerAuth 2024-09-18 16:26:16 +02:00
Lion Kortlepel 4444be0af9 add postVehicleSpawn event 2024-09-18 16:26:11 +02:00
Lion 5f7207bc52 Move toml11 out of vcpkg since the toml11 authors broke it (#352) 2024-09-18 16:18:38 +02:00
Lion Kortlepel 9927d2befb add toml11 submodule 2024-09-18 15:58:55 +02:00
Lion Kortlepel 60f88916a9 remove toml11 from vcpkg.json 2024-09-18 15:51:11 +02:00
Lion ce5f2e666d Download Refactoring (#356)
Limits download RAM usage (to zero) on Linux by use of `sendfile(2)`
2024-08-31 20:32:23 +02:00
Lion e076197ab2 support for non toplevel event handlers (#360)
this change replaces the `_G` event handler lookup with a lua snippet
that fetches whatever the user has set, which could be a module's
function, a builtin global, or even a function defined in the
`RegisterEvent `call
2024-08-31 20:30:02 +02:00
Lion Kortlepel f3627ce0bf Merge branch 'fix-little-issues' into minor 2024-07-28 10:54:55 +02:00
Lion Kortlepel e1aaaf5e63 Merge branch 'fix-little-issues' into minor 2024-07-28 10:52:33 +02:00
Lion Kortlepel a147edd31a update to toml11 v3.4.1 2024-07-28 10:50:01 +02:00
Lion 214096409d Add stack trace to server lua engine (#350)
Don't worry about it
2024-07-27 19:57:37 +02:00
Lion Kortlepel ba723ee106 revert fix for sol2 2024-07-16 17:51:31 +02:00
Lion Kortlepel 49ed82bea1 add more info to debug print for freebsd ipv6 support 2024-07-16 17:30:45 +02:00
Lion Kortlepel 0d848fda7c add warning about IPV6_V6ONLY=false not working on FreeBSD 2024-07-16 17:25:29 +02:00
Lion Kortlepel a0040d8c57 fix invalid sol2 linking 2024-07-16 16:58:12 +02:00
Lion baa2c86e25 fix typo in DeComp buffer size logic 2024-07-15 12:35:32 +02:00
Lion 0950d367d4 refactor decompression limits and resizing 2024-07-15 12:31:09 +02:00
Lion 8b21b6cef3 add comments to DeComp() magic numbers 2024-07-15 12:26:08 +02:00
Lion Kortlepel 82a6d4af60 repeat sendfile() until all data is sent 2024-07-14 17:01:24 +02:00
Lion Kortlepel 8b753ab6ea ignore SIGPIPE in sendfile() implementation of mod sending 2024-07-14 17:01:08 +02:00
Lion Kortlepel b097acfd4a use sendfile64 2024-07-14 16:17:39 +02:00
Lion Kortlepel 5baeaa72c2 clarify RAM requirements 2024-07-14 16:03:08 +02:00
Lion Kortlepel bd76e28ca6 use sendfile to send mods on linux 2024-07-14 15:33:26 +02:00
Lion Kortlepel 9db3619cd8 cleanup and add comments to traceback feature 2024-07-14 01:50:31 +02:00
Lion Kortlepel 6f4c3f0ceb add traceback to lua errors by way of shitty lua hacks 2024-07-14 01:43:01 +02:00
Lion Kortlepel eaedeb5324 add IPv6 support 2024-07-12 15:45:50 +02:00
Lion 72022e3349 Refactor config, add settings command (#295)
Fix #158
2024-06-26 14:24:24 +02:00
Lion Kortlepel 28a9690a64 validate Ot packets 2024-06-23 21:58:32 +02:00
Lion Kortlepel 07a8d49046 fix tcp send also 2024-06-22 23:56:18 +02:00
Lion Kortlepel bfb0675efa send large packets over tcp 2024-06-22 23:51:01 +02:00