91 lines
2.6 KiB
C
91 lines
2.6 KiB
C
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================
|
|
|
|
#pragma once
|
|
|
|
#include "netadr.h"
|
|
|
|
#define NETAPI_REQUEST_SERVERLIST (0) // Doesn't need a remote address
|
|
#define NETAPI_REQUEST_PING (1)
|
|
#define NETAPI_REQUEST_RULES (2)
|
|
#define NETAPI_REQUEST_PLAYERS (3)
|
|
#define NETAPI_REQUEST_DETAILS (4)
|
|
|
|
// Set this flag for things like broadcast requests, etc. where the engine should not
|
|
// kill the request hook after receiving the first response
|
|
#define FNETAPI_MULTIPLE_RESPONSE (1 << 0)
|
|
|
|
typedef void (*net_api_response_func_t)(struct net_response_s* response);
|
|
|
|
#define NET_SUCCESS (0)
|
|
#define NET_ERROR_TIMEOUT (1 << 0)
|
|
#define NET_ERROR_PROTO_UNSUPPORTED (1 << 1)
|
|
#define NET_ERROR_UNDEFINED (1 << 2)
|
|
|
|
typedef struct net_adrlist_s
|
|
{
|
|
struct net_adrlist_s* next;
|
|
netadr_t remote_address;
|
|
} net_adrlist_t;
|
|
|
|
typedef struct net_response_s
|
|
{
|
|
// NET_SUCCESS or an error code
|
|
int error;
|
|
|
|
// Context ID
|
|
int context;
|
|
// Type
|
|
int type;
|
|
|
|
// Server that is responding to the request
|
|
netadr_t remote_address;
|
|
|
|
// Response RTT ping time
|
|
double ping;
|
|
// Key/Value pair string ( separated by backlash \ characters )
|
|
// WARNING: You must copy this buffer in the callback function, because it is freed
|
|
// by the engine right after the call!!!!
|
|
// ALSO: For NETAPI_REQUEST_SERVERLIST requests, this will be a pointer to a linked list of net_adrlist_t's
|
|
void* response;
|
|
} net_response_t;
|
|
|
|
typedef struct net_status_s
|
|
{
|
|
// Connected to remote server? 1 == yes, 0 otherwise
|
|
int connected;
|
|
// Client's IP address
|
|
netadr_t local_address;
|
|
// Address of remote server
|
|
netadr_t remote_address;
|
|
// Packet Loss ( as a percentage )
|
|
int packet_loss;
|
|
// Latency, in seconds ( multiply by 1000.0 to get milliseconds )
|
|
double latency;
|
|
// Connection time, in seconds
|
|
double connection_time;
|
|
// Rate setting ( for incoming data )
|
|
double rate;
|
|
} net_status_t;
|
|
|
|
typedef struct net_api_s
|
|
{
|
|
// APIs
|
|
void (*InitNetworking)(void);
|
|
void (*Status)(struct net_status_s* status);
|
|
void (*SendRequest)(int context, int request, int flags, double timeout, struct netadr_s* remote_address, net_api_response_func_t response);
|
|
void (*CancelRequest)(int context);
|
|
void (*CancelAllRequests)(void);
|
|
char* (*AdrToString)(struct netadr_s* a);
|
|
int (*CompareAdr)(struct netadr_s* a, struct netadr_s* b);
|
|
int (*StringToAdr)(char* s, struct netadr_s* a);
|
|
const char* (*ValueForKey)(const char* s, const char* key);
|
|
void (*RemoveKey)(char* s, const char* key);
|
|
void (*SetValueForKey)(char* s, const char* key, const char* value, int maxsize);
|
|
} net_api_t;
|
|
|
|
extern net_api_t netapi;
|