From e8aa5083cbc69434cfce4e5d96451781264893d3 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 30 Apr 2010 01:32:37 +0000 Subject: [PATCH] Added new binary compatibility check --- source/glest_game/facilities/game_util.cpp | 10 ++++-- source/glest_game/facilities/game_util.h | 3 +- .../glest_game/network/client_interface.cpp | 36 +++++++++++++------ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/source/glest_game/facilities/game_util.cpp b/source/glest_game/facilities/game_util.cpp index 89d498570..dafbb2d87 100644 --- a/source/glest_game/facilities/game_util.cpp +++ b/source/glest_game/facilities/game_util.cpp @@ -28,11 +28,15 @@ const string mailString= "contact_game@glest.org"; const string glestVersionString= "v3.3.5-dev"; string getCrashDumpFileName(){ - return "glest"+glestVersionString+".dmp"; + return "glest" + glestVersionString + ".dmp"; } -string getNetworkVersionString(){ - return glestVersionString + " - " + string(__DATE__) + " - " + string(__TIME__); +string getNetworkVersionString() { + return glestVersionString + " built: " + string(__DATE__) + " " + string(__TIME__); +} + +string getNetworkPlatformFreeVersionString() { + return glestVersionString; } string getAboutString1(int i){ diff --git a/source/glest_game/facilities/game_util.h b/source/glest_game/facilities/game_util.h index 3d054fa98..08bde3dd3 100644 --- a/source/glest_game/facilities/game_util.h +++ b/source/glest_game/facilities/game_util.h @@ -1,7 +1,7 @@ // ============================================================== // This file is part of Glest (www.glest.org) // -// Copyright (C) 2001-2008 Martiņo Figueroa +// Copyright (C) 2001-2008 Martio Figueroa // // You can redistribute this code and/or modify it under // the terms of the GNU General Public License as published @@ -28,6 +28,7 @@ extern const string networkVersionString; string getCrashDumpFileName(); string getNetworkVersionString(); +string getNetworkPlatformFreeVersionString(); string getAboutString1(int i); string getAboutString2(int i); string getTeammateName(int i); diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index 373b3a96a..7701222e0 100755 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -138,19 +138,34 @@ void ClientInterface::updateLobby() SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got NetworkMessageIntro\n",__FILE__,__FUNCTION__); //check consistency - if(networkMessageIntro.getVersionString() != getNetworkVersionString()) - //if(1) { - string sErr = "Server and client binary mismatch!\nYou have to use the exactly same binaries!\n\nServer: " + - networkMessageIntro.getVersionString() + - "\nClient: " + getNetworkVersionString(); - printf("%s\n",sErr.c_str()); + bool versionMatched = false; + string platformFreeVersion = getNetworkPlatformFreeVersionString(); + string sErr = ""; - sendTextMessage("Server and client binary mismatch!!",-1); - sendTextMessage(" Server:" + networkMessageIntro.getVersionString(),-1); - sendTextMessage(" Client: "+ getNetworkVersionString(),-1); - if(Config::getInstance().getBool("NetworkConsistencyChecks")) + if(strncmp(platformFreeVersion.c_str(),networkMessageIntro.getVersionString().c_str(),strlen(platformFreeVersion.c_str())) != 0) { + sErr = "Server and client binary mismatch!\nYou have to use the exactly same binaries!\n\nServer: " + + networkMessageIntro.getVersionString() + + "\nClient: " + getNetworkVersionString(); + printf("%s\n",sErr.c_str()); + + sendTextMessage("Server and client binary mismatch!!",-1); + sendTextMessage(" Server:" + networkMessageIntro.getVersionString(),-1); + sendTextMessage(" Client: "+ getNetworkVersionString(),-1); + } + else { + versionMatched = true; + sErr = "Server and client are using the same version but different platforms.\n\nServer: " + + networkMessageIntro.getVersionString() + "\nClient: " + getNetworkVersionString(); + printf("%s\n",sErr.c_str()); + + sendTextMessage("Server and client platform mismatch.",-1); + sendTextMessage(" Server:" + networkMessageIntro.getVersionString(),-1); + sendTextMessage(" Client: "+ getNetworkVersionString(),-1); + } + + if(Config::getInstance().getBool("PlatformConsistencyChecks","true") && versionMatched == false) {// error message and disconnect only if checked DisplayErrorMessage(sErr); quit= true; @@ -159,7 +174,6 @@ void ClientInterface::updateLobby() } } - //send intro message NetworkMessageIntro sendNetworkMessageIntro(getNetworkVersionString(), Config::getInstance().getString("NetPlayerName",Socket::getHostName().c_str()), -1);