mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-02 22:11:22 +00:00
* net.h: separated the functions and data exported through net.h into two:
net.h now holds all public exports and the new net_defs.h holds the exports only required by the net layer. besides the net_* files, host_cmd.c and sv_main.c are the only reasonable foreign importers of net_defs.h: they require accessing the qsocket_s structure members. The only one that does not fit is menu.c needing some net exports, but it may be properly handled, later on. * net_defs.h: New header. * host_cmd.c: Include net_defs.h. * menu.c: Likewise. * net_bsd.c: Likewise. * net_dgrm.c: Likewise. * net_loop.c: Likewise. * net_main.c: Likewise. * net_sdl.c: Likewise. * net_sdlnet.c: Likewise. * net_udp.c: Likewise. * net_win.c: Likewise. * net_wins.c: Likewise. * net_wipx.c: Likewise. * sv_main.c: Likewise. git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@204 af15c1b1-3010-417e-b628-4374ebc0bcbd
This commit is contained in:
parent
c418e8e05f
commit
febb164f0f
15 changed files with 307 additions and 263 deletions
|
@ -20,8 +20,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dirent.h>
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include <dirent.h>
|
||||||
|
#include "net_defs.h" /* for struct qsocket_s details */
|
||||||
|
|
||||||
extern cvar_t pausable;
|
extern cvar_t pausable;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,9 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h" /* FIXME */
|
||||||
|
|
||||||
void (*vid_menucmdfn)(void); //johnfitz
|
void (*vid_menucmdfn)(void); //johnfitz
|
||||||
void (*vid_menudrawfn)(void);
|
void (*vid_menudrawfn)(void);
|
||||||
|
|
297
Quake/net.h
297
Quake/net.h
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1996-2001 Id Software, Inc.
|
Copyright (C) 1996-2001 Id Software, Inc.
|
||||||
Copyright (C) 2002-2009 John Fitzgibbons and others
|
Copyright (C) 2002-2009 John Fitzgibbons and others
|
||||||
|
Copyright (C) 2009-2010 Ozkan Sezer
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
|
@ -19,255 +20,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
net.h
|
||||||
|
quake's interface to the networking layer
|
||||||
|
network functions and data, common to the
|
||||||
|
whole engine
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef _QUAKE_NET_H
|
#ifndef _QUAKE_NET_H
|
||||||
#define _QUAKE_NET_H
|
#define _QUAKE_NET_H
|
||||||
|
|
||||||
// net.h -- quake's interface to the networking layer
|
|
||||||
|
|
||||||
struct qsockaddr
|
#define NET_NAMELEN 64
|
||||||
{
|
|
||||||
short sa_family;
|
|
||||||
unsigned char sa_data[14];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
#define NET_MAXMESSAGE 32000 /* johnfitz -- was 8192 */
|
||||||
|
|
||||||
#define NET_NAMELEN 64
|
extern int DEFAULTnet_hostport;
|
||||||
|
extern int net_hostport;
|
||||||
|
|
||||||
#define NET_MAXMESSAGE 32000 //johnfitz -- was 8192
|
|
||||||
#define NET_HEADERSIZE (2 * sizeof(unsigned int))
|
|
||||||
#define NET_DATAGRAMSIZE (MAX_DATAGRAM + NET_HEADERSIZE)
|
|
||||||
|
|
||||||
// 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 NET_PROTOCOL_VERSION 3
|
|
||||||
|
|
||||||
// This is the network info/connection protocol. It is used to find Quake
|
|
||||||
// servers, get info about them, and connect to them. Once connected, the
|
|
||||||
// Quake game protocol (documented elsewhere) is used.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// General notes:
|
|
||||||
// game_name is currently always "QUAKE", but is there so this same protocol
|
|
||||||
// can be used for future games as well; can you say Quake2?
|
|
||||||
//
|
|
||||||
// CCREQ_CONNECT
|
|
||||||
// string game_name "QUAKE"
|
|
||||||
// byte net_protocol_version NET_PROTOCOL_VERSION
|
|
||||||
//
|
|
||||||
// CCREQ_SERVER_INFO
|
|
||||||
// string game_name "QUAKE"
|
|
||||||
// byte net_protocol_version NET_PROTOCOL_VERSION
|
|
||||||
//
|
|
||||||
// CCREQ_PLAYER_INFO
|
|
||||||
// byte player_number
|
|
||||||
//
|
|
||||||
// CCREQ_RULE_INFO
|
|
||||||
// string rule
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CCREP_ACCEPT
|
|
||||||
// long port
|
|
||||||
//
|
|
||||||
// CCREP_REJECT
|
|
||||||
// string reason
|
|
||||||
//
|
|
||||||
// CCREP_SERVER_INFO
|
|
||||||
// string server_address
|
|
||||||
// string host_name
|
|
||||||
// string level_name
|
|
||||||
// byte current_players
|
|
||||||
// byte max_players
|
|
||||||
// byte protocol_version NET_PROTOCOL_VERSION
|
|
||||||
//
|
|
||||||
// CCREP_PLAYER_INFO
|
|
||||||
// byte player_number
|
|
||||||
// string name
|
|
||||||
// long colors
|
|
||||||
// long frags
|
|
||||||
// long connect_time
|
|
||||||
// string address
|
|
||||||
//
|
|
||||||
// CCREP_RULE_INFO
|
|
||||||
// string rule
|
|
||||||
// string value
|
|
||||||
|
|
||||||
// note:
|
|
||||||
// There are two address forms used above. The short form is just a
|
|
||||||
// port number. The address that goes along with the port is defined as
|
|
||||||
// "whatever address you receive this reponse from". This lets us use
|
|
||||||
// the host OS to solve the problem of multiple host addresses (possibly
|
|
||||||
// with no routing between them); the host will use the right address
|
|
||||||
// when we reply to the inbound connection request. The long from is
|
|
||||||
// a full address and port in a string. It is used for returning the
|
|
||||||
// address of a server that is not running locally.
|
|
||||||
|
|
||||||
#define CCREQ_CONNECT 0x01
|
|
||||||
#define CCREQ_SERVER_INFO 0x02
|
|
||||||
#define CCREQ_PLAYER_INFO 0x03
|
|
||||||
#define CCREQ_RULE_INFO 0x04
|
|
||||||
|
|
||||||
#define CCREP_ACCEPT 0x81
|
|
||||||
#define CCREP_REJECT 0x82
|
|
||||||
#define CCREP_SERVER_INFO 0x83
|
|
||||||
#define CCREP_PLAYER_INFO 0x84
|
|
||||||
#define CCREP_RULE_INFO 0x85
|
|
||||||
|
|
||||||
typedef struct qsocket_s
|
|
||||||
{
|
|
||||||
struct qsocket_s *next;
|
|
||||||
double connecttime;
|
|
||||||
double lastMessageTime;
|
|
||||||
double lastSendTime;
|
|
||||||
|
|
||||||
qboolean disconnected;
|
|
||||||
qboolean canSend;
|
|
||||||
qboolean sendNext;
|
|
||||||
|
|
||||||
int driver;
|
|
||||||
int landriver;
|
|
||||||
int socket;
|
|
||||||
void *driverdata;
|
|
||||||
|
|
||||||
unsigned int ackSequence;
|
|
||||||
unsigned int sendSequence;
|
|
||||||
unsigned int unreliableSendSequence;
|
|
||||||
int sendMessageLength;
|
|
||||||
byte sendMessage [NET_MAXMESSAGE];
|
|
||||||
|
|
||||||
unsigned int receiveSequence;
|
|
||||||
unsigned int unreliableReceiveSequence;
|
|
||||||
int receiveMessageLength;
|
|
||||||
byte receiveMessage [NET_MAXMESSAGE];
|
|
||||||
|
|
||||||
struct qsockaddr addr;
|
|
||||||
char address[NET_NAMELEN];
|
|
||||||
|
|
||||||
} qsocket_t;
|
|
||||||
|
|
||||||
extern qsocket_t *net_activeSockets;
|
|
||||||
extern qsocket_t *net_freeSockets;
|
|
||||||
extern int net_numsockets;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
qboolean initialized;
|
|
||||||
int controlSock;
|
|
||||||
int (*Init) (void);
|
|
||||||
void (*Shutdown) (void);
|
|
||||||
void (*Listen) (qboolean state);
|
|
||||||
int (*Open_Socket) (int port);
|
|
||||||
int (*Close_Socket) (int socket);
|
|
||||||
int (*Connect) (int socket, struct qsockaddr *addr);
|
|
||||||
int (*CheckNewConnections) (void);
|
|
||||||
int (*Read) (int socket, byte *buf, int len, struct qsockaddr *addr);
|
|
||||||
int (*Write) (int socket, byte *buf, int len, struct qsockaddr *addr);
|
|
||||||
int (*Broadcast) (int socket, byte *buf, int len);
|
|
||||||
char * (*AddrToString) (struct qsockaddr *addr);
|
|
||||||
int (*StringToAddr) (char *string, struct qsockaddr *addr);
|
|
||||||
int (*GetSocketAddr) (int socket, struct qsockaddr *addr);
|
|
||||||
int (*GetNameFromAddr) (struct qsockaddr *addr, char *name);
|
|
||||||
int (*GetAddrFromName) (char *name, struct qsockaddr *addr);
|
|
||||||
int (*AddrCompare) (struct qsockaddr *addr1, struct qsockaddr *addr2);
|
|
||||||
int (*GetSocketPort) (struct qsockaddr *addr);
|
|
||||||
int (*SetSocketPort) (struct qsockaddr *addr, int port);
|
|
||||||
} net_landriver_t;
|
|
||||||
|
|
||||||
#define MAX_NET_DRIVERS 8
|
|
||||||
extern int net_numlandrivers;
|
|
||||||
extern net_landriver_t net_landrivers[MAX_NET_DRIVERS];
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
qboolean initialized;
|
|
||||||
int (*Init) (void);
|
|
||||||
void (*Listen) (qboolean state);
|
|
||||||
void (*SearchForHosts) (qboolean xmit);
|
|
||||||
qsocket_t *(*Connect) (char *host);
|
|
||||||
qsocket_t *(*CheckNewConnections) (void);
|
|
||||||
int (*QGetMessage) (qsocket_t *sock);
|
|
||||||
int (*QSendMessage) (qsocket_t *sock, sizebuf_t *data);
|
|
||||||
int (*SendUnreliableMessage) (qsocket_t *sock, sizebuf_t *data);
|
|
||||||
qboolean (*CanSendMessage) (qsocket_t *sock);
|
|
||||||
qboolean (*CanSendUnreliableMessage) (qsocket_t *sock);
|
|
||||||
void (*Close) (qsocket_t *sock);
|
|
||||||
void (*Shutdown) (void);
|
|
||||||
int controlSock;
|
|
||||||
} net_driver_t;
|
|
||||||
|
|
||||||
extern int net_numdrivers;
|
|
||||||
extern net_driver_t net_drivers[MAX_NET_DRIVERS];
|
|
||||||
|
|
||||||
extern int DEFAULTnet_hostport;
|
|
||||||
extern int net_hostport;
|
|
||||||
|
|
||||||
extern int net_driverlevel;
|
|
||||||
extern cvar_t hostname;
|
extern cvar_t hostname;
|
||||||
|
|
||||||
extern int messagesSent;
|
|
||||||
extern int messagesReceived;
|
|
||||||
extern int unreliableMessagesSent;
|
|
||||||
extern int unreliableMessagesReceived;
|
|
||||||
|
|
||||||
qsocket_t *NET_NewQSocket (void);
|
|
||||||
void NET_FreeQSocket(qsocket_t *);
|
|
||||||
double SetNetTime(void);
|
|
||||||
|
|
||||||
|
|
||||||
#define HOSTCACHESIZE 8
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char name[16];
|
|
||||||
char map[16];
|
|
||||||
char cname[32];
|
|
||||||
int users;
|
|
||||||
int maxusers;
|
|
||||||
int driver;
|
|
||||||
int ldriver;
|
|
||||||
struct qsockaddr addr;
|
|
||||||
} hostcache_t;
|
|
||||||
|
|
||||||
extern int hostCacheCount;
|
|
||||||
extern hostcache_t hostcache[HOSTCACHESIZE];
|
|
||||||
|
|
||||||
#if !defined(_WIN32 ) && !defined (__linux__) && !defined (__sun__)
|
|
||||||
#ifndef htonl
|
|
||||||
extern unsigned long htonl (unsigned long hostlong);
|
|
||||||
#endif
|
|
||||||
#ifndef htons
|
|
||||||
extern unsigned short htons (unsigned short hostshort);
|
|
||||||
#endif
|
|
||||||
#ifndef ntohl
|
|
||||||
extern unsigned long ntohl (unsigned long netlong);
|
|
||||||
#endif
|
|
||||||
#ifndef ntohs
|
|
||||||
extern unsigned short ntohs (unsigned short netshort);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
//
|
|
||||||
// public network functions
|
|
||||||
//
|
|
||||||
//============================================================================
|
|
||||||
|
|
||||||
extern double net_time;
|
extern double net_time;
|
||||||
extern sizebuf_t net_message;
|
extern sizebuf_t net_message;
|
||||||
extern int net_activeconnections;
|
extern int net_activeconnections;
|
||||||
|
|
||||||
void NET_Init (void);
|
|
||||||
void NET_Shutdown (void);
|
void NET_Init (void);
|
||||||
|
void NET_Shutdown (void);
|
||||||
|
|
||||||
struct qsocket_s *NET_CheckNewConnections (void);
|
struct qsocket_s *NET_CheckNewConnections (void);
|
||||||
// returns a new connection number if there is one pending, else -1
|
// returns a new connection number if there is one pending, else -1
|
||||||
|
@ -275,29 +54,28 @@ struct qsocket_s *NET_CheckNewConnections (void);
|
||||||
struct qsocket_s *NET_Connect (char *host);
|
struct qsocket_s *NET_Connect (char *host);
|
||||||
// called by client to connect to a host. Returns -1 if not able to
|
// called by client to connect to a host. Returns -1 if not able to
|
||||||
|
|
||||||
qboolean NET_CanSendMessage (qsocket_t *sock);
|
qboolean NET_CanSendMessage (struct qsocket_s *sock);
|
||||||
// Returns true or false if the given qsocket can currently accept a
|
// Returns true or false if the given qsocket can currently accept a
|
||||||
// message to be transmitted.
|
// message to be transmitted.
|
||||||
|
|
||||||
int NET_GetMessage (struct qsocket_s *sock);
|
int NET_GetMessage (struct qsocket_s *sock);
|
||||||
// returns data in net_message sizebuf
|
// returns data in net_message sizebuf
|
||||||
// returns 0 if no data is waiting
|
// returns 0 if no data is waiting
|
||||||
// returns 1 if a message was received
|
// returns 1 if a message was received
|
||||||
// returns 2 if an unreliable message was received
|
// returns 2 if an unreliable message was received
|
||||||
// returns -1 if the connection died
|
// returns -1 if the connection died
|
||||||
|
|
||||||
int NET_SendMessage (struct qsocket_s *sock, sizebuf_t *data);
|
int NET_SendMessage (struct qsocket_s *sock, sizebuf_t *data);
|
||||||
int NET_SendUnreliableMessage (struct qsocket_s *sock, sizebuf_t *data);
|
int NET_SendUnreliableMessage (struct qsocket_s *sock, sizebuf_t *data);
|
||||||
// returns 0 if the message connot be delivered reliably, but the connection
|
// returns 0 if the message connot be delivered reliably, but the connection
|
||||||
// is still considered valid
|
// is still considered valid
|
||||||
// returns 1 if the message was sent properly
|
// returns 1 if the message was sent properly
|
||||||
// returns -1 if the connection died
|
// returns -1 if the connection died
|
||||||
|
|
||||||
int NET_SendToAll(sizebuf_t *data, double blocktime);
|
int NET_SendToAll(sizebuf_t *data, double blocktime);
|
||||||
// This is a reliable *blocking* send to all attached clients.
|
// This is a reliable *blocking* send to all attached clients.
|
||||||
|
|
||||||
|
void NET_Close (struct qsocket_s *sock);
|
||||||
void NET_Close (struct qsocket_s *sock);
|
|
||||||
// if a dead connection is returned by a get or send function, this function
|
// if a dead connection is returned by a get or send function, this function
|
||||||
// should be called when it is convenient
|
// should be called when it is convenient
|
||||||
|
|
||||||
|
@ -306,34 +84,29 @@ void NET_Close (struct qsocket_s *sock);
|
||||||
// from a server.
|
// from a server.
|
||||||
// A netcon_t number will not be reused until this function is called for it
|
// A netcon_t number will not be reused until this function is called for it
|
||||||
|
|
||||||
void NET_Poll(void);
|
void NET_Poll (void);
|
||||||
|
|
||||||
|
|
||||||
typedef struct _PollProcedure
|
// Server list related globals:
|
||||||
{
|
extern qboolean slistInProgress;
|
||||||
struct _PollProcedure *next;
|
extern qboolean slistSilent;
|
||||||
double nextTime;
|
extern qboolean slistLocal;
|
||||||
void (*procedure)();
|
|
||||||
void *arg;
|
|
||||||
} PollProcedure;
|
|
||||||
|
|
||||||
void SchedulePollProcedure(PollProcedure *pp, double timeOffset);
|
void NET_Slist_f (void);
|
||||||
|
|
||||||
|
|
||||||
|
/* FIXME: driver related, but public:
|
||||||
|
*/
|
||||||
extern qboolean serialAvailable;
|
extern qboolean serialAvailable;
|
||||||
extern qboolean ipxAvailable;
|
extern qboolean ipxAvailable;
|
||||||
extern qboolean tcpipAvailable;
|
extern qboolean tcpipAvailable;
|
||||||
extern char my_ipx_address[NET_NAMELEN];
|
extern char my_ipx_address[NET_NAMELEN];
|
||||||
extern char my_tcpip_address[NET_NAMELEN];
|
extern char my_tcpip_address[NET_NAMELEN];
|
||||||
extern void (*GetComPortConfig) (int portNumber, int *port, int *irq, int *baud, qboolean *useModem);
|
|
||||||
extern void (*SetComPortConfig) (int portNumber, int port, int irq, int baud, qboolean useModem);
|
|
||||||
extern void (*GetModemConfig) (int portNumber, char *dialType, char *clear, char *init, char *hangup);
|
|
||||||
extern void (*SetModemConfig) (int portNumber, char *dialType, char *clear, char *init, char *hangup);
|
|
||||||
|
|
||||||
extern qboolean slistInProgress;
|
extern void (*GetComPortConfig) (int portNumber, int *port, int *irq, int *baud, qboolean *useModem);
|
||||||
extern qboolean slistSilent;
|
extern void (*SetComPortConfig) (int portNumber, int port, int irq, int baud, qboolean useModem);
|
||||||
extern qboolean slistLocal;
|
extern void (*GetModemConfig) (int portNumber, char *dialType, char *clear, char *init, char *hangup);
|
||||||
|
extern void (*SetModemConfig) (int portNumber, char *dialType, char *clear, char *init, char *hangup);
|
||||||
void NET_Slist_f (void);
|
|
||||||
|
|
||||||
#endif /* _QUAKE_NET_H */
|
#endif /* _QUAKE_NET_H */
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,9 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
|
|
||||||
#include "net_loop.h"
|
#include "net_loop.h"
|
||||||
#include "net_dgrm.h"
|
#include "net_dgrm.h"
|
||||||
|
|
255
Quake/net_defs.h
Normal file
255
Quake/net_defs.h
Normal file
|
@ -0,0 +1,255 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 1996-2001 Id Software, Inc.
|
||||||
|
Copyright (C) 2002-2009 John Fitzgibbons and others
|
||||||
|
Copyright (C) 2009-2010 Ozkan Sezer
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
net_defs.h
|
||||||
|
functions and data private to the network layer
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __NET_DEFS_H
|
||||||
|
#define __NET_DEFS_H
|
||||||
|
|
||||||
|
struct qsockaddr
|
||||||
|
{
|
||||||
|
short sa_family;
|
||||||
|
unsigned char sa_data[14];
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NET_HEADERSIZE (2 * sizeof(unsigned int))
|
||||||
|
#define NET_DATAGRAMSIZE (MAX_DATAGRAM + NET_HEADERSIZE)
|
||||||
|
|
||||||
|
// 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 NET_PROTOCOL_VERSION 3
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
This is the network info/connection protocol. It is used to find Quake
|
||||||
|
servers, get info about them, and connect to them. Once connected, the
|
||||||
|
Quake game protocol (documented elsewhere) is used.
|
||||||
|
|
||||||
|
|
||||||
|
General notes:
|
||||||
|
game_name is currently always "QUAKE", but is there so this same protocol
|
||||||
|
can be used for future games as well; can you say Quake2?
|
||||||
|
|
||||||
|
CCREQ_CONNECT
|
||||||
|
string game_name "QUAKE"
|
||||||
|
byte net_protocol_version NET_PROTOCOL_VERSION
|
||||||
|
|
||||||
|
CCREQ_SERVER_INFO
|
||||||
|
string game_name "QUAKE"
|
||||||
|
byte net_protocol_version NET_PROTOCOL_VERSION
|
||||||
|
|
||||||
|
CCREQ_PLAYER_INFO
|
||||||
|
byte player_number
|
||||||
|
|
||||||
|
CCREQ_RULE_INFO
|
||||||
|
string rule
|
||||||
|
|
||||||
|
CCREP_ACCEPT
|
||||||
|
long port
|
||||||
|
|
||||||
|
CCREP_REJECT
|
||||||
|
string reason
|
||||||
|
|
||||||
|
CCREP_SERVER_INFO
|
||||||
|
string server_address
|
||||||
|
string host_name
|
||||||
|
string level_name
|
||||||
|
byte current_players
|
||||||
|
byte max_players
|
||||||
|
byte protocol_version NET_PROTOCOL_VERSION
|
||||||
|
|
||||||
|
CCREP_PLAYER_INFO
|
||||||
|
byte player_number
|
||||||
|
string name
|
||||||
|
long colors
|
||||||
|
long frags
|
||||||
|
long connect_time
|
||||||
|
string address
|
||||||
|
|
||||||
|
CCREP_RULE_INFO
|
||||||
|
string rule
|
||||||
|
string value
|
||||||
|
|
||||||
|
note:
|
||||||
|
There are two address forms used above. The short form is just a
|
||||||
|
port number. The address that goes along with the port is defined as
|
||||||
|
"whatever address you receive this reponse from". This lets us use
|
||||||
|
the host OS to solve the problem of multiple host addresses (possibly
|
||||||
|
with no routing between them); the host will use the right address
|
||||||
|
when we reply to the inbound connection request. The long from is
|
||||||
|
a full address and port in a string. It is used for returning the
|
||||||
|
address of a server that is not running locally.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#define CCREQ_CONNECT 0x01
|
||||||
|
#define CCREQ_SERVER_INFO 0x02
|
||||||
|
#define CCREQ_PLAYER_INFO 0x03
|
||||||
|
#define CCREQ_RULE_INFO 0x04
|
||||||
|
|
||||||
|
#define CCREP_ACCEPT 0x81
|
||||||
|
#define CCREP_REJECT 0x82
|
||||||
|
#define CCREP_SERVER_INFO 0x83
|
||||||
|
#define CCREP_PLAYER_INFO 0x84
|
||||||
|
#define CCREP_RULE_INFO 0x85
|
||||||
|
|
||||||
|
typedef struct qsocket_s
|
||||||
|
{
|
||||||
|
struct qsocket_s *next;
|
||||||
|
double connecttime;
|
||||||
|
double lastMessageTime;
|
||||||
|
double lastSendTime;
|
||||||
|
|
||||||
|
qboolean disconnected;
|
||||||
|
qboolean canSend;
|
||||||
|
qboolean sendNext;
|
||||||
|
|
||||||
|
int driver;
|
||||||
|
int landriver;
|
||||||
|
int socket;
|
||||||
|
void *driverdata;
|
||||||
|
|
||||||
|
unsigned int ackSequence;
|
||||||
|
unsigned int sendSequence;
|
||||||
|
unsigned int unreliableSendSequence;
|
||||||
|
int sendMessageLength;
|
||||||
|
byte sendMessage [NET_MAXMESSAGE];
|
||||||
|
|
||||||
|
unsigned int receiveSequence;
|
||||||
|
unsigned int unreliableReceiveSequence;
|
||||||
|
int receiveMessageLength;
|
||||||
|
byte receiveMessage [NET_MAXMESSAGE];
|
||||||
|
|
||||||
|
struct qsockaddr addr;
|
||||||
|
char address[NET_NAMELEN];
|
||||||
|
|
||||||
|
} qsocket_t;
|
||||||
|
|
||||||
|
extern qsocket_t *net_activeSockets;
|
||||||
|
extern qsocket_t *net_freeSockets;
|
||||||
|
extern int net_numsockets;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
qboolean initialized;
|
||||||
|
int controlSock;
|
||||||
|
int (*Init) (void);
|
||||||
|
void (*Shutdown) (void);
|
||||||
|
void (*Listen) (qboolean state);
|
||||||
|
int (*Open_Socket) (int port);
|
||||||
|
int (*Close_Socket) (int socket);
|
||||||
|
int (*Connect) (int socket, struct qsockaddr *addr);
|
||||||
|
int (*CheckNewConnections) (void);
|
||||||
|
int (*Read) (int socket, byte *buf, int len, struct qsockaddr *addr);
|
||||||
|
int (*Write) (int socket, byte *buf, int len, struct qsockaddr *addr);
|
||||||
|
int (*Broadcast) (int socket, byte *buf, int len);
|
||||||
|
char * (*AddrToString) (struct qsockaddr *addr);
|
||||||
|
int (*StringToAddr) (char *string, struct qsockaddr *addr);
|
||||||
|
int (*GetSocketAddr) (int socket, struct qsockaddr *addr);
|
||||||
|
int (*GetNameFromAddr) (struct qsockaddr *addr, char *name);
|
||||||
|
int (*GetAddrFromName) (char *name, struct qsockaddr *addr);
|
||||||
|
int (*AddrCompare) (struct qsockaddr *addr1, struct qsockaddr *addr2);
|
||||||
|
int (*GetSocketPort) (struct qsockaddr *addr);
|
||||||
|
int (*SetSocketPort) (struct qsockaddr *addr, int port);
|
||||||
|
} net_landriver_t;
|
||||||
|
|
||||||
|
#define MAX_NET_DRIVERS 8
|
||||||
|
extern net_landriver_t net_landrivers[MAX_NET_DRIVERS];
|
||||||
|
extern int net_numlandrivers;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
qboolean initialized;
|
||||||
|
int (*Init) (void);
|
||||||
|
void (*Listen) (qboolean state);
|
||||||
|
void (*SearchForHosts) (qboolean xmit);
|
||||||
|
qsocket_t *(*Connect) (char *host);
|
||||||
|
qsocket_t *(*CheckNewConnections) (void);
|
||||||
|
int (*QGetMessage) (qsocket_t *sock);
|
||||||
|
int (*QSendMessage) (qsocket_t *sock, sizebuf_t *data);
|
||||||
|
int (*SendUnreliableMessage) (qsocket_t *sock, sizebuf_t *data);
|
||||||
|
qboolean (*CanSendMessage) (qsocket_t *sock);
|
||||||
|
qboolean (*CanSendUnreliableMessage) (qsocket_t *sock);
|
||||||
|
void (*Close) (qsocket_t *sock);
|
||||||
|
void (*Shutdown) (void);
|
||||||
|
int controlSock;
|
||||||
|
} net_driver_t;
|
||||||
|
|
||||||
|
extern net_driver_t net_drivers[MAX_NET_DRIVERS];
|
||||||
|
extern int net_numdrivers;
|
||||||
|
|
||||||
|
extern int net_driverlevel;
|
||||||
|
|
||||||
|
extern int messagesSent;
|
||||||
|
extern int messagesReceived;
|
||||||
|
extern int unreliableMessagesSent;
|
||||||
|
extern int unreliableMessagesReceived;
|
||||||
|
|
||||||
|
qsocket_t *NET_NewQSocket (void);
|
||||||
|
void NET_FreeQSocket(qsocket_t *);
|
||||||
|
double SetNetTime(void);
|
||||||
|
|
||||||
|
|
||||||
|
#define HOSTCACHESIZE 8
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[16];
|
||||||
|
char map[16];
|
||||||
|
char cname[32];
|
||||||
|
int users;
|
||||||
|
int maxusers;
|
||||||
|
int driver;
|
||||||
|
int ldriver;
|
||||||
|
struct qsockaddr addr;
|
||||||
|
} hostcache_t;
|
||||||
|
|
||||||
|
extern int hostCacheCount;
|
||||||
|
extern hostcache_t hostcache[HOSTCACHESIZE];
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _PollProcedure
|
||||||
|
{
|
||||||
|
struct _PollProcedure *next;
|
||||||
|
double nextTime;
|
||||||
|
void (*procedure)();
|
||||||
|
void *arg;
|
||||||
|
} PollProcedure;
|
||||||
|
|
||||||
|
void SchedulePollProcedure(PollProcedure *pp, double timeOffset);
|
||||||
|
|
||||||
|
#endif /* __NET_DEFS_H */
|
||||||
|
|
|
@ -55,6 +55,7 @@ unsigned long inet_addr(const char *cp);
|
||||||
#endif // BAN_TEST
|
#endif // BAN_TEST
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
#include "net_dgrm.h"
|
#include "net_dgrm.h"
|
||||||
|
|
||||||
// these two macros are to make the code more readable
|
// these two macros are to make the code more readable
|
||||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
// net_loop.c
|
// net_loop.c
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
#include "net_loop.h"
|
#include "net_loop.h"
|
||||||
|
|
||||||
qboolean localconnectpending = false;
|
qboolean localconnectpending = false;
|
||||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
// net_main.c
|
// net_main.c
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
|
|
||||||
qsocket_t *net_activeSockets = NULL;
|
qsocket_t *net_activeSockets = NULL;
|
||||||
qsocket_t *net_freeSockets = NULL;
|
qsocket_t *net_freeSockets = NULL;
|
||||||
|
|
|
@ -19,7 +19,9 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
|
|
||||||
#include "net_loop.h"
|
#include "net_loop.h"
|
||||||
#include "net_dgrm.h"
|
#include "net_dgrm.h"
|
||||||
|
|
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
#include "net_sdlnet.h"
|
#include "net_sdlnet.h"
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
#include "SDL_net.h"
|
#include "SDL_net.h"
|
||||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
|
@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
|
|
||||||
#include "net_loop.h"
|
#include "net_loop.h"
|
||||||
#include "net_dgrm.h"
|
#include "net_dgrm.h"
|
||||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
// net_wins.c
|
// net_wins.c
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
#include "winquake.h"
|
#include "winquake.h"
|
||||||
|
|
||||||
#define MAXHOSTNAMELEN 256
|
#define MAXHOSTNAMELEN 256
|
||||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
// net_wipx.c
|
// net_wipx.c
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h"
|
||||||
#include "winquake.h"
|
#include "winquake.h"
|
||||||
#include <wsipx.h>
|
#include <wsipx.h>
|
||||||
#include "net_wipx.h"
|
#include "net_wipx.h"
|
||||||
|
|
|
@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
// sv_main.c -- server main program
|
// sv_main.c -- server main program
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "net_defs.h" /* for struct qsocket_s details */
|
||||||
|
|
||||||
server_t sv;
|
server_t sv;
|
||||||
server_static_t svs;
|
server_static_t svs;
|
||||||
|
|
Loading…
Reference in a new issue