diff --git a/src/netcode/client_connection.c b/src/netcode/client_connection.c index 6c350ad702f27cc45a12ce82e90790b13ac3cf87..ace0bcc63bc7dd8dd42f00ac484ba4de05d21711 100644 --- a/src/netcode/client_connection.c +++ b/src/netcode/client_connection.c @@ -325,6 +325,7 @@ static void CL_DrawConnectionStatus(void) static boolean CL_AskFileList(INT32 firstfile) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); netbuffer->packettype = PT_TELLFILESNEEDED; netbuffer->u.filesneedednum = firstfile; @@ -340,6 +341,7 @@ boolean CL_SendJoin(void) { UINT8 localplayers = 1; char const *player2name; + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (netgame) CONS_Printf(M_GetText("Sending join request...\n")); netbuffer->packettype = PT_CLIENTJOIN; @@ -372,6 +374,7 @@ boolean CL_SendJoin(void) static void SendAskInfo(INT32 node) { const tic_t asktime = I_GetTime(); + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); netbuffer->packettype = PT_ASKINFO; netbuffer->u.askinfo.version = VERSION; netbuffer->u.askinfo.time = (tic_t)LONG(asktime); @@ -1354,6 +1357,7 @@ void CL_ConnectToServer(void) void PT_ServerInfo(SINT8 node) { // compute ping in ms + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); const tic_t ticnow = I_GetTime(); const tic_t ticthen = (tic_t)LONG(netbuffer->u.serverinfo.time); const tic_t ticdiff = (ticnow - ticthen)*1000/NEWTICRATE; @@ -1380,6 +1384,7 @@ static boolean ServerOnly(SINT8 node) void PT_MoreFilesNeeded(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (server && serverrunning) { // But wait I thought I'm the server? Net_CloseConnection(node); @@ -1398,6 +1403,7 @@ void PT_MoreFilesNeeded(SINT8 node) // Negative response of client join request void PT_ServerRefuse(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (server && serverrunning) { // But wait I thought I'm the server? Net_CloseConnection(node); @@ -1435,6 +1441,7 @@ void PT_ServerRefuse(SINT8 node) // Positive response of client join request void PT_ServerCFG(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (server && serverrunning && node != servernode) { // but wait I thought I'm the server? Net_CloseConnection(node); diff --git a/src/netcode/d_clisrv.c b/src/netcode/d_clisrv.c index cd442bd9c8d07b135dfb636bc0a198ee5d9cfb30..02b991fc3d6d12374cd9aea40930981f28ca1d81 100644 --- a/src/netcode/d_clisrv.c +++ b/src/netcode/d_clisrv.c @@ -640,6 +640,7 @@ void CL_RemovePlayer(INT32 playernum, kickreason_t reason) // void D_QuitNetGame(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); mousegrabbedbylua = true; I_UpdateMouseGrab(); @@ -864,6 +865,7 @@ static void PT_ServerShutdown(SINT8 node) static void PT_Login(SINT8 node, INT32 netconsole) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); (void)node; if (client) @@ -997,6 +999,7 @@ If they're not lagging, decrement the timer by 1. Of course, reset all of this i static inline void PingUpdate(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); boolean laggers[MAXPLAYERS]; UINT8 numlaggers = 0; memset(laggers, 0, sizeof(boolean) * MAXPLAYERS); @@ -1070,6 +1073,7 @@ static inline void PingUpdate(void) static void PT_Ping(SINT8 node, INT32 netconsole) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); // Only accept PT_PING from the server. if (node != servernode) { @@ -1112,6 +1116,7 @@ static void PT_BasicKeepAlive(SINT8 node, INT32 netconsole) // Used during wipes to tell the server that a node is still connected static void CL_SendClientKeepAlive(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); netbuffer->packettype = PT_BASICKEEPALIVE; HSendPacket(servernode, false, 0, 0); @@ -1119,6 +1124,7 @@ static void CL_SendClientKeepAlive(void) static void SV_SendServerKeepAlive(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); for (INT32 n = 1; n < MAXNETNODES; n++) { if (netnodes[n].ingame) @@ -1139,6 +1145,7 @@ static void SV_SendServerKeepAlive(void) */ static void HandlePacketFromAwayNode(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (node != servernode) DEBFILE(va("Received packet from unknown host %d\n", node)); @@ -1178,6 +1185,7 @@ static void HandlePacketFromAwayNode(SINT8 node) */ static void HandlePacketFromPlayer(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); INT32 netconsole; if (dedicated && node == 0) diff --git a/src/netcode/d_clisrv.h b/src/netcode/d_clisrv.h index 86af61e9e02eb9528b759ce635970a96e3a28ee4..b7f682e18510f5fdbd67387a37f3a9fdb578dec8 100644 --- a/src/netcode/d_clisrv.h +++ b/src/netcode/d_clisrv.h @@ -34,9 +34,6 @@ void Command_Numnodes(void); extern INT32 mapchangepending; -// Points inside doomcom -extern doomdata_t *netbuffer; - #define BASEPACKETSIZE offsetof(doomdata_t, u) #define BASESERVERTICSSIZE offsetof(doomdata_t, u.serverpak.cmds[0]) diff --git a/src/netcode/d_net.c b/src/netcode/d_net.c index 3b151f20d18bd156b5385b500267244513e32610..04e0d3bc16d915af2cf83e6e5997e9408f967961 100644 --- a/src/netcode/d_net.c +++ b/src/netcode/d_net.c @@ -54,8 +54,6 @@ INT16 extratics; /// \brief network packet doomcom_t *doomcom = NULL; -/// \brief network packet data, points inside doomcom -doomdata_t *netbuffer = NULL; #ifdef DEBUGFILE FILE *debugfile = NULL; // put some net info in a file during the game @@ -198,6 +196,7 @@ FUNCMATH static inline INT32 cmpack(UINT8 a, UINT8 b) */ static boolean GetFreeAcknum(UINT8 *freeack) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); node_t *node = &nodes[doomcom->remotenode]; INT32 numfreeslot = 0; INT32 i; @@ -265,6 +264,7 @@ static void RemoveAck(node_t *node, INT32 i) // We have got a packet, proceed the ack request and ack return static boolean Processackpak(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); boolean goodpacket = true; node_t *node = &nodes[doomcom->remotenode]; @@ -340,6 +340,7 @@ void Net_ConnectionTimeout(INT32 node) // Resend the data if needed void Net_AckTicker(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); for (INT32 nodei = 0; nodei < numnetnodes; nodei++) { for (INT32 i = 0; i < MAXACKPACKETS; i++) @@ -460,6 +461,7 @@ static void InitAck(void) // remove a node, clear all ack from this node and reset askret void Net_CloseConnection(INT32 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); boolean forceclose = (node & FORCECLOSE) != 0; if (node == -1) @@ -516,6 +518,7 @@ void Net_CloseConnection(INT32 node) // static UINT32 NetbufferChecksum(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); UINT32 c = 0x1234567; const INT32 l = doomcom->datalength - 4; const UINT8 *buf = (UINT8 *)netbuffer + 4; @@ -609,6 +612,7 @@ static const char *packettypename[NUMPACKETTYPE] = static void DebugPrintpacket(const char *header) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); fprintf(debugfile, "%-12s (node %d,ack %d,ackret %d,size %d) type(%d) : %s\n", header, doomcom->remotenode, netbuffer->ack, netbuffer->ackreturn, doomcom->datalength, netbuffer->packettype, packettypename[netbuffer->packettype]); @@ -770,6 +774,7 @@ void Command_Droprate(void) static boolean ShouldDropPacket(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); return (packetdropquantity[netbuffer->packettype]) || (packetdroprate != 0 && rand() < (((double)RAND_MAX) * (packetdroprate / 100.f))) || packetdroprate == 100; } @@ -780,6 +785,7 @@ static boolean ShouldDropPacket(void) // boolean HSendPacket(INT32 node, boolean reliable, UINT8 acknum, size_t packetlength) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); doomcom->datalength = (INT16)(packetlength + BASEPACKETSIZE); if (node == 0) // Packet is to go back to us { @@ -870,6 +876,7 @@ boolean HSendPacket(INT32 node, boolean reliable, UINT8 acknum, size_t packetlen // boolean HGetPacket(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); //boolean nodejustjoined; // Get a packet from self @@ -1076,8 +1083,6 @@ boolean D_CheckNetGame(void) if (numnetnodes > MAXNETNODES) I_Error("Too many nodes (%d), max:%d", numnetnodes, MAXNETNODES); - netbuffer = (doomdata_t *)(void *)&doomcom->data; - #ifdef DEBUGFILE if (M_CheckParm("-debugfile")) { diff --git a/src/netcode/d_netcmd.c b/src/netcode/d_netcmd.c index 90ffe81d720778d9cb6deb6b54e4df2528b8a20c..85b1236110c8e2955a7cf52f0786ef6713144869 100644 --- a/src/netcode/d_netcmd.c +++ b/src/netcode/d_netcmd.c @@ -37,6 +37,7 @@ #include "d_clisrv.h" #include "server_connection.h" #include "net_command.h" +#include "i_net.h" #include "d_net.h" #include "../v_video.h" #include "../d_main.h" @@ -3009,6 +3010,7 @@ static void Command_Login_f(void) CONS_Alert(CONS_NOTICE, "Remote administration commands are not supported in this build.\n"); #else const char *pw; + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (!netgame) { diff --git a/src/netcode/d_netfil.c b/src/netcode/d_netfil.c index de354f0df6ad394da219e50bfabd03ea5f93e464..a341279118b877ec999b0ebfc363eda0ffca49e2 100644 --- a/src/netcode/d_netfil.c +++ b/src/netcode/d_netfil.c @@ -166,6 +166,7 @@ enum */ UINT8 *PutFileNeeded(UINT16 firstfile) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); UINT8 count = 0; UINT8 *p_start = netbuffer->packettype == PT_MOREFILESNEEDED ? netbuffer->u.filesneededcfg.files : netbuffer->u.serverinfo.fileneeded; UINT8 *p = p_start; @@ -361,6 +362,7 @@ void CL_AbortDownloadResume(void) */ boolean CL_SendFileRequest(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); char *p; INT64 totalfreespaceneeded = 0, availablefreespace; @@ -428,6 +430,7 @@ boolean CL_SendFileRequest(void) // get request filepak and put it on the send queue void PT_RequestFile(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); UINT8 *p = netbuffer->u.textcmd; if (client || !cv_downloading.value) @@ -649,6 +652,7 @@ void AddLuaFileTransfer(const char *filename, const char *mode) static void SV_PrepareSendLuaFileToNextNode(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); UINT8 success = 1; // Find a client to send the file to @@ -753,6 +757,7 @@ void SV_AbortLuaFileTransfer(INT32 node) void CL_PrepareDownloadLuaFile(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); // If there is no transfer in the list, this normally means the server // called io.open before us, so we have to wait until we call it too if (!luafiletransfers) @@ -1004,6 +1009,7 @@ static void SV_EndFileSend(INT32 node) */ void FileSendTicker(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); static INT32 currentnode = 0; filetx_pak *p; size_t fragmentsize; @@ -1154,6 +1160,7 @@ void FileSendTicker(void) void PT_FileAck(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); fileack_pak *packet = &netbuffer->u.fileack; filetran_t *trans = &transfer[node]; @@ -1208,6 +1215,7 @@ void PT_FileAck(SINT8 node) void PT_FileReceived(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); filetx_t *trans = transfer[node].txlist; if (server && trans && netbuffer->u.filereceived == trans->fileid) @@ -1216,6 +1224,7 @@ void PT_FileReceived(SINT8 node) static void SendAckPacket(fileack_pak *packet, UINT8 fileid) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); size_t packetsize; packetsize = sizeof(*packet) + packet->numsegments * sizeof(*packet->segments); @@ -1295,6 +1304,7 @@ void FileReceiveTicker(void) static void OpenNewFileForDownload(fileneeded_t *file, const char *filename) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); file->file = fopen(filename, "wb"); if (!file->file) I_Error("Can't create file %s: %s", filename, strerror(errno)); @@ -1310,6 +1320,7 @@ static void OpenNewFileForDownload(fileneeded_t *file, const char *filename) void PT_FileFragment(SINT8 node, INT32 netconsole) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (netnodes[node].ingame) { // Only accept PT_FILEFRAGMENT from the server. diff --git a/src/netcode/gamestate.c b/src/netcode/gamestate.c index b8bd6e46a7491f8c1dc45f6e6aacf225d26f6844..9575fb67d6166562162259592d3acdb30fa8353e 100644 --- a/src/netcode/gamestate.c +++ b/src/netcode/gamestate.c @@ -155,6 +155,7 @@ void SV_SavedGame(void) void CL_LoadReceivedSavegame(boolean reloading) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); save_t savebuffer; size_t decompressedlen; char tmpsave[256]; @@ -251,6 +252,7 @@ void CL_ReloadReceivedSavegame(void) void Command_ResendGamestate(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); SINT8 playernum; if (COM_Argc() == 1) @@ -297,6 +299,7 @@ void PT_ReceivedGamestate(SINT8 node) void PT_WillResendGamestate(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); (void)node; char tmpsave[256]; diff --git a/src/netcode/i_net.h b/src/netcode/i_net.h index 11da77ce52b0b88035d2058372f2b1fe4ea638ee..a2598e4739a492224adf7d7e95ce83f785ab14d9 100644 --- a/src/netcode/i_net.h +++ b/src/netcode/i_net.h @@ -48,6 +48,8 @@ typedef struct char data[MAXPACKETLENGTH]; } ATTRPACK doomcom_t; +#define DOOMCOM_DATA(d) (doomdata_t *)&(d)->data + #if defined(_MSC_VER) #pragma pack() #endif diff --git a/src/netcode/net_command.c b/src/netcode/net_command.c index 91813fe484268d95263807d621c8d5099da4f0ab..41bfa3116c916b5f4510dde0028d6cdcbc0a8735 100644 --- a/src/netcode/net_command.c +++ b/src/netcode/net_command.c @@ -304,6 +304,7 @@ size_t TotalTextCmdPerTic(tic_t tic) void PT_TextCmd(SINT8 node, INT32 netconsole) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (client) return; @@ -410,6 +411,7 @@ void CL_CopyNetCommandsFromServerPacket(tic_t tic, UINT8 **buf) void CL_SendNetCommands(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); // Send extra data if needed if (localtextcmd[0]) { diff --git a/src/netcode/server_connection.c b/src/netcode/server_connection.c index cff83796a10ef59417c772161ddeb124570a45ac..c0fa7dc8202f9610f57853e7b6b04cc662b5b515 100644 --- a/src/netcode/server_connection.c +++ b/src/netcode/server_connection.c @@ -95,6 +95,7 @@ GetRefuseReason (INT32 node) static void SV_SendServerInfo(INT32 node, tic_t servertime) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); UINT8 *p; netbuffer->packettype = PT_SERVERINFO; @@ -173,6 +174,7 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) static void SV_SendPlayerInfo(INT32 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); netbuffer->packettype = PT_PLAYERINFO; for (UINT8 i = 0; i < MAXPLAYERS; i++) @@ -240,6 +242,7 @@ static void SV_SendPlayerInfo(INT32 node) */ static boolean SV_SendServerConfig(INT32 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); boolean waspacketsent; netbuffer->packettype = PT_SERVERCFG; @@ -349,6 +352,7 @@ static void SV_AddPlayer(SINT8 node, const char *name) static void SV_SendRefuse(INT32 node, const char *reason) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); strcpy(netbuffer->u.serverrefuse.reason, reason); netbuffer->packettype = PT_SERVERREFUSE; @@ -359,6 +363,7 @@ static void SV_SendRefuse(INT32 node, const char *reason) static const char * GetRefuseMessage (SINT8 node, INT32 rejoinernum) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); clientconfig_pak *cc = &netbuffer->u.clientcfg; boolean rejoining = (rejoinernum != -1); @@ -435,6 +440,7 @@ GetRefuseMessage (SINT8 node, INT32 rejoinernum) */ void PT_ClientJoin(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); char names[MAXSPLITSCREENPLAYERS][MAXPLAYERNAME + 1]; INT32 numplayers = netbuffer->u.clientcfg.localplayers; INT32 rejoinernum; @@ -494,6 +500,7 @@ void PT_AskInfoViaMS(SINT8 node) void PT_TellFilesNeeded(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (server && serverrunning) { UINT8 *p; @@ -513,6 +520,7 @@ void PT_TellFilesNeeded(SINT8 node) void PT_AskInfo(SINT8 node) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); if (server && serverrunning) { SV_SendServerInfo(node, (tic_t)LONG(netbuffer->u.askinfo.time)); diff --git a/src/netcode/tic_command.c b/src/netcode/tic_command.c index 66f6bb4252bb5a040700380ec73cb1c03786660b..cd224ba1b36e64fa1973b0aef68bb1a3b566f9c7 100644 --- a/src/netcode/tic_command.c +++ b/src/netcode/tic_command.c @@ -115,6 +115,7 @@ static void CheckTiccmdHacks(INT32 playernum, tic_t tic) static void CheckConsistancy(SINT8 nodenum, tic_t tic) { netnode_t *node = &netnodes[nodenum]; + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); INT16 neededconsistancy = consistancy[tic%BACKUPTICS]; INT16 clientconsistancy = SHORT(netbuffer->u.clientpak.consistancy); @@ -151,6 +152,7 @@ static void CheckConsistancy(SINT8 nodenum, tic_t tic) void PT_ClientCmd(SINT8 nodenum, INT32 netconsole) { netnode_t *node = &netnodes[nodenum]; + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); tic_t realend, realstart; if (client) @@ -213,6 +215,7 @@ void PT_ClientCmd(SINT8 nodenum, INT32 netconsole) void PT_ServerTics(SINT8 node, INT32 netconsole) { tic_t realend, realstart; + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); servertics_pak *packet = &netbuffer->u.serverpak; if (!netnodes[node].ingame) @@ -271,6 +274,7 @@ void CL_SendClientCmd(void) { size_t packetsize = 0; boolean mis = false; + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); netbuffer->packettype = PT_CLIENTCMD; @@ -355,6 +359,7 @@ static tic_t SV_CalculateNumTicsForPacket(SINT8 nodenum, tic_t firsttic, tic_t l // Sends tic/net commands from firstticstosend to maketic-1 void SV_SendTics(void) { + doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); tic_t realfirsttic, lasttictosend; // Send to all clients except yourself