]> git.sesse.net Git - cubemap/blobdiff - config.h
Support UDP packets larger than 4 kB.
[cubemap] / config.h
index 0600083a67b216c37eb6c92af72d853c68871856..cf3fdfbfb189d9d936e83c9cc2860decc9450937 100644 (file)
--- a/config.h
+++ b/config.h
@@ -3,30 +3,56 @@
 
 // Various routines that deal with parsing the configuration file.
 
-#include <map>
-#include <vector>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stddef.h>
 #include <string>
+#include <vector>
+
+struct MarkPoolConfig {
+       int from, to;
+};
+
+struct StreamConfig {
+       std::string url;  // As seen by the client.
+       std::string src;  // Can be empty.
+       size_t backlog_size;
+       int mark_pool;  // -1 for none.
+       enum { STREAM_ENCODING_RAW = 0, STREAM_ENCODING_METACUBE } encoding;
+};
 
-struct ConfigLine {
-       std::string keyword;
-       std::vector<std::string> arguments;
-       std::map<std::string, std::string> parameters;
+struct UDPStreamConfig {
+       sockaddr_in6 dst;
+       std::string src;  // Can be empty.
+       int mark_pool;  // -1 for none.
 };
 
-// Parse the configuration file.
-std::vector<ConfigLine> parse_config(const std::string &filename);
+struct AcceptorConfig {
+       int port;
+};
 
-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<ConfigLine> &config, const std::string &keyword,
-                                ParameterType parameter_type, const std::string &default_value = "");
+struct Config {
+       bool daemonize;
+       int num_servers;
+       std::vector<MarkPoolConfig> mark_pools;
+       std::vector<StreamConfig> streams;
+       std::vector<UDPStreamConfig> udpstreams;
+       std::vector<AcceptorConfig> acceptors;
+       std::vector<LogConfig> log_destinations;
+
+       std::string stats_file;  // Empty means no stats file.
+       int stats_interval;
+
+       std::string access_log_file;  // Empty means no accses_log file.
+};
 
-// Note: Limits are inclusive.
-int fetch_config_int(const std::vector<ConfigLine> &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.
+// <config> is taken to be empty (uninitialized) on entry.
+bool parse_config(const std::string &filename, Config *config);
 
 #endif  // !defined(_CONFIG_H)