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;
|
||||
}
|
||||
|
||||
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) {
|
||||
if (is_ep3(c->version())) {
|
||||
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}},
|
||||
/* 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}},
|
||||
/* 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}},
|
||||
/* 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}},
|
||||
|
||||
@@ -43,6 +43,7 @@ struct ProxySession {
|
||||
Episode lobby_episode = Episode::EP1;
|
||||
uint32_t lobby_random_seed = 0;
|
||||
uint64_t server_ping_start_time = 0;
|
||||
bool suppress_next_ep3_media_update_confirmation = false;
|
||||
|
||||
int64_t remote_guild_card_number = -1;
|
||||
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) {
|
||||
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);
|
||||
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);
|
||||
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");
|
||||
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(
|
||||
shared_ptr<Client> c,
|
||||
uint32_t type,
|
||||
uint32_t which,
|
||||
const string& compressed_data) {
|
||||
void send_ep3_media_update(shared_ptr<Client> c, uint32_t type, uint32_t which, const string& compressed_data) {
|
||||
phosg::StringWriter w;
|
||||
w.put<S_UpdateMediaHeader_Ep3_B9>({type, which, compressed_data.size(), 0});
|
||||
w.write(compressed_data);
|
||||
|
||||
Reference in New Issue
Block a user