diff --git a/qw/include/info.h b/include/info.h similarity index 100% rename from qw/include/info.h rename to include/info.h diff --git a/nq/include/link.h b/include/link.h similarity index 100% rename from nq/include/link.h rename to include/link.h diff --git a/qw/include/msg.h b/include/msg.h similarity index 66% rename from qw/include/msg.h rename to include/msg.h index 0f06c0255..4ef7532ad 100644 --- a/qw/include/msg.h +++ b/include/msg.h @@ -30,8 +30,6 @@ #include "sizebuf.h" -extern struct usercmd_s nullcmd; - void MSG_WriteChar (sizebuf_t *sb, int c); void MSG_WriteByte (sizebuf_t *sb, int c); void MSG_WriteShort (sizebuf_t *sb, int c); @@ -41,24 +39,25 @@ void MSG_WriteString (sizebuf_t *sb, char *s); void MSG_WriteCoord (sizebuf_t *sb, float f); void MSG_WriteAngle (sizebuf_t *sb, float f); void MSG_WriteAngle16 (sizebuf_t *sb, float f); -void MSG_WriteDeltaUsercmd (sizebuf_t *sb, struct usercmd_s *from, struct usercmd_s *cmd); -extern int msg_readcount; -extern qboolean msg_badread; // set if a read goes beyond end of message +typedef struct msg_s { + int readcount; + qboolean badread; // set if a read goes beyond end of message + sizebuf_t *message; +} msg_t; -void MSG_BeginReading (void); -int MSG_GetReadCount(void); -int MSG_ReadChar (void); -int MSG_ReadByte (void); -int MSG_ReadShort (void); -int MSG_ReadLong (void); -float MSG_ReadFloat (void); -char *MSG_ReadString (void); -char *MSG_ReadStringLine (void); +void MSG_BeginReading (msg_t *msg); +int MSG_GetReadCount(msg_t *msg); +int MSG_ReadChar (msg_t *msg); +int MSG_ReadByte (msg_t *msg); +int MSG_ReadShort (msg_t *msg); +int MSG_ReadLong (msg_t *msg); +float MSG_ReadFloat (msg_t *msg); +char *MSG_ReadString (msg_t *msg); +char *MSG_ReadStringLine (msg_t *msg); -float MSG_ReadCoord (void); -float MSG_ReadAngle (void); -float MSG_ReadAngle16 (void); -void MSG_ReadDeltaUsercmd (struct usercmd_s *from, struct usercmd_s *cmd); +float MSG_ReadCoord (msg_t *msg); +float MSG_ReadAngle (msg_t *msg); +float MSG_ReadAngle16 (msg_t *msg); #endif diff --git a/libs/.gitignore b/libs/.gitignore index 3dda72986..9a250aeca 100644 --- a/libs/.gitignore +++ b/libs/.gitignore @@ -1,2 +1,3 @@ +.vimrc Makefile.in Makefile diff --git a/libs/util/.gitignore b/libs/util/.gitignore index e440fafda..6695075a0 100644 --- a/libs/util/.gitignore +++ b/libs/util/.gitignore @@ -1,3 +1,4 @@ +.vimrc Makefile.in Makefile .deps diff --git a/libs/util/Makefile.am b/libs/util/Makefile.am index 8fca18521..afc4461f1 100644 --- a/libs/util/Makefile.am +++ b/libs/util/Makefile.am @@ -1,6 +1,6 @@ noinst_LIBRARIES = libqfutil.a -libqfutil_a_SOURCES = checksum.c cmd.c crc.c cvar.c hash.c mdfour.c qfplist.c sizebuf.c va.c zone.c +libqfutil_a_SOURCES = checksum.c cmd.c crc.c cvar.c hash.c info.c link.c mdfour.c msg.c qargs.c qendian.c qfplist.c sizebuf.c va.c zone.c all-local: ../libqfutil.a diff --git a/qw/source/info.c b/libs/util/info.c similarity index 100% rename from qw/source/info.c rename to libs/util/info.c diff --git a/qw/source/link.c b/libs/util/link.c similarity index 100% rename from qw/source/link.c rename to libs/util/link.c diff --git a/libs/util/msg.c b/libs/util/msg.c new file mode 100644 index 000000000..cf99d4700 --- /dev/null +++ b/libs/util/msg.c @@ -0,0 +1,315 @@ +/* + msg.c + + (description) + + Copyright (C) 1996-1997 Id Software, Inc. + + 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 2 + 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, write to: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + + $Id$ +*/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "msg.h" +#include "qendian.h" +#include "sys.h" + +/* + MESSAGE IO FUNCTIONS + + Handles byte ordering and avoids alignment errors +*/ + +// +// writing functions +// + +void +MSG_WriteChar (sizebuf_t *sb, int c) +{ + byte *buf; + +#ifdef PARANOID + if (c < -128 || c > 127) + Sys_Error ("MSG_WriteChar: range error"); +#endif + + buf = SZ_GetSpace (sb, 1); + buf[0] = c; +} + +void +MSG_WriteByte (sizebuf_t *sb, int c) +{ + byte *buf; + +#ifdef PARANOID + if (c < 0 || c > 255) + Sys_Error ("MSG_WriteByte: range error"); +#endif + + buf = SZ_GetSpace (sb, 1); + buf[0] = c; +} + +void +MSG_WriteShort (sizebuf_t *sb, int c) +{ + byte *buf; + +#ifdef PARANOID + if (c < ((short) 0x8000) || c > (short) 0x7fff) + Sys_Error ("MSG_WriteShort: range error"); +#endif + + buf = SZ_GetSpace (sb, 2); + buf[0] = c & 0xff; + buf[1] = c >> 8; +} + +void +MSG_WriteLong (sizebuf_t *sb, int c) +{ + byte *buf; + + buf = SZ_GetSpace (sb, 4); + buf[0] = c & 0xff; + buf[1] = (c >> 8) & 0xff; + buf[2] = (c >> 16) & 0xff; + buf[3] = c >> 24; +} + +void +MSG_WriteFloat (sizebuf_t *sb, float f) +{ + union { + float f; + int l; + } dat; + + + dat.f = f; + dat.l = LittleLong (dat.l); + + SZ_Write (sb, &dat.l, 4); +} + +void +MSG_WriteString (sizebuf_t *sb, char *s) +{ + if (!s) + SZ_Write (sb, "", 1); + else + SZ_Write (sb, s, strlen (s) + 1); +} + +void +MSG_WriteCoord (sizebuf_t *sb, float f) +{ + MSG_WriteShort (sb, (int) (f * 8)); +} + +void +MSG_WriteAngle (sizebuf_t *sb, float f) +{ + MSG_WriteByte (sb, (int) (f * 256 / 360) & 255); +} + +void +MSG_WriteAngle16 (sizebuf_t *sb, float f) +{ + MSG_WriteShort (sb, (int) (f * 65536 / 360) & 65535); +} + + +// +// reading functions +// + +void +MSG_BeginReading (msg_t *msg) +{ + msg->readcount = 0; + msg->badread = false; +} + +int +MSG_GetReadCount (msg_t *msg) +{ + return msg->readcount; +} + +// returns -1 and sets msg->badread if no more characters are available +int +MSG_ReadChar (msg_t *msg) +{ + int c; + + if (msg->readcount + 1 > msg->message->cursize) { + msg->badread = true; + return -1; + } + + c = (signed char) msg->message->data[msg->readcount]; + msg->readcount++; + + return c; +} + +int +MSG_ReadByte (msg_t *msg) +{ + int c; + + if (msg->readcount + 1 > msg->message->cursize) { + msg->badread = true; + return -1; + } + + c = (unsigned char) msg->message->data[msg->readcount]; + msg->readcount++; + + return c; +} + +int +MSG_ReadShort (msg_t *msg) +{ + int c; + + if (msg->readcount + 2 > msg->message->cursize) { + msg->badread = true; + return -1; + } + + c = (short) (msg->message->data[msg->readcount] + + (msg->message->data[msg->readcount + 1] << 8)); + + msg->readcount += 2; + + return c; +} + +int +MSG_ReadLong (msg_t *msg) +{ + int c; + + if (msg->readcount + 4 > msg->message->cursize) { + msg->badread = true; + return -1; + } + + c = msg->message->data[msg->readcount] + + (msg->message->data[msg->readcount + 1] << 8) + + (msg->message->data[msg->readcount + 2] << 16) + + (msg->message->data[msg->readcount + 3] << 24); + + msg->readcount += 4; + + return c; +} + +float +MSG_ReadFloat (msg_t *msg) +{ + union { + byte b[4]; + float f; + int l; + } dat; + + dat.b[0] = msg->message->data[msg->readcount]; + dat.b[1] = msg->message->data[msg->readcount + 1]; + dat.b[2] = msg->message->data[msg->readcount + 2]; + dat.b[3] = msg->message->data[msg->readcount + 3]; + msg->readcount += 4; + + dat.l = LittleLong (dat.l); + + return dat.f; +} + +char * +MSG_ReadString (msg_t *msg) +{ + static char string[2048]; + int l, c; + + l = 0; + do { + c = MSG_ReadChar (msg); + if (c == -1 || c == 0) + break; + string[l] = c; + l++; + } while (l < sizeof (string) - 1); + + string[l] = 0; + + return string; +} + +char * +MSG_ReadStringLine (msg_t *msg) +{ + static char string[2048]; + int l, c; + + l = 0; + do { + c = MSG_ReadChar (msg); + if (c == -1 || c == 0 || c == '\n') + break; + string[l] = c; + l++; + } while (l < sizeof (string) - 1); + + string[l] = 0; + + return string; +} + +float +MSG_ReadCoord (msg_t *msg) +{ + return MSG_ReadShort (msg) * (1.0 / 8); +} + +float +MSG_ReadAngle (msg_t *msg) +{ + return MSG_ReadChar (msg) * (360.0 / 256); +} + +float +MSG_ReadAngle16 (msg_t *msg) +{ + return MSG_ReadShort (msg) * (360.0 / 65536); +} diff --git a/qw/source/qargs.c b/libs/util/qargs.c similarity index 97% rename from qw/source/qargs.c rename to libs/util/qargs.c index d1c3b5f1c..d4044c119 100644 --- a/qw/source/qargs.c +++ b/libs/util/qargs.c @@ -43,16 +43,12 @@ #include #include -#include "client.h" -#include "commdef.h" #include "console.h" #include "cmd.h" #include "crc.h" #include "qtypes.h" #include "sys.h" -usercmd_t nullcmd; // guarenteed to be zero - static char **largv; static char *argvdummy = " "; diff --git a/qw/source/qendian.c b/libs/util/qendian.c similarity index 100% rename from qw/source/qendian.c rename to libs/util/qendian.c diff --git a/nq/include/info.h b/nq/include/info.h deleted file mode 100644 index b39615317..000000000 --- a/nq/include/info.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - info.h - - (server|local)info definitions and prototypes - - Copyright (C) 1996-1997 Id Software, Inc. - - 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 2 - 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, write to: - - Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA - - $Id$ -*/ - -#ifndef _INFO_H -#define _INFO_H - -#define MAX_INFO_STRING 512 -#define MAX_SERVERINFO_STRING 512 -#define MAX_LOCALINFO_STRING 32768 - -char *Info_ValueForKey (char *s, char *key); -void Info_RemoveKey (char *s, char *key); -void Info_RemovePrefixedKeys (char *start, char prefix); -void Info_SetValueForKey (char *s, char *key, char *value, int maxsize); -void Info_SetValueForStarKey (char *s, char *key, char *value, int maxsize); -void Info_Print (char *s); - -#endif // _INFO_H diff --git a/nq/include/msg.h b/nq/include/msg.h deleted file mode 100644 index 0f06c0255..000000000 --- a/nq/include/msg.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - msg.h - - (description) - - Copyright (C) 1996-1997 Id Software, Inc. - - 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 2 - 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, write to: - - Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA - - $Id$ -*/ -#ifndef _MSG_H -#define _MSG_H - -#include "sizebuf.h" - -extern struct usercmd_s nullcmd; - -void MSG_WriteChar (sizebuf_t *sb, int c); -void MSG_WriteByte (sizebuf_t *sb, int c); -void MSG_WriteShort (sizebuf_t *sb, int c); -void MSG_WriteLong (sizebuf_t *sb, int c); -void MSG_WriteFloat (sizebuf_t *sb, float f); -void MSG_WriteString (sizebuf_t *sb, char *s); -void MSG_WriteCoord (sizebuf_t *sb, float f); -void MSG_WriteAngle (sizebuf_t *sb, float f); -void MSG_WriteAngle16 (sizebuf_t *sb, float f); -void MSG_WriteDeltaUsercmd (sizebuf_t *sb, struct usercmd_s *from, struct usercmd_s *cmd); - -extern int msg_readcount; -extern qboolean msg_badread; // set if a read goes beyond end of message - -void MSG_BeginReading (void); -int MSG_GetReadCount(void); -int MSG_ReadChar (void); -int MSG_ReadByte (void); -int MSG_ReadShort (void); -int MSG_ReadLong (void); -float MSG_ReadFloat (void); -char *MSG_ReadString (void); -char *MSG_ReadStringLine (void); - -float MSG_ReadCoord (void); -float MSG_ReadAngle (void); -float MSG_ReadAngle16 (void); -void MSG_ReadDeltaUsercmd (struct usercmd_s *from, struct usercmd_s *cmd); - -#endif diff --git a/nq/include/net.h b/nq/include/net.h index 77c2f1375..35f01491b 100644 --- a/nq/include/net.h +++ b/nq/include/net.h @@ -277,7 +277,7 @@ qboolean IsID(struct qsockaddr *addr); //============================================================================ extern double net_time; -extern sizebuf_t net_message; +extern struct msg_s *net_message; extern int net_activeconnections; void NET_Init (void); diff --git a/nq/source/Makefile.am b/nq/source/Makefile.am index 8b8679fc0..81313dff9 100644 --- a/nq/source/Makefile.am +++ b/nq/source/Makefile.am @@ -51,8 +51,8 @@ common_ASM= sys_ia32.S worlda.S $(math_ASM) common_SOURCES= mathlib.c wad.c world.c \ model.c model_alias.c model_brush.c model_sprite.c \ - msg.c qendian.c qargs.c quakefs.c \ - quakeio.c link.c com.c \ + quakefs.c \ + quakeio.c com.c \ $(common_ASM) # diff --git a/nq/source/cl_demo.c b/nq/source/cl_demo.c index 34443e724..e35b94702 100644 --- a/nq/source/cl_demo.c +++ b/nq/source/cl_demo.c @@ -90,14 +90,14 @@ void CL_WriteDemoMessage (void) int i; float f; - len = LittleLong (net_message.cursize); + len = LittleLong (net_message->message->cursize); Qwrite (cls.demofile, &len, 4); for (i=0 ; i<3 ; i++) { f = LittleFloat (cl.viewangles[i]); Qwrite (cls.demofile, &f, 4); } - Qwrite (cls.demofile, net_message.data, net_message.cursize); + Qwrite (cls.demofile, net_message->message->data, net_message->message->cursize); Qflush (cls.demofile); } @@ -135,7 +135,7 @@ int CL_GetMessage (void) } // get the next message - Qread (cls.demofile, &net_message.cursize, 4); + Qread (cls.demofile, &net_message->message->cursize, 4); VectorCopy (cl.mviewangles[0], cl.mviewangles[1]); for (i=0 ; i<3 ; i++) { @@ -143,11 +143,11 @@ int CL_GetMessage (void) cl.mviewangles[0][i] = LittleFloat (f); } - net_message.cursize = LittleLong (net_message.cursize); - if (net_message.cursize > MAX_MSGLEN) + net_message->message->cursize = LittleLong (net_message->message->cursize); + if (net_message->message->cursize > MAX_MSGLEN) Sys_Error ("Demo message > MAX_MSGLEN"); - r = Qread (cls.demofile, net_message.data, net_message.cursize); - if (r != net_message.cursize) + r = Qread (cls.demofile, net_message->message->data, net_message->message->cursize); + if (r != net_message->message->cursize) { CL_StopPlayback (); return 0; @@ -164,7 +164,7 @@ int CL_GetMessage (void) return r; // discard nop keepalive message - if (net_message.cursize == 1 && net_message.data[0] == svc_nop) + if (net_message->message->cursize == 1 && net_message->message->data[0] == svc_nop) Con_Printf ("<-- server to client keepalive\n"); else break; @@ -196,8 +196,8 @@ void CL_Stop_f (void) } // write a disconnect message to the demo file - SZ_Clear (&net_message); - MSG_WriteByte (&net_message, svc_disconnect); + SZ_Clear (net_message->message); + MSG_WriteByte (net_message->message, svc_disconnect); CL_WriteDemoMessage (); // finish up diff --git a/nq/source/cl_parse.c b/nq/source/cl_parse.c index d2d868f30..9ed589493 100644 --- a/nq/source/cl_parse.c +++ b/nq/source/cl_parse.c @@ -132,20 +132,20 @@ void CL_ParseStartSoundPacket(void) float attenuation; int i; - field_mask = MSG_ReadByte(); + field_mask = MSG_ReadByte(net_message); if (field_mask & SND_VOLUME) - volume = MSG_ReadByte (); + volume = MSG_ReadByte (net_message); else volume = DEFAULT_SOUND_PACKET_VOLUME; if (field_mask & SND_ATTENUATION) - attenuation = MSG_ReadByte () / 64.0; + attenuation = MSG_ReadByte (net_message) / 64.0; else attenuation = DEFAULT_SOUND_PACKET_ATTENUATION; - channel = MSG_ReadShort (); - sound_num = MSG_ReadByte (); + channel = MSG_ReadShort (net_message); + sound_num = MSG_ReadByte (net_message); ent = channel >> 3; channel &= 7; @@ -154,7 +154,7 @@ void CL_ParseStartSoundPacket(void) Host_Error ("CL_ParseStartSoundPacket: ent = %i", ent); for (i=0 ; i<3 ; i++) - pos[i] = MSG_ReadCoord (); + pos[i] = MSG_ReadCoord (net_message); S_StartSound (ent, channel, cl.sound_precache[sound_num], pos, volume/255.0, attenuation); } @@ -181,8 +181,8 @@ void CL_KeepaliveMessage (void) return; // read messages from server, should just be nops - old = net_message; - memcpy (olddata, net_message.data, net_message.cursize); + old = *net_message->message; + memcpy (olddata, net_message->message->data, net_message->message->cursize); do { @@ -197,14 +197,14 @@ void CL_KeepaliveMessage (void) Host_Error ("CL_KeepaliveMessage: received a message"); break; case 2: - if (MSG_ReadByte() != svc_nop) + if (MSG_ReadByte(net_message) != svc_nop) Host_Error ("CL_KeepaliveMessage: datagram wasn't a nop"); break; } } while (ret); - net_message = old; - memcpy (net_message.data, olddata, net_message.cursize); + *net_message->message = old; + memcpy (net_message->message->data, olddata, net_message->message->cursize); // check time time = Sys_DoubleTime (); @@ -240,7 +240,7 @@ void CL_ParseServerInfo (void) CL_ClearState (); // parse protocol version number - i = MSG_ReadLong (); + i = MSG_ReadLong (net_message); if (i != PROTOCOL_VERSION) { Con_Printf ("Server returned version %i, not %i", i, PROTOCOL_VERSION); @@ -248,7 +248,7 @@ void CL_ParseServerInfo (void) } // parse maxclients - cl.maxclients = MSG_ReadByte (); + cl.maxclients = MSG_ReadByte (net_message); if (cl.maxclients < 1 || cl.maxclients > MAX_SCOREBOARD) { Con_Printf("Bad maxclients (%u) from server\n", cl.maxclients); @@ -257,10 +257,10 @@ void CL_ParseServerInfo (void) cl.scores = Hunk_AllocName (cl.maxclients*sizeof(*cl.scores), "scores"); // parse gametype - cl.gametype = MSG_ReadByte (); + cl.gametype = MSG_ReadByte (net_message); // parse signon message - str = MSG_ReadString (); + str = MSG_ReadString (net_message); strncpy (cl.levelname, str, sizeof(cl.levelname)-1); // seperate the printfs so the server message can have a color @@ -277,7 +277,7 @@ void CL_ParseServerInfo (void) memset (cl.model_precache, 0, sizeof(cl.model_precache)); for (nummodels=1 ; ; nummodels++) { - str = MSG_ReadString (); + str = MSG_ReadString (net_message); if (!str[0]) break; if (nummodels==MAX_MODELS) @@ -293,7 +293,7 @@ void CL_ParseServerInfo (void) memset (cl.sound_precache, 0, sizeof(cl.sound_precache)); for (numsounds=1 ; ; numsounds++) { - str = MSG_ReadString (); + str = MSG_ReadString (net_message); if (!str[0]) break; if (numsounds==MAX_SOUNDS) @@ -369,14 +369,14 @@ void CL_ParseUpdate (int bits) if (bits & U_MOREBITS) { - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); bits |= (i<<8); } if (bits & U_LONGENTITY) - num = MSG_ReadShort (); + num = MSG_ReadShort (net_message); else - num = MSG_ReadByte (); + num = MSG_ReadByte (net_message); ent = CL_EntityNum (num); @@ -393,7 +393,7 @@ if (bits&(1<= MAX_MODELS) Host_Error ("CL_ParseModel: bad modnum"); } @@ -420,12 +420,12 @@ if (bits&(1<frame = MSG_ReadByte (); + ent->frame = MSG_ReadByte (net_message); else ent->frame = ent->baseline.frame; if (bits & U_COLORMAP) - i = MSG_ReadByte(); + i = MSG_ReadByte(net_message); else i = ent->baseline.colormap; if (!i) @@ -438,7 +438,7 @@ if (bits&(1<baseline.skin; if (skin != ent->skinnum) { @@ -448,7 +448,7 @@ if (bits&(1<effects = MSG_ReadByte(); + ent->effects = MSG_ReadByte(net_message); else ent->effects = ent->baseline.effects; @@ -457,29 +457,29 @@ if (bits&(1<msg_angles[0], ent->msg_angles[1]); if (bits & U_ORIGIN1) - ent->msg_origins[0][0] = MSG_ReadCoord (); + ent->msg_origins[0][0] = MSG_ReadCoord (net_message); else ent->msg_origins[0][0] = ent->baseline.origin[0]; if (bits & U_ANGLE1) - ent->msg_angles[0][0] = MSG_ReadAngle(); + ent->msg_angles[0][0] = MSG_ReadAngle(net_message); else ent->msg_angles[0][0] = ent->baseline.angles[0]; if (bits & U_ORIGIN2) - ent->msg_origins[0][1] = MSG_ReadCoord (); + ent->msg_origins[0][1] = MSG_ReadCoord (net_message); else ent->msg_origins[0][1] = ent->baseline.origin[1]; if (bits & U_ANGLE2) - ent->msg_angles[0][1] = MSG_ReadAngle(); + ent->msg_angles[0][1] = MSG_ReadAngle(net_message); else ent->msg_angles[0][1] = ent->baseline.angles[1]; if (bits & U_ORIGIN3) - ent->msg_origins[0][2] = MSG_ReadCoord (); + ent->msg_origins[0][2] = MSG_ReadCoord (net_message); else ent->msg_origins[0][2] = ent->baseline.origin[2]; if (bits & U_ANGLE3) - ent->msg_angles[0][2] = MSG_ReadAngle(); + ent->msg_angles[0][2] = MSG_ReadAngle(net_message); else ent->msg_angles[0][2] = ent->baseline.angles[2]; @@ -505,14 +505,14 @@ void CL_ParseBaseline (entity_t *ent) { int i; - ent->baseline.modelindex = MSG_ReadByte (); - ent->baseline.frame = MSG_ReadByte (); - ent->baseline.colormap = MSG_ReadByte(); - ent->baseline.skin = MSG_ReadByte(); + ent->baseline.modelindex = MSG_ReadByte (net_message); + ent->baseline.frame = MSG_ReadByte (net_message); + ent->baseline.colormap = MSG_ReadByte(net_message); + ent->baseline.skin = MSG_ReadByte(net_message); for (i=0 ; i<3 ; i++) { - ent->baseline.origin[i] = MSG_ReadCoord (); - ent->baseline.angles[i] = MSG_ReadAngle (); + ent->baseline.origin[i] = MSG_ReadCoord (net_message); + ent->baseline.angles[i] = MSG_ReadAngle (net_message); } } @@ -529,12 +529,12 @@ void CL_ParseClientdata (int bits) int i, j; if (bits & SU_VIEWHEIGHT) - cl.viewheight = MSG_ReadChar (); + cl.viewheight = MSG_ReadChar (net_message); else cl.viewheight = DEFAULT_VIEWHEIGHT; if (bits & SU_IDEALPITCH) - cl.idealpitch = MSG_ReadChar (); + cl.idealpitch = MSG_ReadChar (net_message); else cl.idealpitch = 0; @@ -542,17 +542,17 @@ void CL_ParseClientdata (int bits) for (i=0 ; i<3 ; i++) { if (bits & (SU_PUNCH1<int_val==2)Con_Printf ("%3i:%s\n", msg_readcount-1, x); +#define SHOWNET(x) if(cl_shownet->int_val==2)Con_Printf ("%3i:%s\n", net_message->readcount-1, x); /* ===================== @@ -737,7 +737,7 @@ void CL_ParseServerMessage (void) // if recording demos, copy the message out // if (cl_shownet->int_val == 1) - Con_Printf ("%i ",net_message.cursize); + Con_Printf ("%i ",net_message->message->cursize); else if (cl_shownet->int_val == 2) Con_Printf ("------------------\n"); @@ -745,14 +745,14 @@ void CL_ParseServerMessage (void) // // parse the message // - MSG_BeginReading (); + MSG_BeginReading (net_message); while (1) { - if (msg_badread) + if (net_message->badread) Host_Error ("CL_ParseServerMessage: Bad server message"); - cmd = MSG_ReadByte (); + cmd = MSG_ReadByte (net_message); if (cmd == -1) { @@ -783,16 +783,16 @@ void CL_ParseServerMessage (void) case svc_time: cl.mtime[1] = cl.mtime[0]; - cl.mtime[0] = MSG_ReadFloat (); + cl.mtime[0] = MSG_ReadFloat (net_message); break; case svc_clientdata: - i = MSG_ReadShort (); + i = MSG_ReadShort (net_message); CL_ParseClientdata (i); break; case svc_version: - i = MSG_ReadLong (); + i = MSG_ReadLong (net_message); if (i != PROTOCOL_VERSION) Host_Error ("CL_ParseServerMessage: Server is protocol %i instead of %i\n", i, PROTOCOL_VERSION); break; @@ -801,15 +801,15 @@ void CL_ParseServerMessage (void) Host_EndGame ("Server disconnected\n"); case svc_print: - Con_Printf ("%s", MSG_ReadString ()); + Con_Printf ("%s", MSG_ReadString (net_message)); break; case svc_centerprint: - SCR_CenterPrint (MSG_ReadString ()); + SCR_CenterPrint (MSG_ReadString (net_message)); break; case svc_stufftext: - Cbuf_AddText (MSG_ReadString ()); + Cbuf_AddText (MSG_ReadString (net_message)); break; case svc_damage: @@ -823,18 +823,18 @@ void CL_ParseServerMessage (void) case svc_setangle: for (i=0 ; i<3 ; i++) - cl.viewangles[i] = MSG_ReadAngle (); + cl.viewangles[i] = MSG_ReadAngle (net_message); break; case svc_setview: - cl.viewentity = MSG_ReadShort (); + cl.viewentity = MSG_ReadShort (net_message); break; case svc_lightstyle: - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= MAX_LIGHTSTYLES) Sys_Error ("svc_lightstyle > MAX_LIGHTSTYLES"); - strcpy (cl_lightstyle[i].map, MSG_ReadString()); + strcpy (cl_lightstyle[i].map, MSG_ReadString(net_message)); cl_lightstyle[i].length = strlen(cl_lightstyle[i].map); break; @@ -843,32 +843,32 @@ void CL_ParseServerMessage (void) break; case svc_stopsound: - i = MSG_ReadShort(); + i = MSG_ReadShort(net_message); S_StopSound(i>>3, i&7); break; case svc_updatename: Sbar_Changed (); - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatename > MAX_SCOREBOARD"); - strcpy (cl.scores[i].name, MSG_ReadString ()); + strcpy (cl.scores[i].name, MSG_ReadString (net_message)); break; case svc_updatefrags: Sbar_Changed (); - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatefrags > MAX_SCOREBOARD"); - cl.scores[i].frags = MSG_ReadShort (); + cl.scores[i].frags = MSG_ReadShort (net_message); break; case svc_updatecolors: Sbar_Changed (); - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatecolors > MAX_SCOREBOARD"); - cl.scores[i].colors = MSG_ReadByte (); + cl.scores[i].colors = MSG_ReadByte (net_message); CL_NewTranslation (i); break; @@ -877,7 +877,7 @@ void CL_ParseServerMessage (void) break; case svc_spawnbaseline: - i = MSG_ReadShort (); + i = MSG_ReadShort (net_message); // must use CL_EntityNum() to force cl.num_entities up CL_ParseBaseline (CL_EntityNum(i)); break; @@ -890,7 +890,7 @@ void CL_ParseServerMessage (void) case svc_setpause: { - cl.paused = MSG_ReadByte (); + cl.paused = MSG_ReadByte (net_message); if (cl.paused) { @@ -908,7 +908,7 @@ void CL_ParseServerMessage (void) break; case svc_signonnum: - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i <= cls.signon) Host_Error ("Received signon %i when at %i", i, cls.signon); cls.signon = i; @@ -924,10 +924,10 @@ void CL_ParseServerMessage (void) break; case svc_updatestat: - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i < 0 || i >= MAX_CL_STATS) Sys_Error ("svc_updatestat: %i is invalid", i); - cl.stats[i] = MSG_ReadLong ();; + cl.stats[i] = MSG_ReadLong (net_message);; break; case svc_spawnstaticsound: @@ -935,8 +935,8 @@ void CL_ParseServerMessage (void) break; case svc_cdtrack: - cl.cdtrack = MSG_ReadByte (); - cl.looptrack = MSG_ReadByte (); + cl.cdtrack = MSG_ReadByte (net_message); + cl.looptrack = MSG_ReadByte (net_message); if ( (cls.demoplayback || cls.demorecording) && (cls.forcetrack != -1) ) CDAudio_Play ((byte)cls.forcetrack, true); else @@ -953,14 +953,14 @@ void CL_ParseServerMessage (void) cl.intermission = 2; cl.completed_time = cl.time; vid.recalc_refdef = true; // go to full screen - SCR_CenterPrint (MSG_ReadString ()); + SCR_CenterPrint (MSG_ReadString (net_message)); break; case svc_cutscene: cl.intermission = 3; cl.completed_time = cl.time; vid.recalc_refdef = true; // go to full screen - SCR_CenterPrint (MSG_ReadString ()); + SCR_CenterPrint (MSG_ReadString (net_message)); break; case svc_sellscreen: diff --git a/nq/source/cl_tent.c b/nq/source/cl_tent.c index 46966212b..7211e4012 100644 --- a/nq/source/cl_tent.c +++ b/nq/source/cl_tent.c @@ -84,15 +84,15 @@ void CL_ParseBeam (model_t *m) beam_t *b; int i; - ent = MSG_ReadShort (); + ent = MSG_ReadShort (net_message); - start[0] = MSG_ReadCoord (); - start[1] = MSG_ReadCoord (); - start[2] = MSG_ReadCoord (); + start[0] = MSG_ReadCoord (net_message); + start[1] = MSG_ReadCoord (net_message); + start[2] = MSG_ReadCoord (net_message); - end[0] = MSG_ReadCoord (); - end[1] = MSG_ReadCoord (); - end[2] = MSG_ReadCoord (); + end[0] = MSG_ReadCoord (net_message); + end[1] = MSG_ReadCoord (net_message); + end[2] = MSG_ReadCoord (net_message); // override any beam with the same entity for (i=0, b=cl_beams ; i< MAX_BEAMS ; i++, b++) @@ -138,29 +138,29 @@ void CL_ParseTEnt (void) int rnd; int colorStart, colorLength; - type = MSG_ReadByte (); + type = MSG_ReadByte (net_message); switch (type) { case TE_WIZSPIKE: // spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunParticleEffect (pos, vec3_origin, 20, 30); S_StartSound (-1, 0, cl_sfx_wizhit, pos, 1, 1); break; case TE_KNIGHTSPIKE: // spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunParticleEffect (pos, vec3_origin, 226, 20); S_StartSound (-1, 0, cl_sfx_knighthit, pos, 1, 1); break; case TE_SPIKE: // spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); #ifdef GLTEST Test_Spawn (pos); #else @@ -180,9 +180,9 @@ void CL_ParseTEnt (void) } break; case TE_SUPERSPIKE: // super spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunParticleEffect (pos, vec3_origin, 0, 20); if ( rand() % 5 ) @@ -200,16 +200,16 @@ void CL_ParseTEnt (void) break; case TE_GUNSHOT: // bullet hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunParticleEffect (pos, vec3_origin, 0, 20); break; case TE_EXPLOSION: // rocket explosion - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_ParticleExplosion (pos); dl = CL_AllocDlight (0); VectorCopy (pos, dl->origin); @@ -223,9 +223,9 @@ void CL_ParseTEnt (void) break; case TE_TAREXPLOSION: // tarbaby explosion - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_BlobExplosion (pos); S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); @@ -250,25 +250,25 @@ void CL_ParseTEnt (void) // PGM 01/21/97 case TE_LAVASPLASH: - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_LavaSplash (pos); break; case TE_TELEPORT: - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_TeleportSplash (pos); break; case TE_EXPLOSION2: // color mapped explosion - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); - colorStart = MSG_ReadByte (); - colorLength = MSG_ReadByte (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); + colorStart = MSG_ReadByte (net_message); + colorLength = MSG_ReadByte (net_message); R_ParticleExplosion2 (pos, colorStart, colorLength); dl = CL_AllocDlight (0); VectorCopy (pos, dl->origin); @@ -283,19 +283,19 @@ void CL_ParseTEnt (void) #ifdef QUAKE2 case TE_IMPLOSION: - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); S_StartSound (-1, 0, cl_sfx_imp, pos, 1, 1); break; case TE_RAILTRAIL: - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); - endpos[0] = MSG_ReadCoord (); - endpos[1] = MSG_ReadCoord (); - endpos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); + endpos[0] = MSG_ReadCoord (net_message); + endpos[1] = MSG_ReadCoord (net_message); + endpos[2] = MSG_ReadCoord (net_message); S_StartSound (-1, 0, cl_sfx_rail, pos, 1, 1); S_StartSound (-1, 1, cl_sfx_r_exp3, endpos, 1, 1); R_RocketTrail (pos, endpos, 0+128); diff --git a/nq/source/link.c b/nq/source/link.c deleted file mode 100644 index 193d836a2..000000000 --- a/nq/source/link.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - link.c - - (description) - - Copyright (C) 1996-1997 Id Software, Inc. - - 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 2 - 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, write to: - - Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA - - $Id$ -*/ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include "link.h" - -// ClearLink is used for new headnodes -void ClearLink (link_t *l) -{ - l->prev = l->next = l; -} - -void RemoveLink (link_t *l) -{ - l->next->prev = l->prev; - l->prev->next = l->next; -} - -void InsertLinkBefore (link_t *l, link_t *before) -{ - l->next = before; - l->prev = before->prev; - l->prev->next = l; - l->next->prev = l; -} -void InsertLinkAfter (link_t *l, link_t *after) -{ - l->next = after->next; - l->prev = after; - l->prev->next = l; - l->next->prev = l; -} - diff --git a/nq/source/msg.c b/nq/source/msg.c deleted file mode 100644 index 710ce3f1d..000000000 --- a/nq/source/msg.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - msg.c - - @description@ - - Copyright (C) 1996-1997 Id Software, Inc. - - 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 2 - 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, write to: - - Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA - - $Id$ -*/ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include "msg.h" -#include "qendian.h" -#include "net.h" - -/* -============================================================================== - - MESSAGE IO FUNCTIONS - -Handles byte ordering and avoids alignment errors -============================================================================== -*/ - -// -// writing functions -// - -void MSG_WriteChar (sizebuf_t *sb, int c) -{ - byte *buf; - -#ifdef PARANOID - if (c < -128 || c > 127) - Sys_Error ("MSG_WriteChar: range error"); -#endif - - buf = SZ_GetSpace (sb, 1); - buf[0] = c; -} - -void MSG_WriteByte (sizebuf_t *sb, int c) -{ - byte *buf; - -#ifdef PARANOID - if (c < 0 || c > 255) - Sys_Error ("MSG_WriteByte: range error"); -#endif - - buf = SZ_GetSpace (sb, 1); - buf[0] = c; -} - -void MSG_WriteShort (sizebuf_t *sb, int c) -{ - byte *buf; - -#ifdef PARANOID - if (c < ((short)0x8000) || c > (short)0x7fff) - Sys_Error ("MSG_WriteShort: range error"); -#endif - - buf = SZ_GetSpace (sb, 2); - buf[0] = c&0xff; - buf[1] = c>>8; -} - -void MSG_WriteLong (sizebuf_t *sb, int c) -{ - byte *buf; - - buf = SZ_GetSpace (sb, 4); - buf[0] = c&0xff; - buf[1] = (c>>8)&0xff; - buf[2] = (c>>16)&0xff; - buf[3] = c>>24; -} - -void MSG_WriteFloat (sizebuf_t *sb, float f) -{ - union - { - float f; - int l; - } dat; - - - dat.f = f; - dat.l = LittleLong (dat.l); - - SZ_Write (sb, &dat.l, 4); -} - -void MSG_WriteString (sizebuf_t *sb, char *s) -{ - if (!s) - SZ_Write (sb, "", 1); - else - SZ_Write (sb, s, strlen(s)+1); -} - -void MSG_WriteCoord (sizebuf_t *sb, float f) -{ - MSG_WriteShort (sb, (int)(f*8)); -} - -void MSG_WriteAngle (sizebuf_t *sb, float f) -{ - MSG_WriteByte (sb, ((int)f*256/360) & 255); -} - -// -// reading functions -// -int msg_readcount; -qboolean msg_badread; - -void MSG_BeginReading (void) -{ - msg_readcount = 0; - msg_badread = false; -} - -// returns -1 and sets msg_badread if no more characters are available -int MSG_ReadChar (void) -{ - int c; - - if (msg_readcount+1 > net_message.cursize) - { - msg_badread = true; - return -1; - } - - c = (signed char)net_message.data[msg_readcount]; - msg_readcount++; - - return c; -} - -int MSG_ReadByte (void) -{ - int c; - - if (msg_readcount+1 > net_message.cursize) - { - msg_badread = true; - return -1; - } - - c = (unsigned char)net_message.data[msg_readcount]; - msg_readcount++; - - return c; -} - -int MSG_ReadShort (void) -{ - int c; - - if (msg_readcount+2 > net_message.cursize) - { - msg_badread = true; - return -1; - } - - c = (short)(net_message.data[msg_readcount] - + (net_message.data[msg_readcount+1]<<8)); - - msg_readcount += 2; - - return c; -} - -int MSG_ReadLong (void) -{ - int c; - - if (msg_readcount+4 > net_message.cursize) - { - msg_badread = true; - return -1; - } - - c = net_message.data[msg_readcount] - + (net_message.data[msg_readcount+1]<<8) - + (net_message.data[msg_readcount+2]<<16) - + (net_message.data[msg_readcount+3]<<24); - - msg_readcount += 4; - - return c; -} - -float MSG_ReadFloat (void) -{ - union - { - byte b[4]; - float f; - int l; - } dat; - - dat.b[0] = net_message.data[msg_readcount]; - dat.b[1] = net_message.data[msg_readcount+1]; - dat.b[2] = net_message.data[msg_readcount+2]; - dat.b[3] = net_message.data[msg_readcount+3]; - msg_readcount += 4; - - dat.l = LittleLong (dat.l); - - return dat.f; -} - -char *MSG_ReadString (void) -{ - static char string[2048]; - int l,c; - - l = 0; - do - { - c = MSG_ReadChar (); - if (c == -1 || c == 0) - break; - string[l] = c; - l++; - } while (l < sizeof(string)-1); - - string[l] = 0; - - return string; -} - -float MSG_ReadCoord (void) -{ - return MSG_ReadShort() * (1.0/8); -} - -float MSG_ReadAngle (void) -{ - return MSG_ReadChar() * (360.0/256); -} diff --git a/nq/source/net_dgrm.c b/nq/source/net_dgrm.c index 53b820159..60ac97f58 100644 --- a/nq/source/net_dgrm.c +++ b/nq/source/net_dgrm.c @@ -410,8 +410,8 @@ int Datagram_GetMessage (qsocket_t *sock) length -= NET_HEADERSIZE; - SZ_Clear (&net_message); - SZ_Write (&net_message, packetBuffer.data, length); + SZ_Clear (net_message->message); + SZ_Write (net_message->message, packetBuffer.data, length); ret = 2; break; @@ -466,9 +466,9 @@ int Datagram_GetMessage (qsocket_t *sock) if (flags & NETFLAG_EOM) { - SZ_Clear(&net_message); - SZ_Write(&net_message, sock->receiveMessage, sock->receiveMessageLength); - SZ_Write(&net_message, packetBuffer.data, length); + SZ_Clear(net_message->message); + SZ_Write(net_message->message, sock->receiveMessage, sock->receiveMessageLength); + SZ_Write(net_message->message, packetBuffer.data, length); sock->receiveMessageLength = 0; ret = 1; @@ -560,15 +560,15 @@ static void Test_Poll(void) while (1) { - len = dfunc.Read (testSocket, net_message.data, net_message.maxsize, &clientaddr); + len = dfunc.Read (testSocket, net_message->message->data, net_message->message->maxsize, &clientaddr); if (len < sizeof(int)) break; - net_message.cursize = len; + net_message->message->cursize = len; - MSG_BeginReading (); - control = BigLong(*((int *)net_message.data)); - MSG_ReadLong(); + MSG_BeginReading (net_message); + control = BigLong(*((int *)net_message->message->data)); + MSG_ReadLong(net_message); if (control == -1) break; if ((control & (~NETFLAG_LENGTH_MASK)) != NETFLAG_CTL) @@ -576,15 +576,15 @@ static void Test_Poll(void) if ((control & NETFLAG_LENGTH_MASK) != len) break; - if (MSG_ReadByte() != CCREP_PLAYER_INFO) + if (MSG_ReadByte(net_message) != CCREP_PLAYER_INFO) Sys_Error("Unexpected repsonse to Player Info request\n"); - playerNumber = MSG_ReadByte(); - strcpy(name, MSG_ReadString()); - colors = MSG_ReadLong(); - frags = MSG_ReadLong(); - connectTime = MSG_ReadLong(); - strcpy(address, MSG_ReadString()); + playerNumber = MSG_ReadByte(net_message); + strcpy(name, MSG_ReadString(net_message)); + colors = MSG_ReadLong(net_message); + frags = MSG_ReadLong(net_message); + connectTime = MSG_ReadLong(net_message); + strcpy(address, MSG_ReadString(net_message)); Con_Printf("%s\n frags:%3i colors:%u %u time:%u\n %s\n", name, frags, colors >> 4, colors & 0x0f, connectTime / 60, address); } @@ -652,15 +652,15 @@ JustDoIt: for (n = 0; n < max; n++) { - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREQ_PLAYER_INFO); - MSG_WriteByte(&net_message, n); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (testSocket, net_message.data, net_message.cursize, &sendaddr); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREQ_PLAYER_INFO); + MSG_WriteByte(net_message->message, n); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (testSocket, net_message->message->data, net_message->message->cursize, &sendaddr); } - SZ_Clear(&net_message); + SZ_Clear(net_message->message); SchedulePollProcedure(&testPollProcedure, 0.1); } @@ -683,15 +683,15 @@ static void Test2_Poll(void) net_landriverlevel = test2Driver; name[0] = 0; - len = dfunc.Read (test2Socket, net_message.data, net_message.maxsize, &clientaddr); + len = dfunc.Read (test2Socket, net_message->message->data, net_message->message->maxsize, &clientaddr); if (len < sizeof(int)) goto Reschedule; - net_message.cursize = len; + net_message->message->cursize = len; - MSG_BeginReading (); - control = BigLong(*((int *)net_message.data)); - MSG_ReadLong(); + MSG_BeginReading (net_message); + control = BigLong(*((int *)net_message->message->data)); + MSG_ReadLong(net_message); if (control == -1) goto Error; if ((control & (~NETFLAG_LENGTH_MASK)) != NETFLAG_CTL) @@ -699,24 +699,24 @@ static void Test2_Poll(void) if ((control & NETFLAG_LENGTH_MASK) != len) goto Error; - if (MSG_ReadByte() != CCREP_RULE_INFO) + if (MSG_ReadByte(net_message) != CCREP_RULE_INFO) goto Error; - strcpy(name, MSG_ReadString()); + strcpy(name, MSG_ReadString(net_message)); if (name[0] == 0) goto Done; - strcpy(value, MSG_ReadString()); + strcpy(value, MSG_ReadString(net_message)); Con_Printf("%-16.16s %-16.16s\n", name, value); - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREQ_RULE_INFO); - MSG_WriteString(&net_message, name); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (test2Socket, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREQ_RULE_INFO); + MSG_WriteString(net_message->message, name); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (test2Socket, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); Reschedule: SchedulePollProcedure(&test2PollProcedure, 0.05); @@ -776,14 +776,14 @@ JustDoIt: test2InProgress = true; test2Driver = net_landriverlevel; - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREQ_RULE_INFO); - MSG_WriteString(&net_message, ""); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (test2Socket, net_message.data, net_message.cursize, &sendaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREQ_RULE_INFO); + MSG_WriteString(net_message->message, ""); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (test2Socket, net_message->message->data, net_message->message->cursize, &sendaddr); + SZ_Clear(net_message->message); SchedulePollProcedure(&test2PollProcedure, 0.05); } @@ -869,16 +869,16 @@ static qsocket_t *_Datagram_CheckNewConnections (void) if (acceptsock == -1) return NULL; - SZ_Clear(&net_message); + SZ_Clear(net_message->message); - len = dfunc.Read (acceptsock, net_message.data, net_message.maxsize, &clientaddr); + len = dfunc.Read (acceptsock, net_message->message->data, net_message->message->maxsize, &clientaddr); if (len < sizeof(int)) return NULL; - net_message.cursize = len; + net_message->message->cursize = len; - MSG_BeginReading (); - control = BigLong(*((int *)net_message.data)); - MSG_ReadLong(); + MSG_BeginReading (net_message); + control = BigLong(*((int *)net_message->message->data)); + MSG_ReadLong(net_message); if (control == -1) return NULL; if ((control & (~NETFLAG_LENGTH_MASK)) != NETFLAG_CTL) @@ -886,26 +886,26 @@ static qsocket_t *_Datagram_CheckNewConnections (void) if ((control & NETFLAG_LENGTH_MASK) != len) return NULL; - command = MSG_ReadByte(); + command = MSG_ReadByte(net_message); if (command == CCREQ_SERVER_INFO) { - if (strcmp(MSG_ReadString(), "QUAKE") != 0) + if (strcmp(MSG_ReadString(net_message), "QUAKE") != 0) return NULL; - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_SERVER_INFO); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_SERVER_INFO); dfunc.GetSocketAddr(acceptsock, &newaddr); - MSG_WriteString(&net_message, dfunc.AddrToString(&newaddr)); - MSG_WriteString(&net_message, hostname->string); - MSG_WriteString(&net_message, sv.name); - MSG_WriteByte(&net_message, net_activeconnections); - MSG_WriteByte(&net_message, svs.maxclients); - MSG_WriteByte(&net_message, NET_PROTOCOL_VERSION); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteString(net_message->message, dfunc.AddrToString(&newaddr)); + MSG_WriteString(net_message->message, hostname->string); + MSG_WriteString(net_message->message, sv.name); + MSG_WriteByte(net_message->message, net_activeconnections); + MSG_WriteByte(net_message->message, svs.maxclients); + MSG_WriteByte(net_message->message, NET_PROTOCOL_VERSION); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } @@ -916,7 +916,7 @@ static qsocket_t *_Datagram_CheckNewConnections (void) int clientNumber; client_t *client; - playerNumber = MSG_ReadByte(); + playerNumber = MSG_ReadByte(net_message); activeNumber = -1; for (clientNumber = 0, client = svs.clients; clientNumber < svs.maxclients; clientNumber++, client++) { @@ -930,19 +930,19 @@ static qsocket_t *_Datagram_CheckNewConnections (void) if (clientNumber == svs.maxclients) return NULL; - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_PLAYER_INFO); - MSG_WriteByte(&net_message, playerNumber); - MSG_WriteString(&net_message, client->name); - MSG_WriteLong(&net_message, client->colors); - MSG_WriteLong(&net_message, (int)client->edict->v.frags); - MSG_WriteLong(&net_message, (int)(net_time - client->netconnection->connecttime)); - MSG_WriteString(&net_message, client->netconnection->address); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_PLAYER_INFO); + MSG_WriteByte(net_message->message, playerNumber); + MSG_WriteString(net_message->message, client->name); + MSG_WriteLong(net_message->message, client->colors); + MSG_WriteLong(net_message->message, (int)client->edict->v.frags); + MSG_WriteLong(net_message->message, (int)(net_time - client->netconnection->connecttime)); + MSG_WriteString(net_message->message, client->netconnection->address); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } @@ -953,7 +953,7 @@ static qsocket_t *_Datagram_CheckNewConnections (void) cvar_t *var; // find the search start location - prevCvarName = MSG_ReadString(); + prevCvarName = MSG_ReadString(net_message); if (*prevCvarName) { var = Cvar_FindVar (prevCvarName); @@ -974,18 +974,18 @@ static qsocket_t *_Datagram_CheckNewConnections (void) // send the response - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_RULE_INFO); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_RULE_INFO); if (var) { - MSG_WriteString(&net_message, var->name); - MSG_WriteString(&net_message, var->string); + MSG_WriteString(net_message->message, var->name); + MSG_WriteString(net_message->message, var->string); } - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } @@ -993,19 +993,19 @@ static qsocket_t *_Datagram_CheckNewConnections (void) if (command != CCREQ_CONNECT) return NULL; - if (strcmp(MSG_ReadString(), "QUAKE") != 0) + if (strcmp(MSG_ReadString(net_message), "QUAKE") != 0) return NULL; - if (MSG_ReadByte() != NET_PROTOCOL_VERSION) + if (MSG_ReadByte(net_message) != NET_PROTOCOL_VERSION) { - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_REJECT); - MSG_WriteString(&net_message, "Incompatible version.\n"); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_REJECT); + MSG_WriteString(net_message->message, "Incompatible version.\n"); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } @@ -1017,14 +1017,14 @@ static qsocket_t *_Datagram_CheckNewConnections (void) testAddr = ((struct sockaddr_in *)&clientaddr)->sin_addr.s_addr; if ((testAddr & banMask) == banAddr) { - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_REJECT); - MSG_WriteString(&net_message, "You have been banned.\n"); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_REJECT); + MSG_WriteString(net_message->message, "You have been banned.\n"); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } } @@ -1042,15 +1042,15 @@ static qsocket_t *_Datagram_CheckNewConnections (void) if (ret == 0 && net_time - s->connecttime < 2.0) { // yes, so send a duplicate reply - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_ACCEPT); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_ACCEPT); dfunc.GetSocketAddr(s->socket, &newaddr); - MSG_WriteLong(&net_message, dfunc.GetSocketPort(&newaddr)); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, dfunc.GetSocketPort(&newaddr)); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } // it's somebody coming back in from a crash/disconnect @@ -1065,14 +1065,14 @@ static qsocket_t *_Datagram_CheckNewConnections (void) if (sock == NULL) { // no room; try to let him know - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_REJECT); - MSG_WriteString(&net_message, "Server is full.\n"); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_REJECT); + MSG_WriteString(net_message->message, "Server is full.\n"); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return NULL; } @@ -1099,16 +1099,16 @@ static qsocket_t *_Datagram_CheckNewConnections (void) strcpy(sock->address, dfunc.AddrToString(&clientaddr)); // send him back the info about the server connection he has been allocated - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREP_ACCEPT); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREP_ACCEPT); dfunc.GetSocketAddr(newsock, &newaddr); - MSG_WriteLong(&net_message, dfunc.GetSocketPort(&newaddr)); -// MSG_WriteString(&net_message, dfunc.AddrToString(&newaddr)); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (acceptsock, net_message.data, net_message.cursize, &clientaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, dfunc.GetSocketPort(&newaddr)); +// MSG_WriteString(net_message->message, dfunc.AddrToString(&newaddr)); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (acceptsock, net_message->message->data, net_message->message->cursize, &clientaddr); + SZ_Clear(net_message->message); return sock; } @@ -1137,22 +1137,22 @@ static void _Datagram_SearchForHosts (qboolean xmit) dfunc.GetSocketAddr (dfunc.controlSock, &myaddr); if (xmit) { - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREQ_SERVER_INFO); - MSG_WriteString(&net_message, "QUAKE"); - MSG_WriteByte(&net_message, NET_PROTOCOL_VERSION); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Broadcast(dfunc.controlSock, net_message.data, net_message.cursize); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREQ_SERVER_INFO); + MSG_WriteString(net_message->message, "QUAKE"); + MSG_WriteByte(net_message->message, NET_PROTOCOL_VERSION); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Broadcast(dfunc.controlSock, net_message->message->data, net_message->message->cursize); + SZ_Clear(net_message->message); } - while ((ret = dfunc.Read (dfunc.controlSock, net_message.data, net_message.maxsize, &readaddr)) > 0) + while ((ret = dfunc.Read (dfunc.controlSock, net_message->message->data, net_message->message->maxsize, &readaddr)) > 0) { if (ret < sizeof(int)) continue; - net_message.cursize = ret; + net_message->message->cursize = ret; // don't answer our own query if (dfunc.AddrCompare(&readaddr, &myaddr) >= 0) @@ -1162,9 +1162,9 @@ static void _Datagram_SearchForHosts (qboolean xmit) if (hostCacheCount == HOSTCACHESIZE) continue; - MSG_BeginReading (); - control = BigLong(*((int *)net_message.data)); - MSG_ReadLong(); + MSG_BeginReading (net_message); + control = BigLong(*((int *)net_message->message->data)); + MSG_ReadLong(net_message); if (control == -1) continue; if ((control & (~NETFLAG_LENGTH_MASK)) != NETFLAG_CTL) @@ -1172,10 +1172,10 @@ static void _Datagram_SearchForHosts (qboolean xmit) if ((control & NETFLAG_LENGTH_MASK) != ret) continue; - if (MSG_ReadByte() != CCREP_SERVER_INFO) + if (MSG_ReadByte(net_message) != CCREP_SERVER_INFO) continue; - dfunc.GetAddrFromName(MSG_ReadString(), &readaddr); + dfunc.GetAddrFromName(MSG_ReadString(net_message), &readaddr); // search the cache for this server for (n = 0; n < hostCacheCount; n++) if (dfunc.AddrCompare(&readaddr, &hostcache[n].addr) == 0) @@ -1187,11 +1187,11 @@ static void _Datagram_SearchForHosts (qboolean xmit) // add it hostCacheCount++; - strcpy(hostcache[n].name, MSG_ReadString()); - strcpy(hostcache[n].map, MSG_ReadString()); - hostcache[n].users = MSG_ReadByte(); - hostcache[n].maxusers = MSG_ReadByte(); - if (MSG_ReadByte() != NET_PROTOCOL_VERSION) + strcpy(hostcache[n].name, MSG_ReadString(net_message)); + strcpy(hostcache[n].map, MSG_ReadString(net_message)); + hostcache[n].users = MSG_ReadByte(net_message); + hostcache[n].maxusers = MSG_ReadByte(net_message); + if (MSG_ReadByte(net_message) != NET_PROTOCOL_VERSION) { strcpy(hostcache[n].cname, hostcache[n].name); hostcache[n].cname[14] = 0; @@ -1272,18 +1272,18 @@ static qsocket_t *_Datagram_Connect (char *host) for (reps = 0; reps < 3; reps++) { - SZ_Clear(&net_message); + SZ_Clear(net_message->message); // save space for the header, filled in later - MSG_WriteLong(&net_message, 0); - MSG_WriteByte(&net_message, CCREQ_CONNECT); - MSG_WriteString(&net_message, "QUAKE"); - MSG_WriteByte(&net_message, NET_PROTOCOL_VERSION); - *((int *)net_message.data) = BigLong(NETFLAG_CTL | (net_message.cursize & NETFLAG_LENGTH_MASK)); - dfunc.Write (newsock, net_message.data, net_message.cursize, &sendaddr); - SZ_Clear(&net_message); + MSG_WriteLong(net_message->message, 0); + MSG_WriteByte(net_message->message, CCREQ_CONNECT); + MSG_WriteString(net_message->message, "QUAKE"); + MSG_WriteByte(net_message->message, NET_PROTOCOL_VERSION); + *((int *)net_message->message->data) = BigLong(NETFLAG_CTL | (net_message->message->cursize & NETFLAG_LENGTH_MASK)); + dfunc.Write (newsock, net_message->message->data, net_message->message->cursize, &sendaddr); + SZ_Clear(net_message->message); do { - ret = dfunc.Read (newsock, net_message.data, net_message.maxsize, &readaddr); + ret = dfunc.Read (newsock, net_message->message->data, net_message->message->maxsize, &readaddr); // if we got something, validate it if (ret > 0) { @@ -1306,11 +1306,11 @@ static qsocket_t *_Datagram_Connect (char *host) continue; } - net_message.cursize = ret; - MSG_BeginReading (); + net_message->message->cursize = ret; + MSG_BeginReading (net_message); - control = BigLong(*((int *)net_message.data)); - MSG_ReadLong(); + control = BigLong(*((int *)net_message->message->data)); + MSG_ReadLong(net_message); if (control == -1) { ret = 0; @@ -1351,10 +1351,10 @@ static qsocket_t *_Datagram_Connect (char *host) goto ErrorReturn; } - ret = MSG_ReadByte(); + ret = MSG_ReadByte(net_message); if (ret == CCREP_REJECT) { - reason = MSG_ReadString(); + reason = MSG_ReadString(net_message); Con_Printf(reason); strncpy(m_return_reason, reason, 31); goto ErrorReturn; @@ -1363,7 +1363,7 @@ static qsocket_t *_Datagram_Connect (char *host) if (ret == CCREP_ACCEPT) { memcpy(&sock->addr, &sendaddr, sizeof(struct qsockaddr)); - dfunc.SetSocketPort (&sock->addr, MSG_ReadLong()); + dfunc.SetSocketPort (&sock->addr, MSG_ReadLong(net_message)); } else { diff --git a/nq/source/net_loop.c b/nq/source/net_loop.c index 1101bc980..84df1d2a3 100644 --- a/nq/source/net_loop.c +++ b/nq/source/net_loop.c @@ -30,6 +30,7 @@ # include "config.h" #endif +#include "msg.h" #include "net.h" #include "net_loop.h" #include "client.h" @@ -150,8 +151,8 @@ int Loop_GetMessage (qsocket_t *sock) ret = sock->receiveMessage[0]; length = sock->receiveMessage[1] + (sock->receiveMessage[2] << 8); // alignment byte skipped here - SZ_Clear (&net_message); - SZ_Write (&net_message, &sock->receiveMessage[4], length); + SZ_Clear (net_message->message); + SZ_Write (net_message->message, &sock->receiveMessage[4], length); length = IntAlign(length + 4); sock->receiveMessageLength -= length; diff --git a/nq/source/net_main.c b/nq/source/net_main.c index e999aca5d..970d580a8 100644 --- a/nq/source/net_main.c +++ b/nq/source/net_main.c @@ -33,6 +33,7 @@ #include #include "cmd.h" +#include "msg.h" #include "net.h" #include "net_vcr.h" #include "qargs.h" @@ -74,7 +75,9 @@ PollProcedure slistSendProcedure = {NULL, 0.0, Slist_Send}; PollProcedure slistPollProcedure = {NULL, 0.0, Slist_Poll}; -sizebuf_t net_message; +static sizebuf_t _net_message_message; +static msg_t _net_message = {0, 0, &_net_message_message}; +msg_t *net_message = &_net_message; int net_activeconnections = 0; int messagesSent = 0; @@ -597,9 +600,9 @@ int NET_GetMessage (qsocket_t *sock) vcrGetMessage.op = VCR_OP_GETMESSAGE; vcrGetMessage.session = (long)sock; vcrGetMessage.ret = ret; - vcrGetMessage.len = net_message.cursize; + vcrGetMessage.len = _net_message_message.cursize; Sys_FileWrite (vcrFile, &vcrGetMessage, 24); - Sys_FileWrite (vcrFile, net_message.data, net_message.cursize); + Sys_FileWrite (vcrFile, _net_message_message.data, _net_message_message.cursize); } } else @@ -863,7 +866,7 @@ void NET_Init (void) } // allocate space for network message buffer - SZ_Alloc (&net_message, NET_MAXMESSAGE); + SZ_Alloc (&_net_message_message, NET_MAXMESSAGE); net_messagetimeout = Cvar_Get("net_messagetimeout", "300", CVAR_NONE, "None"); hostname = Cvar_Get("hostname", "UNNAMED", CVAR_NONE, "None"); diff --git a/nq/source/net_vcr.c b/nq/source/net_vcr.c index 25a8199f8..c6270e01b 100644 --- a/nq/source/net_vcr.c +++ b/nq/source/net_vcr.c @@ -30,6 +30,7 @@ # include "config.h" #endif +#include "msg.h" #include "net.h" #include "net_vcr.h" #include "sys.h" @@ -101,8 +102,8 @@ int VCR_GetMessage (qsocket_t *sock) return ret; } - Sys_FileRead(vcrFile, &net_message.cursize, sizeof(int)); - Sys_FileRead(vcrFile, net_message.data, net_message.cursize); + Sys_FileRead(vcrFile, &net_message->message->cursize, sizeof(int)); + Sys_FileRead(vcrFile, net_message->message->data, net_message->message->cursize); VCR_ReadNext (); diff --git a/nq/source/qendian.c b/nq/source/qendian.c deleted file mode 100644 index 21c245e5c..000000000 --- a/nq/source/qendian.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - qendian.c - - (description) - - Copyright (C) 1996-1997 Id Software, Inc. - Copyright (C) 1999,2000 contributors of the QuakeForge project - Please see the file "AUTHORS" for a list of contributors - - 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 2 - 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, write to: - - Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA - - $Id$ -*/ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include - -/* -============================================================================ - - BYTE ORDER FUNCTIONS - -============================================================================ -*/ - -qboolean bigendien; -short (*BigShort) (short l); -short (*LittleShort) (short l); -int (*BigLong) (int l); -int (*LittleLong) (int l); -float (*BigFloat) (float l); -float (*LittleFloat) (float l); - -short ShortSwap (short l) -{ - byte b1,b2; - - b1 = l&255; - b2 = (l>>8)&255; - - return (b1<<8) + b2; -} - -short ShortNoSwap (short l) -{ - return l; -} - -int LongSwap (int l) -{ - byte b1,b2,b3,b4; - - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; - - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; -} - -int LongNoSwap (int l) -{ - return l; -} - -float FloatSwap (float f) -{ - union - { - float f; - byte b[4]; - } dat1, dat2; - - - dat1.f = f; - dat2.b[0] = dat1.b[3]; - dat2.b[1] = dat1.b[2]; - dat2.b[2] = dat1.b[1]; - dat2.b[3] = dat1.b[0]; - return dat2.f; -} - -float FloatNoSwap (float f) -{ - return f; -} diff --git a/nq/source/r_part.c b/nq/source/r_part.c index 7462e9b2f..551c96f5e 100644 --- a/nq/source/r_part.c +++ b/nq/source/r_part.c @@ -273,11 +273,11 @@ void R_ParseParticleEffect (void) int i, count, msgcount, color; for (i=0 ; i<3 ; i++) - org[i] = MSG_ReadCoord (); + org[i] = MSG_ReadCoord (net_message); for (i=0 ; i<3 ; i++) - dir[i] = MSG_ReadChar () * (1.0/16); - msgcount = MSG_ReadByte (); - color = MSG_ReadByte (); + dir[i] = MSG_ReadChar (net_message) * (1.0/16); + msgcount = MSG_ReadByte (net_message); + color = MSG_ReadByte (net_message); if (msgcount == 255) count = 1024; diff --git a/nq/source/r_view.c b/nq/source/r_view.c index e411e496b..e072531e2 100644 --- a/nq/source/r_view.c +++ b/nq/source/r_view.c @@ -283,10 +283,10 @@ void V_ParseDamage (void) float side; float count; - armor = MSG_ReadByte (); - blood = MSG_ReadByte (); + armor = MSG_ReadByte (net_message); + blood = MSG_ReadByte (net_message); for (i=0 ; i<3 ; i++) - from[i] = MSG_ReadCoord (); + from[i] = MSG_ReadCoord (net_message); count = blood*0.5 + armor*0.5; if (count < 10) diff --git a/nq/source/sv_user.c b/nq/source/sv_user.c index 5231dcdd6..94711ad74 100644 --- a/nq/source/sv_user.c +++ b/nq/source/sv_user.c @@ -460,32 +460,32 @@ void SV_ReadClientMove (usercmd_t *move) // read ping time host_client->ping_times[host_client->num_pings%NUM_PING_TIMES] - = sv.time - MSG_ReadFloat (); + = sv.time - MSG_ReadFloat (net_message); host_client->num_pings++; // read current angles for (i=0 ; i<3 ; i++) - angle[i] = MSG_ReadAngle (); + angle[i] = MSG_ReadAngle (net_message); VectorCopy (angle, host_client->edict->v.v_angle); // read movement - move->forwardmove = MSG_ReadShort (); - move->sidemove = MSG_ReadShort (); - move->upmove = MSG_ReadShort (); + move->forwardmove = MSG_ReadShort (net_message); + move->sidemove = MSG_ReadShort (net_message); + move->upmove = MSG_ReadShort (net_message); // read buttons - bits = MSG_ReadByte (); + bits = MSG_ReadByte (net_message); host_client->edict->v.button0 = bits & 1; host_client->edict->v.button2 = (bits & 2)>>1; - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i) host_client->edict->v.impulse = i; #ifdef QUAKE2 // read light level - host_client->edict->v.light_level = MSG_ReadByte (); + host_client->edict->v.light_level = MSG_ReadByte (net_message); #endif } @@ -514,20 +514,20 @@ nextmsg: if (!ret) return true; - MSG_BeginReading (); + MSG_BeginReading (net_message); while (1) { if (!host_client->active) return false; // a command caused an error - if (msg_badread) + if (net_message->badread) { Sys_Printf ("SV_ReadClientMessage: badread\n"); return false; } - cmd = MSG_ReadChar (); + cmd = MSG_ReadChar (net_message); switch (cmd) { @@ -543,7 +543,7 @@ nextmsg: break; case clc_stringcmd: - s = MSG_ReadString (); + s = MSG_ReadString (net_message); if (host_client->privileged) ret = 2; else diff --git a/qw/include/link.h b/qw/include/msg_ucmd.h similarity index 61% rename from qw/include/link.h rename to qw/include/msg_ucmd.h index 4cc6d8a54..5b4113044 100644 --- a/qw/include/link.h +++ b/qw/include/msg_ucmd.h @@ -1,5 +1,5 @@ /* - link.h + msg_ucmd.h (description) @@ -25,23 +25,14 @@ $Id$ */ +#ifndef __msg_ucmd_h +#define __msg_ucmd_h -#ifndef _LINK_H -#define _LINK_H +#include "sizebuf.h" -// (type *)STRUCT_FROM_LINK(link_t *link, type, member) -// ent = STRUCT_FROM_LINK(link,entity_t,order) -// FIXME: remove this mess! -#define STRUCT_FROM_LINK(l,t,m) ((t *)((byte *)l - (int)&(((t *)0)->m))) +extern struct usercmd_s nullcmd; -typedef struct link_s -{ - struct link_s *prev, *next; -} link_t; +void MSG_WriteDeltaUsercmd (sizebuf_t *sb, struct usercmd_s *from, struct usercmd_s *cmd); +void MSG_ReadDeltaUsercmd (struct usercmd_s *from, struct usercmd_s *cmd); -void ClearLink (link_t *l); -void RemoveLink (link_t *l); -void InsertLinkBefore (link_t *l, link_t *before); -void InsertLinkAfter (link_t *l, link_t *after); - -#endif // _LINK_H +#endif // __msg_ucmd_h diff --git a/qw/include/net.h b/qw/include/net.h index 712c33e4f..cf136035e 100644 --- a/qw/include/net.h +++ b/qw/include/net.h @@ -48,7 +48,7 @@ typedef struct extern netadr_t net_local_adr; extern netadr_t net_from; // address of who sent the packet -extern sizebuf_t net_message; +extern struct msg_s *net_message; extern cvar_t *hostname; diff --git a/qw/source/Makefile.am b/qw/source/Makefile.am index 9916a6e7c..867d8844d 100644 --- a/qw/source/Makefile.am +++ b/qw/source/Makefile.am @@ -50,8 +50,8 @@ if ASM_ARCH math_ASM = math.S sys_x86.S endif common_SOURCES= buildnum.c com.c \ - info.c link.c mathlib.c model.c model_brush.c \ - msg.c pmove.c pmovetst.c qargs.c qendian.c quakefs.c quakeio.c \ + mathlib.c model.c model_brush.c msg_ucmd.c \ + pmove.c pmovetst.c quakefs.c quakeio.c \ $(math_ASM) $(packetlogger) # diff --git a/qw/source/cl_demo.c b/qw/source/cl_demo.c index 55abce173..030b35713 100644 --- a/qw/source/cl_demo.c +++ b/qw/source/cl_demo.c @@ -246,14 +246,14 @@ CL_GetDemoMessage (void) case dem_read: // get the next message - Qread (cls.demofile, &net_message.cursize, 4); - net_message.cursize = LittleLong (net_message.cursize); - // Con_Printf("read: %ld bytes\n", net_message.cursize); - if (net_message.cursize > MAX_MSGLEN) + Qread (cls.demofile, &net_message->message->cursize, 4); + net_message->message->cursize = LittleLong (net_message->message->cursize); + // Con_Printf("read: %ld bytes\n", net_message->message->cursize); + if (net_message->message->cursize > MAX_MSGLEN) // Sys_Error ("Demo message > MAX_MSGLEN"); Host_EndGame ("Demo message > MAX_MSGLEN"); - r = Qread (cls.demofile, net_message.data, net_message.cursize); - if (r != net_message.cursize) { + r = Qread (cls.demofile, net_message->message->data, net_message->message->cursize); + if (r != net_message->message->cursize) { CL_StopPlayback (); return 0; } @@ -289,7 +289,7 @@ CL_GetMessage (void) if (!NET_GetPacket ()) return false; - CL_WriteDemoMessage (&net_message); + CL_WriteDemoMessage (net_message->message); return true; } @@ -308,11 +308,11 @@ CL_Stop_f (void) return; } // write a disconnect message to the demo file - SZ_Clear (&net_message); - MSG_WriteLong (&net_message, -1); // -1 sequence means out of band - MSG_WriteByte (&net_message, svc_disconnect); - MSG_WriteString (&net_message, "EndOfDemo"); - CL_WriteDemoMessage (&net_message); + SZ_Clear (net_message->message); + MSG_WriteLong (net_message->message, -1); // -1 sequence means out of band + MSG_WriteByte (net_message->message, svc_disconnect); + MSG_WriteString (net_message->message, "EndOfDemo"); + CL_WriteDemoMessage (net_message->message); // finish up Qclose (cls.demofile); diff --git a/qw/source/cl_ents.c b/qw/source/cl_ents.c index 8bf63a338..7a1d932de 100644 --- a/qw/source/cl_ents.c +++ b/qw/source/cl_ents.c @@ -45,6 +45,7 @@ #include "d_iface.h" #include "host.h" #include "msg.h" +#include "msg_ucmd.h" #include "pmove.h" #include "r_dynamic.h" #include "view.h" @@ -209,7 +210,7 @@ CL_ParseDelta (entity_state_t *from, entity_state_t *to, int bits) bits &= ~511; if (bits & U_MOREBITS) { // read in the low order bits - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); bits |= i; } // count the bits for net profiling @@ -220,64 +221,64 @@ CL_ParseDelta (entity_state_t *from, entity_state_t *to, int bits) // LordHavoc: Endy neglected to mark this as being part of the QSG // version 2 stuff... if (bits & U_EXTEND1) { - bits |= MSG_ReadByte () << 16; + bits |= MSG_ReadByte (net_message) << 16; if (bits & U_EXTEND2) - bits |= MSG_ReadByte () << 24; + bits |= MSG_ReadByte (net_message) << 24; } to->flags = bits; if (bits & U_MODEL) - to->modelindex = MSG_ReadByte (); + to->modelindex = MSG_ReadByte (net_message); if (bits & U_FRAME) - to->frame = MSG_ReadByte (); + to->frame = MSG_ReadByte (net_message); if (bits & U_COLORMAP) - to->colormap = MSG_ReadByte (); + to->colormap = MSG_ReadByte (net_message); if (bits & U_SKIN) - to->skinnum = MSG_ReadByte (); + to->skinnum = MSG_ReadByte (net_message); if (bits & U_EFFECTS) - to->effects = MSG_ReadByte (); + to->effects = MSG_ReadByte (net_message); if (bits & U_ORIGIN1) - to->origin[0] = MSG_ReadCoord (); + to->origin[0] = MSG_ReadCoord (net_message); if (bits & U_ANGLE1) - to->angles[0] = MSG_ReadAngle (); + to->angles[0] = MSG_ReadAngle (net_message); if (bits & U_ORIGIN2) - to->origin[1] = MSG_ReadCoord (); + to->origin[1] = MSG_ReadCoord (net_message); if (bits & U_ANGLE2) - to->angles[1] = MSG_ReadAngle (); + to->angles[1] = MSG_ReadAngle (net_message); if (bits & U_ORIGIN3) - to->origin[2] = MSG_ReadCoord (); + to->origin[2] = MSG_ReadCoord (net_message); if (bits & U_ANGLE3) - to->angles[2] = MSG_ReadAngle (); + to->angles[2] = MSG_ReadAngle (net_message); // LordHavoc: Endy neglected to mark this as being part of the QSG // version 2 stuff... // rearranged it and implemented missing effects // Ender (QSG - Begin) if (bits & U_ALPHA) - to->alpha = MSG_ReadByte (); + to->alpha = MSG_ReadByte (net_message); if (bits & U_SCALE) - to->scale = MSG_ReadByte (); + to->scale = MSG_ReadByte (net_message); if (bits & U_EFFECTS2) - to->effects = (to->effects & 0xFF) | (MSG_ReadByte () << 8); + to->effects = (to->effects & 0xFF) | (MSG_ReadByte (net_message) << 8); if (bits & U_GLOWSIZE) - to->glowsize = MSG_ReadByte (); + to->glowsize = MSG_ReadByte (net_message); if (bits & U_GLOWCOLOR) - to->glowcolor = MSG_ReadByte (); + to->glowcolor = MSG_ReadByte (net_message); if (bits & U_COLORMOD) - to->colormod = MSG_ReadByte (); + to->colormod = MSG_ReadByte (net_message); if (bits & U_FRAME2) - to->frame = (to->frame & 0xFF) | (MSG_ReadByte () << 8); + to->frame = (to->frame & 0xFF) | (MSG_ReadByte (net_message) << 8); // Ender (QSG - End) if (bits & U_SOLID) { @@ -312,8 +313,8 @@ FlushEntityPacket (void) // read it all, but ignore it while (1) { - word = (unsigned short) MSG_ReadShort (); - if (msg_badread) { // something didn't parse right... + word = (unsigned short) MSG_ReadShort (net_message); + if (net_message->badread) { // something didn't parse right... Host_EndGame ("msg_badread in packetentities"); return; } @@ -346,7 +347,7 @@ CL_ParsePacketEntities (qboolean delta) cl.frames[newpacket].invalid = false; if (delta) { - from = MSG_ReadByte (); + from = MSG_ReadByte (net_message); oldpacket = cl.frames[newpacket].delta_sequence; @@ -376,8 +377,8 @@ CL_ParsePacketEntities (qboolean delta) newp->num_entities = 0; while (1) { - word = (unsigned short) MSG_ReadShort (); - if (msg_badread) { // something didn't parse right... + word = (unsigned short) MSG_ReadShort (net_message); + if (net_message->badread) { // something didn't parse right... Host_EndGame ("msg_badread in packetentities"); return; } @@ -618,10 +619,10 @@ CL_ParseProjectiles (void) byte bits[6]; projectile_t *pr; - c = MSG_ReadByte (); + c = MSG_ReadByte (net_message); for (i = 0; i < c; i++) { for (j = 0; j < 6; j++) - bits[j] = MSG_ReadByte (); + bits[j] = MSG_ReadByte (net_message); if (cl_num_projectiles == MAX_PROJECTILES) continue; @@ -690,7 +691,7 @@ CL_ParsePlayerinfo (void) int num; int i; - num = MSG_ReadByte (); + num = MSG_ReadByte (net_message); if (num > MAX_CLIENTS) // Sys_Error ("CL_ParsePlayerinfo: bad num"); Host_EndGame ("CL_ParsePlayerinfo: bad num"); @@ -698,20 +699,20 @@ CL_ParsePlayerinfo (void) state = &cl.frames[parsecountmod].playerstate[num]; state->number = num; - flags = state->flags = MSG_ReadShort (); + flags = state->flags = MSG_ReadShort (net_message); state->messagenum = cl.parsecount; - state->origin[0] = MSG_ReadCoord (); - state->origin[1] = MSG_ReadCoord (); - state->origin[2] = MSG_ReadCoord (); + state->origin[0] = MSG_ReadCoord (net_message); + state->origin[1] = MSG_ReadCoord (net_message); + state->origin[2] = MSG_ReadCoord (net_message); - state->frame = MSG_ReadByte (); + state->frame = MSG_ReadByte (net_message); // the other player's last move was likely some time // before the packet was sent out, so accurately track // the exact time it was valid at if (flags & PF_MSEC) { - msec = MSG_ReadByte (); + msec = MSG_ReadByte (net_message); state->state_time = parsecounttime - msec * 0.001; } else state->state_time = parsecounttime; @@ -721,27 +722,27 @@ CL_ParsePlayerinfo (void) for (i = 0; i < 3; i++) { if (flags & (PF_VELOCITY1 << i)) - state->velocity[i] = MSG_ReadShort (); + state->velocity[i] = MSG_ReadShort (net_message); else state->velocity[i] = 0; } if (flags & PF_MODEL) - state->modelindex = MSG_ReadByte (); + state->modelindex = MSG_ReadByte (net_message); else state->modelindex = cl_playerindex; if (flags & PF_SKINNUM) - state->skinnum = MSG_ReadByte (); + state->skinnum = MSG_ReadByte (net_message); else state->skinnum = 0; if (flags & PF_EFFECTS) - state->effects = MSG_ReadByte (); + state->effects = MSG_ReadByte (net_message); else state->effects = 0; if (flags & PF_WEAPONFRAME) - state->weaponframe = MSG_ReadByte (); + state->weaponframe = MSG_ReadByte (net_message); else state->weaponframe = 0; diff --git a/qw/source/cl_input.c b/qw/source/cl_input.c index 776074a51..0aac75a01 100644 --- a/qw/source/cl_input.c +++ b/qw/source/cl_input.c @@ -48,6 +48,7 @@ #include "input.h" #include "keys.h" #include "msg.h" +#include "msg_ucmd.h" #include "teamplay.h" #include "view.h" diff --git a/qw/source/cl_main.c b/qw/source/cl_main.c index 8a6766979..ab37d4ddc 100644 --- a/qw/source/cl_main.c +++ b/qw/source/cl_main.c @@ -854,10 +854,10 @@ CL_ConnectionlessPacket (void) char *s; int c; - MSG_BeginReading (); - MSG_ReadLong (); // skip the -1 + MSG_BeginReading (net_message); + MSG_ReadLong (net_message); // skip the -1 - c = MSG_ReadByte (); + c = MSG_ReadByte (net_message); if (!cls.demoplayback) Con_Printf ("%s: ", NET_AdrToString (net_from)); // Con_DPrintf ("%s", net_message.data + 5); @@ -889,12 +889,12 @@ CL_ConnectionlessPacket (void) Con_Printf ("Command packet from remote host. Ignored.\n"); return; } - s = MSG_ReadString (); + s = MSG_ReadString (net_message); strncpy (cmdtext, s, sizeof (cmdtext) - 1); cmdtext[sizeof (cmdtext) - 1] = 0; - s = MSG_ReadString (); + s = MSG_ReadString (net_message); while (*s && isspace ((int) *s)) s++; @@ -931,7 +931,7 @@ CL_ConnectionlessPacket (void) if (c == A2C_PRINT) { netadr_t addy; server_entry_t *temp; - s = MSG_ReadString (); + s = MSG_ReadString (net_message); for (temp = slist; temp; temp = temp->next) if (temp->waitstatus) { @@ -976,7 +976,7 @@ CL_ConnectionlessPacket (void) if (c == S2C_CHALLENGE) { Con_Printf ("challenge\n"); - s = MSG_ReadString (); + s = MSG_ReadString (net_message); cls.challenge = atoi (s); if (strstr (s, "QF")) CL_AddQFInfoKeys (); @@ -1001,7 +1001,7 @@ CL_PingPacket (void) { server_entry_t *temp; netadr_t addy; - MSG_ReadByte ();; + MSG_ReadByte (net_message);; for (temp = slist; temp; temp = temp->next) if (temp->pingsent && !temp->pongback) { NET_StringToAdr (temp->server, &addy); @@ -1027,16 +1027,16 @@ CL_ReadPackets (void) // // remote command packet // - if (*(int *) net_message.data == -1) { + if (*(int *) net_message->message->data == -1) { CL_ConnectionlessPacket (); continue; } - if (*(char *) net_message.data == A2A_ACK) + if (*(char *) net_message->message->data == A2A_ACK) { CL_PingPacket (); continue; } - if (net_message.cursize < 8) { + if (net_message->message->cursize < 8) { Con_Printf ("%s: Runt packet\n", NET_AdrToString (net_from)); continue; } diff --git a/qw/source/cl_parse.c b/qw/source/cl_parse.c index f3f747fef..068f7bffa 100644 --- a/qw/source/cl_parse.c +++ b/qw/source/cl_parse.c @@ -391,12 +391,12 @@ CL_ParseDownload (void) // read the data - size = MSG_ReadShort (); - percent = MSG_ReadByte (); + size = MSG_ReadShort (net_message); + percent = MSG_ReadByte (net_message); if (cls.demoplayback) { if (size > 0) - msg_readcount += size; + net_message->readcount += size; return; // not in demo playback } @@ -412,7 +412,7 @@ CL_ParseDownload (void) } if (size == -2) { - char *newname = MSG_ReadString (); + char *newname = MSG_ReadString (net_message); if (strncmp (newname, cls.downloadname, strlen (cls.downloadname)) || strstr (newname + strlen (cls.downloadname), "/")) { @@ -443,15 +443,15 @@ CL_ParseDownload (void) cls.download = Qopen (name, "wb"); if (!cls.download) { - msg_readcount += size; + net_message->readcount += size; Con_Printf ("Failed to open %s\n", cls.downloadtempname); CL_RequestNextDownload (); return; } } - Qwrite (cls.download, net_message.data + msg_readcount, size); - msg_readcount += size; + Qwrite (cls.download, net_message->message->data + net_message->readcount, size); + net_message->readcount += size; if (percent != 100) { // change display routines by zoid @@ -614,7 +614,7 @@ CL_ParseServerData (void) // parse protocol version number // allow 2.2 and 2.29 demos to play - protover = MSG_ReadLong (); + protover = MSG_ReadLong (net_message); if (protover != PROTOCOL_VERSION && !(cls.demoplayback && (protover <= 26 && protover >= 28))) @@ -622,10 +622,10 @@ CL_ParseServerData (void) ("Server returned version %i, not %i\nYou probably need to upgrade.\nCheck http://www.quakeworld.net/", protover, PROTOCOL_VERSION); - cl.servercount = MSG_ReadLong (); + cl.servercount = MSG_ReadLong (net_message); // game directory - str = MSG_ReadString (); + str = MSG_ReadString (net_message); if (!strequal (gamedirfile, str)) { // save current config @@ -651,26 +651,26 @@ CL_ParseServerData (void) Cbuf_AddText (fn); } // parse player slot, high bit means spectator - cl.playernum = MSG_ReadByte (); + cl.playernum = MSG_ReadByte (net_message); if (cl.playernum & 128) { cl.spectator = true; cl.playernum &= ~128; } // get the full level name - str = MSG_ReadString (); + str = MSG_ReadString (net_message); strncpy (cl.levelname, str, sizeof (cl.levelname) - 1); // get the movevars - movevars.gravity = MSG_ReadFloat (); - movevars.stopspeed = MSG_ReadFloat (); - movevars.maxspeed = MSG_ReadFloat (); - movevars.spectatormaxspeed = MSG_ReadFloat (); - movevars.accelerate = MSG_ReadFloat (); - movevars.airaccelerate = MSG_ReadFloat (); - movevars.wateraccelerate = MSG_ReadFloat (); - movevars.friction = MSG_ReadFloat (); - movevars.waterfriction = MSG_ReadFloat (); - movevars.entgravity = MSG_ReadFloat (); + movevars.gravity = MSG_ReadFloat (net_message); + movevars.stopspeed = MSG_ReadFloat (net_message); + movevars.maxspeed = MSG_ReadFloat (net_message); + movevars.spectatormaxspeed = MSG_ReadFloat (net_message); + movevars.accelerate = MSG_ReadFloat (net_message); + movevars.airaccelerate = MSG_ReadFloat (net_message); + movevars.wateraccelerate = MSG_ReadFloat (net_message); + movevars.friction = MSG_ReadFloat (net_message); + movevars.waterfriction = MSG_ReadFloat (net_message); + movevars.entgravity = MSG_ReadFloat (net_message); // seperate the printfs so the server message can have a color Con_Printf @@ -718,10 +718,10 @@ CL_ParseSoundlist (void) // precache sounds // memset (cl.sound_precache, 0, sizeof(cl.sound_precache)); - numsounds = MSG_ReadByte (); + numsounds = MSG_ReadByte (net_message); for (;;) { - str = MSG_ReadString (); + str = MSG_ReadString (net_message); if (!str[0]) break; numsounds++; @@ -730,7 +730,7 @@ CL_ParseSoundlist (void) strcpy (cl.sound_name[numsounds], str); } - n = MSG_ReadByte (); + n = MSG_ReadByte (net_message); if (n) { MSG_WriteByte (&cls.netchan.message, clc_stringcmd); @@ -755,10 +755,10 @@ CL_ParseModellist (void) int n; // precache models and note certain default indexes - nummodels = MSG_ReadByte (); + nummodels = MSG_ReadByte (net_message); for (;;) { - str = MSG_ReadString (); + str = MSG_ReadString (net_message); if (!str[0]) break; nummodels++; @@ -783,7 +783,7 @@ CL_ParseModellist (void) cl_gib3index = nummodels; } - n = MSG_ReadByte (); + n = MSG_ReadByte (net_message); if (n) { MSG_WriteByte (&cls.netchan.message, clc_stringcmd); @@ -805,13 +805,13 @@ CL_ParseBaseline (entity_state_t *es) { int i; - es->modelindex = MSG_ReadByte (); - es->frame = MSG_ReadByte (); - es->colormap = MSG_ReadByte (); - es->skinnum = MSG_ReadByte (); + es->modelindex = MSG_ReadByte (net_message); + es->frame = MSG_ReadByte (net_message); + es->colormap = MSG_ReadByte (net_message); + es->skinnum = MSG_ReadByte (net_message); for (i = 0; i < 3; i++) { - es->origin[i] = MSG_ReadCoord (); - es->angles[i] = MSG_ReadAngle (); + es->origin[i] = MSG_ReadCoord (net_message); + es->angles[i] = MSG_ReadAngle (net_message); } // LordHavoc: set up the baseline to account for new effects (alpha, // colormod, etc) @@ -865,10 +865,10 @@ CL_ParseStaticSound (void) int i; for (i = 0; i < 3; i++) - org[i] = MSG_ReadCoord (); - sound_num = MSG_ReadByte (); - vol = MSG_ReadByte (); - atten = MSG_ReadByte (); + org[i] = MSG_ReadCoord (net_message); + sound_num = MSG_ReadByte (net_message); + vol = MSG_ReadByte (net_message); + atten = MSG_ReadByte (net_message); S_StaticSound (cl.sound_precache[sound_num], org, vol, atten); } @@ -892,22 +892,22 @@ CL_ParseStartSoundPacket (void) float attenuation; int i; - channel = MSG_ReadShort (); + channel = MSG_ReadShort (net_message); if (channel & SND_VOLUME) - volume = MSG_ReadByte (); + volume = MSG_ReadByte (net_message); else volume = DEFAULT_SOUND_PACKET_VOLUME; if (channel & SND_ATTENUATION) - attenuation = MSG_ReadByte () / 64.0; + attenuation = MSG_ReadByte (net_message) / 64.0; else attenuation = DEFAULT_SOUND_PACKET_ATTENUATION; - sound_num = MSG_ReadByte (); + sound_num = MSG_ReadByte (net_message); for (i = 0; i < 3; i++) - pos[i] = MSG_ReadCoord (); + pos[i] = MSG_ReadCoord (net_message); ent = (channel >> 3) & 1023; channel &= 7; @@ -991,14 +991,14 @@ CL_UpdateUserinfo (void) int slot; player_info_t *player; - slot = MSG_ReadByte (); + slot = MSG_ReadByte (net_message); if (slot >= MAX_CLIENTS) Host_EndGame ("CL_ParseServerMessage: svc_updateuserinfo > MAX_SCOREBOARD"); player = &cl.players[slot]; - player->userid = MSG_ReadLong (); - strncpy (player->userinfo, MSG_ReadString (), + player->userid = MSG_ReadLong (net_message); + strncpy (player->userinfo, MSG_ReadString (net_message), sizeof (player->userinfo) - 1); CL_ProcessUserInfo (slot, player); @@ -1015,15 +1015,15 @@ CL_SetInfo (void) char key[MAX_MSGLEN]; char value[MAX_MSGLEN]; - slot = MSG_ReadByte (); + slot = MSG_ReadByte (net_message); if (slot >= MAX_CLIENTS) Host_EndGame ("CL_ParseServerMessage: svc_setinfo > MAX_SCOREBOARD"); player = &cl.players[slot]; - strncpy (key, MSG_ReadString (), sizeof (key) - 1); + strncpy (key, MSG_ReadString (net_message), sizeof (key) - 1); key[sizeof (key) - 1] = 0; - strncpy (value, MSG_ReadString (), sizeof (value) - 1); + strncpy (value, MSG_ReadString (net_message), sizeof (value) - 1); key[sizeof (value) - 1] = 0; Con_DPrintf ("SETINFO %s: %s=%s\n", player->name, key, value); @@ -1042,9 +1042,9 @@ CL_ServerInfo (void) char key[MAX_MSGLEN]; char value[MAX_MSGLEN]; - strncpy (key, MSG_ReadString (), sizeof (key) - 1); + strncpy (key, MSG_ReadString (net_message), sizeof (key) - 1); key[sizeof (key) - 1] = 0; - strncpy (value, MSG_ReadString (), sizeof (value) - 1); + strncpy (value, MSG_ReadString (net_message), sizeof (value) - 1); key[sizeof (value) - 1] = 0; Con_DPrintf ("SERVERINFO: %s=%s\n", key, value); @@ -1093,7 +1093,7 @@ CL_MuzzleFlash (void) int i; player_state_t *pl; - i = MSG_ReadShort (); + i = MSG_ReadShort (net_message); if ((unsigned int) (i - 1) >= MAX_CLIENTS) return; @@ -1114,7 +1114,7 @@ CL_MuzzleFlash (void) } -#define SHOWNET(x) if (cl_shownet->int_val == 2) Con_Printf ("%3i:%s\n", msg_readcount-1, x); +#define SHOWNET(x) if (cl_shownet->int_val == 2) Con_Printf ("%3i:%s\n", net_message->readcount-1, x); /* CL_ParseServerMessage @@ -1135,7 +1135,7 @@ CL_ParseServerMessage (void) // if recording demos, copy the message out // if (cl_shownet->int_val == 1) - Con_Printf ("%i ", net_message.cursize); + Con_Printf ("%i ", net_message->message->cursize); else if (cl_shownet->int_val == 2) Con_Printf ("------------------\n"); @@ -1146,15 +1146,15 @@ CL_ParseServerMessage (void) // parse the message // while (1) { - if (msg_badread) { + if (net_message->badread) { Host_EndGame ("CL_ParseServerMessage: Bad server message"); break; } - cmd = MSG_ReadByte (); + cmd = MSG_ReadByte (net_message); if (cmd == -1) { - msg_readcount++; // so the EOM showner has the right + net_message->readcount++; // so the EOM showner has the right // value SHOWNET ("END OF MESSAGE"); break; @@ -1182,8 +1182,8 @@ CL_ParseServerMessage (void) break; case svc_print: - i = MSG_ReadByte (); - s = MSG_ReadString (); + i = MSG_ReadByte (net_message); + s = MSG_ReadString (net_message); if (i == PRINT_CHAT) { // TODO: cl_nofake 2 -- accept fake messages from // teammates @@ -1202,11 +1202,11 @@ CL_ParseServerMessage (void) break; case svc_centerprint: - SCR_CenterPrint (MSG_ReadString ()); + SCR_CenterPrint (MSG_ReadString (net_message)); break; case svc_stufftext: - s = MSG_ReadString (); + s = MSG_ReadString (net_message); Con_DPrintf ("stufftext: %s\n", s); Cbuf_AddText (s); break; @@ -1224,16 +1224,16 @@ CL_ParseServerMessage (void) case svc_setangle: for (i = 0; i < 3; i++) - cl.viewangles[i] = MSG_ReadAngle (); + cl.viewangles[i] = MSG_ReadAngle (net_message); // cl.viewangles[PITCH] = cl.viewangles[ROLL] = 0; break; case svc_lightstyle: - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= MAX_LIGHTSTYLES) // Sys_Error ("svc_lightstyle > MAX_LIGHTSTYLES"); Host_EndGame ("svc_lightstyle > MAX_LIGHTSTYLES"); - strcpy (cl_lightstyle[i].map, MSG_ReadString ()); + strcpy (cl_lightstyle[i].map, MSG_ReadString (net_message)); cl_lightstyle[i].length = strlen (cl_lightstyle[i].map); break; @@ -1242,46 +1242,46 @@ CL_ParseServerMessage (void) break; case svc_stopsound: - i = MSG_ReadShort (); + i = MSG_ReadShort (net_message); S_StopSound (i >> 3, i & 7); break; case svc_updatefrags: Sbar_Changed (); - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= MAX_CLIENTS) Host_EndGame ("CL_ParseServerMessage: svc_updatefrags > MAX_SCOREBOARD"); - cl.players[i].frags = MSG_ReadShort (); + cl.players[i].frags = MSG_ReadShort (net_message); break; case svc_updateping: - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= MAX_CLIENTS) Host_EndGame ("CL_ParseServerMessage: svc_updateping > MAX_SCOREBOARD"); - cl.players[i].ping = MSG_ReadShort (); + cl.players[i].ping = MSG_ReadShort (net_message); break; case svc_updatepl: - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= MAX_CLIENTS) Host_EndGame ("CL_ParseServerMessage: svc_updatepl > MAX_SCOREBOARD"); - cl.players[i].pl = MSG_ReadByte (); + cl.players[i].pl = MSG_ReadByte (net_message); break; case svc_updateentertime: // time is sent over as seconds ago - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); if (i >= MAX_CLIENTS) Host_EndGame ("CL_ParseServerMessage: svc_updateentertime > MAX_SCOREBOARD"); - cl.players[i].entertime = realtime - MSG_ReadFloat (); + cl.players[i].entertime = realtime - MSG_ReadFloat (net_message); break; case svc_spawnbaseline: - i = MSG_ReadShort (); + i = MSG_ReadShort (net_message); CL_ParseBaseline (&cl_baselines[i]); break; case svc_spawnstatic: @@ -1300,13 +1300,13 @@ CL_ParseServerMessage (void) break; case svc_updatestat: - i = MSG_ReadByte (); - j = MSG_ReadByte (); + i = MSG_ReadByte (net_message); + j = MSG_ReadByte (net_message); CL_SetStat (i, j); break; case svc_updatestatlong: - i = MSG_ReadByte (); - j = MSG_ReadLong (); + i = MSG_ReadByte (net_message); + j = MSG_ReadLong (net_message); CL_SetStat (i, j); break; @@ -1315,7 +1315,7 @@ CL_ParseServerMessage (void) break; case svc_cdtrack: - cl.cdtrack = MSG_ReadByte (); + cl.cdtrack = MSG_ReadByte (net_message); CDAudio_Play ((byte) cl.cdtrack, true); break; @@ -1326,12 +1326,12 @@ CL_ParseServerMessage (void) vid.recalc_refdef = true; // go to full screen Con_DPrintf ("intermission simorg: "); for (i = 0; i < 3; i++) { - cl.simorg[i] = MSG_ReadCoord (); + cl.simorg[i] = MSG_ReadCoord (net_message); Con_DPrintf ("%f ", cl.simorg[i]); } Con_DPrintf ("\nintermission simangles: "); for (i = 0; i < 3; i++) { - cl.simangles[i] = MSG_ReadAngle (); + cl.simangles[i] = MSG_ReadAngle (net_message); Con_DPrintf ("%f ", cl.simangles[i]); } Con_DPrintf ("\n"); @@ -1342,7 +1342,7 @@ CL_ParseServerMessage (void) cl.intermission = 2; cl.completed_time = realtime; vid.recalc_refdef = true; // go to full screen - SCR_CenterPrint (MSG_ReadString ()); + SCR_CenterPrint (MSG_ReadString (net_message)); break; case svc_sellscreen: @@ -1385,7 +1385,7 @@ CL_ParseServerMessage (void) break; case svc_chokecount: // some preceding packets were choked - i = MSG_ReadByte (); + i = MSG_ReadByte (net_message); for (j = 0; j < i; j++) cl. frames[(cls.netchan.incoming_acknowledged - 1 - j) & @@ -1409,15 +1409,15 @@ CL_ParseServerMessage (void) break; case svc_maxspeed: - movevars.maxspeed = MSG_ReadFloat (); + movevars.maxspeed = MSG_ReadFloat (net_message); break; case svc_entgravity: - movevars.entgravity = MSG_ReadFloat (); + movevars.entgravity = MSG_ReadFloat (net_message); break; case svc_setpause: - cl.paused = MSG_ReadByte (); + cl.paused = MSG_ReadByte (net_message); if (cl.paused) CDAudio_Pause (); else diff --git a/qw/source/cl_tent.c b/qw/source/cl_tent.c index 47540aba1..428102952 100644 --- a/qw/source/cl_tent.c +++ b/qw/source/cl_tent.c @@ -172,15 +172,15 @@ CL_ParseBeam (model_t *m) beam_t *b; int i; - ent = MSG_ReadShort (); + ent = MSG_ReadShort (net_message); - start[0] = MSG_ReadCoord (); - start[1] = MSG_ReadCoord (); - start[2] = MSG_ReadCoord (); + start[0] = MSG_ReadCoord (net_message); + start[1] = MSG_ReadCoord (net_message); + start[2] = MSG_ReadCoord (net_message); - end[0] = MSG_ReadCoord (); - end[1] = MSG_ReadCoord (); - end[2] = MSG_ReadCoord (); + end[0] = MSG_ReadCoord (net_message); + end[1] = MSG_ReadCoord (net_message); + end[2] = MSG_ReadCoord (net_message); // override any beam with the same entity for (i = 0, b = cl_beams; i < MAX_BEAMS; i++, b++) @@ -219,30 +219,30 @@ CL_ParseTEnt (void) explosion_t *ex; int cnt = -1; - type = MSG_ReadByte (); + type = MSG_ReadByte (net_message); switch (type) { case TE_WIZSPIKE: // spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunSpikeEffect (pos, type); // R_RunParticleEffect (pos, 20, 30); S_StartSound (-1, 0, cl_sfx_wizhit, pos, 1, 1); break; case TE_KNIGHTSPIKE: // spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunSpikeEffect (pos, type); // R_RunParticleEffect (pos, 226, 20); S_StartSound (-1, 0, cl_sfx_knighthit, pos, 1, 1); break; case TE_SPIKE: // spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunSpikeEffect (pos, type); // R_RunParticleEffect (pos, 0, 10); @@ -259,9 +259,9 @@ CL_ParseTEnt (void) } break; case TE_SUPERSPIKE: // super spike hitting wall - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunSpikeEffect (pos, type); // R_RunParticleEffect (pos, 0, 20); @@ -280,9 +280,9 @@ CL_ParseTEnt (void) case TE_EXPLOSION: // rocket explosion // particles - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_ParticleExplosion (pos); // light @@ -306,9 +306,9 @@ CL_ParseTEnt (void) break; case TE_TAREXPLOSION: // tarbaby explosion - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_BlobExplosion (pos); S_StartSound (-1, 0, cl_sfx_r_exp3, pos, 1, 1); @@ -327,26 +327,26 @@ CL_ParseTEnt (void) break; case TE_LAVASPLASH: - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_LavaSplash (pos); break; case TE_TELEPORT: - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_TeleportSplash (pos); break; case TE_GUNSHOT: // bullet hitting wall case TE_BLOOD: // bullets hitting body - cnt = MSG_ReadByte (); + cnt = MSG_ReadByte (net_message); case TE_LIGHTNINGBLOOD: // lightning hitting body - pos[0] = MSG_ReadCoord (); - pos[1] = MSG_ReadCoord (); - pos[2] = MSG_ReadCoord (); + pos[0] = MSG_ReadCoord (net_message); + pos[1] = MSG_ReadCoord (net_message); + pos[2] = MSG_ReadCoord (net_message); R_RunPuffEffect (pos, type, cnt); // R_RunParticleEffect (pos, 0, 20*cnt); break; diff --git a/qw/source/msg.c b/qw/source/msg.c deleted file mode 100644 index f977c962c..000000000 --- a/qw/source/msg.c +++ /dev/null @@ -1,404 +0,0 @@ -/* - msg.c - - (description) - - Copyright (C) 1996-1997 Id Software, Inc. - - 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 2 - 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, write to: - - Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA - - $Id$ -*/ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif -#ifdef HAVE_STRING_H -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif - -#include "msg.h" -#include "net.h" -#include "protocol.h" -#include "qendian.h" -#include "sys.h" - -/* - MESSAGE IO FUNCTIONS - - Handles byte ordering and avoids alignment errors -*/ - -// -// writing functions -// - -void -MSG_WriteChar (sizebuf_t *sb, int c) -{ - byte *buf; - -#ifdef PARANOID - if (c < -128 || c > 127) - Sys_Error ("MSG_WriteChar: range error"); -#endif - - buf = SZ_GetSpace (sb, 1); - buf[0] = c; -} - -void -MSG_WriteByte (sizebuf_t *sb, int c) -{ - byte *buf; - -#ifdef PARANOID - if (c < 0 || c > 255) - Sys_Error ("MSG_WriteByte: range error"); -#endif - - buf = SZ_GetSpace (sb, 1); - buf[0] = c; -} - -void -MSG_WriteShort (sizebuf_t *sb, int c) -{ - byte *buf; - -#ifdef PARANOID - if (c < ((short) 0x8000) || c > (short) 0x7fff) - Sys_Error ("MSG_WriteShort: range error"); -#endif - - buf = SZ_GetSpace (sb, 2); - buf[0] = c & 0xff; - buf[1] = c >> 8; -} - -void -MSG_WriteLong (sizebuf_t *sb, int c) -{ - byte *buf; - - buf = SZ_GetSpace (sb, 4); - buf[0] = c & 0xff; - buf[1] = (c >> 8) & 0xff; - buf[2] = (c >> 16) & 0xff; - buf[3] = c >> 24; -} - -void -MSG_WriteFloat (sizebuf_t *sb, float f) -{ - union { - float f; - int l; - } dat; - - - dat.f = f; - dat.l = LittleLong (dat.l); - - SZ_Write (sb, &dat.l, 4); -} - -void -MSG_WriteString (sizebuf_t *sb, char *s) -{ - if (!s) - SZ_Write (sb, "", 1); - else - SZ_Write (sb, s, strlen (s) + 1); -} - -void -MSG_WriteCoord (sizebuf_t *sb, float f) -{ - MSG_WriteShort (sb, (int) (f * 8)); -} - -void -MSG_WriteAngle (sizebuf_t *sb, float f) -{ - MSG_WriteByte (sb, (int) (f * 256 / 360) & 255); -} - -void -MSG_WriteAngle16 (sizebuf_t *sb, float f) -{ - MSG_WriteShort (sb, (int) (f * 65536 / 360) & 65535); -} - -void -MSG_WriteDeltaUsercmd (sizebuf_t *buf, usercmd_t *from, usercmd_t *cmd) -{ - int bits; - -// -// send the movement message -// - bits = 0; - if (cmd->angles[0] != from->angles[0]) - bits |= CM_ANGLE1; - if (cmd->angles[1] != from->angles[1]) - bits |= CM_ANGLE2; - if (cmd->angles[2] != from->angles[2]) - bits |= CM_ANGLE3; - if (cmd->forwardmove != from->forwardmove) - bits |= CM_FORWARD; - if (cmd->sidemove != from->sidemove) - bits |= CM_SIDE; - if (cmd->upmove != from->upmove) - bits |= CM_UP; - if (cmd->buttons != from->buttons) - bits |= CM_BUTTONS; - if (cmd->impulse != from->impulse) - bits |= CM_IMPULSE; - - MSG_WriteByte (buf, bits); - - if (bits & CM_ANGLE1) - MSG_WriteAngle16 (buf, cmd->angles[0]); - if (bits & CM_ANGLE2) - MSG_WriteAngle16 (buf, cmd->angles[1]); - if (bits & CM_ANGLE3) - MSG_WriteAngle16 (buf, cmd->angles[2]); - - if (bits & CM_FORWARD) - MSG_WriteShort (buf, cmd->forwardmove); - if (bits & CM_SIDE) - MSG_WriteShort (buf, cmd->sidemove); - if (bits & CM_UP) - MSG_WriteShort (buf, cmd->upmove); - - if (bits & CM_BUTTONS) - MSG_WriteByte (buf, cmd->buttons); - if (bits & CM_IMPULSE) - MSG_WriteByte (buf, cmd->impulse); - MSG_WriteByte (buf, cmd->msec); -} - - -// -// reading functions -// -int msg_readcount; -qboolean msg_badread; - -void -MSG_BeginReading (void) -{ - msg_readcount = 0; - msg_badread = false; -} - -int -MSG_GetReadCount (void) -{ - return msg_readcount; -} - -// returns -1 and sets msg_badread if no more characters are available -int -MSG_ReadChar (void) -{ - int c; - - if (msg_readcount + 1 > net_message.cursize) { - msg_badread = true; - return -1; - } - - c = (signed char) net_message.data[msg_readcount]; - msg_readcount++; - - return c; -} - -int -MSG_ReadByte (void) -{ - int c; - - if (msg_readcount + 1 > net_message.cursize) { - msg_badread = true; - return -1; - } - - c = (unsigned char) net_message.data[msg_readcount]; - msg_readcount++; - - return c; -} - -int -MSG_ReadShort (void) -{ - int c; - - if (msg_readcount + 2 > net_message.cursize) { - msg_badread = true; - return -1; - } - - c = (short) (net_message.data[msg_readcount] - + (net_message.data[msg_readcount + 1] << 8)); - - msg_readcount += 2; - - return c; -} - -int -MSG_ReadLong (void) -{ - int c; - - if (msg_readcount + 4 > net_message.cursize) { - msg_badread = true; - return -1; - } - - c = net_message.data[msg_readcount] - + (net_message.data[msg_readcount + 1] << 8) - + (net_message.data[msg_readcount + 2] << 16) - + (net_message.data[msg_readcount + 3] << 24); - - msg_readcount += 4; - - return c; -} - -float -MSG_ReadFloat (void) -{ - union { - byte b[4]; - float f; - int l; - } dat; - - dat.b[0] = net_message.data[msg_readcount]; - dat.b[1] = net_message.data[msg_readcount + 1]; - dat.b[2] = net_message.data[msg_readcount + 2]; - dat.b[3] = net_message.data[msg_readcount + 3]; - msg_readcount += 4; - - dat.l = LittleLong (dat.l); - - return dat.f; -} - -char * -MSG_ReadString (void) -{ - static char string[2048]; - int l, c; - - l = 0; - do { - c = MSG_ReadChar (); - if (c == -1 || c == 0) - break; - string[l] = c; - l++; - } while (l < sizeof (string) - 1); - - string[l] = 0; - - return string; -} - -char * -MSG_ReadStringLine (void) -{ - static char string[2048]; - int l, c; - - l = 0; - do { - c = MSG_ReadChar (); - if (c == -1 || c == 0 || c == '\n') - break; - string[l] = c; - l++; - } while (l < sizeof (string) - 1); - - string[l] = 0; - - return string; -} - -float -MSG_ReadCoord (void) -{ - return MSG_ReadShort () * (1.0 / 8); -} - -float -MSG_ReadAngle (void) -{ - return MSG_ReadChar () * (360.0 / 256); -} - -float -MSG_ReadAngle16 (void) -{ - return MSG_ReadShort () * (360.0 / 65536); -} - -void -MSG_ReadDeltaUsercmd (usercmd_t *from, usercmd_t *move) -{ - int bits; - - memcpy (move, from, sizeof (*move)); - - bits = MSG_ReadByte (); - -// read current angles - if (bits & CM_ANGLE1) - move->angles[0] = MSG_ReadAngle16 (); - if (bits & CM_ANGLE2) - move->angles[1] = MSG_ReadAngle16 (); - if (bits & CM_ANGLE3) - move->angles[2] = MSG_ReadAngle16 (); - -// read movement - if (bits & CM_FORWARD) - move->forwardmove = MSG_ReadShort (); - if (bits & CM_SIDE) - move->sidemove = MSG_ReadShort (); - if (bits & CM_UP) - move->upmove = MSG_ReadShort (); - -// read buttons - if (bits & CM_BUTTONS) - move->buttons = MSG_ReadByte (); - - if (bits & CM_IMPULSE) - move->impulse = MSG_ReadByte (); - -// read time to run command - move->msec = MSG_ReadByte (); -} diff --git a/qw/source/msg_ucmd.c b/qw/source/msg_ucmd.c new file mode 100644 index 000000000..e55d651e1 --- /dev/null +++ b/qw/source/msg_ucmd.c @@ -0,0 +1,130 @@ +/* + msg.c + + (description) + + Copyright (C) 1996-1997 Id Software, Inc. + + 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 2 + 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, write to: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + + $Id$ +*/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "msg.h" +#include "net.h" +#include "protocol.h" +#include "qendian.h" +#include "sys.h" + +struct usercmd_s nullcmd; + +void +MSG_WriteDeltaUsercmd (sizebuf_t *buf, usercmd_t *from, usercmd_t *cmd) +{ + int bits; + +// +// send the movement message +// + bits = 0; + if (cmd->angles[0] != from->angles[0]) + bits |= CM_ANGLE1; + if (cmd->angles[1] != from->angles[1]) + bits |= CM_ANGLE2; + if (cmd->angles[2] != from->angles[2]) + bits |= CM_ANGLE3; + if (cmd->forwardmove != from->forwardmove) + bits |= CM_FORWARD; + if (cmd->sidemove != from->sidemove) + bits |= CM_SIDE; + if (cmd->upmove != from->upmove) + bits |= CM_UP; + if (cmd->buttons != from->buttons) + bits |= CM_BUTTONS; + if (cmd->impulse != from->impulse) + bits |= CM_IMPULSE; + + MSG_WriteByte (buf, bits); + + if (bits & CM_ANGLE1) + MSG_WriteAngle16 (buf, cmd->angles[0]); + if (bits & CM_ANGLE2) + MSG_WriteAngle16 (buf, cmd->angles[1]); + if (bits & CM_ANGLE3) + MSG_WriteAngle16 (buf, cmd->angles[2]); + + if (bits & CM_FORWARD) + MSG_WriteShort (buf, cmd->forwardmove); + if (bits & CM_SIDE) + MSG_WriteShort (buf, cmd->sidemove); + if (bits & CM_UP) + MSG_WriteShort (buf, cmd->upmove); + + if (bits & CM_BUTTONS) + MSG_WriteByte (buf, cmd->buttons); + if (bits & CM_IMPULSE) + MSG_WriteByte (buf, cmd->impulse); + MSG_WriteByte (buf, cmd->msec); +} + +void +MSG_ReadDeltaUsercmd (usercmd_t *from, usercmd_t *move) +{ + int bits; + + memcpy (move, from, sizeof (*move)); + + bits = MSG_ReadByte (net_message); + +// read current angles + if (bits & CM_ANGLE1) + move->angles[0] = MSG_ReadAngle16 (net_message); + if (bits & CM_ANGLE2) + move->angles[1] = MSG_ReadAngle16 (net_message); + if (bits & CM_ANGLE3) + move->angles[2] = MSG_ReadAngle16 (net_message); + +// read movement + if (bits & CM_FORWARD) + move->forwardmove = MSG_ReadShort (net_message); + if (bits & CM_SIDE) + move->sidemove = MSG_ReadShort (net_message); + if (bits & CM_UP) + move->upmove = MSG_ReadShort (net_message); + +// read buttons + if (bits & CM_BUTTONS) + move->buttons = MSG_ReadByte (net_message); + + if (bits & CM_IMPULSE) + move->impulse = MSG_ReadByte (net_message); + +// read time to run command + move->msec = MSG_ReadByte (net_message); +} diff --git a/qw/source/net_chan.c b/qw/source/net_chan.c index 63750ca3c..709f6fd46 100644 --- a/qw/source/net_chan.c +++ b/qw/source/net_chan.c @@ -350,13 +350,13 @@ Netchan_Process (netchan_t *chan) } // get sequence numbers - MSG_BeginReading (); - sequence = MSG_ReadLong (); - sequence_ack = MSG_ReadLong (); + MSG_BeginReading (net_message); + sequence = MSG_ReadLong (net_message); + sequence_ack = MSG_ReadLong (net_message); // read the qport if we are a server if (is_server) - qport = MSG_ReadShort (); + qport = MSG_ReadShort (net_message); reliable_message = sequence >> 31; reliable_ack = sequence_ack >> 31; @@ -366,7 +366,7 @@ Netchan_Process (netchan_t *chan) if (showpackets->int_val) Con_Printf ("<-- s=%i(%i) a=%i(%i) %i\n", sequence, reliable_message, - sequence_ack, reliable_ack, net_message.cursize); + sequence_ack, reliable_ack, net_message->message->cursize); // get a rate estimation #if 0 diff --git a/qw/source/net_udp.c b/qw/source/net_udp.c index e74714845..ac28bb891 100644 --- a/qw/source/net_udp.c +++ b/qw/source/net_udp.c @@ -69,6 +69,7 @@ #endif #include "console.h" +#include "msg.h" #include "net.h" #include "sys.h" #include "qargs.h" @@ -94,9 +95,12 @@ netadr_t net_local_adr; netadr_t net_from; -sizebuf_t net_message; int net_socket; +static sizebuf_t _net_message_message; +static msg_t _net_message = {0, 0, &_net_message_message}; +msg_t *net_message = &_net_message; + extern qboolean is_server; #define MAX_UDP_PACKET (MAX_MSGLEN*2) @@ -296,14 +300,14 @@ NET_GetPacket (void) return false; } - net_message.cursize = ret; + _net_message_message.cursize = ret; if (ret == sizeof (net_message_buffer)) { Con_Printf ("Oversize packet from %s\n", NET_AdrToString (net_from)); return false; } #ifdef PACKET_LOGGING - Log_Incoming_Packet(net_message_buffer,net_message.cursize); + Log_Incoming_Packet(net_message_buffer,_net_message_message.cursize); #endif return ret; } @@ -432,8 +436,8 @@ NET_Init (int port) // // init the message buffer // - net_message.maxsize = sizeof (net_message_buffer); - net_message.data = net_message_buffer; + _net_message_message.maxsize = sizeof (net_message_buffer); + _net_message_message.data = net_message_buffer; // // determine my name & address diff --git a/qw/source/net_udp6.c b/qw/source/net_udp6.c index 1d6a5cd41..71de55620 100644 --- a/qw/source/net_udp6.c +++ b/qw/source/net_udp6.c @@ -94,6 +94,7 @@ #endif #include "console.h" +#include "msg.h" #include "net.h" #include "qargs.h" #include "qtypes.h" @@ -111,9 +112,12 @@ netadr_t net_local_adr; netadr_t net_from; -sizebuf_t net_message; int net_socket; +static sizebuf_t _net_message_message; +static msg_t _net_message = {0, 0, &_net_message_message}; +msg_t *net_message = &_net_message; + #define MAX_UDP_PACKET (MAX_MSGLEN*2) byte net_message_buffer[MAX_UDP_PACKET]; @@ -378,7 +382,7 @@ NET_GetPacket (void) return false; } - net_message.cursize = ret; + _net_message_message.cursize = ret; if (ret == sizeof (net_message_buffer)) { Con_Printf ("Oversize packet from %s\n", NET_AdrToString (net_from)); return false; @@ -547,8 +551,8 @@ NET_Init (int port) // // init the message buffer // - net_message.maxsize = sizeof (net_message_buffer); - net_message.data = net_message_buffer; + _net_message_message.maxsize = sizeof (net_message_buffer); + _net_message_message.data = net_message_buffer; // // determine my name & address diff --git a/qw/source/r_view.c b/qw/source/r_view.c index 6d1261541..6f953a189 100644 --- a/qw/source/r_view.c +++ b/qw/source/r_view.c @@ -299,10 +299,10 @@ V_ParseDamage (void) float side; float count; - armor = MSG_ReadByte (); - blood = MSG_ReadByte (); + armor = MSG_ReadByte (net_message); + blood = MSG_ReadByte (net_message); for (i = 0; i < 3; i++) - from[i] = MSG_ReadCoord (); + from[i] = MSG_ReadCoord (net_message); count = blood * 0.5 + armor * 0.5; if (count < 10) diff --git a/qw/source/sv_ents.c b/qw/source/sv_ents.c index 699307193..1e6b085d1 100644 --- a/qw/source/sv_ents.c +++ b/qw/source/sv_ents.c @@ -37,6 +37,7 @@ #endif #include "msg.h" +#include "msg_ucmd.h" #include "server.h" #include "sys.h" diff --git a/qw/source/sv_main.c b/qw/source/sv_main.c index 363a689ea..d0651f894 100644 --- a/qw/source/sv_main.c +++ b/qw/source/sv_main.c @@ -221,16 +221,16 @@ SV_FinalMessage (char *message) int i; client_t *cl; - SZ_Clear (&net_message); - MSG_WriteByte (&net_message, svc_print); - MSG_WriteByte (&net_message, PRINT_HIGH); - MSG_WriteString (&net_message, message); - MSG_WriteByte (&net_message, svc_disconnect); + SZ_Clear (net_message->message); + MSG_WriteByte (net_message->message, svc_print); + MSG_WriteByte (net_message->message, PRINT_HIGH); + MSG_WriteString (net_message->message, message); + MSG_WriteByte (net_message->message, svc_disconnect); for (i = 0, cl = svs.clients; i < MAX_CLIENTS; i++, cl++) if (cl->state >= cs_spawned) - Netchan_Transmit (&cl->netchan, net_message.cursize, - net_message.data); + Netchan_Transmit (&cl->netchan, net_message->message->cursize, + net_message->message->data); } /* @@ -889,7 +889,7 @@ SVC_RemoteCommand (void) if (!Rcon_Validate ()) { Con_Printf ("Bad rcon from %s:\n%s\n", NET_AdrToString (net_from), - net_message.data + 4); + net_message->message->data + 4); SV_BeginRedirect (RD_PACKET); @@ -932,10 +932,10 @@ SV_ConnectionlessPacket (void) char *s; char *c; - MSG_BeginReading (); - MSG_ReadLong (); // skip the -1 marker + MSG_BeginReading (net_message); + MSG_ReadLong (net_message); // skip the -1 marker - s = MSG_ReadStringLine (); + s = MSG_ReadStringLine (net_message); Cmd_TokenizeString (s); @@ -1270,21 +1270,21 @@ SV_ReadPackets (void) continue; } // check for connectionless packet (0xffffffff) first - if (*(int *) net_message.data == -1) { + if (*(int *) net_message->message->data == -1) { SV_ConnectionlessPacket (); continue; } - if (net_message.cursize < 11) { + if (net_message->message->cursize < 11) { Con_Printf ("%s: Runt packet\n", NET_AdrToString (net_from)); continue; } // read the qport out of the message so we can fix up // stupid address translating routers - MSG_BeginReading (); - MSG_ReadLong (); // sequence number - MSG_ReadLong (); // sequence number - qport = MSG_ReadShort () & 0xffff; + MSG_BeginReading (net_message); + MSG_ReadLong (net_message); // sequence number + MSG_ReadLong (net_message); // sequence number + qport = MSG_ReadShort (net_message) & 0xffff; // check for packets from connected clients for (i = 0, cl = svs.clients; i < MAX_CLIENTS; i++, cl++) { diff --git a/qw/source/sv_user.c b/qw/source/sv_user.c index 094e2daf4..3b1e4002a 100644 --- a/qw/source/sv_user.c +++ b/qw/source/sv_user.c @@ -46,6 +46,7 @@ #include "cmd.h" #include "cvar.h" #include "msg.h" +#include "msg_ucmd.h" #include "pmove.h" #include "quakefs.h" #include "server.h" @@ -600,14 +601,14 @@ SV_NextUpload (void) ClientReliableWrite_String (host_client, "stopul"); // suck out rest of packet - size = MSG_ReadShort (); - MSG_ReadByte (); - msg_readcount += size; + size = MSG_ReadShort (net_message); + MSG_ReadByte (net_message); + net_message->readcount += size; return; } - size = MSG_ReadShort (); - percent = MSG_ReadByte (); + size = MSG_ReadShort (net_message); + percent = MSG_ReadByte (net_message); if (!host_client->upload) { host_client->upload = Qopen (host_client->uploadfn, "wb"); @@ -626,8 +627,8 @@ SV_NextUpload (void) host_client->uploadfn, host_client->userid); } - Qwrite (host_client->upload, net_message.data + msg_readcount, size); - msg_readcount += size; + Qwrite (host_client->upload, net_message->message->data + net_message->readcount, size); + net_message->readcount += size; Con_DPrintf ("UPLOAD: %d received\n", size); @@ -1653,13 +1654,13 @@ SV_ExecuteClientMessage (client_t *cl) cl->localtime = sv.time; cl->delta_sequence = -1; // no delta unless requested while (1) { - if (msg_badread) { + if (net_message->badread) { Con_Printf ("SV_ReadClientMessage: badread\n"); SV_DropClient (cl); return; } - c = MSG_ReadByte (); + c = MSG_ReadByte (net_message); if (c == -1) return; // Ender: Patched :) @@ -1673,7 +1674,7 @@ SV_ExecuteClientMessage (client_t *cl) break; case clc_delta: - cl->delta_sequence = MSG_ReadByte (); + cl->delta_sequence = MSG_ReadByte (net_message); break; case clc_move: @@ -1682,11 +1683,11 @@ SV_ExecuteClientMessage (client_t *cl) move_issued = true; - checksumIndex = MSG_GetReadCount (); - checksum = (byte) MSG_ReadByte (); + checksumIndex = MSG_GetReadCount (net_message); + checksum = (byte) MSG_ReadByte (net_message); // read loss percentage - cl->lossage = MSG_ReadByte (); + cl->lossage = MSG_ReadByte (net_message); MSG_ReadDeltaUsercmd (&nullcmd, &oldest); MSG_ReadDeltaUsercmd (&oldest, &oldcmd); @@ -1697,9 +1698,9 @@ SV_ExecuteClientMessage (client_t *cl) // if the checksum fails, ignore the rest of the packet calculatedChecksum = - COM_BlockSequenceCRCByte (net_message.data + checksumIndex + + COM_BlockSequenceCRCByte (net_message->message->data + checksumIndex + 1, - MSG_GetReadCount () - + MSG_GetReadCount (net_message) - checksumIndex - 1, seq_hash); if (calculatedChecksum != checksum) { @@ -1734,14 +1735,14 @@ SV_ExecuteClientMessage (client_t *cl) case clc_stringcmd: - s = MSG_ReadString (); + s = MSG_ReadString (net_message); SV_ExecuteUserCommand (s); break; case clc_tmove: - o[0] = MSG_ReadCoord (); - o[1] = MSG_ReadCoord (); - o[2] = MSG_ReadCoord (); + o[0] = MSG_ReadCoord (net_message); + o[1] = MSG_ReadCoord (net_message); + o[2] = MSG_ReadCoord (net_message); // only allowed by spectators if (host_client->spectator) { VectorCopy (o, sv_player->v.v.origin);