diff --git a/src/Client.cc b/src/Client.cc index 27600c71..58adfe1f 100644 --- a/src/Client.cc +++ b/src/Client.cc @@ -135,6 +135,18 @@ void Client::Config::set_flags_for_version(Version version, int64_t sub_version) } } +bool Client::Config::should_update_vs(const Config& other) const { + constexpr uint64_t mask = static_cast(Flag::CLIENT_SIDE_MASK); + return ((this->enabled_flags ^ other.enabled_flags) & mask) || + (this->specific_version != other.specific_version) || + (this->override_random_seed != other.override_random_seed) || + (this->override_section_id != other.override_section_id) || + (this->override_lobby_event != other.override_lobby_event) || + (this->override_lobby_number != other.override_lobby_number) || + (this->proxy_destination_address != other.proxy_destination_address) || + (this->proxy_destination_port != other.proxy_destination_port); +} + Client::Client( shared_ptr server, struct bufferevent* bev, @@ -243,6 +255,23 @@ void Client::set_license(shared_ptr l) { this->license = l; } +void Client::convert_license_to_temporary_if_nte() { + // If the session is a prototype version and the license was created and we + // should use a temporary license instead, delete the permanent license and + // replace it with a temporary license. + auto s = this->require_server_state(); + if (s->use_temp_licenses_for_prototypes && + this->config.check_flag(Client::Flag::LICENSE_WAS_CREATED) && + is_any_nte(this->version())) { + this->log.info("Client is a prototype version and the license was created during this session; converting permanent license to temporary license"); + s->license_index->remove(this->license->serial_number); + auto new_l = s->license_index->create_temporary_license(); + this->license->delete_file(); + *new_l = std::move(*this->license); + this->set_license(new_l); + } +} + shared_ptr Client::require_server_state() const { auto server = this->server.lock(); if (!server) { diff --git a/src/Client.hh b/src/Client.hh index 46c6c257..c52b9e9a 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -30,8 +30,15 @@ public: enum class Flag : uint64_t { // clang-format off + // This mask specifies which flags are sent to the client + // TODO: It'd be nice to use a pattern here (e.g. all server-side flags are + // in the high bits) but that would require re-recording or manually + // rewriting all the tests + CLIENT_SIDE_MASK = 0xFFFFFFFFFC0FFFFB, + // Version-related flags CHECKED_FOR_DC_V1_PROTOTYPE = 0x0000000000000002, + LICENSE_WAS_CREATED = 0x0000000000000004, // Server-side only NO_D6_AFTER_LOBBY = 0x0000000000000100, NO_D6 = 0x0000000000000200, FORCE_ENGLISH_LANGUAGE_BB = 0x0000000000000400, @@ -44,20 +51,20 @@ public: USE_OVERFLOW_FOR_SEND_FUNCTION_CALL = 0x0000000000010000, // State flags - LOADING = 0x0000000000100000, - LOADING_QUEST = 0x0000000000200000, - LOADING_RUNNING_JOINABLE_QUEST = 0x0000000000400000, - LOADING_TOURNAMENT = 0x0000000000800000, - IN_INFORMATION_MENU = 0x0000000001000000, - AT_WELCOME_MESSAGE = 0x0000000002000000, + LOADING = 0x0000000000100000, // Server-side only + LOADING_QUEST = 0x0000000000200000, // Server-side only + LOADING_RUNNING_JOINABLE_QUEST = 0x0000000000400000, // Server-side only + LOADING_TOURNAMENT = 0x0000000000800000, // Server-side only + IN_INFORMATION_MENU = 0x0000000001000000, // Server-side only + AT_WELCOME_MESSAGE = 0x0000000002000000, // Server-side only SAVE_ENABLED = 0x0000000004000000, HAS_EP3_CARD_DEFS = 0x0000000008000000, HAS_EP3_MEDIA_UPDATES = 0x0000000010000000, USE_OVERRIDE_RANDOM_SEED = 0x0000000020000000, HAS_GUILD_CARD_NUMBER = 0x0000000040000000, - AT_BANK_COUNTER = 0x0000000080000000, - SHOULD_SEND_ARTIFICIAL_ITEM_STATE = 0x0001000000000000, - SHOULD_SEND_ARTIFICIAL_FLAG_STATE = 0x0002000000000000, + AT_BANK_COUNTER = 0x0000000080000000, // Server-side only + SHOULD_SEND_ARTIFICIAL_ITEM_STATE = 0x0001000000000000, // Server-side only + SHOULD_SEND_ARTIFICIAL_FLAG_STATE = 0x0002000000000000, // Server-side only SHOULD_SEND_ENABLE_SAVE = 0x0004000000000000, SWITCH_ASSIST_ENABLED = 0x0000000100000000, @@ -99,6 +106,8 @@ public: bool operator==(const Config& other) const = default; bool operator!=(const Config& other) const = default; + bool should_update_vs(const Config& other) const; + [[nodiscard]] static inline bool check_flag(uint64_t enabled_flags, Flag flag) { return !!(enabled_flags & static_cast(flag)); } @@ -139,7 +148,7 @@ public: StringWriter w; w.put_u32l(CLIENT_CONFIG_MAGIC); w.put_u32l(this->specific_version); - w.put_u64l(this->enabled_flags); + w.put_u64l(this->enabled_flags & static_cast(Flag::CLIENT_SIDE_MASK)); w.put_u32l(this->override_random_seed); w.put_u32b(this->proxy_destination_address); w.put_u16l(this->proxy_destination_port); @@ -263,6 +272,7 @@ public: } void set_license(std::shared_ptr l); + void convert_license_to_temporary_if_nte(); void sync_config(); diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 92d7719c..538f02a0 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -257,6 +257,8 @@ static void send_main_menu(shared_ptr c) { } void on_login_complete(shared_ptr c) { + c->convert_license_to_temporary_if_nte(); + // On BB, this function is called when the data server phase is done (and we // should send the ship select menu), so we don't need to check for it here. switch (c->server_behavior) { @@ -428,6 +430,7 @@ static void on_DB_V3(shared_ptr c, uint16_t, uint32_t, string& data) { c->should_disconnect = true; return; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -472,6 +475,7 @@ static void on_88_DCNTE(shared_ptr c, uint16_t, uint32_t, string& data) send_message_box(c, "Incorrect serial number"); c->should_disconnect = true; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -515,6 +519,7 @@ static void on_8B_DCNTE(shared_ptr c, uint16_t, uint32_t, string& data) send_message_box(c, "Incorrect serial number"); c->should_disconnect = true; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -569,6 +574,7 @@ static void on_90_DC(shared_ptr c, uint16_t, uint32_t, string& data) { send_command(c, 0x90, 0x03); c->should_disconnect = true; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -626,6 +632,7 @@ static void on_93_DC(shared_ptr c, uint16_t, uint32_t, string& data) { c->should_disconnect = true; return; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -743,6 +750,7 @@ static void on_9A(shared_ptr c, uint16_t, uint32_t, string& data) { c->should_disconnect = true; } else if (is_v1_or_v2(c->version())) { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -805,6 +813,7 @@ static void on_9C(shared_ptr c, uint16_t, uint32_t, string& data) { c->should_disconnect = true; return; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = cmd.access_key.decode(); @@ -942,16 +951,13 @@ static void on_9D_9E(shared_ptr c, uint16_t command, uint32_t, string& d return; } catch (const LicenseIndex::missing_license& e) { - // On GC, the client should have sent a different command containing the - // password already, which should have created and added a license. So, if - // no license exists at this point, disconnect the client even if - // unregistered clients are allowed. - if (is_v3(c->version()) || !s->allow_unregistered_users || (serial_number == 0)) { + if (!s->allow_unregistered_users || (serial_number == 0)) { send_command(c, 0x04, 0x04); c->should_disconnect = true; return; - } else if (is_v1_or_v2(c->version())) { + } else if (is_v1_or_v2(c->version()) || is_v3(c->version())) { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = serial_number; l->access_key = base_cmd->access_key.decode(); @@ -1022,6 +1028,7 @@ static void on_9E_XB(shared_ptr c, uint16_t, uint32_t, string& data) { return; } catch (const LicenseIndex::missing_license& e) { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = fnv1a32(xb_gamertag) & 0x7FFFFFFF; l->xb_gamertag = xb_gamertag; @@ -1113,6 +1120,7 @@ static void on_93_BB(shared_ptr c, uint16_t, uint32_t, string& data) { c->should_disconnect = true; return; } else { + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = fnv1a32(username) & 0x7FFFFFFF; l->bb_username = username; @@ -3034,6 +3042,7 @@ static void on_61_98(shared_ptr c, uint16_t command, uint32_t flag, stri if (c->config.specific_version == 0x33000000) { c->config.specific_version = 0x33534A54; // 3SJT } + c->convert_license_to_temporary_if_nte(); } cmd = &check_size_t(data, 0xFFFF); } @@ -5071,7 +5080,7 @@ static void on_04_P(shared_ptr c, uint16_t, uint32_t, string& data) { c->should_disconnect = true; return; } else { - + c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED); auto l = s->license_index->create_license(); l->serial_number = fnv1a32(cmd.username.decode()) & 0x7FFFFFFF; l->bb_username = cmd.username.decode(); diff --git a/src/SendCommands.cc b/src/SendCommands.cc index f12f910b..3717edda 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -282,7 +282,7 @@ void send_server_init(shared_ptr c, uint8_t flags) { } void send_update_client_config(shared_ptr c, bool always_send) { - if (always_send || (is_v3(c->version()) && (c->config != c->synced_config))) { + if (always_send || (is_v3(c->version()) && (c->config.should_update_vs(c->synced_config)))) { switch (c->version()) { case Version::DC_NTE: case Version::DC_V1_11_2000_PROTOTYPE: diff --git a/src/ServerState.cc b/src/ServerState.cc index 69bf428f..ce4b7703 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -39,6 +39,7 @@ ServerState::ServerState(shared_ptr base, const string& confi ip_stack_debug(false), allow_unregistered_users(false), allow_pc_nte(false), + use_temp_licenses_for_prototypes(true), allow_dc_pc_games(false), allow_gc_xb_games(true), allowed_drop_modes_v1_v2_normal(0x1F), @@ -669,6 +670,7 @@ void ServerState::parse_config(const JSON& json, bool is_reload) { this->ip_stack_debug = json.get_bool("IPStackDebug", this->ip_stack_debug); this->allow_unregistered_users = json.get_bool("AllowUnregisteredUsers", this->allow_unregistered_users); this->allow_pc_nte = json.get_bool("AllowPCNTE", this->allow_pc_nte); + this->use_temp_licenses_for_prototypes = json.get_bool("UseTemporaryLicensesForPrototypes", this->use_temp_licenses_for_prototypes); this->allowed_drop_modes_v1_v2_normal = json.get_int("AllowedDropModesV1V2Normal", this->allowed_drop_modes_v1_v2_normal); this->allowed_drop_modes_v1_v2_battle = json.get_int("AllowedDropModesV1V2Battle", this->allowed_drop_modes_v1_v2_battle); this->allowed_drop_modes_v1_v2_challenge = json.get_int("AllowedDropModesV1V2Challenge", this->allowed_drop_modes_v1_v2_challenge); diff --git a/src/ServerState.hh b/src/ServerState.hh index 2103ce0c..b7b581cb 100644 --- a/src/ServerState.hh +++ b/src/ServerState.hh @@ -75,6 +75,7 @@ struct ServerState : public std::enable_shared_from_this { bool ip_stack_debug; bool allow_unregistered_users; bool allow_pc_nte; + bool use_temp_licenses_for_prototypes; bool allow_dc_pc_games; bool allow_gc_xb_games; uint8_t allowed_drop_modes_v1_v2_normal; diff --git a/src/Version.hh b/src/Version.hh index 1c848db0..20e9c4b0 100644 --- a/src/Version.hh +++ b/src/Version.hh @@ -29,6 +29,14 @@ const char* name_for_enum(Version v); template <> Version enum_for_name(const char* name); +inline bool is_any_nte(Version version) { + return (version == Version::DC_NTE) || + (version == Version::DC_V1_11_2000_PROTOTYPE) || + (version == Version::PC_NTE) || + (version == Version::GC_NTE) || + (version == Version::GC_EP3_NTE); +} + inline bool is_patch(Version version) { return (version == Version::PC_PATCH) || (version == Version::BB_PATCH); } diff --git a/system/config.example.json b/system/config.example.json index 02142de3..074ca0c9 100644 --- a/system/config.example.json +++ b/system/config.example.json @@ -241,6 +241,12 @@ // number is a hash of the username. "AllowUnregisteredUsers": true, + // If this option is enabled and AllowUnregisteredUsers is enabled, the server + // will use temporary licenses for the prototype versions (DC NTE, DC 11/2000, + // GC NTE, and Ep3 NTE) instead of permanent licenses. In this case, you can + // still manually create permanent licenses for NTE players. + "UseTemporaryLicensesForPrototypes": true, + // If this option is enabled, PC NTE users will be allowed to connect. This is // the only version of the game that does not have any way to identify the // player (no serial number, username, etc.), so PC NTE players receive random diff --git a/tests/GC-Episode2PrivateDrops2P.test.txt b/tests/GC-Episode2PrivateDrops2P.test.txt index 4db9cb67..9657eba9 100644 --- a/tests/GC-Episode2PrivateDrops2P.test.txt +++ b/tests/GC-Episode2PrivateDrops2P.test.txt @@ -61,7 +61,7 @@ I 94381 2023-12-29 15:36:14 - [Commands] Received from C-1 (version=GC_V3 comman 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 94381 2023-12-29 15:36:14 - [Commands] Sending to C-1 (version=GC_V3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 42 20 00 00 00 00 00 00 00 | 0PO3 B +0010 | 30 50 4F 33 00 01 00 40 20 00 00 00 00 00 00 00 | 0PO3 B 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:14 - [Commands] Sending to C-1 (version=GC_V3 command=D5 flag=00) 0000 | D5 00 2C 00 59 6F 75 20 61 72 65 20 63 6F 6E 6E | , You are conn @@ -71,7 +71,7 @@ I 94381 2023-12-29 15:36:14 - [Commands] Received from C-1 (version=GC_V3 comman 0000 | 96 00 0C 00 C7 32 CE 2A 63 02 00 00 | 2 *c I 94381 2023-12-29 15:36:14 - [Commands] Sending to C-1 (version=GC_V3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 42 20 00 04 00 00 00 00 00 | 0PO3 B +0010 | 30 50 4F 33 00 01 00 40 20 00 04 00 00 00 00 00 | 0PO3 B 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:14 - [Commands] Sending to C-1 (version=GC_V3 command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 31 32 3A 32 39 3A 20 | 2023:12:29: @@ -80,10 +80,6 @@ I 94381 2023-12-29 15:36:14 - [Commands] Received from C-1 (version=GC_V3 comman 0000 | 99 00 04 00 | I 94381 2023-12-29 15:36:14 - [Commands] Received from C-1 (version=GC_V3 command=D6 flag=00) 0000 | D6 00 04 00 | -I 94381 2023-12-29 15:36:14 - [Commands] Sending to C-1 (version=GC_V3 command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 40 20 00 04 00 00 00 00 00 | 0PO3 @ -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:14 - [Commands] Sending to C-1 (version=GC_V3 command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria @@ -153,11 +149,11 @@ I 94381 2023-12-29 15:36:15 - [Commands] Received from C-2 (version=GC_V3 comman 00A0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 00B0 | 00 00 00 00 00 00 00 00 00 00 00 00 4A 65 73 73 | Jess 00C0 | 00 00 00 00 00 00 00 00 00 00 00 00 32 AC 99 83 | 2 -00D0 | 30 50 4F 33 00 01 00 44 20 00 00 00 00 00 00 00 | 0PO3 D +00D0 | 30 50 4F 33 00 01 00 40 20 00 00 00 00 00 00 00 | 0PO3 D 00E0 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:15 - [Commands] Sending to C-2 (version=GC_V3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 44 20 00 00 00 00 00 00 00 | 0PO3 D +0010 | 30 50 4F 33 00 01 00 40 20 00 00 00 00 00 00 00 | 0PO3 D 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:15 - [Commands] Sending to C-2 (version=GC_V3 command=83 flag=0F) 0000 | 83 0F B8 00 33 00 00 33 01 00 00 00 00 00 00 00 | 3 3 @@ -378,7 +374,7 @@ I 94381 2023-12-29 15:36:15 - [Commands] Sending to C-2 (Jess) (version=GC_V3 co 0440 | 0D FF 05 04 03 01 00 07 00 FF FF FF | I 94381 2023-12-29 15:36:15 - [Commands] Sending to C-2 (Jess) (version=GC_V3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 03 00 44 20 00 00 00 00 00 00 00 | 0PO3 D +0010 | 30 50 4F 33 00 03 00 40 20 00 00 00 00 00 00 00 | 0PO3 D 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:15 - [Commands] Received from C-2 (Jess) (version=GC_V3 command=60 flag=00) 0000 | 60 00 1C 00 3F 06 00 00 00 00 00 80 0F 00 FF FF | ` ? @@ -471,7 +467,7 @@ I 94381 2023-12-29 15:36:19 - [Commands] Received from C-4 (version=GC_V3 comman 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 94381 2023-12-29 15:36:19 - [Commands] Sending to C-4 (version=GC_V3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 00 00 00 33 00 00 00 42 20 00 00 00 00 00 00 00 | 3 B +0010 | 00 00 00 33 00 00 00 40 20 00 00 00 00 00 00 00 | 3 B 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:19 - [Commands] Sending to C-4 (version=GC_V3 command=D5 flag=00) 0000 | D5 00 2C 00 59 6F 75 20 61 72 65 20 63 6F 6E 6E | , You are conn @@ -481,7 +477,7 @@ I 94381 2023-12-29 15:36:19 - [Commands] Received from C-4 (version=GC_V3 comman 0000 | 96 00 0C 00 7B 9E 17 2C 1D 00 00 00 | { , I 94381 2023-12-29 15:36:19 - [Commands] Sending to C-4 (version=GC_V3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 00 00 00 33 00 00 00 42 20 00 04 00 00 00 00 00 | 3 B +0010 | 00 00 00 33 00 00 00 40 20 00 04 00 00 00 00 00 | 3 B 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:19 - [Commands] Sending to C-4 (version=GC_V3 command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 31 32 3A 32 39 3A 20 | 2023:12:29: @@ -490,10 +486,6 @@ I 94381 2023-12-29 15:36:19 - [Commands] Received from C-4 (version=GC_V3 comman 0000 | 99 00 04 00 | I 94381 2023-12-29 15:36:19 - [Commands] Received from C-4 (version=GC_V3 command=D6 flag=00) 0000 | D6 00 04 00 | -I 94381 2023-12-29 15:36:19 - [Commands] Sending to C-4 (version=GC_V3 command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 1E B1 05 17 32 AC 99 83 | , 2 -0010 | 00 00 00 33 00 00 00 40 20 00 04 00 00 00 00 00 | 3 @ -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 94381 2023-12-29 15:36:19 - [Commands] Sending to C-4 (version=GC_V3 command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria diff --git a/tests/GC-Episode3Battle.test.txt b/tests/GC-Episode3Battle.test.txt index ec4e0150..1850bb94 100644 --- a/tests/GC-Episode3Battle.test.txt +++ b/tests/GC-Episode3Battle.test.txt @@ -58,7 +58,7 @@ I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (version=GC command=9 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 42 20 00 00 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 40 20 00 00 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=B7 flag=00) 0000 | B7 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 | @@ -73,7 +73,7 @@ I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (version=GC command=9 0000 | 96 00 0C 00 03 1B 8F 2C C0 00 00 00 | , I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 42 20 00 04 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 40 20 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 39 3A 31 37 3A 20 | 2023:09:17: @@ -2623,16 +2623,12 @@ I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=CC f 0500 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 4A 20 00 04 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 48 20 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (Tali) (version=GC command=99 flag=00) 0000 | 99 00 04 00 | I 16332 2023-09-17 10:14:34 - [Commands] Received from C-1 (Tali) (version=GC command=D6 flag=00) 0000 | D6 00 04 00 | -I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (Tali) (version=GC command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 48 20 00 04 00 00 00 00 00 | 0ES3@ ` -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16332 2023-09-17 10:14:34 - [Commands] Sending to C-1 (Tali) (version=GC command=07 flag=06) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria diff --git a/tests/GC-Episode3BattleWithSpectator.test.txt b/tests/GC-Episode3BattleWithSpectator.test.txt index ba054d61..5627bb9b 100644 --- a/tests/GC-Episode3BattleWithSpectator.test.txt +++ b/tests/GC-Episode3BattleWithSpectator.test.txt @@ -58,7 +58,7 @@ I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (version=GC command=9 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 42 20 00 00 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 40 20 00 00 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=B7 flag=00) 0000 | B7 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 | @@ -73,7 +73,7 @@ I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (version=GC command=9 0000 | 96 00 0C 00 03 1B 8F 2C 06 01 00 00 | , I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 42 20 00 04 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 40 20 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 39 3A 32 30 3A 20 | 2023:09:20: @@ -2623,16 +2623,12 @@ I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=CC f 0500 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 4A 20 00 04 00 00 00 00 00 | 0ES3@ ` +0010 | 30 45 53 33 00 91 00 48 20 00 04 00 00 00 00 00 | 0ES3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (Tali) (version=GC command=99 flag=00) 0000 | 99 00 04 00 | I 17097 2023-09-19 21:52:47 - [Commands] Received from C-1 (Tali) (version=GC command=D6 flag=00) 0000 | D6 00 04 00 | -I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (version=GC command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 45 53 33 00 91 00 48 20 00 04 00 00 00 00 00 | 0ES3@ ` -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:52:47 - [Commands] Sending to C-1 (Tali) (version=GC command=07 flag=06) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria @@ -5871,7 +5867,7 @@ I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (version=GC command=9 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 -0010 | 00 00 00 33 00 A1 00 42 20 00 00 00 00 00 00 00 | 3@ ` +0010 | 00 00 00 33 00 A1 00 40 20 00 00 00 00 00 00 00 | 3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=B7 flag=00) 0000 | B7 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 | @@ -5886,7 +5882,7 @@ I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (version=GC command=9 0000 | 96 00 0C 00 30 AA 74 2C 27 00 00 00 | 0 t,' I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 -0010 | 00 00 00 33 00 A1 00 42 20 00 04 00 00 00 00 00 | 3@ ` +0010 | 00 00 00 33 00 A1 00 40 20 00 04 00 00 00 00 00 | 3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 39 3A 32 30 3A 20 | 2023:09:20: @@ -8436,16 +8432,12 @@ I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=CC f 0500 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 -0010 | 30 4A 53 33 00 A1 00 4A 20 00 04 00 00 00 00 00 | 3@ ` +0010 | 30 4A 53 33 00 A1 00 48 20 00 04 00 00 00 00 00 | 3@ ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (Tali) (version=GC command=99 flag=00) 0000 | 99 00 04 00 | I 17097 2023-09-19 21:53:53 - [Commands] Received from C-3 (Tali) (version=GC command=D6 flag=00) 0000 | D6 00 04 00 | -I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (Tali) (version=GC command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 22 22 22 22 32 AC 99 83 | , """"2 -0010 | 30 4A 53 33 00 A1 00 48 20 00 04 00 00 00 00 00 | 3@ ` -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 17097 2023-09-19 21:53:53 - [Commands] Sending to C-3 (Tali) (version=GC command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria diff --git a/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt b/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt index 656e586b..37815547 100644 --- a/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt +++ b/tests/GC-Episode3TrialEditionLobbySmokeTest.test.txt @@ -62,7 +62,7 @@ I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (version=GC_EP3 comma 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 00 00 00 33 00 A1 00 42 20 00 00 00 00 00 00 00 | 3 B` +0010 | 00 00 00 33 00 A1 00 40 20 00 00 00 00 00 00 00 | 3 B` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command=B7 flag=00) 0000 | B7 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 | @@ -77,7 +77,7 @@ I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (version=GC_EP3 comma 0000 | 96 00 0C 00 5C E6 6B 2C 3B 00 00 00 | \ k,; I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 00 00 00 33 00 A1 00 42 20 00 04 00 00 00 00 00 | 3 B` +0010 | 00 00 00 33 00 A1 00 40 20 00 04 00 00 00 00 00 | 3 B` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3 command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 31 31 3A 32 35 3A 20 | 2023:11:25: @@ -2134,16 +2134,12 @@ I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3_NTE comm 7940 | 00 00 00 00 | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3_NTE command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 54 4A 53 33 00 81 00 4A 20 00 04 00 00 00 00 00 | TJS3 J` +0010 | 54 4A 53 33 00 81 00 48 20 00 04 00 00 00 00 00 | TJS3 J` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (Tali) (version=GC_EP3_NTE command=99 flag=00) 0000 | 99 00 04 00 | I 25793 2023-11-24 23:03:38 - [Commands] Received from C-4 (Tali) (version=GC_EP3_NTE command=D6 flag=00) 0000 | D6 00 04 00 | -I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (version=GC_EP3_NTE command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 54 4A 53 33 00 81 00 48 20 00 04 00 00 00 00 00 | TJS3 J` -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 25793 2023-11-24 23:03:38 - [Commands] Sending to C-4 (Tali) (version=GC_EP3_NTE command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria diff --git a/tests/GC-ForestGame.test.txt b/tests/GC-ForestGame.test.txt index 888f3df9..973b0601 100644 --- a/tests/GC-ForestGame.test.txt +++ b/tests/GC-ForestGame.test.txt @@ -58,7 +58,7 @@ I 49108 2023-05-26 16:18:01 - [Commands] Received from C-1 (version=GC command=9 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 42 20 00 00 00 00 00 00 00 | 3 ` +0010 | 30 50 4F 33 00 01 00 40 20 00 00 00 00 00 00 00 | 3 ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=D5 flag=00) 0000 | D5 00 2C 00 59 6F 75 20 61 72 65 20 63 6F 6E 6E | , You are conn @@ -68,7 +68,7 @@ I 49108 2023-05-26 16:18:01 - [Commands] Received from C-1 (version=GC command=9 0000 | 96 00 0C 00 C7 32 CE 2A 57 00 00 00 | 2 *W I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 42 20 00 04 00 00 00 00 00 | 3 ` +0010 | 30 50 4F 33 00 01 00 40 20 00 04 00 00 00 00 00 | 3 ` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 49108 2023-05-26 16:18:01 - [Commands] Sending to C-1 (version=GC command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 30 35 3A 32 36 3A 20 | 2023:05:26: @@ -77,10 +77,6 @@ I 49108 2023-05-26 16:18:01 - [Commands] Received from C-1 (version=GC command=9 0000 | 99 00 04 00 | I 49108 2023-05-26 16:18:02 - [Commands] Received from C-1 (version=GC command=D6 flag=00) 0000 | D6 00 04 00 | -I 49108 2023-05-26 16:18:02 - [Commands] Sending to C-1 (version=GC command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 11 11 11 11 32 AC 99 83 | , 2 -0010 | 30 50 4F 33 00 01 00 40 20 00 04 00 00 00 00 00 | 3 ` -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 49108 2023-05-26 16:18:02 - [Commands] Sending to C-1 (version=GC command=07 flag=08) 0000 | 07 06 C8 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria diff --git a/tests/XB-ForestGame.test.txt b/tests/XB-ForestGame.test.txt index ed5975bd..53682ae2 100644 --- a/tests/XB-ForestGame.test.txt +++ b/tests/XB-ForestGame.test.txt @@ -52,7 +52,7 @@ I 16496 2023-11-08 01:54:08 - [Commands] Received from C-1 (version=XB command=9 0020 | 00 00 00 00 | I 16496 2023-11-08 01:54:08 - [Commands] Sending to C-1 (version=XB command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 E2 D4 45 39 32 AC 99 83 | , E92 -0010 | 00 00 00 00 00 81 00 42 20 00 00 00 00 00 00 00 | 4 B` +0010 | 00 00 00 00 00 81 00 40 20 00 00 00 00 00 00 00 | 4 B` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16496 2023-11-08 01:54:08 - [Commands] Sending to C-1 (version=XB command=D5 flag=00) 0000 | D5 00 2C 00 59 6F 75 20 61 72 65 20 63 6F 6E 6E | , You are conn @@ -62,7 +62,7 @@ I 16496 2023-11-08 01:54:09 - [Commands] Received from C-1 (version=XB command=9 0000 | 96 00 0C 00 7C 9C DA 2C 62 00 00 00 | | ,b I 16496 2023-11-08 01:54:09 - [Commands] Sending to C-1 (version=XB command=04 flag=00) 0000 | 04 00 2C 00 00 00 01 00 E2 D4 45 39 32 AC 99 83 | , E92 -0010 | 00 00 00 00 00 81 00 42 20 00 04 00 00 00 00 00 | 4 @` +0010 | 00 00 00 00 00 81 00 40 20 00 04 00 00 00 00 00 | 4 @` 0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16496 2023-11-08 01:54:09 - [Commands] Sending to C-1 (version=XB command=B1 flag=00) 0000 | B1 00 1C 00 32 30 32 33 3A 31 31 3A 30 38 3A 20 | 2023:11:08: @@ -71,10 +71,6 @@ I 16496 2023-11-08 01:54:09 - [Commands] Received from C-1 (version=XB command=9 0000 | 99 00 04 00 | I 16496 2023-11-08 01:54:13 - [Commands] Received from C-1 (version=XB command=D6 flag=00) 0000 | D6 00 04 00 | -I 16496 2023-11-08 01:54:13 - [Commands] Sending to C-1 (version=XB command=04 flag=00) -0000 | 04 00 2C 00 00 00 01 00 E2 D4 45 39 32 AC 99 83 | , E92 -0010 | 00 00 00 00 00 81 00 40 20 00 04 00 00 00 00 00 | 4 @` -0020 | 00 00 00 00 00 00 FF FF 80 FF FF FF | I 16496 2023-11-08 01:54:13 - [Commands] Sending to C-1 (version=XB command=07 flag=05) 0000 | 07 04 90 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria diff --git a/tests/config.json b/tests/config.json index 84fc58ef..578712f4 100644 --- a/tests/config.json +++ b/tests/config.json @@ -108,6 +108,7 @@ "HideDownloadCommands": true, "AllowUnregisteredUsers": true, + "UseTemporaryLicensesForPrototypes": true, "AllowPCNTE": true, "AllowDCPCGames": true, "AllowGCXBGames": true,