aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* prevent password brute force (#4)fusion322025-10-30
| | | | | | | Prevent blocked IP addresses and accounts from returning anything other than a blocked error message. Previously, further attempts would first check the password which enabled brute force attacks to use the "invalid account/password" message as an oracle.
* change how guild data is storedfusion322025-10-23
|
* add include path for PostgreSQL + overall cleanupfusion322025-10-19
| | | | | | | Some distributions place libpq headers under /usr/include/postgresql which is why it's added to the include path. And even though we don't support it yet, the same happens with MariaDB, with headers being placed under /usr/include/mariadb.
* update documentation + wrap the few SQLite scriptsfusion322025-10-18
|
* properly handle NULL values with postgres result helpersfusion322025-10-18
|
* modify how automatic SQLite patches/upgrades works + overall cleanupfusion322025-10-18
|
* world startup/shutdown timestamps + adjust a few column namesfusion322025-10-17
|
* properly handle text encoding differences with QueryManager clientsfusion322025-10-16
|
* move ResolveHostName outside of GetCharacterEndpointsfusion322025-10-16
|
* prevent a few SQLite queries to fail when they affected no rowsfusion322025-10-16
| | | | | | | This was done with the old design in mind, but with the query thread offloading, returning false is meant to signal a failure in completing it. A connection lost with PostgreSQL or BUSY error with SQLite, for example.
* allow all database config options to be loaded, even when not usedfusion322025-10-16
|
* lower monotonic uptime resolution from MILLISECONDS to SECONDSfusion322025-10-16
| | | | | | | | | | | | The monotonic uptime was used exclusively with caches and having a resolution of SECONDS allows it to be stored as an int without risk of wrapping (~68 years). Using MILLISECONDS meant that it would wrap after ~25 days which is totally possible and EXPECTED. Just as an example, the small test server I ran for about 1 month had ZERO downtime on the QueryManager except for when I manually restarted it. It was probably very close to wrapping when I took it down.
* gracefully handle no rows on "COUNT(*)" queriesfusion322025-10-16
|
* make config.cfg a distribution templatefusion322025-10-16
|
* fix a few postgres queriesfusion322025-10-15
|
* implement all postgres queriesfusion322025-10-15
|
* postgres interval helpers + a few more queriesfusion322025-10-15
|
* make query output parameter names more specificfusion322025-10-14
| | | | | This also avoids conflicts with database RESULT objects that we lacked with SQLite but show up with PostgreSQL and MySQL.
* GET_WORLD_CONFIG robustness + tidying up a few variable namesfusion322025-10-14
|
* the remainder of postgres helpers (probably)fusion322025-10-14
| | | | | This should give us everything we need to implement all the supported queries.
* more postgres helpers and a couple of queriesfusion322025-10-14
|
* most of the postgres primitives/helpersfusion322025-10-13
|
* beginning of postgres driver + overall tweaksfusion322025-10-13
|
* organize database configs and schema files + compilation guardsfusion322025-10-10
|
* switch to blocking poll + fix config, signals, time, non-game loginfusion322025-10-10
|
* update query functionsfusion322025-10-09
|
* small indentation adjustmentfusion322025-10-09
|
* update sqlite driver + impl INTERNAL_RESOLVE_WORLDfusion322025-10-09
| | | | | | With this change the game server is able to login again but we still need to re-implement/re-fit the other queries for it to properly startup.
* worker initialization robustness + query processingfusion322025-10-07
|
* make connections properly handle async queriesfusion322025-10-07
| | | | | | This moves queries from `src/connections.cc` to `src/query.cc` and adds a few missing details. The only thing left is to review query processing and tie database operations to the `TDatabase` struct.
* sketch out new query queue/worker for async queriesfusion322025-10-06
|
* fix problem with finishing or excluding from auctionsfusion322025-10-04
|
* fix RIGHT check with notations and ip banishmentsfusion322025-09-13
|
* remove ParseOptionalIPAddressfusion322025-09-13
| | | | | | | I had just added it in the last commit but it made its use case non-obvious. Checking whether the string is empty before trying to parse an IP address is clearer than calling some function that has its own concept of what an empty address is.
* fix queries where the IP address is optionalfusion322025-09-12
|
* add check to make sure the database is open with write permissionsfusion322025-08-30
| | | | | | Using `sqlite_open` with `SQLITE_OPEN_READWRITE` doesn't guarantee the database will be open with read-write permissions. - See: https://www.sqlite.org/c3ref/open.html
* fix player index loading + small service config changefusion322025-08-18
|
* wrapping up for a public releasefusion322025-08-15
|
* store world hostname and resolve at runtimefusion322025-08-08
|
* fix problem with concurrent writes + implement website queriesfusion322025-08-01
| | | | | | There was a problem with concurrent writes not being visible until after restart, due to how cached prepared statements work with SQLite (see comment in `database.cc`).
* improvements and bug fixesfusion322025-07-22
| | | | | | | | | - Add support for SIGINT and SIGTERM signals for graceful termination. - Properly check premium account status with `EVICT_FREE_ACCOUNTS` query. - Properly check if character is already online before failing game login with "too many characters" error. - Overall cleanup.
* impl LOGIN_ACCOUNT to be used with the login serverfusion322025-07-17
|
* finish game queriesfusion322025-07-15
|
* impl banishment, deaths, and buddies queriesfusion322025-07-14
|
* impl BANISH_ACCOUNTfusion322025-07-13
|
* reorganize query functions and impl SET_NOTATIONfusion322025-07-13
|
* house related queriesfusion322025-07-12
|
* add `TransactionScope`fusion322025-07-11
|
* implement more queries + overall improvementsfusion322025-07-11
|
* bare bones query managerfusion322025-07-10
This is a bare bones query manager that will respond just enough queries to get the server running. The overall structure of the tables should be almost set but we'd need to handle all queries to get the server running properly. It uses the SQLite3 3.50.2 amalgamation for a database backend so we can completely avoid having to spin up yet another service for a separate database system, effectively turning the query manager into the database itself. This also means that other services such as the login server and website must go through it to access the data but it shouldn't be too difficult to replicate the querying mechanism from the server. This design choice was made with a single game server in mind. The networking protocol is NOT encrypted at all and won't accept remote connections. For a fully multi-world distributed infrastructure, a distributed database system like PostgreSQL and MySQL should be considered.