this patch adds support for querying hexenworld master servers to qstat current development version (as of this writing, the svn snapshot from 02 Oct. 2007.) this patch is also submitted to the qstat project. see the qstat patch tracker entry #1806170 at: http://sourceforge.net/tracker/?func=detail&atid=481160&aid=1806170&group_id=56603 diff -urNp qstat2-20071001/qstat.c qstat2-20071001x/qstat.c --- qstat2-20071001/qstat.c 2007-10-01 19:50:51.000000000 +0300 +++ qstat2-20071001x/qstat.c 2007-10-02 10:34:53.000000000 +0300 @@ -6295,6 +6295,11 @@ deal_with_qwmaster_packet( struct qserve { rawpkt+= 4; /* QW 1.5 */ pktlen-= 4; + if (rawpkt[0] == '\377' && rawpkt[1] == QW_SERVERS) + { + rawpkt++; /* hwmaster */ + pktlen--; + } } if ( rawpkt[0] == QW_SERVERS && rawpkt[1] == QW_NEWLINE) diff -urNp qstat2-20071001/qstatdoc.html qstat2-20071001x/qstatdoc.html --- qstat2-20071001/qstatdoc.html 2007-10-01 19:50:51.000000000 +0300 +++ qstat2-20071001x/qstatdoc.html 2007-10-02 10:38:51.000000000 +0300 @@ -120,6 +120,7 @@ for the supported game types. The type -tbstbs28001Starsiege: Tribes -t2st2s28000Tribes 2 -qwmqwm27000QuakeWorld master +-hwmhwm26900HexenWorld master -q2mq2m27900Quake II master -hlmhlm27010Half-Life master -stmstm27010Half-Life master (Steam) diff -urNp qstat2-20071001/qstat.h qstat2-20071001x/qstat.h --- qstat2-20071001/qstat.h 2007-10-01 19:50:51.000000000 +0300 +++ qstat2-20071001x/qstat.h 2007-10-02 10:37:01.000000000 +0300 @@ -87,6 +87,7 @@ typedef struct _server_type server_type; #define QW_DEFAULT_PORT 27500 #define QW_MASTER_DEFAULT_PORT 27000 #define HW_DEFAULT_PORT 26950 +#define HW_MASTER_DEFAULT_PORT 26900 #define UNREAL_DEFAULT_PORT 7777 #define UNREAL_MASTER_DEFAULT_PORT 28900 #define HALFLIFE_DEFAULT_PORT 27015 @@ -184,8 +185,10 @@ typedef struct _server_type server_type; #define PREY_SERVER 56 #define TM_PROTOCOL_SERVER 57 #define ETQW_SERVER 58 +/* hexenworld master server: */ +#define HW_MASTER (59 | MASTER_SERVER) -#define LAST_BUILTIN_SERVER 58 +#define LAST_BUILTIN_SERVER 59 #define TF_SINGLE_QUERY (1<<1) #define TF_OUTFILE (1<<2) @@ -513,6 +516,10 @@ char hl_details[12] = #define QW_GET_SERVERS 'c' char qw_masterquery[] = { QW_GET_SERVERS, '\n', '\0' }; +/* HEXENWORLD MASTER */ +#define HW_GET_SERVERS 'c' +char hw_masterquery[] = { '\377', HW_GET_SERVERS, '\0' }; + /* QUAKE 2 MASTER */ char q2_masterquery[] = { 'q', 'u', 'e', 'r', 'y', '\n', '\0' }; @@ -1914,6 +1921,40 @@ server_type builtin_types[] = { deal_with_qwmaster_packet, /* packet_func */ }, { + /* HEXEN2WORLD MASTER */ + HW_MASTER, /* id */ + "HWM", /* type_prefix */ + "hwm", /* type_string */ + "-hwm", /* type_option */ /* ## also "-qw" */ + "HexenWorld Master", /* game_name */ + HW_SERVER, /* master */ + HW_MASTER_DEFAULT_PORT, /* default_port */ + 0, /* port_offset */ + TF_SINGLE_QUERY|TF_OUTFILE, /* flags */ + "", /* game_rule */ + "HWMASTER", /* template_var */ + NULL, /* status_packet */ + 0, /* status_len */ + NULL, /* player_packet */ + 0, /* player_len */ + NULL, /* rule_packet */ + 0, /* rule_len */ + (char*) &hw_masterquery, /* master_packet */ + sizeof( hw_masterquery), /* master_len */ + NULL, /* master_protocol */ + NULL, /* master_query */ + display_qwmaster, /* display_player_func */ + NULL, /* display_rule_func */ + NULL, /* display_raw_player_func */ + NULL, /* display_raw_rule_func */ + NULL, /* display_xml_player_func */ + NULL, /* display_xml_rule_func */ + send_qwmaster_request_packet,/* status_query_func */ + NULL, /* rule_query_func */ + NULL, /* player_query_func */ + deal_with_qwmaster_packet, /* packet_func */ +}, +{ /* QUAKE 2 MASTER */ Q2_MASTER, /* id */ "Q2M", /* type_prefix */