mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-05 16:01:04 +00:00
More fine tuned versioning
You get a PACKETVERSION, for when some packets change format. You get SRB2APPLICATION, for when you have big fucking mod. (cherry picked from commit 6bd383621eee92b215f86c9c4b483934d7e60daa)
This commit is contained in:
parent
f9dad05242
commit
4ed99c60bb
3 changed files with 51 additions and 0 deletions
|
@ -1370,8 +1370,12 @@ static boolean CL_SendJoin(void)
|
||||||
localplayers++;
|
localplayers++;
|
||||||
|
|
||||||
netbuffer->u.clientcfg.localplayers = localplayers;
|
netbuffer->u.clientcfg.localplayers = localplayers;
|
||||||
|
netbuffer->u.clientcfg._255 = 255;
|
||||||
|
netbuffer->u.clientcfg.packetversion = PACKETVERSION;
|
||||||
netbuffer->u.clientcfg.version = VERSION;
|
netbuffer->u.clientcfg.version = VERSION;
|
||||||
netbuffer->u.clientcfg.subversion = SUBVERSION;
|
netbuffer->u.clientcfg.subversion = SUBVERSION;
|
||||||
|
strncpy(netbuffer->u.clientcfg.application, SRB2APPLICATION,
|
||||||
|
sizeof netbuffer->u.clientcfg.application);
|
||||||
netbuffer->u.clientcfg.needsdownload = cl_needsdownload;
|
netbuffer->u.clientcfg.needsdownload = cl_needsdownload;
|
||||||
netbuffer->u.clientcfg.challengenum = cl_challengenum;
|
netbuffer->u.clientcfg.challengenum = cl_challengenum;
|
||||||
memcpy(netbuffer->u.clientcfg.challengeanswer, cl_challengeanswer, MD5_LEN);
|
memcpy(netbuffer->u.clientcfg.challengeanswer, cl_challengeanswer, MD5_LEN);
|
||||||
|
@ -1388,8 +1392,12 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
netbuffer->packettype = PT_SERVERINFO;
|
netbuffer->packettype = PT_SERVERINFO;
|
||||||
|
netbuffer->u.serverinfo._255 = 255;
|
||||||
|
netbuffer->u.serverinfo.packetversion = PACKETVERSION;
|
||||||
netbuffer->u.serverinfo.version = VERSION;
|
netbuffer->u.serverinfo.version = VERSION;
|
||||||
netbuffer->u.serverinfo.subversion = SUBVERSION;
|
netbuffer->u.serverinfo.subversion = SUBVERSION;
|
||||||
|
strncpy(netbuffer->u.serverinfo.application, SRB2APPLICATION,
|
||||||
|
sizeof netbuffer->u.serverinfo.application);
|
||||||
// return back the time value so client can compute their ping
|
// return back the time value so client can compute their ping
|
||||||
netbuffer->u.serverinfo.time = (tic_t)LONG(servertime);
|
netbuffer->u.serverinfo.time = (tic_t)LONG(servertime);
|
||||||
netbuffer->u.serverinfo.leveltime = (tic_t)LONG(leveltime);
|
netbuffer->u.serverinfo.leveltime = (tic_t)LONG(leveltime);
|
||||||
|
@ -1875,12 +1883,21 @@ static void SL_InsertServer(serverinfo_pak* info, SINT8 node)
|
||||||
if (serverlistcount >= MAXSERVERLIST)
|
if (serverlistcount >= MAXSERVERLIST)
|
||||||
return; // list full
|
return; // list full
|
||||||
|
|
||||||
|
if (info->_255 != 255)
|
||||||
|
return;/* old packet format */
|
||||||
|
|
||||||
|
if (info->packetversion != PACKETVERSION)
|
||||||
|
return;/* old new packet format */
|
||||||
|
|
||||||
if (info->version != VERSION)
|
if (info->version != VERSION)
|
||||||
return; // Not same version.
|
return; // Not same version.
|
||||||
|
|
||||||
if (info->subversion != SUBVERSION)
|
if (info->subversion != SUBVERSION)
|
||||||
return; // Close, but no cigar.
|
return; // Close, but no cigar.
|
||||||
|
|
||||||
|
if (strcmp(info->application, SRB2APPLICATION))
|
||||||
|
return;/* that's a different mod */
|
||||||
|
|
||||||
i = serverlistcount++;
|
i = serverlistcount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3829,6 +3846,12 @@ static void HandleConnect(SINT8 node)
|
||||||
|
|
||||||
if (bannednode && bannednode[node])
|
if (bannednode && bannednode[node])
|
||||||
SV_SendRefuse(node, M_GetText("You have been banned\nfrom the server"));
|
SV_SendRefuse(node, M_GetText("You have been banned\nfrom the server"));
|
||||||
|
else if (netbuffer->u.clientcfg._255 != 255 ||
|
||||||
|
netbuffer->u.clientcfg.packetversion != PACKETVERSION)
|
||||||
|
SV_SendRefuse(node, "Incompatible packet formats.");
|
||||||
|
else if (strncmp(netbuffer->u.clientcfg.application, SRB2APPLICATION,
|
||||||
|
sizeof netbuffer->u.clientcfg.application))
|
||||||
|
SV_SendRefuse(node, "Different SRB2 modifications\nare not compatible.");
|
||||||
else if (netbuffer->u.clientcfg.version != VERSION
|
else if (netbuffer->u.clientcfg.version != VERSION
|
||||||
|| netbuffer->u.clientcfg.subversion != SUBVERSION)
|
|| netbuffer->u.clientcfg.subversion != SUBVERSION)
|
||||||
SV_SendRefuse(node, va(M_GetText("Different SRB2Kart versions cannot\nplay a netgame!\n(server version %d.%d)"), VERSION, SUBVERSION));
|
SV_SendRefuse(node, va(M_GetText("Different SRB2Kart versions cannot\nplay a netgame!\n(server version %d.%d)"), VERSION, SUBVERSION));
|
||||||
|
@ -3975,6 +3998,8 @@ static void HandleServerInfo(SINT8 node)
|
||||||
const tic_t ticdiff = (ticnow - ticthen)*1000/NEWTICRATE;
|
const tic_t ticdiff = (ticnow - ticthen)*1000/NEWTICRATE;
|
||||||
netbuffer->u.serverinfo.time = (tic_t)LONG(ticdiff);
|
netbuffer->u.serverinfo.time = (tic_t)LONG(ticdiff);
|
||||||
netbuffer->u.serverinfo.servername[MAXSERVERNAME-1] = 0;
|
netbuffer->u.serverinfo.servername[MAXSERVERNAME-1] = 0;
|
||||||
|
netbuffer->u.serverinfo.application
|
||||||
|
[sizeof netbuffer->u.serverinfo.application - 1] = '\0';
|
||||||
netbuffer->u.serverinfo.gametype = (UINT8)((netbuffer->u.serverinfo.gametype == VANILLA_GT_MATCH) ? GT_MATCH : GT_RACE);
|
netbuffer->u.serverinfo.gametype = (UINT8)((netbuffer->u.serverinfo.gametype == VANILLA_GT_MATCH) ? GT_MATCH : GT_RACE);
|
||||||
|
|
||||||
SL_InsertServer(&netbuffer->u.serverinfo, node);
|
SL_InsertServer(&netbuffer->u.serverinfo, node);
|
||||||
|
|
|
@ -21,6 +21,16 @@
|
||||||
|
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
The 'packet version' may be used with packets whose
|
||||||
|
format is expected to change between versions.
|
||||||
|
|
||||||
|
This version is independent of the mod name, and standard
|
||||||
|
version and subversion. It should only account for the
|
||||||
|
basic fields of the packet, and change infrequently.
|
||||||
|
*/
|
||||||
|
#define PACKETVERSION 0
|
||||||
|
|
||||||
// Network play related stuff.
|
// Network play related stuff.
|
||||||
// There is a data struct that stores network
|
// There is a data struct that stores network
|
||||||
// communication related stuff, and another
|
// communication related stuff, and another
|
||||||
|
@ -345,8 +355,13 @@ typedef struct {
|
||||||
#pragma warning(default : 4200)
|
#pragma warning(default : 4200)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MAXAPPLICATION 16
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
UINT8 _255;/* see serverinfo_pak */
|
||||||
|
UINT8 packetversion;
|
||||||
|
char application[MAXAPPLICATION];
|
||||||
UINT8 version; // Different versions don't work
|
UINT8 version; // Different versions don't work
|
||||||
UINT8 subversion; // Contains build version
|
UINT8 subversion; // Contains build version
|
||||||
UINT8 localplayers;
|
UINT8 localplayers;
|
||||||
|
@ -372,6 +387,14 @@ typedef struct
|
||||||
// This packet is too large
|
// This packet is too large
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
In the old packet, 'version' is the first field. Now that field is set
|
||||||
|
to 255 always, so older versions won't be confused with the new
|
||||||
|
versions or vice-versa.
|
||||||
|
*/
|
||||||
|
UINT8 _255;
|
||||||
|
UINT8 packetversion;
|
||||||
|
char application[MAXAPPLICATION];
|
||||||
UINT8 version;
|
UINT8 version;
|
||||||
UINT8 subversion;
|
UINT8 subversion;
|
||||||
UINT8 numberofplayer;
|
UINT8 numberofplayer;
|
||||||
|
|
|
@ -141,6 +141,9 @@ extern FILE *logstream;
|
||||||
extern char logfilename[1024];
|
extern char logfilename[1024];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* A mod name to further distinguish versions. */
|
||||||
|
#define SRB2APPLICATION "SRB2"
|
||||||
|
|
||||||
//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
|
//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
|
||||||
#ifdef DEVELOP
|
#ifdef DEVELOP
|
||||||
#define VERSION 0 // Game version
|
#define VERSION 0 // Game version
|
||||||
|
|
Loading…
Reference in a new issue