4#include "../common/gsCommon.h"
10#include "qr2regkeys.h"
16#define qr2_init qr2_initA
17#define qr2_init_socket qr2_init_socketA
18#define qr2_parse_query qr2_parse_queryA
19#define qr2_buffer_add qr2_buffer_addA
21#define qr2_init qr2_initW
22#define qr2_init_socket qr2_init_socketW
23#define qr2_parse_query qr2_parse_queryW
24#define qr2_buffer_add qr2_buffer_addW
61typedef enum {key_server, key_player, key_team, key_type_count} qr2_key_type;
70#define NUM_PORTS_TO_TRY 100
80#define QR_MAGIC_1 0xFE
81#define QR_MAGIC_2 0xFD
86extern char qr2_hostname[64];
116typedef struct qr2_ipverify_node_s *qr2_ipverify_node_t;
131typedef void (*qr2_serverkeycallback_t)(
int keyid, qr2_buffer_t outbuf,
void *userdata);
147typedef void (*qr2_playerteamkeycallback_t)(
int keyid,
int index, qr2_buffer_t outbuf,
void *userdata);
163typedef void (*qr2_keylistcallback_t)(qr2_key_type keytype, qr2_keybuffer_t keybuffer,
void *userdata);
176typedef int (*qr2_countcallback_t)(qr2_key_type keytype,
void *userdata);
190typedef void (*qr2_adderrorcallback_t)(qr2_error_t error, gsi_char *errmsg,
void *userdata);
194typedef void (*qr2_natnegcallback_t)(
int cookie,
void *userdata);
195typedef void (*qr2_clientmessagecallback_t)(gsi_char *data,
int len,
void *userdata);
196typedef void (*qr2_publicaddresscallback_t)(
unsigned int ip,
unsigned short port,
void *userdata);
197typedef void (*qr2_clientconnectedcallback_t)(SOCKET gamesocket,
struct sockaddr_in *remoteaddr,
void *userdata);
200typedef void (*qr2_denyqr2responsetoipcallback_t)(
void *userdata,
unsigned int sender_ip,
int * result);
203void qr2_register_natneg_callback(qr2_t qrec, qr2_natnegcallback_t nncallback);
204void qr2_register_clientmessage_callback(qr2_t qrec, qr2_clientmessagecallback_t cmcallback);
205void qr2_register_publicaddress_callback(qr2_t qrec, qr2_publicaddresscallback_t pacallback);
206void qr2_register_clientconnected_callback(qr2_t qrec, qr2_clientconnectedcallback_t cccallback);
209void qr2_register_denyresponsetoip_callback(qr2_t qrec, qr2_denyqr2responsetoipcallback_t dertoipcallback);
223void qr2_register_key(
int keyid,
const gsi_char *key);
258qr2_error_t qr2_init(qr2_t *qrec,
const gsi_char *ip,
int baseport,
const gsi_char *gamename,
const gsi_char *secret_key,
259 int ispublic,
int natnegotiate,
260 qr2_serverkeycallback_t server_key_callback,
261 qr2_playerteamkeycallback_t player_key_callback,
262 qr2_playerteamkeycallback_t team_key_callback,
263 qr2_keylistcallback_t key_list_callback,
264 qr2_countcallback_t playerteam_count_callback,
265 qr2_adderrorcallback_t adderror_callback,
283qr2_error_t qr2_init_socket(qr2_t *qrec, SOCKET s,
int boundport,
const gsi_char *gamename,
const gsi_char *secret_key,
284 int ispublic,
int natnegotiate,
285 qr2_serverkeycallback_t server_key_callback,
286 qr2_playerteamkeycallback_t player_key_callback,
287 qr2_playerteamkeycallback_t team_key_callback,
288 qr2_keylistcallback_t key_list_callback,
289 qr2_countcallback_t playerteam_count_callback,
290 qr2_adderrorcallback_t adderror_callback,
306void qr2_think(qr2_t qrec);
322void qr2_parse_query(qr2_t qrec, gsi_char *query,
int len,
struct sockaddr *sender);
333void qr2_send_statechanged(qr2_t qrec);
346void qr2_shutdown(qr2_t qrec);
356gsi_bool qr2_keybuffer_add(qr2_keybuffer_t keybuffer,
int keyid);
364gsi_bool qr2_buffer_add(qr2_buffer_t outbuf,
const gsi_char *value);
365gsi_bool qr2_buffer_add_int(qr2_buffer_t outbuf,
int value);
369#define REQUEST_KEY_LEN 4
370#define RECENT_CLIENT_MESSAGES_TO_TRACK 10
371typedef void (*cdkey_process_t)(
char *buf,
int len,
struct sockaddr *fromaddr);
374#define QR2_IPVERIFY_TIMEOUT 4000
375#define QR2_IPVERIFY_ARRAY_SIZE 200
376#define QR2_IPVERIFY_MAXDUPLICATES 5
379 struct sockaddr_in addr;
389 char instance_key[REQUEST_KEY_LEN];
390 qr2_serverkeycallback_t server_key_callback;
391 qr2_playerteamkeycallback_t player_key_callback;
392 qr2_playerteamkeycallback_t team_key_callback;
393 qr2_keylistcallback_t key_list_callback;
394 qr2_countcallback_t playerteam_count_callback;
395 qr2_adderrorcallback_t adderror_callback;
396 qr2_natnegcallback_t nn_callback;
397 qr2_clientmessagecallback_t cm_callback;
398 qr2_publicaddresscallback_t pa_callback;
399 qr2_clientconnectedcallback_t cc_callback;
401 qr2_denyqr2responsetoipcallback_t denyresp2_ip_callback;
405 gsi_time lastheartbeat;
407 int userstatechangerequested;
413 struct sockaddr_in hbaddr;
414 cdkey_process_t cdkeyprocess;
415 int client_message_keys[RECENT_CLIENT_MESSAGES_TO_TRACK];
417 unsigned int publicip;
418 unsigned short publicport;
421 gsi_u8 backendoptions;
426void qr2_parse_queryA(qr2_t qrec,
char *query,
int len,
struct sockaddr *sender);
427gsi_bool qr2_buffer_addA(qr2_buffer_t outbuf,
const char *value);
428qr2_error_t qr2_initA(qr2_t *qrec,
const char *ip,
int baseport,
const char *gamename,
const char *secret_key,
429 int ispublic,
int natnegotiate,
430 qr2_serverkeycallback_t server_key_callback,
431 qr2_playerteamkeycallback_t player_key_callback,
432 qr2_playerteamkeycallback_t team_key_callback,
433 qr2_keylistcallback_t key_list_callback,
434 qr2_countcallback_t playerteam_count_callback,
435 qr2_adderrorcallback_t adderror_callback,
437qr2_error_t qr2_init_socketA(qr2_t *qrec, SOCKET s,
int boundport,
const char *gamename,
const char *secret_key,
438 int ispublic,
int natnegotiate,
439 qr2_serverkeycallback_t server_key_callback,
440 qr2_playerteamkeycallback_t player_key_callback,
441 qr2_playerteamkeycallback_t team_key_callback,
442 qr2_keylistcallback_t key_list_callback,
443 qr2_countcallback_t playerteam_count_callback,
444 qr2_adderrorcallback_t adderror_callback,