]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - netconn.h
Fix a bug in Cvar_RegisterVirtual which was corrupting memory when adding a second...
[xonotic/darkplaces.git] / netconn.h
index f93d297eb6f52d78f49af8b5c9f004c65442d943..f8e9f7a459031b78188819a900b41801144c9474 100755 (executable)
--- 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,19 +22,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef NET_H
 #define NET_H
 
+#include <stdarg.h>
+#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_CRYPTO         0x40000000
+#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
@@ -128,6 +135,7 @@ typedef struct netgraphitem_s
        int reliablebytes;
        int unreliablebytes;
        int ackbytes;
+       double cleartime;
 }
 netgraphitem_t;
 
@@ -179,7 +187,7 @@ typedef struct netconn_s
        struct netconn_qw_s
        {
                // QW protocol
-               qboolean        fatal_error;
+               qbool   fatal_error;
 
                float           last_received;          // for timeouts
 
@@ -194,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
@@ -221,18 +230,27 @@ typedef struct netconn_s
 
        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
 {
@@ -269,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)
@@ -286,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
@@ -306,6 +327,7 @@ typedef enum
        SLIF_FREESLOTS,
        SLIF_QCSTATUS,
        SLIF_PLAYERS,
+       SLIF_CATEGORY,
        SLIF_ISFAVORITE,
        SLIF_COUNT
 } serverlist_infofield_t;
@@ -313,7 +335,8 @@ typedef enum
 typedef enum
 {
        SLSF_DESCENDING = 1,
-       SLSF_FAVORITESFIRST = 2
+       SLSF_FAVORITES = 2,
+       SLSF_CATEGORIES = 4
 } serverlist_sortflags_t;
 
 typedef enum
@@ -345,7 +368,7 @@ 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;
@@ -367,10 +390,12 @@ 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
 
 //============================================================================
 //
@@ -386,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);
@@ -418,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);
@@ -426,22 +459,25 @@ 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
@@ -452,7 +488,7 @@ typedef struct challenge_s
 }
 challenge_t;
 
-extern challenge_t challenge[MAX_CHALLENGES];
+extern challenge_t challenges[MAX_CHALLENGES];
 
 #endif