From bdcf6b6acd458433e9b52cbd4ad22e43efba0229 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 13 Oct 2023 12:59:30 +0100 Subject: [PATCH] Fix: Treat closing network relay window as a choice of "No". Issue ConnectFailure when closing the window if the relay request is considered unhandled. --- src/network/network_coordinator.cpp | 2 +- src/network/network_gui.cpp | 14 ++++++++++---- src/network/network_gui.h | 4 ++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index 7d4b81b931..3aac31d00c 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -648,7 +648,7 @@ void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(const std::string & */ void ClientNetworkCoordinatorSocketHandler::CloseTurnHandler(const std::string &token) { - CloseWindowByClass(WC_NETWORK_ASK_RELAY); + CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED); auto turn_it = this->turn_handlers.find(token); if (turn_it == this->turn_handlers.end()) return; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index c8108a10f4..d00ee7d1a5 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2413,6 +2413,12 @@ struct NetworkAskRelayWindow : public Window { this->InitNested(0); } + void Close(int data = 0) override + { + if (data == NRWCD_UNHANDLED) _network_coordinator_client.ConnectFailure(this->token, 0); + this->Window::Close(); + } + void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override { if (widget == WID_NAR_TEXT) { @@ -2452,18 +2458,18 @@ struct NetworkAskRelayWindow : public Window { switch (widget) { case WID_NAR_NO: _network_coordinator_client.ConnectFailure(this->token, 0); - this->Close(); + this->Close(NRWCD_HANDLED); break; case WID_NAR_YES_ONCE: _network_coordinator_client.StartTurnConnection(this->token); - this->Close(); + this->Close(NRWCD_HANDLED); break; case WID_NAR_YES_ALWAYS: _settings_client.network.use_relay_service = URS_ALLOW; _network_coordinator_client.StartTurnConnection(this->token); - this->Close(); + this->Close(NRWCD_HANDLED); break; } } @@ -2499,7 +2505,7 @@ static WindowDesc _network_ask_relay_desc( */ void ShowNetworkAskRelay(const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token) { - CloseWindowByClass(WC_NETWORK_ASK_RELAY); + CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED); Window *parent = GetMainWindow(); new NetworkAskRelayWindow(&_network_ask_relay_desc, parent, server_connection_string, relay_connection_string, token); diff --git a/src/network/network_gui.h b/src/network/network_gui.h index dc97818d02..74d6d153e6 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -39,5 +39,9 @@ struct NetworkCompanyInfo : NetworkCompanyStats { std::string clients; ///< The clients that control this company (Name1, name2, ..) }; +enum NetworkRelayWindowCloseData { + NRWCD_UNHANDLED = 0, ///< Relay request is unhandled. + NRWCD_HANDLED = 1, ///< Relay request is handled, either by user or by timeout. +}; #endif /* NETWORK_GUI_H */