| Commit message (Collapse) | Author | Age | |
|---|---|---|---|
| * | turn error codes into enums + check empty credentials before login | fusion32 | 2025-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) | fusion32 | 2025-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 stored | fusion32 | 2025-10-23 |
| | | |||
| * | add include path for PostgreSQL + overall cleanup | fusion32 | 2025-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 scripts | fusion32 | 2025-10-18 |
| | | |||
| * | properly handle NULL values with postgres result helpers | fusion32 | 2025-10-18 |
| | | |||
| * | modify how automatic SQLite patches/upgrades works + overall cleanup | fusion32 | 2025-10-18 |
| | | |||
| * | world startup/shutdown timestamps + adjust a few column names | fusion32 | 2025-10-17 |
| | | |||
| * | properly handle text encoding differences with QueryManager clients | fusion32 | 2025-10-16 |
| | | |||
| * | move ResolveHostName outside of GetCharacterEndpoints | fusion32 | 2025-10-16 |
| | | |||
| * | prevent a few SQLite queries to fail when they affected no rows | fusion32 | 2025-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 used | fusion32 | 2025-10-16 |
| | | |||
| * | lower monotonic uptime resolution from MILLISECONDS to SECONDS | fusion32 | 2025-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(*)" queries | fusion32 | 2025-10-16 |
| | | |||
| * | make config.cfg a distribution template | fusion32 | 2025-10-16 |
| | | |||
| * | fix a few postgres queries | fusion32 | 2025-10-15 |
| | | |||
| * | implement all postgres queries | fusion32 | 2025-10-15 |
| | | |||
| * | postgres interval helpers + a few more queries | fusion32 | 2025-10-15 |
| | | |||
| * | make query output parameter names more specific | fusion32 | 2025-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 names | fusion32 | 2025-10-14 |
| | | |||
| * | the remainder of postgres helpers (probably) | fusion32 | 2025-10-14 |
| | | | | | | This should give us everything we need to implement all the supported queries. | ||
| * | more postgres helpers and a couple of queries | fusion32 | 2025-10-14 |
| | | |||
| * | most of the postgres primitives/helpers | fusion32 | 2025-10-13 |
| | | |||
| * | beginning of postgres driver + overall tweaks | fusion32 | 2025-10-13 |
| | | |||
| * | organize database configs and schema files + compilation guards | fusion32 | 2025-10-10 |
| | | |||
| * | switch to blocking poll + fix config, signals, time, non-game login | fusion32 | 2025-10-10 |
| | | |||
| * | update query functions | fusion32 | 2025-10-09 |
| | | |||
| * | small indentation adjustment | fusion32 | 2025-10-09 |
| | | |||
| * | update sqlite driver + impl INTERNAL_RESOLVE_WORLD | fusion32 | 2025-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 processing | fusion32 | 2025-10-07 |
| | | |||
| * | make connections properly handle async queries | fusion32 | 2025-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 queries | fusion32 | 2025-10-06 |
| | | |||
| * | fix problem with finishing or excluding from auctions | fusion32 | 2025-10-04 |
| | | |||
| * | fix RIGHT check with notations and ip banishments | fusion32 | 2025-09-13 |
| | | |||
| * | remove ParseOptionalIPAddress | fusion32 | 2025-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 optional | fusion32 | 2025-09-12 |
| | | |||
| * | add check to make sure the database is open with write permissions | fusion32 | 2025-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 change | fusion32 | 2025-08-18 |
| | | |||
| * | wrapping up for a public release | fusion32 | 2025-08-15 |
| | | |||
| * | store world hostname and resolve at runtime | fusion32 | 2025-08-08 |
| | | |||
| * | fix problem with concurrent writes + implement website queries | fusion32 | 2025-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 fixes | fusion32 | 2025-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 server | fusion32 | 2025-07-17 |
| | | |||
| * | finish game queries | fusion32 | 2025-07-15 |
| | | |||
| * | impl banishment, deaths, and buddies queries | fusion32 | 2025-07-14 |
| | | |||
| * | impl BANISH_ACCOUNT | fusion32 | 2025-07-13 |
| | | |||
| * | reorganize query functions and impl SET_NOTATION | fusion32 | 2025-07-13 |
| | | |||
| * | house related queries | fusion32 | 2025-07-12 |
| | | |||
| * | add `TransactionScope` | fusion32 | 2025-07-11 |
| | | |||
| * | implement more queries + overall improvements | fusion32 | 2025-07-11 |
| | | |||
