handle disable_udp correctly for games

This commit is contained in:
Martin Michelsen
2022-09-02 23:44:41 -07:00
parent 010f753a08
commit b6d6474356
7 changed files with 23 additions and 15 deletions
+5 -1
View File
@@ -927,6 +927,7 @@ struct S_JoinGame {
// Note: The 64 command for PSO DC ends here (the next 4 fields are ignored).
// newserv sends them anyway for code simplicity reasons.
uint8_t episode;
// Similarly, PSO GC ignores the values in the following fields.
uint8_t unused2; // Should be 1 for PSO PC?
uint8_t solo_mode;
uint8_t unused3;
@@ -1018,7 +1019,9 @@ struct S_JoinLobby_XB_65_67_68 {
struct S_LeaveLobby_66_69_Ep3_E9 {
uint8_t client_id;
uint8_t leader_id;
le_uint16_t unused;
// Note: disable_udp only has an effect for games; it is unused for lobbies.
uint8_t disable_udp;
uint8_t unused;
};
// 67 (S->C): Join lobby
@@ -1448,6 +1451,7 @@ struct C_LoginExtended_PC_9D : C_Login_DC_PC_GC_9D {
// Not used on GC Episodes 1&2 Trial Edition.
// The extended version of this command is used in the same circumstances as
// when PSO PC uses the extended version of the 9D command.
// header.flag is 1 if the client has UDP disabled.
struct C_Login_GC_9E : C_Login_DC_PC_GC_9D {
union ClientConfigFields {
+1 -1
View File
@@ -672,7 +672,7 @@ void ProxyServer::LinkedSession::send_to_game_server(const char* error_message)
}
uint8_t leaving_id = x;
uint8_t leader_id = this->lobby_client_id;
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_id, leader_id, 0};
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_id, leader_id, 1, 0};
this->client_channel.send(0x69, leaving_id, &cmd, sizeof(cmd));
}
+10 -6
View File
@@ -39,10 +39,14 @@ const unordered_set<uint32_t> v2_crypt_initial_client_commands({
});
const unordered_set<uint32_t> v3_crypt_initial_client_commands({
0x00E000DB, // (17) GC/XB license check
0x00EC019E, // (02) GC login
0x0150019E, // (02) GC extended login
0x0130019E, // (02) XB login
0x0194019E, // (02) XB extended login
0x00EC009E, // (02) GC login
0x00EC019E, // (02) GC login (UDP off)
0x0150009E, // (02) GC extended login
0x0150019E, // (02) GC extended login (UDP off)
0x0130009E, // (02) XB login
0x0130019E, // (02) XB login (UDP off)
0x0194009E, // (02) XB extended login
0x0194019E, // (02) XB extended login (UDP off)
});
@@ -1229,12 +1233,12 @@ void send_player_join_notification(shared_ptr<Client> c,
}
void send_player_leave_notification(shared_ptr<Lobby> l, uint8_t leaving_client_id) {
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 0};
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 1, 0};
send_command_t(l, l->is_game() ? 0x66 : 0x69, leaving_client_id, cmd);
}
void send_self_leave_notification(shared_ptr<Client> c) {
S_LeaveLobby_66_69_Ep3_E9 cmd = {c->lobby_client_id, 0, 0};
S_LeaveLobby_66_69_Ep3_E9 cmd = {c->lobby_client_id, 0, 1, 0};
send_command_t(c, 0x69, c->lobby_client_id, cmd);
}