You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bomberclone/src/packets.h

310 lines
7.5 KiB

/* 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_special,
PKG_mapinfo,
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;
signed char netflags;
};
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 short int x;
unsigned short int y;
unsigned char state;
unsigned char r;
int ex_nr;
int to;
unsigned short int movetox;
unsigned short int movetoy;
signed short int moves;
};
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 pkg_special {
struct pkgheader h;
signed char pl_nr;
int ex_nr;
unsigned char typ;
};
struct pkg_mapinfo {
struct pkgheader h;
char tileset[LEN_TILESETNAME];
char mapname[LEN_FILENAME];
unsigned char map_selection;
unsigned char bombs;
unsigned char shoes;
unsigned char fire;
unsigned char mixed;
unsigned char death;
unsigned char sp_trigger;
unsigned char sp_push;
unsigned char sp_row;
unsigned char size_x;
unsigned char size_y;
};
struct _rscache_entry {
signed char pl_nr; // playernumber to whom this data should go
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 {
signed char pl_nr;
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 do_special (struct pkg_special *sp_pkg, _net_addr *addr);
extern void do_mapinfo (struct pkg_mapinfo *map_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, signed char netflags);
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 void send_special (_net_addr *addr, int p_nr, int typ, int ex_nr);
extern void send_mapinfo (_net_addr *addr);
extern void fwd_pkg (struct pkg *packet, _net_addr *addr);
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;