master-service.h revision 7487ff578435377bbeefffdbfb78ca09ed1292df
08b30498acefc69e223baf7eda6429be98cc3a10Timo Sirainen#ifndef MASTER_SERVICE_H
08b30498acefc69e223baf7eda6429be98cc3a10Timo Sirainen#define MASTER_SERVICE_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen#include "network.h"
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenenum master_service_flags {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen /* stdin/stdout already contains a client which we want to serve */
345212e8f61ebf14ff4f80df26df9e655eb5121eTimo Sirainen MASTER_SERVICE_FLAG_STD_CLIENT = 0x01,
08b30498acefc69e223baf7eda6429be98cc3a10Timo Sirainen /* this process is currently running standalone without a master */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen MASTER_SERVICE_FLAG_STANDALONE = 0x02,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen /* Log to stderr instead of the configured log file */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen MASTER_SERVICE_FLAG_LOG_TO_STDERR = 0x04
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen};
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct master_service_connection {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen int fd;
d0d7fcf3ce44f26fdf34c1542a25cec644c5c4c7Timo Sirainen int listen_fd;
d0d7fcf3ce44f26fdf34c1542a25cec644c5c4c7Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct ip_addr remote_ip;
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen unsigned int remote_port;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen bool ssl;
d0d7fcf3ce44f26fdf34c1542a25cec644c5c4c7Timo Sirainen};
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainentypedef void
d371507847d62ba311b4bcc23d18f45c3d0f1a38Timo Sirainenmaster_service_connection_callback_t(const struct master_service_connection *conn);
d371507847d62ba311b4bcc23d18f45c3d0f1a38Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainenstruct master_service;
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainenconst char *master_service_getopt_string(void);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
2d3aac5be07b96f72cf0551fac35ac74a4f07770Timo Sirainen/* Start service initialization. */
2d3aac5be07b96f72cf0551fac35ac74a4f07770Timo Sirainenstruct master_service *
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainenmaster_service_init(const char *name, enum master_service_flags flags,
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen int argc, char *argv[]);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen/* Parser command line option. Returns TRUE if processed. */
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainenbool master_service_parse_option(struct master_service *service,
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen int opt, const char *arg);
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen/* Finish service initialization. The caller should drop privileges
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen before calling this. */
a205d315b0978985ba77d871f44e4a98273612e6Timo Sirainenvoid master_service_init_finish(struct master_service *service);
a205d315b0978985ba77d871f44e4a98273612e6Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen/* Clean environment from everything except TZ, USER and optionally HOME. */
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainenvoid master_service_env_clean(bool preserve_home);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen/* Initialize logging. */
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainenvoid master_service_init_log(struct master_service *service, const char *prefix,
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen unsigned int max_lines_per_sec);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen/* Set maximum number of clients we can handle. Default is given by master. */
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainenvoid master_service_set_client_limit(struct master_service *service,
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen unsigned int client_limit);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen/* Returns the maximum number of clients we can handle. */
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainenunsigned int master_service_get_client_limit(struct master_service *service);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen/* Set maximum number of client connections we will handle before shutting
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen down. */
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainenvoid master_service_set_service_count(struct master_service *service,
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen unsigned int count);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Returns the number of client connections we will handle before shutting
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen down. The value is decreased only after connection has been closed. */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenunsigned int master_service_get_service_count(struct master_service *service);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Return the number of listener sockets. */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenunsigned int master_service_get_socket_count(struct master_service *service);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Returns configuration file path. */
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainenconst char *master_service_get_config_path(struct master_service *service);
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen/* Returns PACKAGE_VERSION or NULL if version_ignore=yes. This function is
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen useful mostly as parameter to module_dir_load(). */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenconst char *master_service_get_version_string(struct master_service *service);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Start the service. Blocks until finished */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenvoid master_service_run(struct master_service *service,
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen master_service_connection_callback_t *callback);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Stop a running service. */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenvoid master_service_stop(struct master_service *service);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Call whenever a client connection is destroyed. */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenvoid master_service_client_connection_destroyed(struct master_service *service);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen/* Deinitialize the service. */
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainenvoid master_service_deinit(struct master_service **service);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen#endif
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen