aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* turn error codes into enums + check empty credentials before loginfusion322025-10-30
| | | | | | | | | | | Using enums instead of hard coded numbers for error codes should help with readability, even though they're local to the functions that use them to avoid flooding the namespace. Checking whether credentials are empty before login will prevent error messages such as "account disabled" from showing up when no account is specified, which may look weird. It'll also avoid any database reads although this shouldn't really make a difference torwards performance or security since it's only an edge case.
* 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
|