|
|
1.1 root 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.