1 #ifndef _MASTERSERVER_H 2 #define _MASTERSERVER_H 3 4 #include "logging.h" 5 6 #ifndef MASTERSERVER_LIB_DIR 7 #define MASTERSERVER_LIB_DIR "/usr/lib/lasange/masterserver" 8 #endif 9 10 int debug = 0; // global debug var 11 int master_shutdown = 0; // to signal graceful shutdown (by sigint handler) 12 char masterserver_version[] = "0.4.1"; 13 14 // XXX: merge struct in_addr and in_port_t to struct sockaddr_in ? 15 typedef struct { 16 struct in_addr ip; // ip adress 17 in_port_t port; // port 18 int lastheartbeat; // timestamp 19 void *private_data; // data specific to plugin 20 } serverlist_t; 21 22 typedef struct { 23 int protocol; 24 in_port_t num; 25 } port_t; 26 27 // struct for plugins 28 struct masterserver_plugin { 29 // the following has to be filled by the plugin 30 const char name[32]; // plugin name 31 const char *pversion; // plugin version 32 const char *cversion; // which masterserver version was this compiled against 33 port_t *port; // port(s) to listen on 34 int num_ports; 35 int heartbeat_timeout; // server heartbeat timeout in seconds 36 37 void (*info) (void); // show info about plugin 38 int (*process) (char *, int); // process a packet 39 void (*free_privdata) (void *); // free private data 40 void (*cleanup) (void); // free private data 41 // end plugin fill section 42 43 struct masterserver_plugin *next; // next plugin in linked list 44 pthread_mutex_t mutex; // mutex for this struct 45 unsigned int num_servers; // current number of servers in list 46 serverlist_t *list; // pointer to serverlist 47 char **msg_out; // array of packets to send to client 48 int *msg_out_length; // lengths of outgoing packets 49 int num_msgs; // how many packets are in msg_out array 50 unsigned int enabled; // plugin enabled? 51 int *socket_d; // socket(s) 52 int num_sockets; 53 struct sockaddr_in client; // client struct 54 struct sockaddr_in *server; // server struct 55 pthread_t thread_nr; // thread id 56 pthread_t heartbeat_thread_nr; // heartbeat thread id 57 }; 58 59 // plugins call the following function 60 extern void register_plugin(struct masterserver_plugin *); 61 // generic function for deleting servers in plugin server list 62 extern void delete_server(struct masterserver_plugin *, int); 63 64 #endif // _MASTERSERVER_H 65 66