(svn r4666) - Backport from trunk (r4267): 0.4
authorDarkvater
Tue, 02 May 2006 12:58:13 +0000
branch0.4
changeset 9981 aece6eeba0e2
parent 9980 fb85b0652667
child 9982 6f21b86be9af
(svn r4666) - Backport from trunk (r4267):
Validate the error number that a client receives from a server, and
encapsulate this functionality into GetNetworkErrorMsg()
network.c
network_client.c
network_data.h
network_server.c
--- a/network.c	Tue May 02 12:54:23 2006 +0000
+++ b/network.c	Tue May 02 12:58:13 2006 +0000
@@ -256,6 +256,36 @@
 	_networking = false;
 }
 
+/** Retrieve a string representation of an internal error number
+ * @param buf buffer where the error message will be stored
+ * @param err NetworkErrorCode (integer)
+ * @return returns a pointer to the error message (buf) */
+char *GetNetworkErrorMsg(char *buf, NetworkErrorCode err)
+{
+	/* List of possible network errors, used by
+	 * PACKET_SERVER_ERROR and PACKET_CLIENT_ERROR */
+	static const StringID network_error_strings[] = {
+		STR_NETWORK_ERR_CLIENT_GENERAL,
+		STR_NETWORK_ERR_CLIENT_DESYNC,
+		STR_NETWORK_ERR_CLIENT_SAVEGAME,
+		STR_NETWORK_ERR_CLIENT_CONNECTION_LOST,
+		STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR,
+		STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED,
+		STR_NETWORK_ERR_CLIENT_NOT_EXPECTED,
+		STR_NETWORK_ERR_CLIENT_WRONG_REVISION,
+		STR_NETWORK_ERR_CLIENT_NAME_IN_USE,
+		STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD,
+		STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH,
+		STR_NETWORK_ERR_CLIENT_KICKED,
+		STR_NETWORK_ERR_CLIENT_CHEATER,
+		STR_NETWORK_ERR_CLIENT_SERVER_FULL,
+	};
+
+	if (err >= lengthof(network_error_strings)) err = 0;
+
+	return GetString(buf, network_error_strings[err]);
+}
+
 // Find all IP-aliases for this host
 static void NetworkFindIPs(void)
 {
@@ -524,7 +554,7 @@
 
 		NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-		GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
+		GetNetworkErrorMsg(str, errorno);
 
 		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, client_name, "%s", str);
 
--- a/network_client.c	Tue May 02 12:54:23 2006 +0000
+++ b/network_client.c	Tue May 02 12:58:13 2006 +0000
@@ -683,15 +683,12 @@
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT)
 {
-	int errorno;
 	char str[100];
 	uint16 index;
 	NetworkClientInfo *ci;
 
 	index = NetworkRecv_uint16(MY_CLIENT, p);
-	errorno = NetworkRecv_uint8(MY_CLIENT, p);
-
-	GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
+	GetNetworkErrorMsg(str, NetworkRecv_uint8(MY_CLIENT, p));
 
 	ci = NetworkFindClientInfoFromIndex(index);
 	if (ci != NULL) {
--- a/network_data.h	Tue May 02 12:54:23 2006 +0000
+++ b/network_data.h	Tue May 02 12:58:13 2006 +0000
@@ -230,6 +230,7 @@
 NetworkClientInfo *NetworkFindClientInfoFromIP(const char *ip);
 NetworkClientState *NetworkFindClientStateFromIndex(uint16 client_index);
 unsigned long NetworkResolveHost(const char *hostname);
+char *GetNetworkErrorMsg(char *buf, NetworkErrorCode err);
 
 #endif /* ENABLE_NETWORK */
 
--- a/network_server.c	Tue May 02 12:54:23 2006 +0000
+++ b/network_server.c	Tue May 02 12:58:13 2006 +0000
@@ -29,24 +29,6 @@
 
 void NetworkPopulateCompanyInfo(void);
 
-/* List of possible network errors, used by PACKET_SERVER_ERROR and PACKET_CLIENT_ERROR */
-static const StringID _network_error_strings[] = {
-	STR_NETWORK_ERR_CLIENT_GENERAL,
-	STR_NETWORK_ERR_CLIENT_DESYNC,
-	STR_NETWORK_ERR_CLIENT_SAVEGAME,
-	STR_NETWORK_ERR_CLIENT_CONNECTION_LOST,
-	STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR,
-	STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED,
-	STR_NETWORK_ERR_CLIENT_NOT_EXPECTED,
-	STR_NETWORK_ERR_CLIENT_WRONG_REVISION,
-	STR_NETWORK_ERR_CLIENT_NAME_IN_USE,
-	STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD,
-	STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH,
-	STR_NETWORK_ERR_CLIENT_KICKED,
-	STR_NETWORK_ERR_CLIENT_CHEATER,
-	STR_NETWORK_ERR_CLIENT_SERVER_FULL,
-};
-
 // **********
 // Sending functions
 //   DEF_SERVER_SEND_COMMAND has parameter: NetworkClientState *cs
@@ -165,12 +147,10 @@
 
 	Packet *p = NetworkSend_Init(PACKET_SERVER_ERROR);
 
-	if (error >= lengthof(_network_error_strings)) error = 0;
-
 	NetworkSend_uint8(p, error);
 	NetworkSend_Packet(p, cs);
 
-	GetString(str, _network_error_strings[error]);
+	GetNetworkErrorMsg(str, error);
 
 	// Only send when the current client was in game
 	if (cs->status > STATUS_AUTH) {
@@ -909,8 +889,8 @@
 	// This packets means a client noticed an error and is reporting this
 	//  to us. Display the error and report it to the other clients
 	NetworkClientState *new_cs;
+	char str[100];
 	NetworkErrorCode errorno = NetworkRecv_uint8(cs, p);
-	char str[100];
 	char client_name[NETWORK_CLIENT_NAME_LENGTH];
 
 	// The client was never joined.. thank the client for the packet, but ignore it
@@ -921,9 +901,7 @@
 
 	NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-	if (errorno >= lengthof(_network_error_strings)) errorno = 0;
-
-	GetString(str, _network_error_strings[errorno]);
+	GetNetworkErrorMsg(str, errorno);
 
 	DEBUG(net, 2)("[NET] %s reported an error and is closing his connection (%s)", client_name, str);