minor proxy bugfixes
This commit is contained in:
@@ -1377,6 +1377,14 @@ static asio::awaitable<HandlerResult> S_G_B9(shared_ptr<Client> c, Channel::Mess
|
|||||||
co_return (c->version() == Version::GC_EP3) ? HandlerResult::FORWARD : HandlerResult::SUPPRESS;
|
co_return (c->version() == Version::GC_EP3) ? HandlerResult::FORWARD : HandlerResult::SUPPRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static asio::awaitable<HandlerResult> C_G_B9(shared_ptr<Client> c, Channel::Message& msg) {
|
||||||
|
if (c->proxy_session->suppress_next_ep3_media_update_confirmation) {
|
||||||
|
c->proxy_session->suppress_next_ep3_media_update_confirmation = false;
|
||||||
|
co_return HandlerResult::SUPPRESS;
|
||||||
|
}
|
||||||
|
co_return HandlerResult::FORWARD;
|
||||||
|
}
|
||||||
|
|
||||||
static asio::awaitable<HandlerResult> S_G_EF(shared_ptr<Client> c, Channel::Message& msg) {
|
static asio::awaitable<HandlerResult> S_G_EF(shared_ptr<Client> c, Channel::Message& msg) {
|
||||||
if (is_ep3(c->version())) {
|
if (is_ep3(c->version())) {
|
||||||
if (c->check_flag(Client::Flag::PROXY_EP3_INFINITE_MESETA_ENABLED)) {
|
if (c->check_flag(Client::Flag::PROXY_EP3_INFINITE_MESETA_ENABLED)) {
|
||||||
@@ -2216,7 +2224,7 @@ static on_message_t handlers[0x100][NUM_VERSIONS][2] = {
|
|||||||
/* B6 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
/* B6 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
||||||
/* B7 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_B7, nullptr}, {S_G_B7, nullptr}, {S_G_B7, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
/* B7 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_B7, nullptr}, {S_G_B7, nullptr}, {S_G_B7, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
||||||
/* B8 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_B8, nullptr}, {S_G_B8, nullptr}, {S_G_B8, nullptr}, {S_invalid, nullptr}, {nullptr, nullptr}},
|
/* B8 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_B8, nullptr}, {S_G_B8, nullptr}, {S_G_B8, nullptr}, {S_invalid, nullptr}, {nullptr, nullptr}},
|
||||||
/* B9 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_B9, nullptr}, {S_G_B9, nullptr}, {S_G_B9, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
/* B9 */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_B9, C_G_B9}, {S_G_B9, C_G_B9}, {S_G_B9, C_G_B9}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
||||||
/* BA */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_BA, nullptr}, {S_G_BA, nullptr}, {S_G_BA, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
/* BA */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_G_BA, nullptr}, {S_G_BA, nullptr}, {S_G_BA, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
||||||
/* BB */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {nullptr, nullptr}, {nullptr, nullptr}, {nullptr, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
/* BB */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {nullptr, nullptr}, {nullptr, nullptr}, {nullptr, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
||||||
/* BC */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
/* BC */ {{S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}, {S_invalid, nullptr}},
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ struct ProxySession {
|
|||||||
Episode lobby_episode = Episode::EP1;
|
Episode lobby_episode = Episode::EP1;
|
||||||
uint32_t lobby_random_seed = 0;
|
uint32_t lobby_random_seed = 0;
|
||||||
uint64_t server_ping_start_time = 0;
|
uint64_t server_ping_start_time = 0;
|
||||||
|
bool suppress_next_ep3_media_update_confirmation = false;
|
||||||
|
|
||||||
int64_t remote_guild_card_number = -1;
|
int64_t remote_guild_card_number = -1;
|
||||||
parray<uint8_t, 0x28> remote_client_config_data;
|
parray<uint8_t, 0x28> remote_client_config_data;
|
||||||
|
|||||||
@@ -433,10 +433,6 @@ asio::awaitable<void> start_proxy_session(shared_ptr<Client> c, const string& ho
|
|||||||
if (!s->proxy_allow_save_files) {
|
if (!s->proxy_allow_save_files) {
|
||||||
c->clear_flag(Client::Flag::PROXY_SAVE_FILES);
|
c->clear_flag(Client::Flag::PROXY_SAVE_FILES);
|
||||||
}
|
}
|
||||||
if (c->version() == Version::GC_EP3) {
|
|
||||||
send_ep3_media_update(c, 4, 0, "");
|
|
||||||
c->clear_flag(Client::Flag::HAS_EP3_MEDIA_UPDATES);
|
|
||||||
}
|
|
||||||
|
|
||||||
string netloc_str = std::format("{}:{}", host, port);
|
string netloc_str = std::format("{}:{}", host, port);
|
||||||
c->log.info_f("Connecting to {}", netloc_str);
|
c->log.info_f("Connecting to {}", netloc_str);
|
||||||
@@ -484,6 +480,13 @@ asio::awaitable<void> start_proxy_session(shared_ptr<Client> c, const string& ho
|
|||||||
phosg::TerminalFormat::FG_RED);
|
phosg::TerminalFormat::FG_RED);
|
||||||
c->proxy_session = make_shared<ProxySession>(channel, pc);
|
c->proxy_session = make_shared<ProxySession>(channel, pc);
|
||||||
|
|
||||||
|
if (c->version() == Version::GC_EP3) {
|
||||||
|
send_ep3_media_update(c, 4, 0, "");
|
||||||
|
c->clear_flag(Client::Flag::HAS_EP3_MEDIA_UPDATES);
|
||||||
|
c->proxy_session->suppress_next_ep3_media_update_confirmation = true;
|
||||||
|
}
|
||||||
|
send_change_event(c, 0x00);
|
||||||
|
|
||||||
c->log.info_f("Server channel connected");
|
c->log.info_f("Server channel connected");
|
||||||
asio::co_spawn(*s->io_context, handle_proxy_server_commands(c, c->proxy_session, channel), asio::detached);
|
asio::co_spawn(*s->io_context, handle_proxy_server_commands(c, c->proxy_session, channel), asio::detached);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-5
@@ -3292,11 +3292,7 @@ void send_ep3_card_list_update(shared_ptr<Client> c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_ep3_media_update(
|
void send_ep3_media_update(shared_ptr<Client> c, uint32_t type, uint32_t which, const string& compressed_data) {
|
||||||
shared_ptr<Client> c,
|
|
||||||
uint32_t type,
|
|
||||||
uint32_t which,
|
|
||||||
const string& compressed_data) {
|
|
||||||
phosg::StringWriter w;
|
phosg::StringWriter w;
|
||||||
w.put<S_UpdateMediaHeader_Ep3_B9>({type, which, compressed_data.size(), 0});
|
w.put<S_UpdateMediaHeader_Ep3_B9>({type, which, compressed_data.size(), 0});
|
||||||
w.write(compressed_data);
|
w.write(compressed_data);
|
||||||
|
|||||||
Reference in New Issue
Block a user