Annotation of quake1/net.h, revision 1.1

1.1     ! root        1: // net.h -- quake's interface to the networking layer
        !             2: 
        !             3: struct qsockaddr
        !             4: {
        !             5:        short sa_family;
        !             6:        unsigned char sa_data[14];
        !             7: };
        !             8: 
        !             9: 
        !            10: #define        NET_NAMELEN                     64
        !            11: 
        !            12: #define NET_MAXMESSAGE         8192
        !            13: #define NET_HEADERSIZE         (2 * sizeof(unsigned int))
        !            14: #define NET_DATAGRAMSIZE       (MAX_DATAGRAM + NET_HEADERSIZE)
        !            15: 
        !            16: // NetHeader flags
        !            17: #define NETFLAG_LENGTH_MASK    0x0000ffff
        !            18: #define NETFLAG_DATA           0x00010000
        !            19: #define NETFLAG_ACK                    0x00020000
        !            20: #define NETFLAG_NAK                    0x00040000
        !            21: #define NETFLAG_EOM                    0x00080000
        !            22: #define NETFLAG_UNRELIABLE     0x00100000
        !            23: #define NETFLAG_CTL                    0x80000000
        !            24: 
        !            25: 
        !            26: #define NET_PROTOCOL_VERSION   3
        !            27: 
        !            28: // This is the network info/connection protocol.  It is used to find Quake
        !            29: // servers, get info about them, and connect to them.  Once connected, the
        !            30: // Quake game protocol (documented elsewhere) is used.
        !            31: //
        !            32: //
        !            33: // General notes:
        !            34: //     game_name is currently always "QUAKE", but is there so this same protocol
        !            35: //             can be used for future games as well; can you say Quake2?
        !            36: //
        !            37: // CCREQ_CONNECT
        !            38: //             string  game_name                               "QUAKE"
        !            39: //             byte    net_protocol_version    NET_PROTOCOL_VERSION
        !            40: //
        !            41: // CCREQ_SERVER_INFO
        !            42: //             string  game_name                               "QUAKE"
        !            43: //             byte    net_protocol_version    NET_PROTOCOL_VERSION
        !            44: //
        !            45: // CCREQ_PLAYER_INFO
        !            46: //             byte    player_number
        !            47: //
        !            48: // CCREQ_RULE_INFO
        !            49: //             string  rule
        !            50: //
        !            51: //
        !            52: //
        !            53: // CCREP_ACCEPT
        !            54: //             long    port
        !            55: //
        !            56: // CCREP_REJECT
        !            57: //             string  reason
        !            58: //
        !            59: // CCREP_SERVER_INFO
        !            60: //             string  server_address
        !            61: //             string  host_name
        !            62: //             string  level_name
        !            63: //             byte    current_players
        !            64: //             byte    max_players
        !            65: //             byte    protocol_version        NET_PROTOCOL_VERSION
        !            66: //
        !            67: // CCREP_PLAYER_INFO
        !            68: //             byte    player_number
        !            69: //             string  name
        !            70: //             long    colors
        !            71: //             long    frags
        !            72: //             long    connect_time
        !            73: //             string  address
        !            74: //
        !            75: // CCREP_RULE_INFO
        !            76: //             string  rule
        !            77: //             string  value
        !            78: 
        !            79: //     note:
        !            80: //             There are two address forms used above.  The short form is just a
        !            81: //             port number.  The address that goes along with the port is defined as
        !            82: //             "whatever address you receive this reponse from".  This lets us use
        !            83: //             the host OS to solve the problem of multiple host addresses (possibly
        !            84: //             with no routing between them); the host will use the right address
        !            85: //             when we reply to the inbound connection request.  The long from is
        !            86: //             a full address and port in a string.  It is used for returning the
        !            87: //             address of a server that is not running locally.
        !            88: 
        !            89: #define CCREQ_CONNECT          0x01
        !            90: #define CCREQ_SERVER_INFO      0x02
        !            91: #define CCREQ_PLAYER_INFO      0x03
        !            92: #define CCREQ_RULE_INFO                0x04
        !            93: 
        !            94: #define CCREP_ACCEPT           0x81
        !            95: #define CCREP_REJECT           0x82
        !            96: #define CCREP_SERVER_INFO      0x83
        !            97: #define CCREP_PLAYER_INFO      0x84
        !            98: #define CCREP_RULE_INFO                0x85
        !            99: 
        !           100: typedef struct qsocket_s
        !           101: {
        !           102:        struct qsocket_s        *next;
        !           103:        double                  connecttime;
        !           104:        double                  lastMessageTime;
        !           105:        double                  lastSendTime;
        !           106: 
        !           107:        qboolean                disconnected;
        !           108:        qboolean                canSend;
        !           109:        qboolean                sendNext;
        !           110:        
        !           111:        int                             driver;
        !           112:        int                             landriver;
        !           113:        int                             socket;
        !           114:        void                    *driverdata;
        !           115: 
        !           116:        unsigned int    ackSequence;
        !           117:        unsigned int    sendSequence;
        !           118:        unsigned int    unreliableSendSequence;
        !           119:        int                             sendMessageLength;
        !           120:        byte                    sendMessage [NET_MAXMESSAGE];
        !           121: 
        !           122:        unsigned int    receiveSequence;
        !           123:        unsigned int    unreliableReceiveSequence;
        !           124:        int                             receiveMessageLength;
        !           125:        byte                    receiveMessage [NET_MAXMESSAGE];
        !           126: 
        !           127:        struct qsockaddr        addr;
        !           128:        char                            address[NET_NAMELEN];
        !           129: 
        !           130: } qsocket_t;
        !           131: 
        !           132: extern qsocket_t       *net_activeSockets;
        !           133: extern qsocket_t       *net_freeSockets;
        !           134: extern int                     net_numsockets;
        !           135: 
        !           136: typedef struct
        !           137: {
        !           138:        char            *name;
        !           139:        qboolean        initialized;
        !           140:        int                     controlSock;
        !           141:        int                     (*Init) (void);
        !           142:        void            (*Shutdown) (void);
        !           143:        void            (*Listen) (qboolean state);
        !           144:        int             (*OpenSocket) (int port);
        !           145:        int             (*CloseSocket) (int socket);
        !           146:        int             (*Connect) (int socket, struct qsockaddr *addr);
        !           147:        int             (*CheckNewConnections) (void);
        !           148:        int             (*Read) (int socket, byte *buf, int len, struct qsockaddr *addr);
        !           149:        int             (*Write) (int socket, byte *buf, int len, struct qsockaddr *addr);
        !           150:        int             (*Broadcast) (int socket, byte *buf, int len);
        !           151:        char *          (*AddrToString) (struct qsockaddr *addr);
        !           152:        int             (*StringToAddr) (char *string, struct qsockaddr *addr);
        !           153:        int             (*GetSocketAddr) (int socket, struct qsockaddr *addr);
        !           154:        int             (*GetNameFromAddr) (struct qsockaddr *addr, char *name);
        !           155:        int             (*GetAddrFromName) (char *name, struct qsockaddr *addr);
        !           156:        int                     (*AddrCompare) (struct qsockaddr *addr1, struct qsockaddr *addr2);
        !           157:        int                     (*GetSocketPort) (struct qsockaddr *addr);
        !           158:        int                     (*SetSocketPort) (struct qsockaddr *addr, int port);
        !           159: } net_landriver_t;
        !           160: 
        !           161: #define        MAX_NET_DRIVERS         8
        !           162: extern int                             net_numlandrivers;
        !           163: extern net_landriver_t net_landrivers[MAX_NET_DRIVERS];
        !           164: 
        !           165: typedef struct
        !           166: {
        !           167:        char            *name;
        !           168:        qboolean        initialized;
        !           169:        int                     (*Init) (void);
        !           170:        void            (*Listen) (qboolean state);
        !           171:        void            (*SearchForHosts) (qboolean xmit);
        !           172:        qsocket_t       *(*Connect) (char *host);
        !           173:        qsocket_t       *(*CheckNewConnections) (void);
        !           174:        int                     (*GetMessage) (qsocket_t *sock);
        !           175:        int                     (*SendMessage) (qsocket_t *sock, sizebuf_t *data);
        !           176:        int                     (*SendUnreliableMessage) (qsocket_t *sock, sizebuf_t *data);
        !           177:        qboolean        (*CanSendMessage) (qsocket_t *sock);
        !           178:        qboolean        (*CanSendUnreliableMessage) (qsocket_t *sock);
        !           179:        void            (*Close) (qsocket_t *sock);
        !           180:        void            (*Shutdown) (void);
        !           181:        int                     controlSock;
        !           182: } net_driver_t;
        !           183: 
        !           184: extern int                     net_numdrivers;
        !           185: extern net_driver_t    net_drivers[MAX_NET_DRIVERS];
        !           186: 
        !           187: extern int                     DEFAULTnet_hostport;
        !           188: extern int                     net_hostport;
        !           189: 
        !           190: extern int net_driverlevel;
        !           191: extern cvar_t          hostname;
        !           192: extern char                    playername[];
        !           193: extern int                     playercolor;
        !           194: 
        !           195: extern int             messagesSent;
        !           196: extern int             messagesReceived;
        !           197: extern int             unreliableMessagesSent;
        !           198: extern int             unreliableMessagesReceived;
        !           199: 
        !           200: qsocket_t *NET_NewQSocket (void);
        !           201: void NET_FreeQSocket(qsocket_t *);
        !           202: double SetNetTime(void);
        !           203: 
        !           204: 
        !           205: #define HOSTCACHESIZE  8
        !           206: 
        !           207: typedef struct
        !           208: {
        !           209:        char    name[16];
        !           210:        char    map[16];
        !           211:        char    cname[32];
        !           212:        int             users;
        !           213:        int             maxusers;
        !           214:        int             driver;
        !           215:        int             ldriver;
        !           216:        struct qsockaddr addr;
        !           217: } hostcache_t;
        !           218: 
        !           219: extern int hostCacheCount;
        !           220: extern hostcache_t hostcache[HOSTCACHESIZE];
        !           221: 
        !           222: #ifndef _WIN32
        !           223: #ifndef htonl
        !           224: extern unsigned long htonl (unsigned long hostlong);
        !           225: #endif
        !           226: #ifndef htons
        !           227: extern unsigned short htons (unsigned short hostshort);
        !           228: #endif
        !           229: #ifndef ntohl
        !           230: extern unsigned long ntohl (unsigned long netlong);
        !           231: #endif
        !           232: #ifndef ntohs
        !           233: extern unsigned short ntohs (unsigned short netshort);
        !           234: #endif
        !           235: #endif
        !           236: 
        !           237: #ifdef IDGODS
        !           238: qboolean IsID(struct qsockaddr *addr);
        !           239: #endif
        !           240: 
        !           241: //============================================================================
        !           242: //
        !           243: // public network functions
        !           244: //
        !           245: //============================================================================
        !           246: 
        !           247: extern double          net_time;
        !           248: extern sizebuf_t       net_message;
        !           249: extern int                     net_activeconnections;
        !           250: 
        !           251: void           NET_Init (void);
        !           252: void           NET_Shutdown (void);
        !           253: 
        !           254: struct qsocket_s       *NET_CheckNewConnections (void);
        !           255: // returns a new connection number if there is one pending, else -1
        !           256: 
        !           257: struct qsocket_s       *NET_Connect (char *host);
        !           258: // called by client to connect to a host.  Returns -1 if not able to
        !           259: 
        !           260: qboolean NET_CanSendMessage (qsocket_t *sock);
        !           261: // Returns true or false if the given qsocket can currently accept a
        !           262: // message to be transmitted.
        !           263: 
        !           264: int                    NET_GetMessage (struct qsocket_s *sock);
        !           265: // returns data in net_message sizebuf
        !           266: // returns 0 if no data is waiting
        !           267: // returns 1 if a message was received
        !           268: // returns 2 if an unreliable message was received
        !           269: // returns -1 if the connection died
        !           270: 
        !           271: int                    NET_SendMessage (struct qsocket_s *sock, sizebuf_t *data);
        !           272: int                    NET_SendUnreliableMessage (struct qsocket_s *sock, sizebuf_t *data);
        !           273: // returns 0 if the message connot be delivered reliably, but the connection
        !           274: //             is still considered valid
        !           275: // returns 1 if the message was sent properly
        !           276: // returns -1 if the connection died
        !           277: 
        !           278: int                    NET_SendToAll(sizebuf_t *data, int blocktime);
        !           279: // This is a reliable *blocking* send to all attached clients.
        !           280: 
        !           281: 
        !           282: void           NET_Close (struct qsocket_s *sock);
        !           283: // if a dead connection is returned by a get or send function, this function
        !           284: // should be called when it is convenient
        !           285: 
        !           286: // Server calls when a client is kicked off for a game related misbehavior
        !           287: // like an illegal protocal conversation.  Client calls when disconnecting
        !           288: // from a server.
        !           289: // A netcon_t number will not be reused until this function is called for it
        !           290: 
        !           291: void NET_Poll(void);
        !           292: 
        !           293: 
        !           294: typedef struct _PollProcedure
        !           295: {
        !           296:        struct _PollProcedure   *next;
        !           297:        double                                  nextTime;
        !           298:        void                                    (*procedure)();
        !           299:        void                                    *arg;
        !           300: } PollProcedure;
        !           301: 
        !           302: void SchedulePollProcedure(PollProcedure *pp, double timeOffset);
        !           303: 
        !           304: extern qboolean        serialAvailable;
        !           305: extern qboolean        ipxAvailable;
        !           306: extern qboolean        tcpipAvailable;
        !           307: extern char            my_ipx_address[NET_NAMELEN];
        !           308: extern char            my_tcpip_address[NET_NAMELEN];
        !           309: extern void (*GetComPortConfig) (int portNumber, int *port, int *irq, int *baud, qboolean *useModem);
        !           310: extern void (*SetComPortConfig) (int portNumber, int port, int irq, int baud, qboolean useModem);
        !           311: extern void (*GetModemConfig) (int portNumber, char *dialType, char *clear, char *init, char *hangup);
        !           312: extern void (*SetModemConfig) (int portNumber, char *dialType, char *clear, char *init, char *hangup);
        !           313: 
        !           314: extern qboolean        slistInProgress;
        !           315: extern qboolean        slistSilent;
        !           316: extern qboolean        slistLocal;
        !           317: 
        !           318: void NET_Slist_f (void);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.