Description: Allow version 4-digit version comparison/handshake Author: Nito Martinez --- a/nxcomp/Control.cpp +++ b/nxcomp/Control.cpp @@ -15,6 +15,7 @@ /* */ /**************************************************************************/ +#include "NX.h" #include "NXpack.h" #include "Control.h" @@ -594,44 +595,17 @@ RemoteVersionMajor = -1; RemoteVersionMinor = -1; RemoteVersionPatch = -1; + RemoteVersionMaintenancePatch = -1; CompatVersionMajor = -1; CompatVersionMinor = -1; CompatVersionPatch = -1; + CompatVersionMaintenancePatch = -1; - char version[32]; - - strcpy(version, VERSION); - - char *value; - - value = strtok(version, "."); - - for (int i = 0; value != NULL && i < 3; i++) - { - switch (i) - { - case 0: - - LocalVersionMajor = atoi(value); - - break; - - case 1: - - LocalVersionMinor = atoi(value); - - break; - - case 2: - - LocalVersionPatch = atoi(value); - - break; - } - - value = strtok(NULL, "."); - } + LocalVersionMajor = NXMajorVersion(); + LocalVersionMinor = NXMinorVersion(); + LocalVersionPatch = NXPatchVersion(); + LocalVersionMaintenancePatch = NXMaintenancePatchVersion(); #ifdef TEST *logofs << "Control: Major version is " << LocalVersionMajor --- a/nxcomp/Control.h +++ b/nxcomp/Control.h @@ -299,17 +299,26 @@ // Version number of local and remote proxy. // + /* + * LocalVersionMaintenancePatch, RemoteVersionMaintenancePatch + * CompatVersionMaintenancePatch + * + * currently not used, for future compatibility checks + */ int LocalVersionMajor; int LocalVersionMinor; int LocalVersionPatch; + int LocalVersionMaintenancePatch; int RemoteVersionMajor; int RemoteVersionMinor; int RemoteVersionPatch; + int RemoteVersionMaintenancePatch; int CompatVersionMajor; int CompatVersionMinor; int CompatVersionPatch; + int CompatVersionMaintenancePatch; // // Which unpack methods are implemented in proxy? --- a/nxcomp/Loop.cpp +++ b/nxcomp/Loop.cpp @@ -14250,7 +14250,8 @@ cerr << "NXPROXY - " << "Version " << control -> LocalVersionMajor << "." << control -> LocalVersionMinor << "." - << control -> LocalVersionPatch; + << control -> LocalVersionPatch << "." + << control -> LocalVersionMaintenancePatch; cerr << endl; } --- a/nxcomp/Makefile.in +++ b/nxcomp/Makefile.in @@ -105,7 +105,8 @@ CSRC = MD5.c \ Pack.c \ - Vars.c + Vars.c \ + Version.c CXXSRC = Loop.cpp \ Children.cpp \ --- a/nxcomp/NX.h +++ b/nxcomp/NX.h @@ -442,6 +442,12 @@ extern void NXTransCleanup(void) __attribute__((noreturn)); +extern const char* NXVersion(); +extern int NXMajorVersion(); +extern int NXMinorVersion(); +extern int NXPatchVersion(); +extern int NXMaintenancePatchVersion(); + #ifdef __cplusplus } #endif --- /dev/null +++ b/nxcomp/Version.c @@ -0,0 +1,106 @@ +/**************************************************************************/ +/* */ +/* Copyright (C) 2014 Qindel http://qindel.com and QVD http://theqvd.com */ +/* */ +/* This program 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; either version 3 of the License, or (at */ +/* your option) any later version. */ +/* */ +/* This program 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 this program; if not, see . */ +/* */ +/* Additional permission under GNU GPL version 3 section 7 */ +/* */ +/* If you modify this Program, or any covered work, by linking or */ +/* combining it with [name of library] (or a modified version of that */ +/* library), containing parts covered by the terms of [name of library's */ +/* license], the licensors of this Program grant you additional */ +/* permission to convey the resulting work. {Corresponding Source for a */ +/* non-source form of such a combination shall include the source code */ +/* for the parts of [name of library] used as well as that of the covered */ +/* work.} */ +/* */ +/* */ +/**************************************************************************/ + +#include +#include +#include +#include "NX.h" + + +static int _NXVersionMajor = -1; +static int _NXVersionMinor = -1; +static int _NXVersionPatch = -1; +static int _NXVersionMaintenancePatch = -1; + + +const char* NXVersion() { + const char *version = VERSION; + return version; +} + +void _parseNXVersion() { + char version[32]; + int i; + strcpy(version, VERSION); + + char *value; + /* Reset values to 0 if undefined */ + _NXVersionMajor = _NXVersionMinor = _NXVersionPatch = _NXVersionMaintenancePatch = 0; + + +#define NXVERSIONSEPARATOR "." + value = strtok(version, NXVERSIONSEPARATOR); + + for (i = 0; value != NULL && i < 4; i++) + { + switch (i) + { + case 0: + _NXVersionMajor = atoi(value); + break; + + case 1: + _NXVersionMinor = atoi(value); + break; + + case 2: + _NXVersionPatch = atoi(value); + break; + + case 3: + _NXVersionMaintenancePatch = atoi(value); + break; + } + + value = strtok(NULL, NXVERSIONSEPARATOR); + } +} + +int NXMajorVersion() { + if (_NXVersionMajor == -1) + _parseNXVersion(); + return _NXVersionMajor; +} +int NXMinorVersion() { + if (_NXVersionMinor == -1) + _parseNXVersion(); + return _NXVersionMinor; +} +int NXPatchVersion() { + if (_NXVersionPatch == -1) + _parseNXVersion(); + return _NXVersionPatch; +} +int NXMaintenancePatchVersion() { + if (_NXVersionMaintenancePatch == -1) + _parseNXVersion(); + return _NXVersionMaintenancePatch; +}