1 /* $Id: network.h,v 1.24 2006-08-13 21:26:50 stpohle Exp $ 2 * network.h file... for everything what have to do with the network stuff 3 */ 4 5 #include <SDL.h> 6 #include "flyingitems.h" 7 8 #ifndef _NETWORK_H_ 9 #define _NETWORK_H_ 10 11 #define MAX_UDPDATA 1024 12 #define PKG_RESENDCACHE_SIZE 64 13 #define PKG_IN_INDEX_NUM 512 14 #define RESENDCACHE_TIMEOUT 400 15 #define RESENDCACHE_TIMEOUT_MENU 3000 16 #define RESENDCACHE_RETRY 10 17 #define DOWNLOAD_TIMEOUT 2000 18 #define DYN_PKG_MAX_MISSING 4 19 #define DYN_PKG_MIN_MISSING 1 20 #define PKG_SENDSETOPT 2 21 #define MAX_SRVLIST 512 22 #define TIME_UPDATEINFO 1000 23 24 #define GT_MP_PTPM (bman.p_nr == bman.p_servnr && bman.sock >= 0) 25 #define GT_MP_PTPS (bman.p_nr != bman.p_servnr && bman.sock >= 0) 26 #define GT_MP (bman.sock > 0) 27 #define GT_SP (bman.sock <= 0) 28 29 #define GS_WAITRUNNING (bman.state == GS_wait || bman.state == GS_ready || bman.state == GS_running) 30 #define GS_RUNNING (bman.state == GS_ready || bman.state == GS_running) 31 32 /* Little / Big Endian Convert */ 33 #if SDL_BYTEORDER == SDL_BIG_ENDIAN 34 #define NTOH16(__i) s_swap16(__i) 35 #define HTON16(__i) s_swap16(__i) 36 #define NTOH32(__i) s_swap32(__i) 37 #define HTON32(__i) s_swap32(__i) 38 #else 39 /* intel system */ 40 #define NTOH16(__i) (__i) 41 #define HTON16(__i) (__i) 42 #define NTOH32(__i) (__i) 43 #define HTON32(__i) (__i) 44 #endif 45 46 /* converting of float to int and other direction */ 47 #define FTOI16(__x) ((Sint16)((float)(__x * 256.0f))) 48 #define FTOI32(__x) ((Sint32)((float)(__x * 4096.0f))) 49 #define I16TOF(__x) (((float)__x) / 256.0f) 50 #define I32TOF(__x) (((float)__x) / 4096.0f) 51 52 #include "udp.h" 53 54 enum _networkflags { 55 NETF_firewall = 1, // User Behind Firewall 56 NETF_local2 // Lokaler 2 Player 57 }; 58 59 60 struct { // this holds the network data 61 char host[LEN_SERVERNAME]; 62 char port[LEN_PORT]; 63 struct _sockaddr sAddr; 64 signed char pl_nr; // pl_nr so we know it in the pkgcache. 65 } typedef _net_addr; 66 67 68 struct { /* this will hold all needed data for the packet 69 timeout function */ 70 signed char send_to; // sending packet data (playermove) on 0 it will be send 71 signed char send_set; // start value for the packet data option (dynamic set) 72 int to_2sec; // how many unreached packets was send 73 Uint32 to_timestamp; 74 } typedef _net_pkgopt; 75 76 77 struct { 78 _net_addr addr; // holds the address 79 int pingreq; // just to send a ping and to save the number in here 80 int pingack; // just to wait for an ping reply.. it will show up here 81 Uint32 timestamp; // time of the last incoming package 82 signed char net_istep; // -1 gfx all is loaded 83 signed char net_status; 84 unsigned char flags; // keep some flags.. like NETF_firewall 85 int firstplayer; // number of the first player (only needed if NETF_local2 is set 86 _net_pkgopt pkgopt; // packet and network controll data 87 } typedef _net_player; 88 89 90 // network menu 91 extern void netmenu(); 92 extern void network_options (); 93 extern void join_multiplayer_game (); 94 extern void host_multiplayer_game (); 95 extern void multiplayer_firstrun (); 96 extern void multiplayer_game (); 97 extern void network_helpscreen (); 98 99 // network.c 100 extern int network_server_port (char *server, char *host, int hostlen, char *port, int portlen); 101 extern void network_shutdown (); 102 extern int network_init (); 103 extern int network_loop (); 104 extern void net_send_playerid (int pl_nr); 105 extern void net_new_game (); 106 extern void net_transmit_gamedata (); 107 extern void net_game_send_player (int p_nr); 108 extern void net_game_send_playermove (int p_nr, int mustsend); 109 extern void net_game_send_bomb (int p, int b); 110 extern void net_game_send_field (int x, int y); 111 extern void net_game_send_special (int pl_nr, int ex_nr, int type); 112 extern void net_game_send_dropitems (int pl_nr, _flyingitem **fiptr, int cnt); 113 extern void net_game_send_respawn (int pl_nr); 114 extern void net_game_fillsockaddr (); 115 extern void net_game_send_ill (int p_nr); 116 extern void net_game_send_delplayer (int pl_nr); 117 extern void draw_netupdatestate (char st); 118 extern void net_send_servermode (); 119 extern void net_send_players (); 120 extern void net_send_teamdata (int team_nr); 121 extern int net_check_timeout (int pl_nr); 122 extern void net_dyn_pkgoption (); 123 extern void net_send_chat (char *text, signed char notigamesrv); 124 extern void net_send_mapinfo (); 125 extern void net_send_updateinfo (); 126 extern void send_ogc_update (); 127 128 // multiwait.c 129 extern void wait_for_players (); 130 131 // netsrvlist.c 132 extern void net_getserver (); 133 extern void srvlist_rebuildlist (); 134 135 /* check if we can send to the player */ 136 #define NET_CANSEND(__pl) (!PS_IS_aiplayer (players[__pl].state) \ 137 && PS_IS_netplayer (players[__pl].state) \ 138 && (players[__pl].net.addr.host[0] != 0 && players[__pl].net.addr.port[0] != 0) \ 139 && __pl != bman.p_nr && __pl != bman.p2_nr \ 140 && (players[__pl].net.flags & NETF_local2) == 0 \ 141 && (( GT_MP_PTPM && (__pl != bman.p_servnr )) || ( __pl == bman.p_servnr && GT_MP_PTPS ) \ 142 || (((players[__pl].net.flags & NETF_firewall) == 0) \ 143 && !bman.firewall))) 144 145 #endif 146