summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/console_cmds.cpp2
-rw-r--r--src/network/core/tcp_http.cpp4
-rw-r--r--src/network/network.cpp38
-rw-r--r--src/network/network_func.h3
-rw-r--r--src/openttd.cpp10
5 files changed, 40 insertions, 17 deletions
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index cebf70198..b3819115c 100644
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -916,7 +916,7 @@ DEF_CONSOLE_CMD(ConNetworkConnect)
uint16 rport = NETWORK_DEFAULT_PORT;
CompanyID join_as = COMPANY_NEW_COMPANY;
- ParseConnectionString(&company, &port, ip);
+ ParseGameConnectionString(&company, &port, ip);
IConsolePrintF(CC_DEFAULT, "Connecting to %s...", ip);
if (company != nullptr) {
diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp
index be5a2c39a..d88ea711d 100644
--- a/src/network/core/tcp_http.cpp
+++ b/src/network/core/tcp_http.cpp
@@ -203,10 +203,8 @@ int NetworkHTTPSocketHandler::HandleHeader()
*url = '\0';
/* Fetch the hostname, and possible port number. */
- const char *company = nullptr;
const char *port = nullptr;
- ParseConnectionString(&company, &port, hname);
- if (company != nullptr) return_error("[tcp/http] invalid hostname");
+ ParseConnectionString(&port, hname);
NetworkAddress address(hname, port == nullptr ? 80 : atoi(port));
diff --git a/src/network/network.cpp b/src/network/network.cpp
index f4640191c..e0355ce2e 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -447,6 +447,36 @@ static void CheckPauseOnJoin()
}
/**
+ * Converts a string to ip/port
+ * Format: IP:port
+ *
+ * connection_string will be re-terminated to separate out the hostname, port will
+ * be set to the port strings given by the user, inside the memory area originally
+ * occupied by connection_string.
+ */
+void ParseConnectionString(const char **port, char *connection_string)
+{
+ bool ipv6 = (strchr(connection_string, ':') != strrchr(connection_string, ':'));
+ for (char *p = connection_string; *p != '\0'; p++) {
+ switch (*p) {
+ case '[':
+ ipv6 = true;
+ break;
+
+ case ']':
+ ipv6 = false;
+ break;
+
+ case ':':
+ if (ipv6) break;
+ *port = p + 1;
+ *p = '\0';
+ break;
+ }
+ }
+}
+
+/**
* Converts a string to ip/port/company
* Format: IP:port#company
*
@@ -454,11 +484,10 @@ static void CheckPauseOnJoin()
* be set to the company and port strings given by the user, inside the memory area originally
* occupied by connection_string.
*/
-void ParseConnectionString(const char **company, const char **port, char *connection_string)
+void ParseGameConnectionString(const char **company, const char **port, char *connection_string)
{
bool ipv6 = (strchr(connection_string, ':') != strrchr(connection_string, ':'));
- char *p;
- for (p = connection_string; *p != '\0'; p++) {
+ for (char *p = connection_string; *p != '\0'; p++) {
switch (*p) {
case '[':
ipv6 = true;
@@ -592,7 +621,6 @@ void NetworkAddServer(const char *b)
{
if (*b != '\0') {
const char *port = nullptr;
- const char *company = nullptr;
char host[NETWORK_HOSTNAME_LENGTH];
uint16 rport;
@@ -601,7 +629,7 @@ void NetworkAddServer(const char *b)
strecpy(_settings_client.network.connect_to_ip, b, lastof(_settings_client.network.connect_to_ip));
rport = NETWORK_DEFAULT_PORT;
- ParseConnectionString(&company, &port, host);
+ ParseConnectionString(&port, host);
if (port != nullptr) rport = atoi(port);
NetworkUDPQueryServer(NetworkAddress(host, rport), true);
diff --git a/src/network/network_func.h b/src/network/network_func.h
index cbb89820c..d14dd290f 100644
--- a/src/network/network_func.h
+++ b/src/network/network_func.h
@@ -43,7 +43,8 @@ void NetworkReboot();
void NetworkDisconnect(bool blocking = false, bool close_admins = true);
void NetworkGameLoop();
void NetworkBackgroundLoop();
-void ParseConnectionString(const char **company, const char **port, char *connection_string);
+void ParseConnectionString(const char **port, char *connection_string);
+void ParseGameConnectionString(const char **company, const char **port, char *connection_string);
void NetworkStartDebugLog(NetworkAddress address);
void NetworkPopulateCompanyStats(NetworkCompanyStats *stats);
diff --git a/src/openttd.cpp b/src/openttd.cpp
index ff6867c4b..b204ca5a2 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -478,7 +478,7 @@ struct AfterNewGRFScan : NewGRFScanCallback {
uint16 rport = NETWORK_DEFAULT_PORT;
CompanyID join_as = COMPANY_NEW_COMPANY;
- ParseConnectionString(&company, &port, network_conn);
+ ParseGameConnectionString(&company, &port, network_conn);
if (company != nullptr) {
join_as = (CompanyID)atoi(company);
@@ -584,11 +584,8 @@ int openttd_main(int argc, char *argv[])
dedicated = true;
SetDebugString("net=6");
if (mgo.opt != nullptr) {
- /* Use the existing method for parsing (openttd -n).
- * However, we do ignore the #company part. */
- const char *temp = nullptr;
const char *port = nullptr;
- ParseConnectionString(&temp, &port, mgo.opt);
+ ParseConnectionString(&port, mgo.opt);
if (!StrEmpty(mgo.opt)) scanner->dedicated_host = mgo.opt;
if (port != nullptr) scanner->dedicated_port = atoi(port);
}
@@ -774,13 +771,12 @@ int openttd_main(int argc, char *argv[])
NetworkStartUp(); // initialize network-core
if (debuglog_conn != nullptr && _network_available) {
- const char *not_used = nullptr;
const char *port = nullptr;
uint16 rport;
rport = NETWORK_DEFAULT_DEBUGLOG_PORT;
- ParseConnectionString(&not_used, &port, debuglog_conn);
+ ParseConnectionString(&port, debuglog_conn);
if (port != nullptr) rport = atoi(port);
NetworkStartDebugLog(NetworkAddress(debuglog_conn, rport));