X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=config.h;h=3014b48d4128d4f4b1150a28a23ddc953b33d3ac;hp=0600083a67b216c37eb6c92af72d853c68871856;hb=0eac9253f23925734e256c63081e157c68c70704;hpb=aeda7b341454f243ff8a3d742222c24bf75c338d diff --git a/config.h b/config.h index 0600083..3014b48 100644 --- a/config.h +++ b/config.h @@ -3,30 +3,56 @@ // Various routines that deal with parsing the configuration file. -#include -#include +#include +#include +#include #include +#include -struct ConfigLine { - std::string keyword; - std::vector arguments; - std::map parameters; +struct StreamConfig { + std::string url; // As seen by the client. + std::string src; // Can be empty. + size_t backlog_size; + uint32_t pacing_rate; // In bytes per second. Default is ~0U (no limit). + enum { STREAM_ENCODING_RAW = 0, STREAM_ENCODING_METACUBE } encoding; }; -// Parse the configuration file. -std::vector parse_config(const std::string &filename); +struct UDPStreamConfig { + sockaddr_in6 dst; + std::string src; // Can be empty. + uint32_t pacing_rate; // In bytes per second. Default is ~0U (no limit). + int ttl; // Default is -1 (use operating system default). + int multicast_iface_index; // Default is -1 (use operating system default). +}; + +struct AcceptorConfig { + sockaddr_in6 addr; +}; -enum ParameterType { - PARAMETER_OPTIONAL, - PARAMATER_MANDATORY, +struct LogConfig { + enum { LOG_TYPE_FILE, LOG_TYPE_CONSOLE, LOG_TYPE_SYSLOG } type; + std::string filename; }; -std::string fetch_config_string(const std::vector &config, const std::string &keyword, - ParameterType parameter_type, const std::string &default_value = ""); +struct Config { + bool daemonize; + int num_servers; + std::vector streams; + std::vector udpstreams; + std::vector acceptors; + std::vector log_destinations; + + std::string stats_file; // Empty means no stats file. + int stats_interval; + + std::string input_stats_file; // Empty means no input stats file. + int input_stats_interval; + + std::string access_log_file; // Empty means no accses_log file. +}; -// Note: Limits are inclusive. -int fetch_config_int(const std::vector &config, const std::string &keyword, - int min_limit, int max_limit, - ParameterType parameter_type, int default_value = -1); +// Parse and validate configuration. Returns false on error. +// is taken to be empty (uninitialized) on entry. +bool parse_config(const std::string &filename, Config *config); #endif // !defined(_CONFIG_H)