782 Commits

Author SHA1 Message Date
Kawe Mazidjatari
cb1a69e82a Ban system refactor
Use CUtlVector, and remove every copy caused by passing vectors by value. CUtlVector does not support copying. Also removed all extraneous std::string copies caused by calling itoa instead of std::to_string, or std::stoll, etc. All features have been tested and work as designed.
2023-08-31 00:16:25 +02:00
Kawe Mazidjatari
db6ccff8c2 Calculate processing time for each message 2023-08-28 02:45:37 +02:00
Kawe Mazidjatari
d7448be952 Improve CClientState fields 2023-08-27 00:20:35 +02:00
Kawe Mazidjatari
4e1d99bf9d CClientState adjustments
Mapped out and aligned slightly more.
2023-08-26 01:25:07 +02:00
Kawe Mazidjatari
03ee817ca1 More of CNetChan mapped out 2023-08-23 00:15:26 +02:00
Amos
ee3e2b8f2a Use CUtlString 2023-08-22 19:32:21 +02:00
Kawe Mazidjatari
e8bffae822 Fix compiler error
Small rename.
2023-08-22 01:12:22 +02:00
Kawe Mazidjatari
befd38bf51 Interface factory system rewrite
Removed all extraneous copies by adding the class 'InterfaceReg' which will construct a new interface, and link it to the engine's static register. The Source Engine macro 'EXPOSE_INTERFACE_FN' will help utilizing this. The game module from the plugin is not obtained through the process environment block, so the executable is no longer sensitive to names.
2023-08-22 01:11:49 +02:00
Kawe Mazidjatari
20cc4b1439 Rename CClientState field
Renamed to 'm_bUseLocalSendTableFile'. If set, the 'CClientState::ProcessSendTable()' method drops the SVC_SendTable message, and keeps using the local file instead.
2023-08-21 20:43:36 +02:00
Kawe Mazidjatari
c8752420a0 Use new Dev* logger functions
These get compiled in if IsCert() returns false.
2023-08-21 20:38:07 +02:00
Kawe Mazidjatari
71b0781715 Utilize 'DevMsg()' for uncertain builds only
Only uncertain builds will contain DevMsg()/DevWarning() prints. For retail, Msg() and Warning() should be used instead.
2023-08-21 19:12:29 +02:00
Kawe Mazidjatari
545ccac064 Improve CClient class
Added:
 - m_nDisconnectTick
 - m_nSendtableCRC
- m_nMmDev

Fixed incorrect placement for:
- m_LastMovementTick
2023-08-21 16:33:45 +02:00
Kawe Mazidjatari
de55d84795 Rebuild CNetChan::ProcessMessages()
Full rebuild for future 'proper' rate limit implementation.
2023-08-21 16:29:28 +02:00
Kawe Mazidjatari
d528ec69f1 Add wrapper for reading netmsg types 2023-08-21 16:28:04 +02:00
Kawe Mazidjatari
a5d1de8ead Rename local variable 2023-08-20 13:50:59 +02:00
Amos
320ff7fb0f Assert equal or above 0
Code bug because cannot go below.
2023-08-18 22:21:36 +02:00
Amos
fe1cc93cff CNetChan::FlowNewPacket(): Add a comment and also check the other loop
Added 2 comments that speaks for them self's, and 2 additional checks for the second loop as I had triggered several cases where it would loop indefinitely still, as we break out of the parallel loop and continue into the old school loop for the remainder of the outSeqNr - currentIndex frames. This should fix all problems related to this function. After numerous of tests with varying arbitrary outSeqNr values that were vastly larger than the current packet flow index, the bug was no longer triggered. A similar test had also be performed were multiple clients would do this at the same time, and even then; the server frame time(s) remained identical and the whole thing never hung.
2023-08-18 21:24:35 +02:00
Amos
26da5fd503 Increment by 4, since loop does 4 frames at a time
Compensate for compiler optimizations performed on CNetChan::FlowNewPacket().
2023-08-18 15:03:56 +02:00
Amos
2caccf6c91 Fix bug in CNetChan::FlowNewPacket()
Loop runs for 'CNetChan::m_nOutSequenceNr' frames, with no bounds. A corrupt or invalid packet will hang the engine for several seconds.
2023-08-18 13:06:00 +02:00
Amos
4f2a9601b4 Rebuild CNetChan::FlowNewPacket()
Rebuild for a future bug fix.
2023-08-18 12:47:16 +02:00
Amos
174f9b46f3 Fully map out net frame and flow structures
Mapped out 'netframe_header_s', 'netframe_s', and 'netflow_s' entirely.
2023-08-18 02:33:41 +02:00
Amos
3c36b606f0 Add function for checking if there's still pending data in reliable waiting buffers 2023-08-16 00:15:01 +02:00
Amos
2ff35a94cd Add inline for getting server time 2023-08-16 00:06:03 +02:00
Amos
00f7415380 Fixup CClient types 2023-08-14 00:30:20 +02:00
Amos
2768b925b0 Make assert better
Check if not below zero.
2023-08-13 20:26:52 +02:00
Kawe Mazidjatari
30031e3275 Don't allow stringcmd's if client isn't active
Potential exploit vector, executing stringcmd's during signon states where it shouldn't be used.
2023-08-08 19:25:12 +02:00
Kawe Mazidjatari
9a9d6b290a Fix typo 2023-08-08 19:05:12 +02:00
Kawe Mazidjatari
849372d68e Show server CPU, frame time and current tick as well 2023-08-08 12:55:17 +02:00
Kawe Mazidjatari
9d5eb5ba23 Remove redundant CEngine stuff
No longer required, the vftable has been reversed.
2023-08-08 09:28:11 +02:00
Kawe Mazidjatari
89431cc61f Fix crasher by clamping stringcmd length before tokenizing it
Possible crasher is to send a stringcmd >= 512 in size with funny UTF8 characters and have CUtlBuffer::ParseToken() read past it. Apparently seems to be mostly a problem on 32bit? I was unable to initiate a crash, though one string caused interesting behavior before, and there was one report of the dedicated server being 'crashed' with this. There is no reason to tokenize it up to 512 bytes if the game is only ever going to allow 128, so clamp it to 129 and if the user exceeds it then they still get the message and we just jettison it.
2023-08-07 16:52:35 +02:00
Kawe Mazidjatari
3ca092f598 Temporarily fix convar value assignment bug in 'CRConServer::Execute()'
Command string buffer contains "sv_cheats" and value buffer contains "sv_cheats 1". Ideally value buffer only contains "1", and we just concatenate to "sv_cheats 1" for 'Cmd_Dispatch()' to avoid confusion on the netconsole's programmer side. This will be refactored in the future.
2023-08-05 20:29:07 +02:00
Kawe Mazidjatari
759d8d6d2e Flip 'sv_rcon_sendlogs' if netcon is not input only 2023-08-05 01:11:32 +02:00
Kawe Mazidjatari
0a25f5e0fe Adjust 'CNetConBase' vftable order
Order has been adjusted to match the order of execution.
2023-08-04 17:45:30 +02:00
Kawe Mazidjatari
d7f92cbefd Adjust names
Adjust since previously they were pointers but now references.
2023-08-04 17:41:55 +02:00
Kawe Mazidjatari
bb5e92a563 Fix redundant socket closing bug
Cvar 'sv_rcon_maxsockets' is always higher than the actual allowed socket count. Should only check if its count is higher than the cvar.
2023-08-04 17:34:30 +02:00
Kawe Mazidjatari
f2783ae93f Make use of 'CConnectedNetConsoleData::m_bInputOnly' properly
This member was in the class when RCON was added to the r5sdk, but it was never utilized. Now, each netconsole can toggle whether they are input only or not, the server only sends logs to netconsoles that are not input only. This patch also contains a fix in which the listen server sends logs to the client of its own process, causing an infinite recursive call to DevMsg.
2023-08-04 17:28:01 +02:00
Kawe Mazidjatari
ce4b7b84a8 Promote RCON command execution authority
Allow RCON to execute any commands and set any cvar, regardless of their flags.
2023-08-04 11:53:46 +02:00
Kawe Mazidjatari
f6d2628937 Cleanup proto structure
Removed unused/extraneous enumerants.
2023-08-04 11:20:24 +02:00
Kawe Mazidjatari
10ee88ec10 Fix RCON disconnect bug
RCON occasionally did NOT disconnect, but only if the socket has been closed improperly. If the server/client crashes for example, the connection remained open in RCON; pendingLen on the initial peek recv < 0 while socket isn't blocking means socket has been closed unexpectedly.
2023-08-04 10:57:39 +02:00
Kawe Mazidjatari
309e297ae4 Add 'Cmd_Dispatch' to SDK
Signature is compatible with S1.
2023-08-04 10:49:39 +02:00
Kawe Mazidjatari
ddfe027677 Pass by reference
CConnectedNetConsoleData was allocated and deallocated manually, but std::vector is able to do it on its own. The vector type has been swapped out with CUtlVector as this removed the need of having to cast size types to a 32bit int to make it more compatible with the other sdk/engine types without throwing compiler warnings.
2023-08-04 10:48:22 +02:00
Kawe Mazidjatari
af81954b7f Force 'Cbuf_GetCurrentPlayer()' inline
FORCEINLINE will compile this down to an immediate.
2023-07-22 21:15:01 +02:00
Kawe Mazidjatari
21f64bc572 Adjust logging contexts
Adjust the context properly, some were wrong (e.g. 'ENGINE' in 'COMMON' code).
2023-07-22 21:14:04 +02:00
Kawe Mazidjatari
00f349c745 Use ICVar iterator for console partial suggest
Added public interface to ICVarIteratorInternal, this class also deals with the deletion of the iterator. This fixes the problem of cvars not showing up that have been registered after 'CModAppSystemGroup::Create()' has been called. Currently, no cvar is registered after it. This will/could change when the plugin system is utilized.

Additional changes:
- Cvar 'con_suggestion_flags_realtime' has been removed, as we no longer keep an early copy anymore; real time flags are always shows from now on.
 - Fixed a bug in 'CConsole::FindFromPartial()' where we would return in the loop when 'm_vSuggest.size() >= con_suggestion_limit->GetInt()', instead of breaking out, which skips the element sorting process.
2023-07-22 14:51:15 +02:00
Kawe Mazidjatari
319b534d62 Enable plugin system
Plugin system works and is stable.
2023-07-20 22:00:00 +02:00
Kawe Mazidjatari
6d39d99941 Fix mistake in comment 2023-07-19 18:47:25 +02:00
Kawe Mazidjatari
ddfaea6ce2 Fix client.dll loading
* Moved dedicated server command line parameter init to 'init.cpp'.
* Registered 'SV_Main' on the client, this is engine code (lower level 'local' server wrappers).
* Disabled registration of Weapon_Bolt, although this is shared game code, this particular file is only used for the SERVER at this moment.
* Added the '-noserverdll' command lien parameter to instruct our loader.dll to load the client.dll instead.
* Adjusted the loader and sdklauncher project to support the loading of client.dll.
2023-07-19 16:00:36 +02:00
Kawe Mazidjatari
e67fcfd1fb Remove static keyword
Can't be isolated to translation unit if only std::thread's ctor references it, triggers a compiler warning (C4505) that is treated as an error.
2023-07-19 02:33:22 +02:00
Kawe Mazidjatari
ad6466fa6c Add 'engine_cl' project to SDK and fix compiler errors
The 'engine_cl' library defines 'CLIENT_DLL', which prunes server specific code. This is used for the 'client.dll' project. Also fixed a compile error in 'CClient::VActivatePlayer', as it used a server only cvar. Ideally, this entire file gets ifdef'd out for engine_cl, currently it doesn't matter as nothing gets compiled in.
2023-07-19 02:30:07 +02:00
Kawe Mazidjatari
6cecc3297e Move KeepAlive function to HostState
Only used in HostState, moved to HostState with static linkage.
2023-07-19 02:19:43 +02:00