summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Dombrowski <stefan@uni-bonn.de>2010-09-04 23:50:20 +0200
committerStefan Dombrowski <stefan@uni-bonn.de>2010-09-05 00:04:04 +0200
commitc99347bf9108367c02dcbdebadec0b978a750c57 (patch)
tree7ec1dd12fc93098a7ee62b2610ed7ddcf72dc2a2
parent49452a005f4273b3ec91470883f308690e2269ac (diff)
downloadmana-c99347bf9108367c02dcbdebadec0b978a750c57.tar.gz
mana-c99347bf9108367c02dcbdebadec0b978a750c57.tar.bz2
mana-c99347bf9108367c02dcbdebadec0b978a750c57.tar.xz
mana-c99347bf9108367c02dcbdebadec0b978a750c57.zip
Fixing segmentation fault if server is given on command line
If server and port was given on the command line, then the server type was unknown. The command line options do work now, but only if standard ports 6901 and 9601 are used. This resolves http://bugs.manasource.org/view.php?id=177 TODO: Query the server about itself and choose the server type based on that. Reviewed-by: Jaxad0127
-rw-r--r--src/client.cpp12
-rw-r--r--src/net/net.cpp12
-rw-r--r--src/net/net.h2
3 files changed, 19 insertions, 7 deletions
diff --git a/src/client.cpp b/src/client.cpp
index b63550e6..3946d0f9 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -604,11 +604,13 @@ int Client::exec()
case STATE_CHOOSE_SERVER:
logger->log("State: CHOOSE SERVER");
- // Allow changing this using a server choice dialog
- // We show the dialog box only if the command-line
- // options weren't set.
- if (mOptions.serverName.empty() && mOptions.serverPort == 0
- && !branding.getValue("onlineServerList", "a").empty())
+ // If a server was passed on the command line, or branding
+ // provides a server and a blank server list, we skip the
+ // server selection dialog.
+ if (mOptions.serverName.empty() || mOptions.serverPort == 0
+ || !(!branding.getValue("defaultServer","").empty() &&
+ branding.getValue("defaultPort",0) &&
+ branding.getValue("onlineServerList", "").empty()))
{
// Don't allow an alpha opacity
// lower than the default value
diff --git a/src/net/net.cpp b/src/net/net.cpp
index 5e7c989f..7e7395a6 100644
--- a/src/net/net.cpp
+++ b/src/net/net.cpp
@@ -22,6 +22,7 @@
#include "net/net.h"
#include "main.h"
+#include "log.h"
#include "net/adminhandler.h"
#include "net/charhandler.h"
@@ -41,6 +42,8 @@
#include "net/manaserv/generalhandler.h"
+#include "utils/gettext.h"
+
Net::AdminHandler *adminHandler = NULL;
Net::CharHandler *charHandler = NULL;
Net::ChatHandler *chatHandler = NULL;
@@ -124,12 +127,19 @@ namespace Net
{
ServerInfo::Type networkType = ServerInfo::UNKNOWN;
-void connectToServer(const ServerInfo &server)
+void connectToServer(ServerInfo &server)
{
if (server.type == ServerInfo::UNKNOWN)
{
// TODO: Query the server about itself and choose the netcode based on
// that
+
+ if (server.port == 6901)
+ server.type = ServerInfo::TMWATHENA;
+ else if (server.port == 9601)
+ server.type = ServerInfo::MANASERV;
+ else
+ logger->error(_("Unknown Server Type! Exiting."));
}
if (networkType == server.type && getGeneralHandler() != NULL)
diff --git a/src/net/net.h b/src/net/net.h
index 9d9ee10e..6029f3ba 100644
--- a/src/net/net.h
+++ b/src/net/net.h
@@ -67,7 +67,7 @@ ServerInfo::Type getNetworkType();
/**
* Handles server detection and connection
*/
-void connectToServer(const ServerInfo &server);
+void connectToServer(ServerInfo &server);
void unload();