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