X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=netconn.h;h=7341359ed0127134e8d3fd700a74991719c9ad3b;hp=09c6b72f0cd7414061b88ebe1dd81199ca62c42d;hb=85a33377d64ae8438e6582a7b8472f5a4bd41942;hpb=c72641f5e795ed0e0d58a38d79860cc92597e4da;ds=sidebyside diff --git a/netconn.h b/netconn.h index 09c6b72f..7341359e 100755 --- a/netconn.h +++ b/netconn.h @@ -27,13 +27,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #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 @@ -121,6 +124,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define CCREP_RULE_INFO 0x85 #define CCREP_RCON 0x86 // RocketGuy: ProQuake rcon support +typedef struct netgraphitem_s +{ + double time; + int reliablebytes; + int unreliablebytes; + int ackbytes; + double cleartime; +} +netgraphitem_t; + typedef struct netconn_s { struct netconn_s *next; @@ -184,36 +197,45 @@ 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; + qboolean incoming_reliable_acknowledged; ///< single bit - int incoming_reliable_sequence; ///< single bit, maintained local + qboolean incoming_reliable_sequence; ///< single bit, maintained local - int reliable_sequence; ///< single bit - int last_reliable_sequence; ///< sequence number of last send + qboolean 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 -#define NETGRAPH_PACKETS 100 +#define NETGRAPH_PACKETS 256 #define NETGRAPH_NOPACKET 0 #define NETGRAPH_LOSTPACKET -1 #define NETGRAPH_CHOKEDPACKET -2 int incoming_packetcounter; - int incoming_reliablesize[NETGRAPH_PACKETS]; - int incoming_unreliablesize[NETGRAPH_PACKETS]; - int incoming_acksize[NETGRAPH_PACKETS]; + netgraphitem_t incoming_netgraph[NETGRAPH_PACKETS]; int outgoing_packetcounter; - int outgoing_reliablesize[NETGRAPH_PACKETS]; - int outgoing_unreliablesize[NETGRAPH_PACKETS]; - int outgoing_acksize[NETGRAPH_PACKETS]; + 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; @@ -222,10 +244,8 @@ extern mempool_t *netconn_mempool; extern cvar_t hostname; extern cvar_t 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 { @@ -279,6 +299,9 @@ 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; } serverlist_info_t; @@ -299,6 +322,7 @@ typedef enum SLIF_FREESLOTS, SLIF_QCSTATUS, SLIF_PLAYERS, + SLIF_CATEGORY, SLIF_ISFAVORITE, SLIF_COUNT } serverlist_infofield_t; @@ -306,7 +330,8 @@ typedef enum typedef enum { SLSF_DESCENDING = 1, - SLSF_FAVORITESFIRST = 2 + SLSF_FAVORITES = 2, + SLSF_CATEGORIES = 4 } serverlist_sortflags_t; typedef enum @@ -343,20 +368,29 @@ typedef struct serverlist_mask_s 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; void ServerList_GetPlayerStatistics(int *numplayerspointer, int *maxplayerspointer); +#endif //============================================================================ // @@ -364,17 +398,26 @@ void ServerList_GetPlayerStatistics(int *numplayerspointer, int *maxplayerspoint // //============================================================================ -extern char net_extresponse[NET_EXTRESPONSE_MAX][1400]; -extern int net_extresponse_count; -extern int net_extresponse_last; +extern char cl_net_extresponse[NET_EXTRESPONSE_MAX][1400]; +extern int cl_net_extresponse_count; +extern int cl_net_extresponse_last; + +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; @@ -384,9 +427,11 @@ extern cvar_t cl_netport; extern cvar_t sv_netport; extern cvar_t net_address; extern cvar_t net_address_ipv6; +extern cvar_t net_usesizelimit; +extern cvar_t 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); +int NetConn_SendUnreliableMessage(netconn_t *conn, sizebuf_t *data, protocolversion_t protocol, int rate, int burstsize, qboolean quakesignon_suppressreliables); qboolean NetConn_HaveClientPorts(void); qboolean NetConn_HaveServerPorts(void); void NetConn_CloseClientPorts(void); @@ -408,10 +453,12 @@ 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 NetConn_QueryQueueFrame(void); void Net_Stats_f(void); + +#ifdef CONFIG_MENU +void NetConn_QueryMasters(qboolean querydp, qboolean queryqw); +void NetConn_QueryQueueFrame(void); void Net_Slist_f(void); void Net_SlistQW_f(void); void Net_Refresh_f(void); @@ -423,7 +470,19 @@ void ServerList_ResetMasks(void); void ServerList_QueryList(qboolean resetcache, qboolean querydp, qboolean queryqw, qboolean consoleoutput); /// called whenever net_slist_favorites changes -void NetConn_UpdateFavorites(); +void NetConn_UpdateFavorites(void); +#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