summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRubidium <rubidium@openttd.org>2021-07-10 22:16:03 +0200
committerrubidium42 <rubidium42@users.noreply.github.com>2021-07-10 23:09:45 +0200
commite99134654b4609d37d03098cb34d6b692fead9da (patch)
tree990946625392b4018c0a4a797ac5e8d7fc319773
parent3e4d3274517d6a5f3fede18e0e29eafcdc30d0c8 (diff)
downloadopenttd-e99134654b4609d37d03098cb34d6b692fead9da.tar.xz
Feature: allow setting (game) coordinator and content server connection strings using environment variables
OTTD_COORDINATOR_CS for the game coordinator defaults to coordinator.openttd.org:3976 OTTD_CONTENT_SERVER_CS for the content server defaults to content.openttd.org:3978 OTTD_CONTENT_MIRROR_CS for the content mirror server defaults to binaries.openttd.org:80
-rw-r--r--src/network/core/CMakeLists.txt1
-rw-r--r--src/network/core/config.cpp59
-rw-r--r--src/network/core/config.h10
-rw-r--r--src/network/network_content.cpp4
-rw-r--r--src/network/network_coordinator.cpp2
5 files changed, 67 insertions, 9 deletions
diff --git a/src/network/core/CMakeLists.txt b/src/network/core/CMakeLists.txt
index 6eb255f6f..82bf7843d 100644
--- a/src/network/core/CMakeLists.txt
+++ b/src/network/core/CMakeLists.txt
@@ -1,6 +1,7 @@
add_files(
address.cpp
address.h
+ config.cpp
config.h
core.cpp
core.h
diff --git a/src/network/core/config.cpp b/src/network/core/config.cpp
new file mode 100644
index 000000000..c5fe3adbd
--- /dev/null
+++ b/src/network/core/config.cpp
@@ -0,0 +1,59 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @file config.cpp Configuration of the connection strings for network stuff using environment variables.
+ */
+
+#include "../../stdafx.h"
+
+#include <cstdlib>
+#include "../../string_func.h"
+
+#include "../../safeguards.h"
+
+/**
+ * Get the environment variable using std::getenv and when it is an empty string (or nullptr), return a fallback value instead.
+ * @param variable The environment variable to read from.
+ * @param fallback The fallback in case the environment variable is not set.
+ * @return The environment value, or when that does not exist the given fallback value.
+ */
+static const char *GetEnv(const char *variable, const char *fallback)
+{
+ const char *value = std::getenv(variable);
+ return StrEmpty(value) ? fallback : value;
+}
+
+/**
+ * Get the connection string for the game coordinator from the environment variable OTTD_COORDINATOR_CS,
+ * or when it has not been set a hard coded default DNS hostname of the production server.
+ * @return The game coordinator's connection string.
+ */
+const char *NetworkCoordinatorConnectionString()
+{
+ return GetEnv("OTTD_COORDINATOR_CS", "coordinator.openttd.org");
+}
+
+/**
+ * Get the connection string for the content server from the environment variable OTTD_CONTENT_SERVER_CS,
+ * or when it has not been set a hard coded default DNS hostname of the production server.
+ * @return The game coordinator's connection string.
+ */
+const char *NetworkContentServerConnectionString()
+{
+ return GetEnv("OTTD_CONTENT_SERVER_CS", "content.openttd.org");
+}
+
+/**
+ * Get the connection string for the content mirror from the environment variable OTTD_CONTENT_MIRROR_CS,
+ * or when it has not been set a hard coded default DNS hostname of the production server.
+ * @return The game coordinator's connection string.
+ */
+const char *NetworkContentMirrorConnectionString()
+{
+ return GetEnv("OTTD_CONTENT_MIRROR_CS", "binaries.openttd.org");
+}
diff --git a/src/network/core/config.h b/src/network/core/config.h
index ab1c3082e..d64dec2d9 100644
--- a/src/network/core/config.h
+++ b/src/network/core/config.h
@@ -12,12 +12,10 @@
#ifndef NETWORK_CORE_CONFIG_H
#define NETWORK_CORE_CONFIG_H
-/** DNS hostname of the Game Coordinator server */
-static const char * const NETWORK_COORDINATOR_SERVER_HOST = "coordinator.openttd.org";
-/** DNS hostname of the content server */
-static const char * const NETWORK_CONTENT_SERVER_HOST = "content.openttd.org";
-/** DNS hostname of the HTTP-content mirror server */
-static const char * const NETWORK_CONTENT_MIRROR_HOST = "binaries.openttd.org";
+const char *NetworkCoordinatorConnectionString();
+const char *NetworkContentServerConnectionString();
+const char *NetworkContentMirrorConnectionString();
+
/** URL of the HTTP mirror system */
static const char * const NETWORK_CONTENT_MIRROR_URL = "/bananas";
diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp
index eff54885d..13172f9ea 100644
--- a/src/network/network_content.cpp
+++ b/src/network/network_content.cpp
@@ -342,7 +342,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const Conten
this->http_response_index = -1;
- new NetworkHTTPContentConnecter(NETWORK_CONTENT_MIRROR_HOST, this, NETWORK_CONTENT_MIRROR_URL, content_request);
+ new NetworkHTTPContentConnecter(NetworkContentMirrorConnectionString(), this, NETWORK_CONTENT_MIRROR_URL, content_request);
/* NetworkHTTPContentConnecter takes over freeing of content_request! */
}
@@ -774,7 +774,7 @@ void ClientNetworkContentSocketHandler::Connect()
{
if (this->sock != INVALID_SOCKET || this->isConnecting) return;
this->isConnecting = true;
- new NetworkContentConnecter(NETWORK_CONTENT_SERVER_HOST);
+ new NetworkContentConnecter(NetworkContentServerConnectionString());
}
/**
diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp
index b9299d549..5f1f9f9d1 100644
--- a/src/network/network_coordinator.cpp
+++ b/src/network/network_coordinator.cpp
@@ -159,7 +159,7 @@ void ClientNetworkCoordinatorSocketHandler::Connect()
this->connecting = true;
this->last_activity = std::chrono::steady_clock::now();
- new NetworkCoordinatorConnecter(NETWORK_COORDINATOR_SERVER_HOST);
+ new NetworkCoordinatorConnecter(NetworkCoordinatorConnectionString());
}
NetworkRecvStatus ClientNetworkCoordinatorSocketHandler::CloseConnection(bool error)