From b6d647435673ba0175d742b5ef60052f359d6289 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Fri, 2 Sep 2022 23:44:41 -0700 Subject: [PATCH] handle disable_udp correctly for games --- src/CommandFormats.hh | 6 +++++- src/ProxyServer.cc | 2 +- src/SendCommands.cc | 16 ++++++++++------ tests/BB-CreateCharGame.test.txt | 4 ++-- tests/DCv1-GameSmokeTest.test.txt | 4 ++-- tests/DCv2-GameSmokeTest.test.txt | 2 +- tests/PC-BasicGame.test.txt | 4 ++-- 7 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index db894c9d..8aef5755 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -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 { diff --git a/src/ProxyServer.cc b/src/ProxyServer.cc index 10d20a4c..69282137 100644 --- a/src/ProxyServer.cc +++ b/src/ProxyServer.cc @@ -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)); } diff --git a/src/SendCommands.cc b/src/SendCommands.cc index ff0cd76c..db1fc7c5 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -39,10 +39,14 @@ const unordered_set v2_crypt_initial_client_commands({ }); const unordered_set 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 c, } void send_player_leave_notification(shared_ptr 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 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); } diff --git a/tests/BB-CreateCharGame.test.txt b/tests/BB-CreateCharGame.test.txt index f7ab99c0..a09d4b2a 100644 --- a/tests/BB-CreateCharGame.test.txt +++ b/tests/BB-CreateCharGame.test.txt @@ -31187,7 +31187,7 @@ I 80350 2022-07-07 23:27:19 - [Commands] Received from C-8 (NO DATA) (version=BB 0000 | 20 00 A0 00 00 00 00 00 00 00 01 00 5B 30 B0 21 | [0 ! 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 80350 2022-07-07 23:27:19 - [Commands] Sending to C-8 (NO DATA) (version=BB command=0069 flag=00000000) -0000 | 0C 00 69 00 00 00 00 00 00 00 00 00 | i +0000 | 0C 00 69 00 00 00 00 00 00 00 01 00 | i I 80350 2022-07-07 23:27:19 - [Commands] Sending to C-8 (NO DATA) (version=BB command=001A flag=00000000) 0000 | 0C 00 D5 00 00 00 00 00 00 00 00 00 | I 80350 2022-07-07 23:27:19 - [Commands] Sending to C-8 (NO DATA) (version=BB command=0019 flag=00000000) @@ -33757,7 +33757,7 @@ I 80350 2022-07-07 23:29:17 - [Commands] Received from C-A (NO DATA) (version=BB 0000 | 20 00 A0 00 00 00 00 00 00 00 01 00 5B 30 B0 21 | [0 ! 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 80350 2022-07-07 23:29:17 - [Commands] Sending to C-A (NO DATA) (version=BB command=0069 flag=00000000) -0000 | 0C 00 69 00 00 00 00 00 00 00 00 00 | i +0000 | 0C 00 69 00 00 00 00 00 00 00 01 00 | i I 80350 2022-07-07 23:29:17 - [Commands] Sending to C-A (NO DATA) (version=BB command=001A flag=00000000) 0000 | 0C 00 D5 00 00 00 00 00 00 00 00 00 | I 80350 2022-07-07 23:29:17 - [Commands] Sending to C-A (NO DATA) (version=BB command=0019 flag=00000000) diff --git a/tests/DCv1-GameSmokeTest.test.txt b/tests/DCv1-GameSmokeTest.test.txt index 9a5a7676..7cddf721 100644 --- a/tests/DCv1-GameSmokeTest.test.txt +++ b/tests/DCv1-GameSmokeTest.test.txt @@ -520,7 +520,7 @@ I 69775 2022-08-27 09:37:06 - [Commands] Received from C-3 (Tali) (version=DC co 0000 | A0 00 1C 00 00 00 01 00 77 77 77 77 00 00 00 00 | wwww 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 69775 2022-08-27 09:37:06 - [Commands] Sending to C-3 (Tali) (version=DC command=69 flag=00) -0000 | 69 00 08 00 00 00 00 00 | i +0000 | 69 00 08 00 00 00 01 00 | i I 69775 2022-08-27 09:37:06 - [Commands] Sending to C-3 (Tali) (version=DC command=1A flag=00) 0000 | 1A 00 08 00 00 00 00 00 | I 69775 2022-08-27 09:37:06 - [Commands] Sending to C-3 (Tali) (version=DC command=19 flag=00) @@ -1612,7 +1612,7 @@ I 69775 2022-08-27 09:38:58 - [Commands] Received from C-5 (Tali) (version=DC co 0000 | A1 00 1C 00 00 00 01 00 77 77 77 77 00 00 00 00 | wwww 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 69775 2022-08-27 09:38:58 - [Commands] Sending to C-5 (Tali) (version=DC command=69 flag=00) -0000 | 69 00 08 00 00 00 00 00 | i +0000 | 69 00 08 00 00 00 01 00 | i I 69775 2022-08-27 09:38:58 - [Commands] Sending to C-5 (Tali) (version=DC command=1A flag=00) 0000 | 1A 00 08 00 00 00 00 00 | I 69775 2022-08-27 09:38:58 - [Commands] Sending to C-5 (Tali) (version=DC command=19 flag=00) diff --git a/tests/DCv2-GameSmokeTest.test.txt b/tests/DCv2-GameSmokeTest.test.txt index ce745298..b53b817e 100644 --- a/tests/DCv2-GameSmokeTest.test.txt +++ b/tests/DCv2-GameSmokeTest.test.txt @@ -1274,7 +1274,7 @@ I 70630 2022-08-27 09:46:29 - [Commands] Received from C-3 (Tali) (version=DC co 0000 | A0 00 1C 00 00 00 01 00 37 F2 62 4E 00 00 00 00 | 7 bN 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 70630 2022-08-27 09:46:29 - [Commands] Sending to C-3 (Tali) (version=DC command=69 flag=00) -0000 | 69 00 08 00 00 00 00 00 | i +0000 | 69 00 08 00 00 00 01 00 | i I 70630 2022-08-27 09:46:29 - [Commands] Sending to C-3 (Tali) (version=DC command=1A flag=00) 0000 | 1A 00 08 00 00 00 00 00 | I 70630 2022-08-27 09:46:29 - [Commands] Sending to C-3 (Tali) (version=DC command=19 flag=00) diff --git a/tests/PC-BasicGame.test.txt b/tests/PC-BasicGame.test.txt index 766541c0..12b688be 100644 --- a/tests/PC-BasicGame.test.txt +++ b/tests/PC-BasicGame.test.txt @@ -536,7 +536,7 @@ I 80820 2022-07-07 23:34:58 - [Commands] Received from C-3 (Kallea) (version=PC I 80820 2022-07-07 23:35:00 - [Commands] Received from C-3 (Kallea) (version=PC command=84 flag=00) 0000 | 0C 00 84 00 33 00 00 33 01 00 00 00 | 3 3 I 80820 2022-07-07 23:35:00 - [Commands] Sending to C-3 (Kallea) (version=PC command=69 flag=00) -0000 | 08 00 69 00 00 00 00 00 | i +0000 | 08 00 69 00 00 00 01 00 | i I 80820 2022-07-07 23:35:00 - [Commands] Sending to C-3 (Kallea) (version=PC command=67 flag=01) 0000 | 5C 04 67 01 00 00 01 00 01 00 00 00 00 00 00 00 | \ g 0010 | 00 00 01 00 78 62 F8 10 7F 00 00 01 00 00 00 00 | xb @@ -2113,7 +2113,7 @@ I 80820 2022-07-07 23:37:10 - [Commands] Received from C-3 (Kallea) (version=PC 0000 | 1C 00 A0 00 00 00 01 00 78 62 F8 10 00 00 00 00 | xb 0010 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 80820 2022-07-07 23:37:10 - [Commands] Sending to C-3 (Kallea) (version=PC command=69 flag=00) -0000 | 08 00 69 00 00 00 00 00 | i +0000 | 08 00 69 00 00 00 01 00 | i I 80820 2022-07-07 23:37:10 - [Commands] Sending to C-3 (Kallea) (version=PC command=1A flag=00) 0000 | 08 00 1A 00 00 00 00 00 | I 80820 2022-07-07 23:37:10 - [Commands] Sending to C-3 (Kallea) (version=PC command=19 flag=00)