2e052876cd0a43e3bfa381c4db385dcc0a77abc2
[cubemap] / config.h
1 #ifndef _CONFIG_H
2 #define _CONFIG_H
3
4 // Various routines that deal with parsing the configuration file.
5
6 #include <arpa/inet.h>
7 #include <netinet/in.h>
8 #include <stddef.h>
9 #include <string>
10 #include <vector>
11
12 struct StreamConfig {
13         std::string url;  // As seen by the client.
14         std::string src;  // Can be empty.
15         size_t backlog_size;
16         size_t prebuffering_bytes;
17         uint32_t pacing_rate;  // In bytes per second. Default is ~0U (no limit).
18         enum Encoding { STREAM_ENCODING_RAW = 0, STREAM_ENCODING_METACUBE };
19         Encoding encoding;
20         Encoding src_encoding;
21 };
22
23 struct UDPStreamConfig {
24         sockaddr_in6 dst;
25         std::string src;  // Can be empty.
26         uint32_t pacing_rate;  // In bytes per second. Default is ~0U (no limit).
27         int ttl;  // Default is -1 (use operating system default).
28         int multicast_iface_index;  // Default is -1 (use operating system default).
29 };
30
31 struct Gen204Config {
32         std::string url;  // As seen by the client.
33         std::string allow_origin;  // Can be empty.
34 };
35
36 struct AcceptorConfig {
37         sockaddr_in6 addr;
38 };
39
40 struct LogConfig {
41         enum { LOG_TYPE_FILE, LOG_TYPE_CONSOLE, LOG_TYPE_SYSLOG } type;
42         std::string filename;
43 };
44
45 struct Config {
46         bool daemonize;
47         int num_servers;
48         std::vector<StreamConfig> streams;
49         std::vector<UDPStreamConfig> udpstreams;
50         std::vector<Gen204Config> pings;
51         std::vector<AcceptorConfig> acceptors;
52         std::vector<LogConfig> log_destinations;
53
54         std::string stats_file;  // Empty means no stats file.
55         int stats_interval;
56
57         std::string input_stats_file;  // Empty means no input stats file.
58         int input_stats_interval;
59
60         std::string access_log_file;  // Empty means no accses_log file.
61 };
62
63 // Parse and validate configuration. Returns false on error.
64 // <config> is taken to be empty (uninitialized) on entry.
65 bool parse_config(const std::string &filename, Config *config);
66
67 #endif  // !defined(_CONFIG_H)