1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-07-10 07:57:46 +00:00
Commit graph

74 commits

Author SHA1 Message Date
24edee6548 Fix various size issues with lobby IPC packets
Some of these were the wrong size, and were affecting both the
server and packet analyzer alike. This should now more accurately
reflect retail.
2025-07-04 15:01:27 -04:00
7ccd132129 Unify version and file checking behind one config parameter
And make it affect the patch server as well, if you really want to
use an unsupported version.
2025-07-04 11:56:12 -04:00
The Dax
1c7570c696 Bounds check the string parts vecs.
Fix off by one error

Style nit.
2025-07-04 11:44:35 -04:00
The Dax
b3c954ed83 Fix error string 2025-07-04 11:44:35 -04:00
The Dax
d011f11e54 Lobby server: implement a server-side version check against the version info the client sends.
-TLDR: it checks file length and sha1 hash of the game exe, and all of the version strings.
2025-07-04 11:44:35 -04:00
thedax
bc7ab11deb
Lobby server: send back more accurate error messages for problems (#97)
* Lobby server: send back more accurate error messages for problems

* Send the dreaded 2002 error code instead. Exact error codes would probably be better.
-It is unknown if there's a list somewhere.
2025-07-02 21:59:25 -04:00
ff3a7d6835 Remove more leftover debugging code 2025-06-28 15:10:57 -04:00
05f909497c More unknown IPC handling fixes 2025-06-26 21:06:54 -04:00
4f364ae330 Don't make packet parsing async
This doesn't need to be marked as async, the code isn't.
2025-06-26 19:09:13 -04:00
2dc3a899bb Run cargo fmt 2025-06-19 16:01:16 -04:00
OTCompa
086cd24b09 Connect to server name instead of listening address 2025-06-19 15:54:42 -04:00
3757f4e0db Make !spawnmonster put the NPC at your location again
Also included some refactoring that will help networking these better.
2025-06-18 20:28:03 -04:00
1b6fdab000 Add warnings in more lobby fail cases
For example, if your World server is down and no service accounts were
returned.
2025-06-18 20:08:35 -04:00
97a1836e77 Don't panic in the Lobby server if the Login server is unavailable
See #21
2025-06-18 19:38:00 -04:00
9787126a1b Replace (most of) the remaining Excel parsing with Physis Sheets
The only one remaining is for Item data, but that can't be ported yet
because the new API only fetches the first page for now.
2025-05-09 18:35:44 -04:00
e43ab6c42a When no session is found when logging into the lobby, show an error msg
It's the wrong error message, but it's better than getting an empty
lobby screen!
2025-05-08 21:01:15 -04:00
23f9b5f3c1 Move oodle into the packet module
Not sure why I didn't do this before, it's not important enough to be a
top-level item.
2025-05-02 00:52:26 -04:00
5111a38424 Re-organize IPC segments into the ipc module
These were kind of scattered everywhere, instead we should move them
into their own module. Kawari's custom IPC is moved here too.
2025-05-02 00:47:11 -04:00
fb69689f2a Change server_id field in IpcSegment to option 2025-05-02 00:17:15 -04:00
f3f25eb219 Overhaul segment types, their names and their order 2025-05-02 00:03:36 -04:00
67ec72a962 Rename the remaining lobby IPC opcodes, reorder them too 2025-05-01 22:45:49 -04:00
2ec54fa6ec Use more accurate names for some client lobby packet types 2025-05-01 22:36:30 -04:00
2a6c9ee76c Add support for Shanda (Chinese) logins to the lobby server
This only means logging into the lobby server works, trying to login to
a World doesn't work as even the current version is too old. It probably
won't work without modifications anyway.
2025-04-22 18:15:13 -04:00
90e5e191e9 Integrate Login<->Lobby servers, remove placeholder service account id
All accounts were sharing the same character list, but now they should
be properly separated. This also modifies the login database to prepare
for multiple service accounts, but there's no way to manage them in the
web interface yet still.
2025-04-05 21:36:56 -04:00
eae962cc85 Multiple fixes attempting to fix packet errors
It doesn't unfortunately, there's still a bunch of errors when decoding
packets. These are all decent fixes though.
2025-03-30 21:42:46 -04:00
37c19ee1b8 Start sharing the Physis GameData instances
Instead of standalone functions in the common module to perform game data tasks,
there is now a shared GameData struct that these functions moved to. This speeds
up a few things, and can take advantage of Physis' built-in index caching.

I know the current solution isn't ideal (each connection has to mutex lock to
access gamedata) but it's at least better than before.
2025-03-30 10:34:42 -04:00
f5c23f8bf5 Shorten the server startup text 2025-03-29 20:05:20 -04:00
107a00aa92 Move lobby character actions to LobbyConnection, support deleting characters 2025-03-22 17:32:00 -04:00
6190001caa Remove more hardcoded values for character
Since we are now backed by a database, the remaining usages are erroneous and
should be removed.
2025-03-22 17:06:16 -04:00
a91c59aaaa Remove hardcoded world id & name, make it configurable
Now the world isn't hardcoded to Gilgamesh, and is configurable. It's also now
the "Dev" server listed in the excel sheet which makes a more sensible default.
2025-03-22 17:00:21 -04:00
3f27d2b3df Change configuration format to YAML, allow configuring the address and ports
This removes all of the hardcoded localhost stuff, and allows changing the ports
of various services.
2025-03-22 16:47:21 -04:00
4b67b22c9f Show the actual character list on the lobby screen
This doesn't do any actual account checking yet, but it works pretty well.
2025-03-21 21:26:32 -04:00
7b77c19008 Add TODO to fix the lobby error for name rejection 2025-03-21 19:59:58 -04:00
0900d0b94e Implement basic character persistence, World <-> Lobby server communication
This is unfortunately lumped into one big commit, and is very hacky and WIP but
does indeed work! Since the Lobby and World server are two separate servers, it
uses it's own custom IPC packets (reusing the same packet structures as regular
game ones.)

The characters you create in the Lobby server are now saved in the World server,
but this is not yet reflected in the Lobby screen.
2025-03-21 19:56:16 -04:00
1f2283af14 Specify a connection type when sending packets 2025-03-18 20:33:12 -04:00
a7f56a62a1 Rename FFXIVOodle to OodleNetwork, move out of a folder
I was thinking I was going to add other modules but it wasn't needed, so it
doesn't need to live in a folder.
2025-03-17 17:22:09 -04:00
c34f5d7ea8 Move CharaMake up to it's super module 2025-03-17 17:19:28 -04:00
8859683074 Document the various LobbyConnection functions, move it up to it's super module 2025-03-17 17:17:49 -04:00
c510d955bd Document more random things, move session_id from PacketState to LobbyConnection 2025-03-17 16:58:48 -04:00
3140dad378 Remove leftover bits of debugging logging 2025-03-16 18:35:11 -04:00
a021abc3c7 Use WORLD_NAME constant in Lobby server 2025-03-16 18:23:04 -04:00
dc8d8638f6 Move LobbyCharacterAction into it's own struct 2025-03-16 18:22:15 -04:00
ff9bcb255d Extract sequence number from the lobby character action packet 2025-03-16 18:18:49 -04:00
7315ece194 Move some larger Lobby IPC structs to their own files, add more tests for these
Also fix a bunch of mistakes when calculating size, and so on.
2025-03-16 18:15:19 -04:00
f5d75301b2 Re-organize the IPC structures so they live in their own server-specific module
My old setup of throwing *all* of the IPC types and opcodes into *one* enum was
becoming unbearable. Now that we have multiple things using the same opcodes
(because they can overlap) I think it's time to repay this technical debt.

This overhauls the structure of the project to move IPC structs into their own
modules, and separate the opcode data/lists into separate ones depending on if
it's clientbound and serverbound.

Nothing has changed functionall, but this is going to make it way easier to add
more IPC in the future.
2025-03-16 17:43:29 -04:00
23050e7b95 Move more structs out of the root src/ folder and into their respective server 2025-03-16 15:39:44 -04:00
f8a28e45c9 Add helper function to send lobby errors
This isn't used yet, but implemented for future use.
2025-03-16 15:20:55 -04:00
22acdc4a3b Print IP address when lobby & world servers are started 2025-03-16 14:51:18 -04:00
f372f3173d Create dedicated Connection implementations to handle future server work
The current situation of throw-every-piece-of-logic-into-one-file for each
server isn't working out. So now there is a new ZoneConnection/LobbyConnection
struct that will be delegating tasks to their own Handlers (for example, there
could be a ChatHandler.)

I'm not sure how well this architecture will scale, but it's better than what
we have right now.
2025-03-15 20:38:10 -04:00
640aeb797c Fix a few problems with ClientSelectData, use the same character in both servers
I apparently had a few fields missing here. Also just some general clean up,
make it the same looking character in both the Lobby and World server. I also
chose Gridania as the test zone.
2025-03-14 00:30:37 -04:00