1
0
Fork 0

Codechange: pass network tokens as std::string_view or with move semantics where appropriate

pull/14052/head
Rubidium 2025-04-20 15:09:54 +02:00 committed by rubidium42
parent c13956a58a
commit 4e14f0ac3f
8 changed files with 40 additions and 40 deletions

View File

@ -45,7 +45,7 @@ public:
* @param token The token as given by the Game Coordinator to track this connection attempt. * @param token The token as given by the Game Coordinator to track this connection attempt.
* @param tracking_number The tracking number as given by the Game Coordinator to track this connection attempt. * @param tracking_number The tracking number as given by the Game Coordinator to track this connection attempt.
*/ */
NetworkDirectConnecter(const std::string &hostname, uint16_t port, const std::string &token, uint8_t tracking_number) : TCPConnecter(hostname, port), token(token), tracking_number(tracking_number) {} NetworkDirectConnecter(std::string_view hostname, uint16_t port, std::string &&token, uint8_t tracking_number) : TCPConnecter(hostname, port), token(std::move(token)), tracking_number(tracking_number) {}
void OnFailure() override void OnFailure() override
{ {
@ -76,7 +76,7 @@ public:
* @param tracking_number The tracking number of the connection. * @param tracking_number The tracking number of the connection.
* @param family The family this connection is using. * @param family The family this connection is using.
*/ */
NetworkReuseStunConnecter(const std::string &hostname, uint16_t port, const NetworkAddress &bind_address, std::string token, uint8_t tracking_number, uint8_t family) : NetworkReuseStunConnecter(std::string_view hostname, uint16_t port, const NetworkAddress &bind_address, std::string &&token, uint8_t tracking_number, uint8_t family) :
TCPConnecter(hostname, port, bind_address), TCPConnecter(hostname, port, bind_address),
token(std::move(token)), token(std::move(token)),
tracking_number(tracking_number), tracking_number(tracking_number),
@ -305,7 +305,7 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_DIRECT_CONNECT(Packet &p)
this->game_connecter = nullptr; this->game_connecter = nullptr;
} }
this->game_connecter = TCPConnecter::Create<NetworkDirectConnecter>(hostname, port, token, tracking_number); this->game_connecter = TCPConnecter::Create<NetworkDirectConnecter>(hostname, port, std::move(token), tracking_number);
return true; return true;
} }
@ -348,7 +348,7 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_STUN_CONNECT(Packet &p)
* STUN server. This means that if there is any NAT in the local network, * STUN server. This means that if there is any NAT in the local network,
* the public ip:port is still pointing to the local address, and as such * the public ip:port is still pointing to the local address, and as such
* a connection can be established. */ * a connection can be established. */
this->game_connecter = TCPConnecter::Create<NetworkReuseStunConnecter>(host, port, family_it->second->local_addr, token, tracking_number, family); this->game_connecter = TCPConnecter::Create<NetworkReuseStunConnecter>(host, port, family_it->second->local_addr, std::move(token), tracking_number, family);
return true; return true;
} }
@ -393,7 +393,7 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_TURN_CONNECT(Packet &p)
break; break;
case URS_ASK: case URS_ASK:
ShowNetworkAskRelay(connecter_it->second.first, connection_string, token); ShowNetworkAskRelay(connecter_it->second.first, std::move(connection_string), std::move(token));
break; break;
case URS_ALLOW: case URS_ALLOW:
@ -407,7 +407,7 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_TURN_CONNECT(Packet &p)
return true; return true;
} }
void ClientNetworkCoordinatorSocketHandler::StartTurnConnection(std::string &token) void ClientNetworkCoordinatorSocketHandler::StartTurnConnection(std::string_view token)
{ {
auto turn_it = this->turn_handlers.find(token); auto turn_it = this->turn_handlers.find(token);
if (turn_it == this->turn_handlers.end()) return; if (turn_it == this->turn_handlers.end()) return;
@ -511,7 +511,7 @@ void ClientNetworkCoordinatorSocketHandler::GetListing()
* @param invite_code The invite code of the server to connect to. * @param invite_code The invite code of the server to connect to.
* @param connecter The connecter of the request. * @param connecter The connecter of the request.
*/ */
void ClientNetworkCoordinatorSocketHandler::ConnectToServer(const std::string &invite_code, TCPServerConnecter *connecter) void ClientNetworkCoordinatorSocketHandler::ConnectToServer(std::string_view invite_code, TCPServerConnecter *connecter)
{ {
assert(invite_code.starts_with("+")); assert(invite_code.starts_with("+"));
@ -525,7 +525,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectToServer(const std::string &i
/* Initially we store based on invite code; on first reply we know the /* Initially we store based on invite code; on first reply we know the
* token, and will start using that key instead. */ * token, and will start using that key instead. */
this->connecter_pre[invite_code] = connecter; this->connecter_pre[std::string(invite_code)] = connecter;
this->Connect(); this->Connect();
@ -541,7 +541,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectToServer(const std::string &i
* @param token Token of the connecter that failed. * @param token Token of the connecter that failed.
* @param tracking_number Tracking number of the connecter that failed. * @param tracking_number Tracking number of the connecter that failed.
*/ */
void ClientNetworkCoordinatorSocketHandler::ConnectFailure(const std::string &token, uint8_t tracking_number) void ClientNetworkCoordinatorSocketHandler::ConnectFailure(std::string_view token, uint8_t tracking_number)
{ {
/* Connecter will destroy itself. */ /* Connecter will destroy itself. */
this->game_connecter = nullptr; this->game_connecter = nullptr;
@ -563,7 +563,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectFailure(const std::string &to
* @param token Token of the connecter that succeeded. * @param token Token of the connecter that succeeded.
* @param sock The socket that the connecter can now use. * @param sock The socket that the connecter can now use.
*/ */
void ClientNetworkCoordinatorSocketHandler::ConnectSuccess(const std::string &token, SOCKET sock, NetworkAddress &address) void ClientNetworkCoordinatorSocketHandler::ConnectSuccess(std::string_view token, SOCKET sock, NetworkAddress &address)
{ {
assert(sock != INVALID_SOCKET); assert(sock != INVALID_SOCKET);
@ -603,7 +603,7 @@ void ClientNetworkCoordinatorSocketHandler::ConnectSuccess(const std::string &to
* This helps the Game Coordinator not to wait for a timeout on its end, but * This helps the Game Coordinator not to wait for a timeout on its end, but
* rather react as soon as the client/server knows the result. * rather react as soon as the client/server knows the result.
*/ */
void ClientNetworkCoordinatorSocketHandler::StunResult(const std::string &token, uint8_t family, bool result) void ClientNetworkCoordinatorSocketHandler::StunResult(std::string_view token, uint8_t family, bool result)
{ {
auto p = std::make_unique<Packet>(this, PACKET_COORDINATOR_SERCLI_STUN_RESULT); auto p = std::make_unique<Packet>(this, PACKET_COORDINATOR_SERCLI_STUN_RESULT);
p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_uint8(NETWORK_COORDINATOR_VERSION);
@ -618,7 +618,7 @@ void ClientNetworkCoordinatorSocketHandler::StunResult(const std::string &token,
* @param token The token used for the STUN handlers. * @param token The token used for the STUN handlers.
* @param family The family of STUN handlers to close. AF_UNSPEC to close all STUN handlers for this token. * @param family The family of STUN handlers to close. AF_UNSPEC to close all STUN handlers for this token.
*/ */
void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(const std::string &token, uint8_t family) void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(std::string_view token, uint8_t family)
{ {
auto stun_it = this->stun_handlers.find(token); auto stun_it = this->stun_handlers.find(token);
if (stun_it == this->stun_handlers.end()) return; if (stun_it == this->stun_handlers.end()) return;
@ -645,7 +645,7 @@ void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(const std::string &
* Close the TURN handler. * Close the TURN handler.
* @param token The token used for the TURN handler. * @param token The token used for the TURN handler.
*/ */
void ClientNetworkCoordinatorSocketHandler::CloseTurnHandler(const std::string &token) void ClientNetworkCoordinatorSocketHandler::CloseTurnHandler(std::string_view token)
{ {
CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED); CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED);
@ -664,7 +664,7 @@ void ClientNetworkCoordinatorSocketHandler::CloseTurnHandler(const std::string &
* Close everything related to this connection token. * Close everything related to this connection token.
* @param token The connection token to close. * @param token The connection token to close.
*/ */
void ClientNetworkCoordinatorSocketHandler::CloseToken(const std::string &token) void ClientNetworkCoordinatorSocketHandler::CloseToken(std::string_view token)
{ {
/* Close all remaining STUN / TURN connections. */ /* Close all remaining STUN / TURN connections. */
this->CloseStunHandler(token); this->CloseStunHandler(token);

View File

@ -53,10 +53,10 @@
class ClientNetworkCoordinatorSocketHandler : public NetworkCoordinatorSocketHandler { class ClientNetworkCoordinatorSocketHandler : public NetworkCoordinatorSocketHandler {
private: private:
std::chrono::steady_clock::time_point next_update; ///< When to send the next update (if server and public). std::chrono::steady_clock::time_point next_update; ///< When to send the next update (if server and public).
std::map<std::string, std::pair<std::string, TCPServerConnecter *>> connecter; ///< Based on tokens, the current (invite-code, connecter) that are pending. std::map<std::string, std::pair<std::string, TCPServerConnecter *>, std::less<>> connecter; ///< Based on tokens, the current (invite-code, connecter) that are pending.
std::map<std::string, TCPServerConnecter *> connecter_pre; ///< Based on invite codes, the current connecters that are pending. std::map<std::string, TCPServerConnecter *, std::less<>> connecter_pre; ///< Based on invite codes, the current connecters that are pending.
std::map<std::string, std::map<int, std::unique_ptr<ClientNetworkStunSocketHandler>>> stun_handlers; ///< All pending STUN handlers, stored by token:family. std::map<std::string, std::map<int, std::unique_ptr<ClientNetworkStunSocketHandler>>, std::less<>> stun_handlers; ///< All pending STUN handlers, stored by token:family.
std::map<std::string, std::unique_ptr<ClientNetworkTurnSocketHandler>> turn_handlers; ///< Pending TURN handler (if any), stored by token. std::map<std::string, std::unique_ptr<ClientNetworkTurnSocketHandler>, std::less<>> turn_handlers; ///< Pending TURN handler (if any), stored by token.
std::shared_ptr<TCPConnecter> game_connecter{}; ///< Pending connecter to the game server. std::shared_ptr<TCPConnecter> game_connecter{}; ///< Pending connecter to the game server.
uint32_t newgrf_lookup_table_cursor = 0; ///< Last received cursor for the #GameInfoNewGRFLookupTable updates. uint32_t newgrf_lookup_table_cursor = 0; ///< Last received cursor for the #GameInfoNewGRFLookupTable updates.
@ -86,22 +86,22 @@ public:
NetworkRecvStatus CloseConnection(bool error = true) override; NetworkRecvStatus CloseConnection(bool error = true) override;
void SendReceive(); void SendReceive();
void ConnectFailure(const std::string &token, uint8_t tracking_number); void ConnectFailure(std::string_view token, uint8_t tracking_number);
void ConnectSuccess(const std::string &token, SOCKET sock, NetworkAddress &address); void ConnectSuccess(std::string_view token, SOCKET sock, NetworkAddress &address);
void StunResult(const std::string &token, uint8_t family, bool result); void StunResult(std::string_view token, uint8_t family, bool result);
void Connect(); void Connect();
void CloseToken(const std::string &token); void CloseToken(std::string_view token);
void CloseAllConnections(); void CloseAllConnections();
void CloseStunHandler(const std::string &token, uint8_t family = AF_UNSPEC); void CloseStunHandler(std::string_view token, uint8_t family = AF_UNSPEC);
void CloseTurnHandler(const std::string &token); void CloseTurnHandler(std::string_view token);
void Register(); void Register();
void SendServerUpdate(); void SendServerUpdate();
void GetListing(); void GetListing();
void ConnectToServer(const std::string &invite_code, TCPServerConnecter *connecter); void ConnectToServer(std::string_view invite_code, TCPServerConnecter *connecter);
void StartTurnConnection(std::string &token); void StartTurnConnection(std::string_view token);
}; };
extern ClientNetworkCoordinatorSocketHandler _network_coordinator_client; extern ClientNetworkCoordinatorSocketHandler _network_coordinator_client;

View File

@ -2186,11 +2186,11 @@ struct NetworkAskRelayWindow : public Window {
std::string relay_connection_string{}; ///< The relay server we want to connect to. std::string relay_connection_string{}; ///< The relay server we want to connect to.
std::string token{}; ///< The token for this connection. std::string token{}; ///< The token for this connection.
NetworkAskRelayWindow(WindowDesc &desc, Window *parent, const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token) : NetworkAskRelayWindow(WindowDesc &desc, Window *parent, std::string_view server_connection_string, std::string &&relay_connection_string, std::string &&token) :
Window(desc), Window(desc),
server_connection_string(server_connection_string), server_connection_string(server_connection_string),
relay_connection_string(relay_connection_string), relay_connection_string(std::move(relay_connection_string)),
token(token) token(std::move(token))
{ {
this->parent = parent; this->parent = parent;
this->InitNested(0); this->InitNested(0);
@ -2276,12 +2276,12 @@ static WindowDesc _network_ask_relay_desc(
* @param relay_connection_string The relay server we want to connect to. * @param relay_connection_string The relay server we want to connect to.
* @param token The token for this connection. * @param token The token for this connection.
*/ */
void ShowNetworkAskRelay(const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token) void ShowNetworkAskRelay(std::string_view server_connection_string, std::string &&relay_connection_string, std::string &&token)
{ {
CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED); CloseWindowByClass(WC_NETWORK_ASK_RELAY, NRWCD_HANDLED);
Window *parent = GetMainWindow(); Window *parent = GetMainWindow();
new NetworkAskRelayWindow(_network_ask_relay_desc, parent, server_connection_string, relay_connection_string, token); new NetworkAskRelayWindow(_network_ask_relay_desc, parent, server_connection_string, std::move(relay_connection_string), std::move(token));
} }
/** /**

View File

@ -22,7 +22,7 @@ void ShowNetworkChatQueryWindow(DestType type, int dest);
void ShowJoinStatusWindow(); void ShowJoinStatusWindow();
void ShowNetworkGameWindow(); void ShowNetworkGameWindow();
void ShowClientList(); void ShowClientList();
void ShowNetworkAskRelay(const std::string &server_connection_string, const std::string &relay_connection_string, const std::string &token); void ShowNetworkAskRelay(std::string_view server_connection_string, std::string &&relay_connection_string, std::string &&token);
void ShowNetworkAskSurvey(); void ShowNetworkAskSurvey();
void ShowSurveyResultTextfileWindow(); void ShowSurveyResultTextfileWindow();

View File

@ -28,7 +28,7 @@ public:
* @param stun_handler The handler for this request. * @param stun_handler The handler for this request.
* @param connection_string The address of the server. * @param connection_string The address of the server.
*/ */
NetworkStunConnecter(ClientNetworkStunSocketHandler *stun_handler, std::string_view connection_string, const std::string &token, uint8_t family) : NetworkStunConnecter(ClientNetworkStunSocketHandler *stun_handler, std::string_view connection_string, std::string_view token, uint8_t family) :
TCPConnecter(connection_string, NETWORK_STUN_SERVER_PORT, NetworkAddress(), family), TCPConnecter(connection_string, NETWORK_STUN_SERVER_PORT, NetworkAddress(), family),
stun_handler(stun_handler), stun_handler(stun_handler),
token(token), token(token),
@ -70,7 +70,7 @@ public:
* @param token The token as received from the Game Coordinator. * @param token The token as received from the Game Coordinator.
* @param family What IP family to use. * @param family What IP family to use.
*/ */
void ClientNetworkStunSocketHandler::Connect(const std::string &token, uint8_t family) void ClientNetworkStunSocketHandler::Connect(std::string_view token, uint8_t family)
{ {
this->token = token; this->token = token;
this->family = family; this->family = family;
@ -86,7 +86,7 @@ void ClientNetworkStunSocketHandler::Connect(const std::string &token, uint8_t f
* @param family What IP family this STUN request is for. * @param family What IP family this STUN request is for.
* @return The handler for this STUN request. * @return The handler for this STUN request.
*/ */
std::unique_ptr<ClientNetworkStunSocketHandler> ClientNetworkStunSocketHandler::Stun(const std::string &token, uint8_t family) std::unique_ptr<ClientNetworkStunSocketHandler> ClientNetworkStunSocketHandler::Stun(std::string_view token, uint8_t family)
{ {
auto stun_handler = std::make_unique<ClientNetworkStunSocketHandler>(); auto stun_handler = std::make_unique<ClientNetworkStunSocketHandler>();

View File

@ -27,9 +27,9 @@ public:
~ClientNetworkStunSocketHandler() override; ~ClientNetworkStunSocketHandler() override;
void SendReceive(); void SendReceive();
void Connect(const std::string &token, uint8_t family); void Connect(std::string_view token, uint8_t family);
static std::unique_ptr<ClientNetworkStunSocketHandler> Stun(const std::string &token, uint8_t family); static std::unique_ptr<ClientNetworkStunSocketHandler> Stun(std::string_view token, uint8_t family);
}; };
#endif /* NETWORK_STUN_H */ #endif /* NETWORK_STUN_H */

View File

@ -96,7 +96,7 @@ void ClientNetworkTurnSocketHandler::Connect()
* @param connection_string Connection string of the TURN server. * @param connection_string Connection string of the TURN server.
* @return The handler for this TURN connection. * @return The handler for this TURN connection.
*/ */
/* static */ std::unique_ptr<ClientNetworkTurnSocketHandler> ClientNetworkTurnSocketHandler::Turn(const std::string &token, uint8_t tracking_number, const std::string &ticket, std::string_view connection_string) /* static */ std::unique_ptr<ClientNetworkTurnSocketHandler> ClientNetworkTurnSocketHandler::Turn(std::string_view token, uint8_t tracking_number, std::string_view ticket, std::string_view connection_string)
{ {
auto turn_handler = std::make_unique<ClientNetworkTurnSocketHandler>(token, tracking_number, connection_string); auto turn_handler = std::make_unique<ClientNetworkTurnSocketHandler>(token, tracking_number, connection_string);

View File

@ -27,7 +27,7 @@ public:
std::shared_ptr<TCPConnecter> connecter{}; ///< Connecter instance. std::shared_ptr<TCPConnecter> connecter{}; ///< Connecter instance.
bool connect_started = false; ///< Whether we started the connection. bool connect_started = false; ///< Whether we started the connection.
ClientNetworkTurnSocketHandler(const std::string &token, uint8_t tracking_number, std::string_view connection_string) : token(token), tracking_number(tracking_number), connection_string(connection_string) {} ClientNetworkTurnSocketHandler(std::string_view token, uint8_t tracking_number, std::string_view connection_string) : token(token), tracking_number(tracking_number), connection_string(connection_string) {}
NetworkRecvStatus CloseConnection(bool error = true) override; NetworkRecvStatus CloseConnection(bool error = true) override;
~ClientNetworkTurnSocketHandler() override; ~ClientNetworkTurnSocketHandler() override;
@ -36,7 +36,7 @@ public:
void Connect(); void Connect();
void ConnectFailure(); void ConnectFailure();
static std::unique_ptr<ClientNetworkTurnSocketHandler> Turn(const std::string &token, uint8_t tracking_number, const std::string &ticket, std::string_view connection_string); static std::unique_ptr<ClientNetworkTurnSocketHandler> Turn(std::string_view token, uint8_t tracking_number, std::string_view ticket, std::string_view connection_string);
}; };
#endif /* NETWORK_TURN_H */ #endif /* NETWORK_TURN_H */