summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README9
-rw-r--r--docs/manaserv.xml.example (renamed from docs/manaserv.xml)2
-rw-r--r--src/account-server/main-account.cpp58
-rw-r--r--src/common/configuration.cpp12
-rw-r--r--src/common/configuration.hpp11
-rw-r--r--src/game-server/main-game.cpp67
6 files changed, 55 insertions, 104 deletions
diff --git a/README b/README
index 2b684d96..9598c6a7 100644
--- a/README
+++ b/README
@@ -39,8 +39,9 @@ Currently, manaserv expects these to be merged into a single 'data' directory.
CONFIGURATION
-The configuration is currently loaded from ~/.manaserv.xml. An example file is
-located at docs/manaserv.xml.
+The server loads its configuration from manaserv.xml, which it tries to find in
+the directory where you're running the server from. An example file is located
+at docs/manaserv.xml.example.
Default option values:
@@ -49,6 +50,10 @@ Default option values:
gameServerAddress localhost
gameServerPort 9604
+ serverPath .
+ serverDataPath example/serverdata
+ clientDataPath example/clientdata
+
RUNNING
diff --git a/docs/manaserv.xml b/docs/manaserv.xml.example
index 909400a8..d41b2984 100644
--- a/docs/manaserv.xml
+++ b/docs/manaserv.xml.example
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!--
- An example configuration file for ~/.manaserv.xml
+ An example configuration file.
Documentation: http://doc.manasource.org/manaserv.xml
diff --git a/src/account-server/main-account.cpp b/src/account-server/main-account.cpp
index e43f1a65..335a872a 100644
--- a/src/account-server/main-account.cpp
+++ b/src/account-server/main-account.cpp
@@ -1,6 +1,7 @@
/*
* The Mana Server
* Copyright (C) 2004-2010 The Mana World Development Team
+ * Copyright (C) 2010 The Mana Developers
*
* This file is part of The Mana Server.
*
@@ -75,34 +76,23 @@ static void closeGracefully(int)
running = false;
}
-static void initConfig()
+static void initializeConfiguration()
{
- /*
- * If the path values aren't defined, we set the default
- * depending on the platform.
- */
- // The config path
#if defined CONFIG_FILE
std::string configPath = CONFIG_FILE;
#else
-
-#if (defined __USE_UNIX98 || defined __FreeBSD__)
- std::string configPath = getenv("HOME");
- configPath += "/.";
- configPath += DEFAULT_CONFIG_FILE;
-#else // Win32, ...
std::string configPath = DEFAULT_CONFIG_FILE;
-#endif
-
#endif // defined CONFIG_FILE
- Configuration::initialize(configPath);
+
+ if (!Configuration::initialize(configPath)) {
+ LOG_FATAL("Refusing to run without configuration!");
+ exit(1);
+ }
+
LOG_INFO("Using config file: " << configPath);
// check inter-server password
if (Configuration::getValue("net_password", "") == "")
- {
- LOG_WARN("SECURITY WARNING: No 'net_password' set in " << configPath <<
- " - set one ASAP or this server WILL get h4x0rd!!");
- }
+ LOG_WARN("SECURITY WARNING: 'net_password' not set!");
}
/**
@@ -123,30 +113,16 @@ static void initialize()
// Set enet to quit on exit.
atexit(enet_deinitialize);
- /*
- * If the path values aren't defined, we set the default
- * depending on the platform.
- */
- // The log path
#if defined LOG_FILE
std::string logPath = LOG_FILE;
#else
-
-#if (defined __USE_UNIX98 || defined __FreeBSD__)
- std::string logPath = getenv("HOME");
- logPath += "/.";
- logPath += DEFAULT_LOG_FILE;
-#else // Win32, ...
std::string logPath = DEFAULT_LOG_FILE;
-#endif
-
#endif // defined LOG_FILE
// Initialize PhysicsFS
PHYSFS_init("");
// Initialize the logger.
- using namespace utils;
Logger::setLogFile(logPath);
// write the messages to both the screen and the log file.
@@ -166,7 +142,7 @@ static void initialize()
}
// --- Initialize the managers
- stringFilter = new StringFilter; // The slang's and double quotes filter.
+ stringFilter = new utils::StringFilter; // The slang's and double quotes filter.
chatChannelManager = new ChatChannelManager;
guildManager = new GuildManager;
postalManager = new PostManager;
@@ -194,7 +170,7 @@ static void initialize()
/**
* Deinitializes the server.
*/
-static void deinitialize()
+static void deinitializeServer()
{
// Write configuration file
Configuration::deinitialize();
@@ -229,17 +205,9 @@ static void dumpStatistics()
#if defined STATS_FILE
std::string path = STATS_FILE;
#else
-
-#if (defined __USE_UNIX98 || defined __FreeBSD__)
- std::string path = getenv("HOME");
- path += "/.";
- path += DEFAULT_STATS_FILE;
-#else // Win32, ...
std::string path = DEFAULT_STATS_FILE;
#endif
-#endif
-
std::ofstream os(path.c_str());
os << "<statistics>\n";
GameServerHandler::dumpStatistics(os);
@@ -323,7 +291,7 @@ int main(int argc, char *argv[])
#ifdef PACKAGE_VERSION
LOG_INFO("The Mana Account+Chat Server v" << PACKAGE_VERSION);
#endif
- initConfig();
+ initializeConfiguration();
// Parse command line options
CommandLineOptions options;
@@ -379,7 +347,7 @@ int main(int argc, char *argv[])
LOG_INFO("Received: Quit signal, closing down...");
chatHandler->stopListen();
- deinitialize();
+ deinitializeServer();
return 0;
}
diff --git a/src/common/configuration.cpp b/src/common/configuration.cpp
index 80364b0b..0f0a5844 100644
--- a/src/common/configuration.cpp
+++ b/src/common/configuration.cpp
@@ -1,6 +1,7 @@
/*
* The Mana Server
* Copyright (C) 2004-2010 The Mana World Development Team
+ * Copyright (C) 2010 The Mana Developers
*
* This file is part of The Mana Server.
*
@@ -32,19 +33,23 @@ static std::map< std::string, std::string > options;
/**< Location of config file. */
static std::string configPath;
-void Configuration::initialize(const std::string &filename)
+bool Configuration::initialize(const std::string &filename)
{
configPath = filename;
xmlDocPtr doc = xmlReadFile(filename.c_str(), NULL, 0);
- if (!doc) return;
+ if (!doc) {
+ LOG_WARN("Could not read configuration file '" << filename.c_str() << "'.");
+ return false;
+ }
xmlNodePtr node = xmlDocGetRootElement(doc);
if (!node || !xmlStrEqual(node->name, BAD_CAST "configuration")) {
LOG_WARN("No configuration file '" << filename.c_str() << "'.");
- return;
+ xmlFreeDoc(doc);
+ return false;
}
for (node = node->xmlChildrenNode; node != NULL; node = node->next)
@@ -62,6 +67,7 @@ void Configuration::initialize(const std::string &filename)
}
xmlFreeDoc(doc);
+ return true;
}
void Configuration::deinitialize()
diff --git a/src/common/configuration.hpp b/src/common/configuration.hpp
index 5e930a99..0627c290 100644
--- a/src/common/configuration.hpp
+++ b/src/common/configuration.hpp
@@ -1,6 +1,7 @@
/*
* The Mana Server
* Copyright (C) 2004-2010 The Mana World Development Team
+ * Copyright (C) 2010 The Mana Developers
*
* This file is part of The Mana Server.
*
@@ -18,8 +19,8 @@
* along with The Mana Server. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __INIREAD_H
-#define __INIREAD_H
+#ifndef CONFIGURATION_H
+#define CONFIGURATION_H
#include <string>
@@ -28,8 +29,9 @@ namespace Configuration
/**
* Loads the configuration options into memory.
* @param filename path to the configuration file .
+ * @return whether the configuration file could be read
*/
- void initialize(const std::string &filename);
+ bool initialize(const std::string &filename);
void deinitialize();
@@ -51,4 +53,5 @@ namespace Configuration
#ifndef DEFAULT_SERVER_PORT
#define DEFAULT_SERVER_PORT 9601
#endif
-#endif
+
+#endif // CONFIGURATION_H
diff --git a/src/game-server/main-game.cpp b/src/game-server/main-game.cpp
index 0901ce16..2ae84a06 100644
--- a/src/game-server/main-game.cpp
+++ b/src/game-server/main-game.cpp
@@ -1,6 +1,7 @@
/*
* The Mana Server
* Copyright (C) 2004-2010 The Mana World Development Team
+ * Copyright (C) 2010 The Mana Developers
*
* This file is part of The Mana Server.
*
@@ -92,43 +93,28 @@ PostMan *postMan;
BandwidthMonitor *gBandwidth;
/** Callback used when SIGQUIT signal is received. */
-void closeGracefully(int)
+static void closeGracefully(int)
{
running = false;
}
-/**
- * Initialize the configuration
- */
-void initConfig()
+static void initializeConfiguration()
{
- /*
- * If the path values aren't defined, we set the default
- * depending on the platform.
- */
- // The config path
-#if defined CONFIG_FILE
+#ifdef CONFIG_FILE
std::string configPath = CONFIG_FILE;
#else
-
-#if (defined __USE_UNIX98 || defined __FreeBSD__)
- std::string configPath = getenv("HOME");
- configPath += "/.";
- configPath += DEFAULT_CONFIG_FILE;
-#else // Win32, ...
std::string configPath = DEFAULT_CONFIG_FILE;
#endif
-#endif // defined CONFIG_FILE
- Configuration::initialize(configPath);
- LOG_INFO("Using config file: " << configPath);
+ if (!Configuration::initialize(configPath)) {
+ LOG_FATAL("Refusing to run without configuration!");
+ exit(1);
+ }
+ LOG_INFO("Using config file: " << configPath);
}
-/**
- * Initializes the server.
- */
-void initialize()
+static void initializeServer()
{
// Reset to default segmentation fault handling for debugging purposes
signal(SIGSEGV, SIG_DFL);
@@ -140,30 +126,16 @@ void initialize()
signal(SIGINT, closeGracefully);
signal(SIGTERM, closeGracefully);
- /*
- * If the path values aren't defined, we set the default
- * depending on the platform.
- */
- // The log path
#if defined LOG_FILE
std::string logPath = LOG_FILE;
#else
-
-#if (defined __USE_UNIX98 || defined __FreeBSD__)
- std::string logPath = getenv("HOME");
- logPath += "/.";
- logPath += DEFAULT_LOG_FILE;
-#else // Win32, ...
std::string logPath = DEFAULT_LOG_FILE;
-#endif
-
#endif // defined LOG_FILE
// Initialize PhysicsFS
PHYSFS_init("");
// Initialize the logger.
- using namespace utils;
Logger::setLogFile(logPath);
// Write the messages to both the screen and the log file.
@@ -172,7 +144,7 @@ void initialize()
// --- Initialize the managers
// Initialize the slang's and double quotes filter.
- stringFilter = new StringFilter;
+ stringFilter = new utils::StringFilter;
ResourceManager::initialize();
if (MapManager::initialize(DEFAULT_MAPSDB_FILE) < 1)
@@ -218,10 +190,7 @@ void initialize()
}
-/**
- * Deinitializes the server.
- */
-void deinitialize()
+static void deinitializeServer()
{
// Write configuration file
Configuration::deinitialize();
@@ -247,9 +216,9 @@ void deinitialize()
/**
- * Show command line arguments
+ * Show command line arguments.
*/
-void printHelp()
+static void printHelp()
{
std::cout << "manaserv" << std::endl << std::endl
<< "Options: " << std::endl
@@ -279,7 +248,7 @@ struct CommandLineOptions
/**
* Parse the command line arguments
*/
-void parseOptions(int argc, char *argv[], CommandLineOptions &options)
+static void parseOptions(int argc, char *argv[], CommandLineOptions &options)
{
const char *optstring = "h";
@@ -326,7 +295,7 @@ int main(int argc, char *argv[])
LOG_INFO("The Mana Game Server v" << PACKAGE_VERSION);
#endif
- initConfig();
+ initializeConfiguration();
// Parse command line options
CommandLineOptions options;
@@ -339,7 +308,7 @@ int main(int argc, char *argv[])
Logger::setVerbosity(options.verbosity);
// General initialization
- initialize();
+ initializeServer();
// Make an initial attempt to connect to the account server
// Try again after longer and longer intervals when connection fails.
@@ -438,5 +407,5 @@ int main(int argc, char *argv[])
LOG_INFO("Received: Quit signal, closing down...");
gameHandler->stopListen();
accountHandler->stop();
- deinitialize();
+ deinitializeServer();
}