X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=netconn.h;h=f8e9f7a459031b78188819a900b41801144c9474;hp=9d4a912fc4cfde798b9e2ef69d9f0418d590e22c;hb=9ba01c31e0bebb3ada7724316d63a393053102d3;hpb=02e794e29abde064b5595b32480866ffa63ac84a diff --git a/netconn.h b/netconn.h index 9d4a912f..f8e9f7a4 100755 --- a/netconn.h +++ b/netconn.h @@ -1,6 +1,6 @@ /* Copyright (C) 1996-1997 Id Software, Inc. -Copyright (C) 2003 Forest Hale +Copyright (C) 2003 Ashley Rose Hale (LadyHavoc) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,18 +22,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef NET_H #define NET_H +#include +#include "qtypes.h" +#include "crypto.h" #include "lhnet.h" +#include "common.h" +struct cmd_state_s; #define NET_HEADERSIZE (2 * sizeof(unsigned int)) // NetHeader flags -#define NETFLAG_LENGTH_MASK 0x0000ffff -#define NETFLAG_DATA 0x00010000 -#define NETFLAG_ACK 0x00020000 -#define NETFLAG_NAK 0x00040000 -#define NETFLAG_EOM 0x00080000 -#define NETFLAG_UNRELIABLE 0x00100000 -#define NETFLAG_CTL 0x80000000 +#define NETFLAG_LENGTH_MASK 0x0000ffff +#define NETFLAG_DATA 0x00010000 +#define NETFLAG_ACK 0x00020000 +#define NETFLAG_NAK 0x00040000 +#define NETFLAG_EOM 0x00080000 +#define NETFLAG_UNRELIABLE 0x00100000 +#define NETFLAG_CRYPTO0 0x10000000 +#define NETFLAG_CRYPTO1 0x20000000 +#define NETFLAG_CRYPTO2 0x40000000 +#define NETFLAG_CTL 0x80000000 #define NET_PROTOCOL_VERSION 3 @@ -127,6 +135,7 @@ typedef struct netgraphitem_s int reliablebytes; int unreliablebytes; int ackbytes; + double cleartime; } netgraphitem_t; @@ -178,7 +187,7 @@ typedef struct netconn_s struct netconn_qw_s { // QW protocol - qboolean fatal_error; + qbool fatal_error; float last_received; // for timeouts @@ -193,19 +202,20 @@ typedef struct netconn_s int qport; // sequencing variables - int incoming_sequence; - int incoming_acknowledged; - int incoming_reliable_acknowledged; ///< single bit + unsigned int incoming_sequence; + unsigned int incoming_acknowledged; + qbool incoming_reliable_acknowledged; ///< single bit - int incoming_reliable_sequence; ///< single bit, maintained local + qbool incoming_reliable_sequence; ///< single bit, maintained local - int reliable_sequence; ///< single bit - int last_reliable_sequence; ///< sequence number of last send + qbool reliable_sequence; ///< single bit + unsigned int last_reliable_sequence; ///< sequence number of last send } qw; // bandwidth estimator double cleartime; // if realtime > nc->cleartime, free to go + double incoming_cleartime; // if realtime > nc->cleartime, free to go (netgraph cleartime simulation only) // this tracks packet loss and packet sizes on the most recent packets // used by shownetgraph feature @@ -219,18 +229,28 @@ typedef struct netconn_s netgraphitem_t outgoing_netgraph[NETGRAPH_PACKETS]; char address[128]; + crypto_t crypto; + + // statistic counters + int packetsSent; + int packetsReSent; + int packetsReceived; + int receivedDuplicateCount; + int droppedDatagrams; + int unreliableMessagesSent; + int unreliableMessagesReceived; + int reliableMessagesSent; + int reliableMessagesReceived; } netconn_t; extern netconn_t *netconn_list; -extern mempool_t *netconn_mempool; +extern struct mempool_s *netconn_mempool; -extern cvar_t hostname; -extern cvar_t developer_networking; +extern struct cvar_s hostname; +extern struct cvar_s developer_networking; -#define SERVERLIST_TOTALSIZE 2048 +#ifdef CONFIG_MENU #define SERVERLIST_VIEWLISTSIZE SERVERLIST_TOTALSIZE -#define SERVERLIST_ANDMASKCOUNT 5 -#define SERVERLIST_ORMASKCOUNT 5 typedef enum serverlist_maskop_e { @@ -267,7 +287,7 @@ typedef struct serverlist_info_s /// qc-defined short status string char qcstatus[128]; /// frags/ping/name list (if they fit in the packet) - char players[1400]; + char players[2800]; /// max client number int maxplayers; /// number of currently connected players (including bots) @@ -284,8 +304,11 @@ typedef struct serverlist_info_s /// (an integer that is used for filtering incompatible servers, /// not filterable by QC) int gameversion; + + // categorized sorting + int category; /// favorite server flag - qboolean isfavorite; + qbool isfavorite; } serverlist_info_t; typedef enum @@ -304,6 +327,7 @@ typedef enum SLIF_FREESLOTS, SLIF_QCSTATUS, SLIF_PLAYERS, + SLIF_CATEGORY, SLIF_ISFAVORITE, SLIF_COUNT } serverlist_infofield_t; @@ -311,7 +335,8 @@ typedef enum typedef enum { SLSF_DESCENDING = 1, - SLSF_FAVORITESFIRST = 2 + SLSF_FAVORITES = 2, + SLSF_CATEGORIES = 4 } serverlist_sortflags_t; typedef enum @@ -343,25 +368,34 @@ typedef struct serverlist_entry_s typedef struct serverlist_mask_s { - qboolean active; + qbool active; serverlist_maskop_t tests[SLIF_COUNT]; serverlist_info_t info; } serverlist_mask_t; +#define ServerList_GetCacheEntry(x) (&serverlist_cache[(x)]) +#define ServerList_GetViewEntry(x) (ServerList_GetCacheEntry(serverlist_viewlist[(x)])) + extern serverlist_mask_t serverlist_andmasks[SERVERLIST_ANDMASKCOUNT]; extern serverlist_mask_t serverlist_ormasks[SERVERLIST_ORMASKCOUNT]; extern serverlist_infofield_t serverlist_sortbyfield; extern int serverlist_sortflags; // not using the enum, as it is a bitmask +#if SERVERLIST_TOTALSIZE > 65536 +#error too many servers, change type of index array +#endif extern int serverlist_viewcount; -extern serverlist_entry_t *serverlist_viewlist[SERVERLIST_VIEWLISTSIZE]; +extern unsigned short serverlist_viewlist[SERVERLIST_VIEWLISTSIZE]; extern int serverlist_cachecount; +extern serverlist_entry_t *serverlist_cache; +extern const serverlist_entry_t *serverlist_callbackentry; -extern qboolean serverlist_consoleoutput; +extern qbool serverlist_consoleoutput; void ServerList_GetPlayerStatistics(int *numplayerspointer, int *maxplayerspointer); +#endif //============================================================================ // @@ -377,31 +411,39 @@ extern char sv_net_extresponse[NET_EXTRESPONSE_MAX][1400]; extern int sv_net_extresponse_count; extern int sv_net_extresponse_last; +#ifdef CONFIG_MENU extern double masterquerytime; extern int masterquerycount; extern int masterreplycount; extern int serverquerycount; extern int serverreplycount; +#endif -extern sizebuf_t net_message; +extern sizebuf_t cl_message; +extern sizebuf_t sv_message; +extern char cl_readstring[MAX_INPUTLINE]; +extern char sv_readstring[MAX_INPUTLINE]; -extern cvar_t sv_public; +extern struct cvar_s sv_public; -extern cvar_t cl_netlocalping; +extern struct cvar_s net_fakelag; -extern cvar_t cl_netport; -extern cvar_t sv_netport; -extern cvar_t net_address; -extern cvar_t net_address_ipv6; +extern struct cvar_s cl_netport; +extern struct cvar_s sv_netport; +extern struct cvar_s net_address; +extern struct cvar_s net_address_ipv6; +extern struct cvar_s net_usesizelimit; +extern struct cvar_s net_burstreserve; -qboolean NetConn_CanSend(netconn_t *conn); -int NetConn_SendUnreliableMessage(netconn_t *conn, sizebuf_t *data, protocolversion_t protocol, int rate, qboolean quakesignon_suppressreliables); -qboolean NetConn_HaveClientPorts(void); -qboolean NetConn_HaveServerPorts(void); +qbool NetConn_CanSend(netconn_t *conn); +int NetConn_SendUnreliableMessage(netconn_t *conn, sizebuf_t *data, protocolversion_t protocol, int rate, int burstsize, qbool quakesignon_suppressreliables); +qbool NetConn_HaveClientPorts(void); +qbool NetConn_HaveServerPorts(void); void NetConn_CloseClientPorts(void); void NetConn_OpenClientPorts(void); void NetConn_CloseServerPorts(void); void NetConn_OpenServerPorts(int opennetports); +void NetConn_UpdateSockets_Client(void); void NetConn_UpdateSockets(void); lhnetsocket_t *NetConn_ChooseClientSocketForAddress(lhnetaddress_t *address); lhnetsocket_t *NetConn_ChooseServerSocketForAddress(lhnetaddress_t *address); @@ -409,7 +451,7 @@ void NetConn_Init(void); void NetConn_Shutdown(void); netconn_t *NetConn_Open(lhnetsocket_t *mysocket, lhnetaddress_t *peeraddress); void NetConn_Close(netconn_t *conn); -void NetConn_Listen(qboolean state); +void NetConn_Listen(qbool state); int NetConn_Read(lhnetsocket_t *mysocket, void *data, int maxlength, lhnetaddress_t *peeraddress); int NetConn_Write(lhnetsocket_t *mysocket, const void *data, int length, const lhnetaddress_t *peeraddress); int NetConn_WriteString(lhnetsocket_t *mysocket, const char *string, const lhnetaddress_t *peeraddress); @@ -417,22 +459,36 @@ int NetConn_IsLocalGame(void); void NetConn_ClientFrame(void); void NetConn_ServerFrame(void); void NetConn_SleepMicroseconds(int microseconds); -void NetConn_QueryMasters(qboolean querydp, qboolean queryqw); void NetConn_Heartbeat(int priority); +void Net_Stats_f(struct cmd_state_s *cmd); + +#ifdef CONFIG_MENU +void NetConn_QueryMasters(qbool querydp, qbool queryqw); void NetConn_QueryQueueFrame(void); -void Net_Stats_f(void); -void Net_Slist_f(void); -void Net_SlistQW_f(void); -void Net_Refresh_f(void); +void Net_Slist_f(struct cmd_state_s *cmd); +void Net_SlistQW_f(struct cmd_state_s *cmd); +void Net_Refresh_f(struct cmd_state_s *cmd); /// ServerList interface (public) /// manually refresh the view set, do this after having changed the mask or any other flag void ServerList_RebuildViewList(void); void ServerList_ResetMasks(void); -void ServerList_QueryList(qboolean resetcache, qboolean querydp, qboolean queryqw, qboolean consoleoutput); +void ServerList_QueryList(qbool resetcache, qbool querydp, qbool queryqw, qbool consoleoutput); /// called whenever net_slist_favorites changes -void NetConn_UpdateFavorites(void); +void NetConn_UpdateFavorites_c(struct cvar_s *var); +#endif + +#define MAX_CHALLENGES 128 +typedef struct challenge_s +{ + lhnetaddress_t address; + double time; + char string[12]; +} +challenge_t; + +extern challenge_t challenges[MAX_CHALLENGES]; #endif