home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / quakeworld_src / client / net.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-17  |  3.4 KB  |  113 lines

  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.