- add a net_status_t enum, containing NET_OK, NET_SHORT, and

NET_ERROR.
- change all the NET_SVC_*_Parse return values from qboolean to
  net_status_t
- make NET_SVC_{,Delta}PacketEntities_Parse return NET_ERROR instead
  of 1 (NET_SHORT now) if the struct size is exceeded
This commit is contained in:
Adam Olsen 2001-11-02 06:00:21 +00:00
parent 166ce6d8ce
commit 1c30d89149
2 changed files with 47 additions and 40 deletions

View file

@ -35,6 +35,13 @@
#include "bothdefs.h" #include "bothdefs.h"
#include "pmove.h" #include "pmove.h"
typedef enum
{
NET_OK,
NET_SHORT,
NET_ERROR
} net_status_t;
typedef struct net_svc_print_s typedef struct net_svc_print_s
{ {
byte level; byte level;
@ -192,28 +199,28 @@ typedef struct net_svc_deltapacketentities_s
entity_state_t deltas[MAX_PACKET_ENTITIES]; entity_state_t deltas[MAX_PACKET_ENTITIES];
} net_svc_deltapacketentities_t; } net_svc_deltapacketentities_t;
qboolean NET_SVC_Print_Parse (net_svc_print_t *block, msg_t *msg); net_status_t NET_SVC_Print_Parse (net_svc_print_t *block, msg_t *msg);
qboolean NET_SVC_Damage_Parse (net_svc_damage_t *block, msg_t *msg); net_status_t NET_SVC_Damage_Parse (net_svc_damage_t *block, msg_t *msg);
qboolean NET_SVC_ServerData_Parse (net_svc_serverdata_t *block, msg_t *msg); net_status_t NET_SVC_ServerData_Parse (net_svc_serverdata_t *block, msg_t *msg);
qboolean NET_SVC_Sound_Parse (net_svc_sound_t *block, msg_t *msg); net_status_t NET_SVC_Sound_Parse (net_svc_sound_t *block, msg_t *msg);
qboolean NET_SVC_SpawnBaseline_Parse (net_svc_spawnbaseline_t *block, net_status_t NET_SVC_SpawnBaseline_Parse (net_svc_spawnbaseline_t *block,
msg_t *msg); msg_t *msg);
qboolean NET_SVC_SpawnStatic_Parse (net_svc_spawnstatic_t *block, msg_t *msg); net_status_t NET_SVC_SpawnStatic_Parse (net_svc_spawnstatic_t *block, msg_t *msg);
qboolean NET_SVC_TempEntity_Parse (net_svc_tempentity_t *block, msg_t *msg); net_status_t NET_SVC_TempEntity_Parse (net_svc_tempentity_t *block, msg_t *msg);
qboolean NET_SVC_SpawnStaticSound_Parse (net_svc_spawnstaticsound_t *block, net_status_t NET_SVC_SpawnStaticSound_Parse (net_svc_spawnstaticsound_t *block,
msg_t *msg); msg_t *msg);
qboolean NET_SVC_UpdateUserInfo_Parse (net_svc_updateuserinfo_t *block, net_status_t NET_SVC_UpdateUserInfo_Parse (net_svc_updateuserinfo_t *block,
msg_t *msg); msg_t *msg);
qboolean NET_SVC_SetInfo_Parse (net_svc_setinfo_t *block, msg_t *msg); net_status_t NET_SVC_SetInfo_Parse (net_svc_setinfo_t *block, msg_t *msg);
qboolean NET_SVC_ServerInfo_Parse (net_svc_serverinfo_t *block, msg_t *msg); net_status_t NET_SVC_ServerInfo_Parse (net_svc_serverinfo_t *block, msg_t *msg);
qboolean NET_SVC_Download_Parse (net_svc_download_t *block, msg_t *msg); net_status_t NET_SVC_Download_Parse (net_svc_download_t *block, msg_t *msg);
qboolean NET_SVC_Playerinfo_Parse (net_svc_playerinfo_t *block, msg_t *msg); net_status_t NET_SVC_Playerinfo_Parse (net_svc_playerinfo_t *block, msg_t *msg);
qboolean NET_SVC_Nails_Parse (net_svc_nails_t *block, msg_t *msg); net_status_t NET_SVC_Nails_Parse (net_svc_nails_t *block, msg_t *msg);
qboolean NET_SVC_Modellist_Parse (net_svc_modellist_t *block, msg_t *msg); net_status_t NET_SVC_Modellist_Parse (net_svc_modellist_t *block, msg_t *msg);
qboolean NET_SVC_Soundlist_Parse (net_svc_soundlist_t *block, msg_t *msg); net_status_t NET_SVC_Soundlist_Parse (net_svc_soundlist_t *block, msg_t *msg);
qboolean NET_SVC_PacketEntities_Parse (net_svc_packetentities_t *block, net_status_t NET_SVC_PacketEntities_Parse (net_svc_packetentities_t *block,
msg_t *msg); msg_t *msg);
qboolean NET_SVC_DeltaPacketEntities_Parse (net_svc_deltapacketentities_t *block, net_status_t NET_SVC_DeltaPacketEntities_Parse (net_svc_deltapacketentities_t *block,
msg_t *msg); msg_t *msg);
#endif // NET_SVC_H #endif // NET_SVC_H

View file

@ -51,7 +51,7 @@ static const char rcsid[] =
#include "msg_ucmd.h" // FIXME #include "msg_ucmd.h" // FIXME
#include "net_svc.h" #include "net_svc.h"
qboolean net_status_t
NET_SVC_Print_Parse (net_svc_print_t *block, msg_t *msg) NET_SVC_Print_Parse (net_svc_print_t *block, msg_t *msg)
{ {
block->level = MSG_ReadByte (msg); block->level = MSG_ReadByte (msg);
@ -60,7 +60,7 @@ NET_SVC_Print_Parse (net_svc_print_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Damage_Parse (net_svc_damage_t *block, msg_t *msg) NET_SVC_Damage_Parse (net_svc_damage_t *block, msg_t *msg)
{ {
int i; int i;
@ -73,7 +73,7 @@ NET_SVC_Damage_Parse (net_svc_damage_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_ServerData_Parse (net_svc_serverdata_t *block, msg_t *msg) NET_SVC_ServerData_Parse (net_svc_serverdata_t *block, msg_t *msg)
{ {
block->protocolversion = MSG_ReadLong (msg); block->protocolversion = MSG_ReadLong (msg);
@ -101,7 +101,7 @@ NET_SVC_ServerData_Parse (net_svc_serverdata_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Sound_Parse (net_svc_sound_t *block, msg_t *msg) NET_SVC_Sound_Parse (net_svc_sound_t *block, msg_t *msg)
{ {
int i, header; int i, header;
@ -128,7 +128,7 @@ NET_SVC_Sound_Parse (net_svc_sound_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_SpawnBaseline_Parse (net_svc_spawnbaseline_t *block, msg_t *msg) NET_SVC_SpawnBaseline_Parse (net_svc_spawnbaseline_t *block, msg_t *msg)
{ {
int i; int i;
@ -148,7 +148,7 @@ NET_SVC_SpawnBaseline_Parse (net_svc_spawnbaseline_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_SpawnStatic_Parse (net_svc_spawnstatic_t *block, msg_t *msg) NET_SVC_SpawnStatic_Parse (net_svc_spawnstatic_t *block, msg_t *msg)
{ {
int i; int i;
@ -167,7 +167,7 @@ NET_SVC_SpawnStatic_Parse (net_svc_spawnstatic_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_TempEntity_Parse (net_svc_tempentity_t *block, msg_t *msg) NET_SVC_TempEntity_Parse (net_svc_tempentity_t *block, msg_t *msg)
{ {
int i; int i;
@ -213,7 +213,7 @@ NET_SVC_TempEntity_Parse (net_svc_tempentity_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_SpawnStaticSound_Parse (net_svc_spawnstaticsound_t *block, NET_SVC_SpawnStaticSound_Parse (net_svc_spawnstaticsound_t *block,
msg_t *msg) msg_t *msg)
{ {
@ -228,7 +228,7 @@ NET_SVC_SpawnStaticSound_Parse (net_svc_spawnstaticsound_t *block,
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_UpdateUserInfo_Parse (net_svc_updateuserinfo_t *block, NET_SVC_UpdateUserInfo_Parse (net_svc_updateuserinfo_t *block,
msg_t *msg) msg_t *msg)
{ {
@ -239,7 +239,7 @@ NET_SVC_UpdateUserInfo_Parse (net_svc_updateuserinfo_t *block,
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_SetInfo_Parse (net_svc_setinfo_t *block, msg_t *msg) NET_SVC_SetInfo_Parse (net_svc_setinfo_t *block, msg_t *msg)
{ {
block->slot = MSG_ReadByte (msg); block->slot = MSG_ReadByte (msg);
@ -249,7 +249,7 @@ NET_SVC_SetInfo_Parse (net_svc_setinfo_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_ServerInfo_Parse (net_svc_serverinfo_t *block, msg_t *msg) NET_SVC_ServerInfo_Parse (net_svc_serverinfo_t *block, msg_t *msg)
{ {
block->key = MSG_ReadString (msg); block->key = MSG_ReadString (msg);
@ -258,7 +258,7 @@ NET_SVC_ServerInfo_Parse (net_svc_serverinfo_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Download_Parse (net_svc_download_t *block, msg_t *msg) NET_SVC_Download_Parse (net_svc_download_t *block, msg_t *msg)
{ {
block->size = MSG_ReadShort (msg); block->size = MSG_ReadShort (msg);
@ -283,7 +283,7 @@ NET_SVC_Download_Parse (net_svc_download_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Playerinfo_Parse (net_svc_playerinfo_t *block, msg_t *msg) NET_SVC_Playerinfo_Parse (net_svc_playerinfo_t *block, msg_t *msg)
{ {
int i; int i;
@ -333,7 +333,7 @@ NET_SVC_Playerinfo_Parse (net_svc_playerinfo_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Nails_Parse (net_svc_nails_t *block, msg_t *msg) NET_SVC_Nails_Parse (net_svc_nails_t *block, msg_t *msg)
{ {
int i, j; int i, j;
@ -364,7 +364,7 @@ NET_SVC_Nails_Parse (net_svc_nails_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Modellist_Parse (net_svc_modellist_t *block, msg_t *msg) NET_SVC_Modellist_Parse (net_svc_modellist_t *block, msg_t *msg)
{ {
int i; int i;
@ -384,7 +384,7 @@ NET_SVC_Modellist_Parse (net_svc_modellist_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_Soundlist_Parse (net_svc_soundlist_t *block, msg_t *msg) NET_SVC_Soundlist_Parse (net_svc_soundlist_t *block, msg_t *msg)
{ {
int i; int i;
@ -478,7 +478,7 @@ NET_SVC_Delta_Parse (entity_state_t *es, unsigned int bits, msg_t *msg)
} }
qboolean net_status_t
NET_SVC_PacketEntities_Parse (net_svc_packetentities_t *block, msg_t *msg) NET_SVC_PacketEntities_Parse (net_svc_packetentities_t *block, msg_t *msg)
{ {
int word, delta; int word, delta;
@ -486,14 +486,14 @@ NET_SVC_PacketEntities_Parse (net_svc_packetentities_t *block, msg_t *msg)
for (word = 0, delta = 0; !msg->badread; word++) { for (word = 0, delta = 0; !msg->badread; word++) {
if (word >= MAX_PACKET_ENTITIES * 2) if (word >= MAX_PACKET_ENTITIES * 2)
return 1; // FIXME: differentiate from short packet return NET_ERROR;
bits = (unsigned short) MSG_ReadShort (msg); bits = (unsigned short) MSG_ReadShort (msg);
block->words[word] = bits; block->words[word] = bits;
if (!bits) if (!bits)
break; break;
if (!(bits & U_REMOVE)) { if (!(bits & U_REMOVE)) {
if (delta >= MAX_PACKET_ENTITIES) if (delta >= MAX_PACKET_ENTITIES)
return 1; return NET_ERROR;
NET_SVC_Delta_Parse (&block->deltas[delta], bits, msg); NET_SVC_Delta_Parse (&block->deltas[delta], bits, msg);
delta++; delta++;
} }
@ -505,7 +505,7 @@ NET_SVC_PacketEntities_Parse (net_svc_packetentities_t *block, msg_t *msg)
return msg->badread; return msg->badread;
} }
qboolean net_status_t
NET_SVC_DeltaPacketEntities_Parse (net_svc_deltapacketentities_t *block, NET_SVC_DeltaPacketEntities_Parse (net_svc_deltapacketentities_t *block,
msg_t *msg) msg_t *msg)
{ {
@ -515,14 +515,14 @@ NET_SVC_DeltaPacketEntities_Parse (net_svc_deltapacketentities_t *block,
block->from = MSG_ReadByte (msg); block->from = MSG_ReadByte (msg);
for (word = 0, delta = 0; !msg->badread; word++) { for (word = 0, delta = 0; !msg->badread; word++) {
if (word >= MAX_PACKET_ENTITIES * 2) if (word >= MAX_PACKET_ENTITIES * 2)
return 1; // FIXME: differentiate from short packet return NET_ERROR;
bits = (unsigned short) MSG_ReadShort (msg); bits = (unsigned short) MSG_ReadShort (msg);
block->words[word] = bits; block->words[word] = bits;
if (!bits) if (!bits)
break; break;
if (!(bits & U_REMOVE)) { if (!(bits & U_REMOVE)) {
if (delta >= MAX_PACKET_ENTITIES) if (delta >= MAX_PACKET_ENTITIES)
return 1; return NET_ERROR;
NET_SVC_Delta_Parse (&block->deltas[delta], bits, msg); NET_SVC_Delta_Parse (&block->deltas[delta], bits, msg);
delta++; delta++;
} }