Home | History | Annotate | Download | only in client
      1 /*
      2 Copyright (C) 1996-1997 Id Software, Inc.
      3 
      4 This program is free software; you can redistribute it and/or
      5 modify it under the terms of the GNU General Public License
      6 as published by the Free Software Foundation; either version 2
      7 of the License, or (at your option) any later version.
      8 
      9 This program is distributed in the hope that it will be useful,
     10 but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     12 
     13 See the GNU General Public License for more details.
     14 
     15 You should have received a copy of the GNU General Public License
     16 along with this program; if not, write to the Free Software
     17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
     18 
     19 */
     20 // net.h -- quake's interface to the networking layer
     21 
     22 #define	PORT_ANY	-1
     23 
     24 typedef struct
     25 {
     26 	byte	ip[4];
     27 	unsigned short	port;
     28 	unsigned short	pad;
     29 } netadr_t;
     30 
     31 extern	netadr_t	net_local_adr;
     32 extern	netadr_t	net_from;		// address of who sent the packet
     33 extern	sizebuf_t	net_message;
     34 
     35 extern	cvar_t	hostname;
     36 
     37 extern	int		net_socket;
     38 
     39 void		NET_Init (int port);
     40 void		NET_Shutdown (void);
     41 qboolean	NET_GetPacket (void);
     42 void		NET_SendPacket (int length, void *data, netadr_t to);
     43 
     44 qboolean	NET_CompareAdr (netadr_t a, netadr_t b);
     45 qboolean	NET_CompareBaseAdr (netadr_t a, netadr_t b);
     46 char		*NET_AdrToString (netadr_t a);
     47 char		*NET_BaseAdrToString (netadr_t a);
     48 qboolean	NET_StringToAdr (char *s, netadr_t *a);
     49 qboolean NET_IsClientLegal(netadr_t *adr);
     50 
     51 //============================================================================
     52 
     53 #define	OLD_AVG		0.99		// total = oldtotal*OLD_AVG + new*(1-OLD_AVG)
     54 
     55 #define	MAX_LATENT	32
     56 
     57 typedef struct
     58 {
     59 	qboolean	fatal_error;
     60 
     61 	float		last_received;		// for timeouts
     62 
     63 // the statistics are cleared at each client begin, because
     64 // the server connecting process gives a bogus picture of the data
     65 	float		frame_latency;		// rolling average
     66 	float		frame_rate;
     67 
     68 	int			drop_count;			// dropped packets, cleared each level
     69 	int			good_count;			// cleared each level
     70 
     71 	netadr_t	remote_address;
     72 	int			qport;
     73 
     74 // bandwidth estimator
     75 	double		cleartime;			// if realtime > nc->cleartime, free to go
     76 	double		rate;				// seconds / byte
     77 
     78 // sequencing variables
     79 	int			incoming_sequence;
     80 	int			incoming_acknowledged;
     81 	int			incoming_reliable_acknowledged;	// single bit
     82 
     83 	int			incoming_reliable_sequence;		// single bit, maintained local
     84 
     85 	int			outgoing_sequence;
     86 	int			reliable_sequence;			// single bit
     87 	int			last_reliable_sequence;		// sequence number of last send
     88 
     89 // reliable staging and holding areas
     90 	sizebuf_t	message;		// writing buffer to send to server
     91 	byte		message_buf[MAX_MSGLEN];
     92 
     93 	int			reliable_length;
     94 	byte		reliable_buf[MAX_MSGLEN];	// unacked reliable message
     95 
     96 // time and size data to calculate bandwidth
     97 	int			outgoing_size[MAX_LATENT];
     98 	double		outgoing_time[MAX_LATENT];
     99 } netchan_t;
    100 
    101 extern	int	net_drop;		// packets dropped before this one
    102 
    103 void Netchan_Init (void);
    104 void Netchan_Transmit (netchan_t *chan, int length, byte *data);
    105 void Netchan_OutOfBand (netadr_t adr, int length, byte *data);
    106 void Netchan_OutOfBandPrint (netadr_t adr, char *format, ...);
    107 qboolean Netchan_Process (netchan_t *chan);
    108 void Netchan_Setup (netchan_t *chan, netadr_t adr, int qport);
    109 
    110 qboolean Netchan_CanPacket (netchan_t *chan);
    111 qboolean Netchan_CanReliable (netchan_t *chan);
    112 
    113