2004-08-23 00:15:46 +00:00
|
|
|
|
2009-04-01 22:03:56 +00:00
|
|
|
#define SS_GENERICQUAKEWORLD 0
|
2004-08-23 00:15:46 +00:00
|
|
|
#define SS_FTESERVER 1 //hehehe...
|
|
|
|
#define SS_QUAKE2 2 //useful (and cool). Could be blamed for swamping.
|
|
|
|
#define SS_NETQUAKE 4
|
|
|
|
#define SS_FAVORITE 8 //filter all others.
|
|
|
|
#define SS_KEEPINFO 16
|
2005-05-17 02:36:54 +00:00
|
|
|
#define SS_DARKPLACES 32
|
2005-08-26 22:56:51 +00:00
|
|
|
#define SS_QUAKE3 64
|
2006-09-17 00:59:22 +00:00
|
|
|
#define SS_PROXY 128
|
2004-08-23 00:15:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
//despite not supporting nq or q2, we still load them. We just filter them. This is to make sure we properly write the listing files.
|
2005-05-17 02:36:54 +00:00
|
|
|
enum {
|
|
|
|
MT_BAD, //this would be an error
|
2011-06-16 02:03:57 +00:00
|
|
|
MT_MASTERHTTPNQ, //an http/ftp based master server with NQ servers
|
2006-02-26 09:37:55 +00:00
|
|
|
MT_MASTERHTTPQW,//an http/ftp based master server with QW servers
|
2011-12-23 03:12:29 +00:00
|
|
|
MT_MASTERHTTPJSON,//quakeone's server listing
|
2005-05-17 02:36:54 +00:00
|
|
|
MT_BCASTQW, //-1status
|
|
|
|
MT_BCASTQ2, //-1status
|
2005-08-26 22:56:51 +00:00
|
|
|
MT_BCASTQ3,
|
2005-05-17 02:36:54 +00:00
|
|
|
MT_BCASTNQ, //see code
|
|
|
|
MT_BCASTDP,
|
|
|
|
MT_SINGLEQW, //-1status
|
|
|
|
MT_SINGLEQ2, //-1status
|
2005-08-26 22:56:51 +00:00
|
|
|
MT_SINGLEQ3,
|
2005-05-17 02:36:54 +00:00
|
|
|
MT_SINGLENQ, //see code.
|
|
|
|
MT_SINGLEDP,
|
|
|
|
MT_MASTERQW, //c\n\0
|
|
|
|
MT_MASTERQ2, //query
|
2005-08-26 22:56:51 +00:00
|
|
|
MT_MASTERQ3,
|
2005-05-17 02:36:54 +00:00
|
|
|
MT_MASTERDP //-1getservers %s 3 empty full\x0A
|
|
|
|
};
|
2004-08-23 00:15:46 +00:00
|
|
|
|
|
|
|
|
2005-05-13 10:42:48 +00:00
|
|
|
typedef enum{
|
|
|
|
SLKEY_PING,
|
|
|
|
SLKEY_MAP,
|
|
|
|
SLKEY_NAME,
|
|
|
|
SLKEY_ADDRESS,
|
|
|
|
SLKEY_NUMPLAYERS,
|
|
|
|
SLKEY_MAXPLAYERS,
|
|
|
|
SLKEY_GAMEDIR,
|
|
|
|
|
2006-02-28 00:46:04 +00:00
|
|
|
SLKEY_FREEPLAYERS,
|
|
|
|
SLKEY_BASEGAME,
|
2006-03-14 01:18:47 +00:00
|
|
|
SLKEY_TIMELIMIT,
|
|
|
|
SLKEY_FRAGLIMIT,
|
2006-02-28 00:46:04 +00:00
|
|
|
|
2008-11-09 22:29:28 +00:00
|
|
|
SLKEY_MOD,
|
|
|
|
SLKEY_PROTOCOL,
|
|
|
|
SLKEY_NUMBOTS,
|
|
|
|
SLKEY_NUMHUMANS,
|
|
|
|
SLKEY_QCSTATUS,
|
|
|
|
// SLKEY_PLAYERS, //eep!
|
|
|
|
SLKEY_ISFAVORITE,//eep!
|
|
|
|
|
|
|
|
|
2005-05-13 10:42:48 +00:00
|
|
|
SLKEY_TOOMANY,
|
|
|
|
SLKEY_CUSTOM
|
|
|
|
} hostcachekey_t;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
SLIST_TEST_CONTAINS,
|
|
|
|
SLIST_TEST_NOTCONTAIN,
|
|
|
|
SLIST_TEST_LESSEQUAL,
|
|
|
|
SLIST_TEST_LESS,
|
|
|
|
SLIST_TEST_EQUAL,
|
|
|
|
SLIST_TEST_GREATER,
|
|
|
|
SLIST_TEST_GREATEREQUAL,
|
2013-03-12 22:35:33 +00:00
|
|
|
SLIST_TEST_NOTEQUAL,
|
|
|
|
SLIST_TEST_STARTSWITH,
|
|
|
|
SLIST_TEST_NOTSTARTSWITH
|
2005-05-13 10:42:48 +00:00
|
|
|
} slist_test_t;
|
|
|
|
|
|
|
|
|
2004-08-23 00:15:46 +00:00
|
|
|
//contains info about a server in greater detail. Could be too mem intensive.
|
|
|
|
typedef struct serverdetailedinfo_s {
|
|
|
|
char info[MAX_SERVERINFO_STRING];
|
|
|
|
|
|
|
|
int numplayers;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
int userid;
|
|
|
|
int frags;
|
|
|
|
float time;
|
|
|
|
int ping;
|
|
|
|
char name[64];
|
|
|
|
char skin[64];
|
|
|
|
char topc;
|
|
|
|
char botc;
|
|
|
|
} players[MAX_CLIENTS];
|
|
|
|
} serverdetailedinfo_t;
|
|
|
|
|
|
|
|
//hold minimum info.
|
|
|
|
typedef struct serverinfo_s {
|
|
|
|
char name[64]; //hostname.
|
|
|
|
netadr_t adr;
|
|
|
|
|
2005-05-13 10:42:48 +00:00
|
|
|
unsigned char players;
|
|
|
|
unsigned char maxplayers;
|
|
|
|
qbyte special; //flags
|
|
|
|
qbyte sends;
|
|
|
|
qbyte insortedlist;
|
|
|
|
|
2008-11-09 22:29:28 +00:00
|
|
|
qbyte numhumans;
|
|
|
|
qbyte numbots;
|
|
|
|
qbyte freeslots;
|
|
|
|
qbyte protocol;
|
|
|
|
|
|
|
|
char modname[8+1];
|
|
|
|
char qcstatus[8+1];
|
|
|
|
|
|
|
|
char gamedir[8+1];
|
|
|
|
char map[16];
|
|
|
|
|
|
|
|
unsigned short gameversion;
|
2005-05-13 10:42:48 +00:00
|
|
|
unsigned short ping;
|
2004-08-23 00:15:46 +00:00
|
|
|
|
|
|
|
short tl;
|
|
|
|
short fl;
|
|
|
|
|
|
|
|
float refreshtime;
|
|
|
|
|
|
|
|
serverdetailedinfo_t *moreinfo;
|
|
|
|
|
|
|
|
struct serverinfo_s *next;
|
|
|
|
} serverinfo_t;
|
|
|
|
|
|
|
|
typedef struct master_s{
|
|
|
|
struct master_s *next;
|
|
|
|
netadr_t adr;
|
2012-11-27 03:23:19 +00:00
|
|
|
char *address; //text based address (http servers)
|
|
|
|
struct dl_download *dl;
|
2004-08-23 00:15:46 +00:00
|
|
|
int type;
|
2005-05-26 12:55:34 +00:00
|
|
|
int servertype; //filled in for http servers
|
2011-06-16 02:03:57 +00:00
|
|
|
int sends; /*needs to resend?*/
|
2004-08-23 00:15:46 +00:00
|
|
|
char name[1];
|
|
|
|
} master_t;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
qboolean inuse;
|
|
|
|
netadr_t adr;
|
|
|
|
|
|
|
|
serverdetailedinfo_t *detail;
|
|
|
|
|
|
|
|
int linenum;
|
|
|
|
} selectedserver;
|
|
|
|
|
|
|
|
typedef struct player_s {
|
|
|
|
char name[16];
|
|
|
|
int frags;
|
|
|
|
int colour;
|
|
|
|
char skin[8];
|
|
|
|
netadr_t adr;
|
|
|
|
|
|
|
|
struct player_s *next;
|
|
|
|
} player_t;
|
|
|
|
|
|
|
|
void SListOptionChanged(serverinfo_t *newserver);
|
|
|
|
|
|
|
|
extern serverinfo_t *firstserver;
|
|
|
|
extern master_t *master;
|
|
|
|
extern player_t *mplayers;
|
|
|
|
|
2006-02-11 14:51:36 +00:00
|
|
|
void Master_SetupSockets(void);
|
2004-08-23 00:15:46 +00:00
|
|
|
void CL_QueryServers(void);
|
2012-04-09 19:12:12 +00:00
|
|
|
int Master_CheckPollSockets(void);
|
2012-11-27 03:23:19 +00:00
|
|
|
void MasterInfo_Shutdown(void);
|
2005-03-18 06:14:07 +00:00
|
|
|
void MasterInfo_Request(master_t *mast, qboolean evenifwedonthavethefiles);
|
2004-08-23 00:15:46 +00:00
|
|
|
serverinfo_t *Master_InfoForServer (netadr_t addr);
|
|
|
|
serverinfo_t *Master_InfoForNum (int num);
|
2011-06-16 02:03:57 +00:00
|
|
|
unsigned int Master_TotalCount(void);
|
|
|
|
unsigned int Master_NumPolled(void);
|
2005-10-07 16:27:20 +00:00
|
|
|
void Master_SetupSockets(void);
|
2004-08-23 00:15:46 +00:00
|
|
|
void Master_QueryServer(serverinfo_t *server);
|
2004-08-31 09:15:24 +00:00
|
|
|
void MasterInfo_WriteServers(void);
|
2005-05-13 10:42:48 +00:00
|
|
|
|
|
|
|
int Master_KeyForName(char *keyname);
|
|
|
|
float Master_ReadKeyFloat(serverinfo_t *server, int keynum);
|
|
|
|
char *Master_ReadKeyString(serverinfo_t *server, int keynum);
|
|
|
|
|
2008-11-09 22:29:28 +00:00
|
|
|
void Master_SortServers(void);
|
2005-05-13 10:42:48 +00:00
|
|
|
void Master_SetSortField(hostcachekey_t field, qboolean descending);
|
|
|
|
hostcachekey_t Master_GetSortField(void);
|
|
|
|
qboolean Master_GetSortDescending(void);
|
|
|
|
|
|
|
|
int Master_NumSorted(void);
|
|
|
|
void Master_ClearMasks(void);
|
|
|
|
serverinfo_t *Master_SortedServer(int idx);
|
2005-06-14 04:52:10 +00:00
|
|
|
void Master_SetMaskString(qboolean or, hostcachekey_t field, char *param, slist_test_t testop);
|
|
|
|
void Master_SetMaskInteger(qboolean or, hostcachekey_t field, int param, slist_test_t testop);
|