/*** * * Copyright (c) 1996-2002, Valve LLC. All rights reserved. * * This product contains software technology licensed from Id * Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. * All Rights Reserved. * * Use, distribution, and modification of this source code and/or resulting * object code is restricted to non-commercial enhancements to products from * Valve LLC. All other use, distribution, or modification is prohibited * without written permission from Valve LLC. * ****/ #pragma once #if !defined(NET_API_H) #define NET_API_H #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; #endif // NET_APIH