summaryrefslogtreecommitdiff
path: root/source/sv_local.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/sv_local.h')
-rw-r--r--source/sv_local.h304
1 files changed, 155 insertions, 149 deletions
diff --git a/source/sv_local.h b/source/sv_local.h
index 224dc87..f4cfaf9 100644
--- a/source/sv_local.h
+++ b/source/sv_local.h
@@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// server.h
-//define PARANOID // speed sapping error checking
+//define PARANOID // speed sapping error checking
#include "com_local.h"
#include "q_list.h"
@@ -45,31 +45,31 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//=============================================================================
-#define MAX_MASTERS 8 // max recipients for heartbeat packets
-#define HEARTBEAT_SECONDS 300
+#define MAX_MASTERS 8 // max recipients for heartbeat packets
+#define HEARTBEAT_SECONDS 300
#define SV_Malloc( size ) Z_TagMalloc( size, TAG_SERVER )
#define SV_Mallocz( size ) Z_TagMallocz( size, TAG_SERVER )
-#define SV_CopyString( s ) Z_TagCopyString( s, TAG_SERVER )
+#define SV_CopyString( s ) Z_TagCopyString( s, TAG_SERVER )
-#define SV_BASELINES_SHIFT 6
-#define SV_BASELINES_PER_CHUNK ( 1 << SV_BASELINES_SHIFT )
-#define SV_BASELINES_MASK ( SV_BASELINES_PER_CHUNK - 1 )
-#define SV_BASELINES_CHUNKS ( MAX_EDICTS >> SV_BASELINES_SHIFT )
+#define SV_BASELINES_SHIFT 6
+#define SV_BASELINES_PER_CHUNK ( 1 << SV_BASELINES_SHIFT )
+#define SV_BASELINES_MASK ( SV_BASELINES_PER_CHUNK - 1 )
+#define SV_BASELINES_CHUNKS ( MAX_EDICTS >> SV_BASELINES_SHIFT )
#define SV_InfoSet( var, val ) \
- Cvar_FullSet( var, val, CVAR_SERVERINFO|CVAR_ROM, CVAR_SET_DIRECT )
+ Cvar_FullSet( var, val, CVAR_SERVERINFO|CVAR_ROM, CVAR_SET_DIRECT )
// game features this server supports
#define SV_FEATURES (GMF_CLIENTNUM|GMF_PROPERINUSE|GMF_MVDSPEC|GMF_WANT_ALL_DISCONNECTS)
typedef struct {
- unsigned numEntities;
- unsigned firstEntity;
+ unsigned numEntities;
+ unsigned firstEntity;
player_state_t ps;
- int areabytes;
- byte areabits[MAX_MAP_AREAS/8]; // portalarea visibility bits
- unsigned sentTime; // for ping calculations
+ int areabytes;
+ byte areabits[MAX_MAP_AREAS/8]; // portalarea visibility bits
+ unsigned sentTime; // for ping calculations
int clientNum;
} client_frame_t;
@@ -77,21 +77,28 @@ typedef struct {
int solid32;
} server_entity_t;
+#define SV_FPS 10
+#define SV_FRAMETIME 100
+
typedef struct {
- server_state_t state; // precache commands are only valid during load
- int spawncount; // random number generated each server spawn
+ server_state_t state; // precache commands are only valid during load
+ int spawncount; // random number generated each server spawn
- int framenum;
- unsigned frametime;
+ int framenum;
+#if 0
+ int framemult; // 0 or 1
+ unsigned frametime; // 100 or 50
+#endif
+ unsigned frameresidual;
- char name[MAX_QPATH]; // map name, or cinematic name
- cm_t cm;
+ char name[MAX_QPATH]; // map name, or cinematic name
+ cm_t cm;
- char configstrings[MAX_CONFIGSTRINGS][MAX_QPATH];
+ char configstrings[MAX_CONFIGSTRINGS][MAX_QPATH];
server_entity_t entities[MAX_EDICTS];
- unsigned tracecount;
+ unsigned tracecount;
} server_t;
#define EDICT_POOL(c,n) ((edict_t *)((byte *)(c)->pool->edicts + (c)->pool->edict_size*(n)))
@@ -99,16 +106,16 @@ typedef struct {
#define EDICT_NUM(n) ((edict_t *)((byte *)ge->edicts + ge->edict_size*(n)))
#define NUM_FOR_EDICT(e) ( ((byte *)(e)-(byte *)ge->edicts ) / ge->edict_size)
-#define MAX_TOTAL_ENT_LEAFS 128
+#define MAX_TOTAL_ENT_LEAFS 128
typedef enum {
- cs_free, // can be reused for a new connection
- cs_zombie, // client has been disconnected, but don't reuse
- // connection for a couple seconds
+ cs_free, // can be reused for a new connection
+ cs_zombie, // client has been disconnected, but don't reuse
+ // connection for a couple seconds
cs_assigned, // client_t assigned, but no data received from client yet
- cs_connected, // netchan fully established, but not in game yet
- cs_primed, // sent serverdata, client is precaching
- cs_spawned // client is fully in game
+ cs_connected, // netchan fully established, but not in game yet
+ cs_primed, // sent serverdata, client is precaching
+ cs_spawned // client is fully in game
} clstate_t;
#if USE_AC_SERVER
@@ -127,19 +134,19 @@ typedef enum {
#endif // USE_AC_SERVER
-#define MSG_POOLSIZE 1024
-#define MSG_TRESHOLD ( 64 - 10 ) // keep pmsg_s 64 bytes aligned
+#define MSG_POOLSIZE 1024
+#define MSG_TRESHOLD ( 64 - 10 ) // keep pmsg_s 64 bytes aligned
-#define MSG_RELIABLE 1
-#define MSG_CLEAR 2
+#define MSG_RELIABLE 1
+#define MSG_CLEAR 2
#define MAX_SOUND_PACKET 14
typedef struct {
- list_t entry;
- uint16_t cursize; // zero means sound packet
+ list_t entry;
+ uint16_t cursize; // zero means sound packet
union {
- uint8_t data[MSG_TRESHOLD];
+ uint8_t data[MSG_TRESHOLD];
struct {
uint8_t flags;
uint8_t index;
@@ -147,16 +154,16 @@ typedef struct {
uint8_t volume;
uint8_t attenuation;
uint8_t timeofs;
- int16_t pos[3]; // saved in case entity is freed
+ int16_t pos[3]; // saved in case entity is freed
};
};
} message_packet_t;
-#define LATENCY_COUNTS 16
-#define LATENCY_MASK ( LATENCY_COUNTS - 1 )
+#define LATENCY_COUNTS 16
+#define LATENCY_MASK ( LATENCY_COUNTS - 1 )
-#define RATE_MESSAGES 10
+#define RATE_MESSAGES 10
#define FOR_EACH_CLIENT( client ) \
LIST_FOR_EACH( client_t, client, &svs.udp_client_list, entry )
@@ -172,66 +179,66 @@ typedef enum {
typedef struct client_s {
list_t entry;
- clstate_t state;
+ clstate_t state;
client_flags_t flags;
- char userinfo[MAX_INFO_STRING]; // name, etc
- char *versionString;
+ char userinfo[MAX_INFO_STRING]; // name, etc
+ char *versionString;
char reconnect_var[16];
char reconnect_val[16];
- int lastframe; // for delta compression
- usercmd_t lastcmd; // for filling in big drops
+ int lastframe; // for delta compression
+ usercmd_t lastcmd; // for filling in big drops
- int commandMsec; // every seconds this is reset, if user
- // commands exhaust it, assume time cheating
+ int commandMsec; // every seconds this is reset, if user
+ // commands exhaust it, assume time cheating
int numMoves;
int fps;
- int frame_latency[LATENCY_COUNTS];
- int ping, min_ping, max_ping;
+ int frame_latency[LATENCY_COUNTS];
+ int ping, min_ping, max_ping;
int avg_ping_time, avg_ping_count;
- size_t message_size[RATE_MESSAGES]; // used to rate drop packets
- size_t rate;
- int surpressCount; // number of messages rate supressed
- unsigned send_time, send_delta; // used to rate drop async packets
+ size_t message_size[RATE_MESSAGES]; // used to rate drop packets
+ size_t rate;
+ int surpressCount; // number of messages rate supressed
+ unsigned send_time, send_delta; // used to rate drop async packets
frameflags_t frameflags;
- edict_t *edict; // EDICT_NUM(clientnum+1)
- char name[MAX_CLIENT_NAME]; // extracted from userinfo,
+ edict_t *edict; // EDICT_NUM(clientnum+1)
+ char name[MAX_CLIENT_NAME]; // extracted from userinfo,
// high bits masked
- int messagelevel; // for filtering printed messages
- int number; // client slot number
+ int messagelevel; // for filtering printed messages
+ int number; // client slot number
- clientSetting_t settings[CLS_MAX];
+ clientSetting_t settings[CLS_MAX];
- client_frame_t frames[UPDATE_BACKUP]; // updates can be delta'd from here
+ client_frame_t frames[UPDATE_BACKUP]; // updates can be delta'd from here
unsigned frames_sent, frames_acked;
- byte *download; // file being downloaded
- int downloadsize; // total bytes (can't use EOF because of paks)
- int downloadcount; // bytes sent
+ byte *download; // file being downloaded
+ int downloadsize; // total bytes (can't use EOF because of paks)
+ int downloadcount; // bytes sent
char *downloadname; // name of the file
- unsigned lastmessage; // svs.realtime when packet was last received
+ unsigned lastmessage; // svs.realtime when packet was last received
- int challenge; // challenge of this user, randomly generated
- int protocol; // major version
+ int challenge; // challenge of this user, randomly generated
+ int protocol; // major version
int version; // minor version
time_t connect_time;
// spectator speed, etc
- pmoveParams_t pmp;
+ pmoveParams_t pmp;
// packetized messages
- list_t msg_free_list;
- list_t msg_unreliable_list;
- list_t msg_reliable_list;
- message_packet_t *msg_pool;
+ list_t msg_free_list;
+ list_t msg_unreliable_list;
+ list_t msg_reliable_list;
+ message_packet_t *msg_pool;
size_t msg_unreliable_bytes; // total size of unreliable datagram
size_t msg_dynamic_bytes; // total size of dynamic memory allocated
@@ -248,11 +255,11 @@ typedef struct client_s {
int maxclients;
// netchan type dependent methods
- void (*AddMessage)( struct client_s *, byte *, size_t, qboolean );
- void (*WriteFrame)( struct client_s * );
- void (*WriteDatagram)( struct client_s * );
+ void (*AddMessage)( struct client_s *, byte *, size_t, qboolean );
+ void (*WriteFrame)( struct client_s * );
+ void (*WriteDatagram)( struct client_s * );
- netchan_t *netchan;
+ netchan_t *netchan;
int numpackets; // for that nasty packetdup hack
#if USE_AC_SERVER
@@ -278,23 +285,23 @@ typedef struct client_s {
// MAX_CHALLENGES is made large to prevent a denial
// of service attack that could cycle all of them
// out before legitimate users connected
-#define MAX_CHALLENGES 1024
+#define MAX_CHALLENGES 1024
typedef struct {
- netadr_t adr;
- unsigned challenge;
- unsigned time;
+ netadr_t adr;
+ unsigned challenge;
+ unsigned time;
} challenge_t;
typedef struct {
- unsigned limit;
- unsigned period;
- unsigned time;
- unsigned count;
+ unsigned limit;
+ unsigned period;
+ unsigned time;
+ unsigned count;
} ratelimit_t;
typedef struct {
- list_t entry;
+ list_t entry;
uint32_t addr;
uint32_t mask;
unsigned hits;
@@ -302,9 +309,9 @@ typedef struct {
} addrmatch_t;
typedef struct {
- list_t entry;
- int len;
- char string[1];
+ list_t entry;
+ int len;
+ char string[1];
} stuffcmd_t;
typedef enum {
@@ -317,97 +324,97 @@ typedef enum {
} filteraction_t;
typedef struct {
- list_t entry;
- filteraction_t action;
- char *comment;
- char string[1];
+ list_t entry;
+ filteraction_t action;
+ char *comment;
+ char string[1];
} filtercmd_t;
typedef struct server_static_s {
- qboolean initialized; // sv_init has completed
- unsigned realtime; // always increasing, no clamping, etc
+ qboolean initialized; // sv_init has completed
+ unsigned realtime; // always increasing, no clamping, etc
- client_t *udp_client_pool; // [maxclients]
- list_t udp_client_list; // linked list of non-free clients
+ client_t *udp_client_pool; // [maxclients]
+ list_t udp_client_list; // linked list of non-free clients
- unsigned numEntityStates; // maxclients*UPDATE_BACKUP*MAX_PACKET_ENTITIES
- unsigned nextEntityStates; // next entityState to use
- entity_state_t *entityStates; // [numEntityStates]
+ unsigned numEntityStates; // maxclients*UPDATE_BACKUP*MAX_PACKET_ENTITIES
+ unsigned nextEntityStates; // next entityState to use
+ entity_state_t *entityStates; // [numEntityStates]
#if USE_ZLIB
z_stream z; // for compressing messages at once
#endif
- unsigned last_heartbeat;
+ unsigned last_heartbeat;
- ratelimit_t ratelimit_status;
- ratelimit_t ratelimit_badpass;
- ratelimit_t ratelimit_badrcon;
+ ratelimit_t ratelimit_status;
+ ratelimit_t ratelimit_badpass;
+ ratelimit_t ratelimit_badrcon;
- challenge_t challenges[MAX_CHALLENGES]; // to prevent invalid IPs from connecting
+ challenge_t challenges[MAX_CHALLENGES]; // to prevent invalid IPs from connecting
} server_static_t;
//=============================================================================
-extern netadr_t master_adr[MAX_MASTERS]; // address of the master server
+extern netadr_t master_adr[MAX_MASTERS]; // address of the master server
-extern list_t sv_banlist;
-extern list_t sv_blacklist;
+extern list_t sv_banlist;
+extern list_t sv_blacklist;
-extern list_t sv_cmdlist_connect;
-extern list_t sv_cmdlist_begin;
+extern list_t sv_cmdlist_connect;
+extern list_t sv_cmdlist_begin;
-extern list_t sv_filterlist;
+extern list_t sv_filterlist;
-extern server_static_t svs; // persistant server info
-extern server_t sv; // local server
+extern server_static_t svs; // persistant server info
+extern server_t sv; // local server
-extern pmoveParams_t sv_pmp;
+extern pmoveParams_t sv_pmp;
-
-extern cvar_t *sv_hostname;
-extern cvar_t *sv_maxclients;
-extern cvar_t *sv_password;
-extern cvar_t *sv_reserved_slots;
-extern cvar_t *sv_airaccelerate; // development tool
-extern cvar_t *sv_qwmod; // atu QW Physics modificator
-extern cvar_t *sv_enforcetime;
-extern cvar_t *sv_force_reconnect;
-extern cvar_t *sv_iplimit;
-
-//extern cvar_t *sv_console_auth;
+extern cvar_t *sv_hostname;
+extern cvar_t *sv_maxclients;
+extern cvar_t *sv_password;
+extern cvar_t *sv_reserved_slots;
+extern cvar_t *sv_airaccelerate; // development tool
+extern cvar_t *sv_qwmod; // atu QW Physics modificator
+extern cvar_t *sv_enforcetime;
+#if USE_FPS
+extern cvar_t *sv_fps;
+#endif
+extern cvar_t *sv_force_reconnect;
+extern cvar_t *sv_iplimit;
#if USE_CLIENT
-extern cvar_t *sv_debug_send;
-extern cvar_t *sv_pad_packets;
+extern cvar_t *sv_debug_send;
+extern cvar_t *sv_pad_packets;
#endif
-extern cvar_t *sv_lan_force_rate;
-extern cvar_t *sv_calcpings_method;
-extern cvar_t *sv_changemapcmd;
+extern cvar_t *sv_novis;
+extern cvar_t *sv_lan_force_rate;
+extern cvar_t *sv_calcpings_method;
+extern cvar_t *sv_changemapcmd;
-extern cvar_t *sv_strafejump_hack;
+extern cvar_t *sv_strafejump_hack;
#ifndef _WIN32
-extern cvar_t *sv_oldgame_hack;
+extern cvar_t *sv_oldgame_hack;
#endif
#if USE_PACKETDUP
-extern cvar_t *sv_packetdup_hack;
+extern cvar_t *sv_packetdup_hack;
#endif
-extern cvar_t *sv_allow_map;
+extern cvar_t *sv_allow_map;
-extern cvar_t *sv_status_limit;
-extern cvar_t *sv_status_show;
-extern cvar_t *sv_badauth_time;
-extern cvar_t *sv_uptime;
+extern cvar_t *sv_status_limit;
+extern cvar_t *sv_status_show;
+extern cvar_t *sv_badauth_time;
+extern cvar_t *sv_uptime;
extern cvar_t *g_features;
extern cvar_t *sv_timeout;
extern cvar_t *sv_zombietime;
-extern cvar_t *sv_ghostime;
-
-extern client_t *sv_client;
-extern edict_t *sv_player;
+extern cvar_t *sv_ghostime;
+extern client_t *sv_client;
+extern edict_t *sv_player;
//===========================================================
@@ -450,12 +457,12 @@ void SV_ClientReset( client_t *client );
// sv_send.c
//
typedef enum {RD_NONE, RD_CLIENT, RD_PACKET} redirect_t;
-#define SV_OUTPUTBUF_LENGTH (MAX_PACKETLEN_DEFAULT - 16)
+#define SV_OUTPUTBUF_LENGTH (MAX_PACKETLEN_DEFAULT - 16)
#define SV_BeginRedirect( target ) \
- Com_BeginRedirect( target, sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect )
+ Com_BeginRedirect( target, sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect )
-extern char sv_outputbuf[SV_OUTPUTBUF_LENGTH];
+extern char sv_outputbuf[SV_OUTPUTBUF_LENGTH];
void SV_FlushRedirect( int redirected, char *outputbuf, size_t len );
@@ -470,7 +477,6 @@ void SV_BroadcastCommand( const char *fmt, ... ) q_printf( 1, 2 );
void SV_ClientAddMessage( client_t *client, int flags );
void SV_ShutdownClientSend( client_t *client );
void SV_InitClientSend( client_t *newcl );
-void SV_CalcSendTime( client_t *client, size_t messageSize );
#if USE_MVD_SERVER
@@ -492,8 +498,8 @@ void SV_MvdMulticast( int leafnum, multicast_t to );
void SV_MvdConfigstring( int index, const char *string, size_t len );
void SV_MvdBroadcastPrint( int level, const char *string );
void SV_MvdStartSound( int entnum, int channel, int flags,
- int soundindex, int volume,
- int attenuation, int timeofs );
+ int soundindex, int volume,
+ int attenuation, int timeofs );
#endif // USE_MVD_SERVER
#if USE_AC_SERVER
@@ -539,7 +545,7 @@ client_t *SV_EnhancedSetPlayer( char *s );
//
#define ES_INUSE( s ) \
- ( (s)->modelindex || (s)->effects || (s)->sound || (s)->event )
+ ( (s)->modelindex || (s)->effects || (s)->sound || (s)->event )
void SV_BuildProxyClientFrame( client_t *client );
void SV_BuildClientFrame( client_t *client );
@@ -550,7 +556,7 @@ qboolean SV_EdictPV( cm_t *cm, edict_t *ent, byte *mask );
//
// sv_game.c
//
-extern game_export_t *ge;
+extern game_export_t *ge;
void SV_InitGameProgs( void );
void SV_ShutdownGameProgs (void);
@@ -601,7 +607,7 @@ typedef trace_t (*sv_trace_t)( vec3_t, vec3_t, vec3_t, vec3_t, edict_t *, int );
trace_t SV_Trace_Native (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end,
edict_t *passedict, int contentmask);
trace_t *SV_Trace (trace_t *trace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end,
- edict_t *passedict, int contentmask);
+ edict_t *passedict, int contentmask);
// mins and maxs are relative
// if the entire move stays in a solid volume, trace.allsolid will be set,