lhnetsocket_t *mysocket;
lhnetaddress_t peeraddress;
-
+
// this is mostly identical to qsocket_t from quake
// if this time is reached, kick off peer
extern char playername[];
extern int playercolor;
-#define HOSTCACHE_TOTALSIZE 2048
-#define HOSTCACHE_VIEWCACHESIZE 128
+#define SERVERLIST_TOTALSIZE 2048
+#define SERVERLIST_VIEWLISTSIZE SERVERLIST_TOTALSIZE
+#define SERVERLIST_ANDMASKCOUNT 5
+#define SERVERLIST_ORMASKCOUNT 5
-typedef enum
+typedef enum
{
- HCMO_GREATEREQUAL,
- HCMO_GREATER,
- HCMO_EQUAL,
- HCMO_LESSEQUAL,
- HCMO_LESS,
-} hostcache_maskop_t;
+ // SLMO_CONTAINS is the default for strings
+ // SLMO_GREATEREQUAL is the default for numbers (also used when OP == CONTAINS or NOTCONTAINS
+ SLMO_CONTAINS,
+ SLMO_NOTCONTAIN,
+
+ SLMO_LESSEQUAL,
+ SLMO_LESS,
+ SLMO_EQUAL,
+ SLMO_GREATER,
+ SLMO_GREATEREQUAL,
+ SLMO_NOTEQUAL
+} serverlist_maskop_t;
// struct with all fields that you can search for or sort by
typedef struct
int numplayers;
// protocol version
int protocol;
-} hostcache_info_t;
+} serverlist_info_t;
-typedef enum
+typedef enum
+{
+ SLIF_CNAME,
+ SLIF_PING,
+ SLIF_GAME,
+ SLIF_MOD,
+ SLIF_MAP,
+ SLIF_NAME,
+ SLIF_MAXPLAYERS,
+ SLIF_NUMPLAYERS,
+ SLIF_PROTOCOL,
+ SLIF_COUNT
+} serverlist_infofield_t;
+
+typedef enum
{
- HCIF_CNAME,
- HCIF_PING,
- HCIF_GAME,
- HCIF_MOD,
- HCIF_MAP,
- HCIF_NAME,
- HCIF_MAXPLAYERS,
- HCIF_NUMPLAYERS,
- HCIF_PROTOCOL,
- HCIF_COUNT
-} hostcache_infofield_t;
+ SQS_NONE = 0,
+ SQS_QUERYING,
+ SQS_QUERIED,
+ SQS_TIMEDOUT
+} serverlist_query_state;
typedef struct
{
// used to determine whether this entry should be included into the final view
- qboolean finished;
+ serverlist_query_state query;
+ // used to count the number of times the host has tried to query this server already
+ unsigned querycounter;
// used to calculate ping when update comes in
double querytime;
- hostcache_info_t info;
-
+ serverlist_info_t info;
+
// legacy stuff
char line1[128];
char line2[128];
-} hostcache_t;
+} serverlist_entry_t;
typedef struct
{
- hostcache_maskop_t pingtest;
- hostcache_maskop_t maxplayerstest;
- hostcache_maskop_t numplayerstest;
- hostcache_maskop_t protocoltest;
- hostcache_info_t info;
-} hostcache_mask_t;
+ qboolean active;
+ serverlist_maskop_t tests[SLIF_COUNT];
+ serverlist_info_t info;
+} serverlist_mask_t;
+
+extern serverlist_mask_t serverlist_andmasks[SERVERLIST_ANDMASKCOUNT];
+extern serverlist_mask_t serverlist_ormasks[SERVERLIST_ORMASKCOUNT];
-extern hostcache_mask_t hostcache_currentmask;
-extern hostcache_infofield_t hostcache_sortbyfield;
-extern qboolean hostcache_sortdescending;
+extern serverlist_infofield_t serverlist_sortbyfield;
+extern qboolean serverlist_sortdescending;
-extern int hostcache_viewcount;
-extern hostcache_t *hostcache_viewset[HOSTCACHE_VIEWCACHESIZE];
+extern int serverlist_viewcount;
+extern serverlist_entry_t *serverlist_viewlist[SERVERLIST_VIEWLISTSIZE];
-extern int hostcache_cachecount;
+extern int serverlist_cachecount;
-extern qboolean hostcache_consoleoutput;
+extern qboolean serverlist_consoleoutput;
#if !defined(_WIN32 ) && !defined (__linux__) && !defined (__sun__)
#ifndef htonl
void NetConn_ServerFrame(void);
void NetConn_QueryMasters(void);
void NetConn_Heartbeat(int priority);
+void NetConn_QueryQueueFrame(void);
int NetConn_SendToAll(sizebuf_t *data, double blocktime);
void Net_Stats_f(void);
void Net_Slist_f(void);
-// Hostcache interface
+// ServerList interface (public)
// manually refresh the view set, do this after having changed the mask or any other flag
-void HostCache_RebuildViewSet(void);
-void HostCache_ResetMask(void);
-void HostCache_QueryList(void);
+void ServerList_RebuildViewList(void);
+void ServerList_ResetMasks(void);
+void ServerList_QueryList(void);
#endif