support interface names in config as well as raw ips

This commit is contained in:
Martin Michelsen
2020-02-20 10:09:44 -08:00
parent cbfffa9795
commit e96e82527a
5 changed files with 33 additions and 19 deletions
+24 -10
View File
@@ -115,14 +115,28 @@ void populate_state_from_config(shared_ptr<ServerState> s,
} catch (const out_of_range&) { }
auto local_address_str = d.at("LocalAddress")->as_string();
s->local_address = address_for_string(local_address_str.c_str());
s->all_addresses.emplace(s->local_address);
log(INFO, "added local address: %s", local_address_str.c_str());
try {
s->local_address = s->all_addresses.at(local_address_str);
string addr_str = string_for_address(s->local_address);
log(INFO, "added local address: %s (%s)", addr_str.c_str(),
local_address_str.c_str());
} catch (const out_of_range&) {
s->local_address = address_for_string(local_address_str.c_str());
log(INFO, "added local address: %s", local_address_str.c_str());
}
s->all_addresses.emplace("<local>", s->local_address);
auto external_address_str = d.at("ExternalAddress")->as_string();
s->external_address = address_for_string(external_address_str.c_str());
s->all_addresses.emplace(s->external_address);
log(INFO, "added external address: %s", external_address_str.c_str());
try {
s->external_address = s->all_addresses.at(external_address_str);
string addr_str = string_for_address(s->external_address);
log(INFO, "added external address: %s (%s)", addr_str.c_str(),
external_address_str.c_str());
} catch (const out_of_range&) {
s->external_address = address_for_string(external_address_str.c_str());
log(INFO, "added external address: %s", external_address_str.c_str());
}
s->all_addresses.emplace("<external>", s->external_address);
try {
s->run_dns_server = d.at("RunDNSServer")->as_bool();
@@ -193,10 +207,10 @@ int main(int argc, char* argv[]) {
shared_ptr<struct event_base> base(event_base_new(), event_base_free);
log(INFO, "reading network addresses");
state->all_addresses = get_local_address_list();
for (uint32_t addr : state->all_addresses) {
string addr_str = string_for_address(addr);
log(INFO, "found address: %s", addr_str.c_str());
state->all_addresses = get_local_addresses();
for (const auto& it : state->all_addresses) {
string addr_str = string_for_address(it.second);
log(INFO, "found interface: %s = %s", it.first.c_str(), addr_str.c_str());
}
log(INFO, "loading configuration");