/* network packets.. */ enum _network_data { PKG_error = 0, PKG_pingreq, PKG_pingack, PKG_playerid, PKG_servermode, PKG_quit, PKG_field, PKG_playerdata, PKG_bombdata, PKG_getfield, PKG_getplayerdata, PKG_fieldline, PKG_playerstatus, PKG_pkgack, PKG_playermove, PKG_chat, PKG_ill, PKG_bcmservchat = 90 }; enum _pkgflags { PKGF_ackreq = 1, PKGF_ipv6 = 2 }; struct pkgheader { unsigned char typ; unsigned char flags; short int id; short int len; }; struct pkg { struct pkgheader h; char data[0]; }; struct pkg_bcmservchat { char typ; char data[128]; }; struct pkg_pkgack { struct pkgheader h; char typ; short int id; }; struct pkg_ping { struct pkgheader h; int data; }; struct pkg_field { struct pkgheader h; unsigned char x; unsigned char y; _field field; }; struct pkg_error { struct pkgheader h; unsigned char nr; char text[128]; }; struct pkg_servermode { struct pkgheader h; unsigned char type; unsigned char state; unsigned char multitype; unsigned char players; unsigned char maxplayer; signed char last_winner; signed char fieldsize_x; signed char fieldsize_y; signed char pl_nr; /* if the server sends this to a client... it will be the clients in_nr number (-1) for not set */ }; struct pkg_playerid { struct pkgheader h; char name[LEN_PLAYERNAME]; char host[LEN_SERVERNAME]; char port[LEN_PORT]; signed char ver_major; // Version signed char ver_minor; // Version signed char ver_sub; // Version signed char pl_nr; // Player Nummer signed char gfx_nr; // number of the graphic signed char state; short int points; short int wins; }; struct pkg_playerdata { struct pkgheader h; signed char p_nr; // Playernumber short int points; // points short int wins; // how many times we win signed char gfx_nr; // the gfx number we want to use _point pos; unsigned char bombs_n; unsigned char range; unsigned char state; unsigned char d; unsigned char frame; signed char dead_by; }; struct pkg_playermove { struct pkgheader h; signed char p_nr; signed char m; signed char d; signed char speed; _point pos; }; struct pkg_bombdata { struct pkgheader h; unsigned char p_nr; unsigned char b_nr; unsigned char x; unsigned char y; unsigned char state; unsigned char r; int ex_nr; int to; }; struct pkg_quit { struct pkgheader h; char host[LEN_SERVERNAME]; char port[LEN_PORT]; }; struct pkg_getfield { struct pkgheader h; signed char line; }; struct pkg_playerstatus { struct pkgheader h; signed char pl_nr; signed char net_istep; signed char status; }; struct pkg_fieldline { struct pkgheader h; signed char line; unsigned char type[MAX_FIELDSIZE_X]; unsigned char special[MAX_FIELDSIZE_X]; }; struct pkg_ill { struct pkgheader h; signed char pl_nr; short int to[PI_max]; }; struct pkg_getplayerdata { struct pkgheader h; signed char pl_nr; }; struct pkg_chat { struct pkgheader h; char text[128]; }; struct _rscache_entry { short int len; // size of the entry Uint32 timestamp; // pointer to the timestamp signed char retry; // retry's how many times we tryed this _net_addr addr; // pointer to the address struct pkg packet; // pointer to the packet }; struct _resend_cache { char *data; // will hold the pointer to out cache struct _rscache_entry *entry; // pointer to our data int fill; // how much we have used }; struct _inpkg_index { _net_addr addr; unsigned char typ; short int id; }; extern int do_error (struct pkg_error *data, _net_addr *addr); extern void do_playerid (struct pkg_playerid *p_id, _net_addr *addr); extern void do_servermode (struct pkg_servermode *s_mod, _net_addr *addr); extern void do_field (struct pkg_field *f_dat, _net_addr *addr); extern void do_ping (struct pkg_ping *p_dat, _net_addr *addr); extern void do_playerdata (struct pkg_playerdata *p_dat, _net_addr *addr); extern void do_playermove (struct pkg_playermove *p_dat, _net_addr *addr); extern void do_bombdata (struct pkg_bombdata *b_dat, _net_addr *addr); extern void do_quit (struct pkg_quit *q_dat, _net_addr *addr); extern void do_getfield (struct pkg_getfield *gf_dat, _net_addr *addr); extern void do_fieldline (struct pkg_fieldline *f_dat, _net_addr *addr); extern void do_getplayerdata (struct pkg_getplayerdata *gp_dat, _net_addr *addr); extern void do_playerstatus (struct pkg_playerstatus *gp_dat, _net_addr *addr); extern void do_pkgack (struct pkg_pkgack *p_ack, _net_addr *addr); extern void do_chat (struct pkg_chat *chat_pkg, _net_addr *addr); extern int do_pkg (struct pkg *packet, _net_addr *addr); extern void do_bcmservchat (struct pkg_bcmservchat *packet, _net_addr *addr); extern void do_ill (struct pkg_ill *ill_pkg, _net_addr *addr); extern void send_pkg (struct pkg *packet, _net_addr *addr); extern void send_playerid (_net_addr *addr, char *name, char *pladdr, char *plport, int p_nr, int gfx_nr); extern void send_servermode (_net_addr *addr, int pl_nr); extern void send_error (_net_addr *addr, char *text); extern void send_field (_net_addr *addr, int x, int y, _field * field); extern void send_ping (_net_addr *addr, int data, unsigned char typ); extern void send_playerdata (_net_addr *addr, int p_nr, _player * pl); extern void send_playermove (_net_addr *addr, int p_nr, _player * pl); extern void send_bombdata (_net_addr *addr, int p, int b, _bomb * bomb); extern void send_quit (_net_addr *addr, char *plhost, char *plport); extern void send_getfield (_net_addr *addr, int line); extern void send_fieldline (_net_addr *addr, int line); extern void send_getplayerdata (_net_addr *addr, int pl); extern void send_playerstatus (_net_addr *addr, int pl_nr, int net_istep, int status); extern void send_pkgack (_net_addr *addr, unsigned char typ, short int id); extern void send_chat (_net_addr *addr, char *text); extern void send_ill (_net_addr *addr, int p_nr, _player *pl); extern int get_player_nr (char *host, char *port); extern int inpkg_check (unsigned char typ, short int id, _net_addr *addr); /* this functions will be defined in pkgcache.c */ extern int rscache_add (_net_addr *addr, struct pkg *packet); extern void rscache_del (); extern int rscache_getpos (_net_addr *addr, unsigned char typ, short int id); extern int rscache_getcurlen (); extern void rscache_loop (); extern struct _resend_cache resend_cache;