X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=config.cpp;h=51a8b8d71082d9287e173d404ffbff2ee3a7b6ad;hp=f1b05c1821035819debc55d364c05189a774fed9;hb=6544fa0ec3f3a501bcb89ea977756911bd7f3ebd;hpb=98b8cb22fe22f6a8b46a47cd5fa00dcf2bcd6fd5 diff --git a/config.cpp b/config.cpp index f1b05c1..51a8b8d 100644 --- a/config.cpp +++ b/config.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -18,7 +19,7 @@ using namespace std; -#define DEFAULT_BACKLOG_SIZE 1048576 +#define DEFAULT_BACKLOG_SIZE 10485760 struct ConfigLine { string keyword; @@ -187,7 +188,7 @@ bool parse_port(const ConfigLine &line, Config *config) } AcceptorConfig acceptor; - acceptor.addr = CreateAnyAddress(port); + acceptor.addr = create_any_address(port); config->acceptors.push_back(acceptor); return true; @@ -234,7 +235,14 @@ bool parse_stream(const ConfigLine &line, Config *config) stream.backlog_size = atoi(backlog_it->second.c_str()); } - // Parse encoding. + map::const_iterator prebuffer_it = line.parameters.find("force_prebuffer"); + if (prebuffer_it == line.parameters.end()) { + stream.prebuffering_bytes = 0; + } else { + stream.prebuffering_bytes = atoi(prebuffer_it->second.c_str()); + } + + // Parse ouptut encoding. map::const_iterator encoding_parm_it = line.parameters.find("encoding"); if (encoding_parm_it == line.parameters.end() || encoding_parm_it->second == "raw") { @@ -246,6 +254,18 @@ bool parse_stream(const ConfigLine &line, Config *config) return false; } + // Parse input encoding. + map::const_iterator src_encoding_parm_it = line.parameters.find("src_encoding"); + if (src_encoding_parm_it == line.parameters.end() || + src_encoding_parm_it->second == "metacube") { + stream.src_encoding = StreamConfig::STREAM_ENCODING_METACUBE; + } else if (src_encoding_parm_it->second == "raw") { + stream.src_encoding = StreamConfig::STREAM_ENCODING_RAW; + } else { + log(ERROR, "Parameter 'src_encoding' must be either 'raw' or 'metacube' (default)"); + return false; + } + // Parse the pacing rate, converting from kilobits to bytes as needed. map::const_iterator pacing_rate_it = line.parameters.find("pacing_rate_kbit"); if (pacing_rate_it == line.parameters.end()) { @@ -290,10 +310,62 @@ bool parse_udpstream(const ConfigLine &line, Config *config) udpstream.pacing_rate = atoi(pacing_rate_it->second.c_str()) * 1024 / 8; } + // Parse the TTL. The same value is used for unicast and multicast. + map::const_iterator ttl_it = line.parameters.find("ttl"); + if (ttl_it == line.parameters.end()) { + udpstream.ttl = -1; + } else { + udpstream.ttl = atoi(ttl_it->second.c_str()); + } + + // Parse the multicast interface index. + map::const_iterator multicast_iface_it = line.parameters.find("multicast_output_interface"); + if (multicast_iface_it == line.parameters.end()) { + udpstream.multicast_iface_index = -1; + } else { + udpstream.multicast_iface_index = if_nametoindex(multicast_iface_it->second.c_str()); + if (udpstream.multicast_iface_index == 0) { + log(ERROR, "Interface '%s' does not exist", multicast_iface_it->second.c_str()); + return false; + } + } + + // Parse input encoding. + map::const_iterator src_encoding_parm_it = line.parameters.find("src_encoding"); + if (src_encoding_parm_it == line.parameters.end() || + src_encoding_parm_it->second == "metacube") { + udpstream.src_encoding = StreamConfig::STREAM_ENCODING_METACUBE; + } else if (src_encoding_parm_it->second == "raw") { + udpstream.src_encoding = StreamConfig::STREAM_ENCODING_RAW; + } else { + log(ERROR, "Parameter 'src_encoding' must be either 'raw' or 'metacube' (default)"); + return false; + } + config->udpstreams.push_back(udpstream); return true; } +bool parse_gen204(const ConfigLine &line, Config *config) +{ + if (line.arguments.size() != 1) { + log(ERROR, "'gen204' takes exactly one argument"); + return false; + } + + Gen204Config gen204; + gen204.url = line.arguments[0]; + + // Parse the CORS origin, if it exists. + map::const_iterator allow_origin_it = line.parameters.find("allow_origin"); + if (allow_origin_it != line.parameters.end()) { + gen204.allow_origin = allow_origin_it->second; + } + + config->pings.push_back(gen204); + return true; +} + bool parse_error_log(const ConfigLine &line, Config *config) { if (line.arguments.size() != 0) { @@ -395,6 +467,10 @@ bool parse_config(const string &filename, Config *config) if (!parse_udpstream(line, config)) { return false; } + } else if (line.keyword == "gen204") { + if (!parse_gen204(line, config)) { + return false; + } } else if (line.keyword == "error_log") { if (!parse_error_log(line, config)) { return false;