Source Server Query Library

From Valve Developer Community
Revision as of 06:57, 28 August 2013 by Beerdude26 (talk | contribs) (Manual: functions added)
Jump to: navigation, search

About

The Source Server Query Library simplifies the communication with Source game servers and Source master servers.

You do not have to deal with the Source Server Query Protocol and can focus on integrating the library into e.g. a game browser, a remote console application etc.

With Source Server Query Library you can:

  • Get latency times of game servers
  • Receive general information about game servers
  • Receive player details of players on game servers
  • Receive game rules of game servers
  • Receive logs of game servers
  • Receive a list of game servers from a master server
  • Send remote commands to game servers and receive the responses

Author

Pascal Herget

Languages

Currently only for C/C++.

How to use

First, initialize SSQ:

SSQ_Initialize( false );

It's also a smart idea to set the timeout to something else than infinity (note: this currently only works for listening to messages, not to connection attempts with the server):

SSQ_SetTimeout( SSQ_GS_TIMEOUT, 3000 ); // 3 seconds

Then, set the game server address:

bool connectionSuccess = SSQ_SetGameServer( "127.0.0.1:27015" );

If the connection was succesful, you can query the server, and if that succeeds, you can use the data:

if( connectionSuccess )
}
    PSSQ_INFO_REPLY reply = new SSQ_INFO_REPLY; // Watch out! Memory leak here! Make this a private member that is cleaned up appropriately.
    if( SSQ_GetInfoReply( reply ) )
    {
        char logmsg[4];
        if( reply )
	{
	    Q_snprintf( logmsg, sizeof(logmsg), "%c", reply ->dedicated );
	    Log( (const char*) logmsg );
	}
    }
}

When you're done using it, clean up:

SSQ_Initialize( true);

Manual

Structures

SSQ_BATCH_REPLY

The SSQ_BATCH_REPLY structure is filled with raw game server addresses.

typedef struct{
long num_servers;
long data_size;
char* data;
}SSQ_BATCH_REPLY,
*PSSQ_BATCH_REPLY;

Members

  • num_servers

Number of game server addresses.

  • data_size

Size of the data pointed to by data.

  • data

Pointer to the raw game server addresses.

Remarks

The addresses are stored as an array of 6 byte addresses (4 byte numerical address + 2 byte port). The last address (in a complete callback loop) is 0 for all 6 bytes.

SSQ_INFO_REPLY

The SSQ_INFO_REPLY structure is filled with information about a game server.

typedef struct{
char version;
char hostname[256];
char map[32];
char game_directory[32];
char game_description[256];
short app_id;
char num_players ;
char max_players;
char num_of_bots;
char dedicated;
char os;
char password;
char secure;
char game_version[32];
}SSQ_INFO_REPLY,
*PSSQ_INFO_REPLY;

Members

  • version

Network protocol version of the game server.

  • hostname

Hostname of the game server.

  • map

Current map on the game server.

  • game_directory

Game directory of the game server.

  • game_description

Description of the game running on the game server.

  • app_id

Steam Application Identifier.

  • num_players

Current number of players on the game server.

  • max_players

Maximum allowed players on the game server.

  • num_of_bots

Current number of bots on the game server.

  • dedicated

Value is "d" for dedicated server and "l" for listen server.

  • os

Value is 'l' for Linux and 'w' for Windows. OS running on the game server.

  • password

Value is 1 if the game server is password protected.

  • secure

Value is 1 if the game server has Valve Anti-Cheat.

  • game_version

Version of the game running on the game server.

Remarks

Strings are truncated if they are longer than the buffer.

SSQ_PLAYER_ITEM

The SSQ_PLAYER_ITEM structure contains player details.

typedef struct{
char index;
char player_name[32];
long kills;
float time_connected;
}SSQ_PLAYER_ITEM,
*PSSQ_PLAYER_ITEM;

Members

  • index

Slot index of the player on the game server.

  • player_name

Name of the player as a string.

  • kills

All kills the player made.

  • time_connected

Time that passed since the player joined the game server.

Remarks

The index member will be -1 and the other members 0 when the player is just connecting.

SSQ_PLAYER_REPLY

The SSQ_PLAYER_REPLY structure is filled with details of players on a game server.

typedef struct{
char num_players;
SSQ_PLAYER_ITEM player[64];
}SSQ_PLAYER_REPLY,
*PSSQ_PLAYER_REPLY;

Members

  • num_players

Number of players on the game server.

  • player

Array of a SSQ_PLAYER_ITEM structure.

Remarks

The num_players member includes players that are just connecting and whose details are not yet available.

SSQ_RULES_REPLY

The SSQ_RULES_REPLY structure is filled with rules from a game server.

typedef struct{
short num_rules;
long data_size;
char* data;
}SSQ_RULES_REPLY,
*PSSQ_RULES_REPLY;

Members

  • num_rules

Number of rules.

  • data_size

Size of the data pointed to by data.

  • data

Pointer to the rule strings.

Remarks

The rules are in the order "rule name","rule value". All strings are null-terminated.

Unions

SSQ_REPLY_UNION

The SSQ_REPLY_UNION union contains a pointer to callback reply data or a notification.

typedef union{
PSSQ_BATCH_REPLY batch_reply;
char* log_reply;
PSSQ_RULES_REPLY rules_reply;
char* rcon_reply;
BOOL log_notify
}SSQ_REPLY_UNION,
*PSSQ_REPLY_UNION;

Members

  • batch_reply

Pointer to a SSQ_BATCH_REPLY structure.

  • log_reply

Pointer to a log string.

  • rules_reply

Pointer to a SSQ_RULES_REPLY structure.

  • rcon_reply

Pointer to a rcon string.

  • log_notify

TRUE if the log thread exited normally, FALSE if an error occured.

Remarks

Use the type parameter in the SSQ_Callback function to see which member is valid.

Functions

SSQ_Callback

The SSQ_Callback function is an application-defined callback function.

BOOL WINAPI SSQ_Callback(
DWORD type,
PSSQ_REPLY_UNION reply
);

Parameters

[in]type

Type of the callback reply. This parameter can be one of the following values.

  • SSQ_BATCH_REPLY_CALLBACK

List of game servers received from a master server.

  • SSQ_LOG_REPLY_CALLBACK

A log received from a game server.

  • SSQ_RCON_REPLY_CALLBACK

Response of a rcon command sent to a game server.

  • SSQ_RULES_REPLY_CALLBACK

List of rules received from a game server.

  • SSQ_LOG_THREAD_NOTIFY

Notification about the exit of the log thread. The log status cannot be disabled when the log thread exited.


[in]reply

Pointer to a SSQ_REPLY_UNION union.


Return Values

The function should return TRUE to get all messages of a message loop.

If the function returns FALSE a message loop, if exists, will break.

Remarks

Make sure to use only the data in the reply union that corresponds to the type of the message. The pointer in the reply union will only be valid in the context of the SSQ_Callback function.

SSQ_FormatBatchReply

The SSQ_FormatBatchReply function formats a raw data address into a dotted address string.

char* WINAPI SSQ_FormatBatchReply(
PSSQ_BATCH_REPLY batch_reply,
int index
);

Parameters

[in]batch_reply

Pointer to a SSQ_BATCH_REPLY structure.


[in]index

Index of the raw data address.


Return Values

If the function succeeds the return value is a pointer to a dotted address string.

If the function fails the return value is 0.

Remarks

The pointer returned is only valid till the next call of SSQ_FormatBatchReply.

SSQ_GetBatchReply

The SSQ_GetBatchReply function receives a list of game servers from the master server.

BOOL WINAPI SSQ_GetBatchReply(
BYTE region,
char* filter
);

Parameters

[in]region

Region to receive game servers from. This parameter can be one of the following values.

  • SSQ_USA_EAST
  • SSQ_USA_WEST
  • SSQ_SOUTH_AMERICA
  • SSQ_EUROPE
  • SSQ_ASIA
  • SSQ_AUSTRALIA
  • SSQ_MIDDLE_EAST
  • SSQ_AFRICA
  • SSQ_WORLD

[in]filter

Filter strings delimted by a backslash "\". This parameter can be a combination of the following strings.

  • "\\empty" "\\1"

Finds game servers not empty.

  • "\\full" "\\1"

Finds game servers not full.

  • "\\gamedir" (e.g. "\\cstrike")

Finds game servers running the specified game.

  • "\\linux" "\\1"

Finds game servers running on Linux.

  • "\\map" (e.g. "\\de_dust")

Finds game servers with the specified map.

  • "\\proxy" "\\1"

Finds spectator-only servers.

  • "\\secure" "\\1"

Finds game servers with Valve Anti-Cheat.


Return Values

If the function succeeds the return value is TRUE.

If the function fails the return value is FALSE.

Remarks

SSQ_GetBatchReply uses the server set by SSQ_SetMasterServer. The game server data is sent to the SSQ_Callback callback function with a type of SSQ_BATCH_REPLY_CALLBACK.

Download

Binary: SSQbeta1.zip

Source: SSQbeta2_src.zip

See

Server Queries