From e99134654b4609d37d03098cb34d6b692fead9da Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 10 Jul 2021 22:16:03 +0200 Subject: 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 --- src/network/core/CMakeLists.txt | 1 + src/network/core/config.cpp | 59 +++++++++++++++++++++++++++++++++++++ src/network/core/config.h | 10 +++---- src/network/network_content.cpp | 4 +-- src/network/network_coordinator.cpp | 2 +- 5 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 src/network/core/config.cpp 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 . + */ + +/** + * @file config.cpp Configuration of the connection strings for network stuff using environment variables. + */ + +#include "../../stdafx.h" + +#include +#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) -- cgit v1.2.3-70-g09d2