#ifndef MASTER_SERVICE_H
#define MASTER_SERVICE_H
#include "network.h"
enum master_service_flags {
MASTER_SERVICE_FLAG_STD_CLIENT = 0x01,
MASTER_SERVICE_FLAG_STANDALONE = 0x02,
MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR = 0x04,
MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN = 0x08,
MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS = 0x10,
MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE = 0x40,
MASTER_SERVICE_FLAG_NO_IDLE_DIE = 0x80,
MASTER_SERVICE_FLAG_UPDATE_PROCTITLE = 0x100
};
struct master_service_connection {
int fd;
int listen_fd;
struct ip_addr remote_ip;
unsigned int remote_port;
unsigned int fifo:1;
unsigned int ssl:1;
unsigned int accepted:1;
};
typedef void
master_service_connection_callback_t(struct master_service_connection *conn);
extern struct master_service *master_service;
const char *master_service_getopt_string(void);
struct master_service *
master_service_init(const char *name, enum master_service_flags flags,
int *argc, char **argv[], const char *getopt_str);
int master_getopt(struct master_service *service);
bool master_service_parse_option(struct master_service *service,
int opt, const char *arg);
void master_service_init_finish(struct master_service *service);
void master_service_env_clean(void);
void master_service_init_log(struct master_service *service,
const char *prefix);
void master_service_set_die_with_master(struct master_service *service,
bool set);
void master_service_set_die_callback(struct master_service *service,
void (*callback)(void));
void master_service_set_avail_overflow_callback(struct master_service *service,
void (*callback)(void));
void master_service_set_client_limit(struct master_service *service,
unsigned int client_limit);
unsigned int master_service_get_client_limit(struct master_service *service);
void master_service_set_service_count(struct master_service *service,
unsigned int count);
unsigned int master_service_get_service_count(struct master_service *service);
unsigned int master_service_get_socket_count(struct master_service *service);
const char *master_service_get_config_path(struct master_service *service);
const char *master_service_get_version_string(struct master_service *service);
const char *master_service_get_name(struct master_service *service);
void master_service_run(struct master_service *service,
master_service_connection_callback_t *callback);
void master_service_stop(struct master_service *service);
void master_service_stop_new_connections(struct master_service *service);
bool master_service_is_killed(struct master_service *service);
void master_service_anvil_send(struct master_service *service, const char *cmd);
void master_service_client_connection_accept(struct master_service_connection *conn);
void master_service_client_connection_destroyed(struct master_service *service);
void master_service_deinit(struct master_service **service);
bool version_string_verify(const char *line, const char *service_name,
unsigned major_version);
#endif