bool empty() const { return v.empty(); }
entity_addr_t legacy_addr() const {
- for (auto& a : v) {
- if (a.type == entity_addr_t::TYPE_LEGACY) {
- return a;
- }
- }
- return entity_addr_t();
+ return addr_of_type(entity_addr_t::TYPE_LEGACY);
}
entity_addr_t as_legacy_addr() const {
for (auto& a : v) {
return a;
}
}
- if (!v.empty()) {
- return v.front();
- }
- return entity_addr_t();
+ return front();
}
std::string get_legacy_str() const {
return legacy_or_front_addr().get_legacy_str();
}
entity_addr_t msgr2_addr() const {
- for (auto &a : v) {
- if (a.type == entity_addr_t::TYPE_MSGR2) {
- return a;
- }
- }
- return entity_addr_t();
+ return addr_of_type(entity_addr_t::TYPE_MSGR2);
}
bool has_msgr2() const {
for (auto& a : v) {
return false;
}
+ entity_addr_t pick_addr(uint32_t type) const {
+ entity_addr_t picked_addr;
+ switch (type) {
+ case entity_addr_t::TYPE_LEGACY:
+ [[fallthrough]];
+ case entity_addr_t::TYPE_MSGR2:
+ picked_addr = addr_of_type(type);
+ break;
+ case entity_addr_t::TYPE_ANY:
+ return front();
+ default:
+ return {};
+ }
+ if (!picked_addr.is_blank_ip()) {
+ return picked_addr;
+ } else {
+ return addr_of_type(entity_addr_t::TYPE_ANY);
+ }
+ }
+
+ entity_addr_t addr_of_type(uint32_t type) const {
+ for (auto &a : v) {
+ if (a.type == type) {
+ return a;
+ }
+ }
+ return entity_addr_t();
+ }
+
bool parse(const char *s, const char **end = 0);
void get_ports(std::set<int> *ports) const {