changeset 14504:95e338145e97 draft

(svn r19075) -Codechange: unhackify NetworkChangeCompanyPassword()
author smatz <smatz@openttd.org>
date Wed, 10 Feb 2010 15:17:27 +0000
parents bb294af806bc
children 69522d847103
files src/company_cmd.cpp src/console_cmds.cpp src/network/network_client.cpp src/network/network_func.h src/network/network_gui.cpp src/openttd.cpp
diffstat 6 files changed, 31 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -772,8 +772,7 @@
 				assert(_local_company == COMPANY_SPECTATOR);
 				SetLocalCompany(c->index);
 				if (!StrEmpty(_settings_client.network.default_company_pass)) {
-					char *password = _settings_client.network.default_company_pass;
-					NetworkChangeCompanyPassword(1, &password);
+					NetworkChangeCompanyPassword(_settings_client.network.default_company_pass);
 				}
 
 				_current_company = _local_company;
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -1544,8 +1544,7 @@
 
 extern void HashCurrentCompanyPassword(const char *password);
 
-/* Also use from within company_gui to change the password graphically */
-bool NetworkChangeCompanyPassword(byte argc, char *argv[])
+DEF_CONSOLE_CMD(ConCompanyPassword)
 {
 	if (argc == 0) {
 		IConsoleHelp("Change the password of your company. Usage: 'company_pw \"<password>\"'");
@@ -1553,23 +1552,21 @@
 		return true;
 	}
 
+	if (argc != 1) return false;
+
 	if (!Company::IsValidID(_local_company)) {
 		IConsoleError("You have to own a company to make use of this command.");
 		return false;
 	}
 
-	if (argc != 1) return false;
-
-	if (strcmp(argv[0], "*") == 0) argv[0][0] = '\0';
+	const char *password = NetworkChangeCompanyPassword(argv[0]);
 
-	if (!_network_server) {
-		NetworkClientSetPassword(argv[0]);
+	if (StrEmpty(password)) {
+		IConsolePrintF(CC_WARNING, "Company password cleared");
 	} else {
-		HashCurrentCompanyPassword(argv[0]);
+		IConsolePrintF(CC_WARNING, "Company password changed to: %s", password);
 	}
 
-	IConsolePrintF(CC_WARNING, "'company_pw' changed to:  %s", argv[0]);
-
 	return true;
 }
 
@@ -1909,7 +1906,7 @@
 	/*** Networking variables ***/
 	IConsoleVarStringRegister("company_pw",      NULL, 0, "Set a password for your company, so no one without the correct password can join. Use '*' to clear the password");
 	IConsoleVarHookAdd("company_pw",             ICONSOLE_HOOK_ACCESS, ConHookNeedNetwork);
-	IConsoleVarProcAdd("company_pw",             NetworkChangeCompanyPassword);
+	IConsoleVarProcAdd("company_pw",             ConCompanyPassword);
 	IConsoleAliasRegister("company_password",    "company_pw %+");
 
 	IConsoleAliasRegister("net_frame_freq",        "setting frame_freq %+");
--- a/src/network/network_client.cpp
+++ b/src/network/network_client.cpp
@@ -1030,7 +1030,7 @@
 	SEND_COMMAND(PACKET_CLIENT_CHAT)(action, type, dest, msg, data);
 }
 
-void NetworkClientSetPassword(const char *password)
+static void NetworkClientSetPassword(const char *password)
 {
 	SEND_COMMAND(PACKET_CLIENT_SET_PASSWORD)(password);
 }
@@ -1054,6 +1054,24 @@
 }
 
 /**
+ * Sets/resets company password
+ * @param password new password, "" or "*" resets password
+ * @return new password
+ */
+const char *NetworkChangeCompanyPassword(const char *password)
+{
+	if (strcmp(password, "*") == 0) password = "";
+
+	if (!_network_server) {
+		NetworkClientSetPassword(password);
+	} else {
+		HashCurrentCompanyPassword(password);
+	}
+
+	return password;
+}
+
+/**
  * Check if max_companies has been reached on the server (local check only).
  * @return true if the max value has been reached or exceeded, false otherwise.
  */
--- a/src/network/network_func.h
+++ b/src/network/network_func.h
@@ -36,7 +36,7 @@
 byte NetworkSpectatorCount();
 void NetworkUpdateClientName();
 bool NetworkCompanyHasClients(CompanyID company);
-bool NetworkChangeCompanyPassword(byte argc, char *argv[]);
+const char *NetworkChangeCompanyPassword(const char *);
 void NetworkReboot();
 void NetworkDisconnect(bool blocking = false);
 void NetworkGameLoop();
@@ -51,7 +51,6 @@
 void NetworkClientRequestMove(CompanyID company, const char *pass = "");
 void NetworkClientSendRcon(const char *password, const char *command);
 void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data = 0);
-void NetworkClientSetPassword(const char *password);
 bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio);
 bool NetworkCompanyIsPassworded(CompanyID company_id);
 bool NetworkMaxCompaniesReached();
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -2285,10 +2285,7 @@
 			snprintf(_settings_client.network.default_company_pass, lengthof(_settings_client.network.default_company_pass), "%s", this->edit_str_buf);
 		}
 
-		/* empty password is a '*' because of console argument */
-		if (StrEmpty(this->edit_str_buf)) snprintf(this->edit_str_buf, this->edit_str_size, "*");
-		char *password = this->edit_str_buf;
-		NetworkChangeCompanyPassword(1, &password);
+		NetworkChangeCompanyPassword(this->edit_str_buf);
 	}
 
 	virtual void OnPaint()
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -816,8 +816,7 @@
 	/* We are the server, we start a new company (not dedicated),
 	 * so set the default password *if* needed. */
 	if (_network_server && !StrEmpty(_settings_client.network.default_company_pass)) {
-		char *password = _settings_client.network.default_company_pass;
-		NetworkChangeCompanyPassword(1, &password);
+		NetworkChangeCompanyPassword(_settings_client.network.default_company_pass);
 	}
 #endif /* ENABLE_NETWORK */