// Various routines that deal with parsing the configuration file.
-#include <map>
#include <vector>
#include <string>
-struct ConfigLine {
- std::string keyword;
- std::vector<std::string> arguments;
- std::map<std::string, std::string> parameters;
+struct MarkPoolConfig {
+ int from, to;
};
-// Parse the configuration file.
-std::vector<ConfigLine> parse_config(const std::string &filename);
+struct StreamConfig {
+ std::string stream_id;
+ std::string src; // Can be empty.
+ size_t backlog_size;
+ int mark_pool; // -1 for none.
+};
-enum ParameterType {
- PARAMETER_OPTIONAL,
- PARAMATER_MANDATORY,
+struct AcceptorConfig {
+ int port;
};
-std::string fetch_config_string(const std::vector<ConfigLine> &config, const std::string &keyword,
- ParameterType parameter_type, const std::string &default_value = "");
+struct Config {
+ int num_servers;
+ std::vector<MarkPoolConfig> mark_pools;
+ std::vector<StreamConfig> streams;
+ std::vector<AcceptorConfig> acceptors;
+
+ std::string stats_file; // Empty means no stats file.
+ int stats_interval;
+};
-// 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)