diff options
Diffstat (limited to 'discovery/mdns/mdns_records.cc')
-rw-r--r-- | discovery/mdns/mdns_records.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/discovery/mdns/mdns_records.cc b/discovery/mdns/mdns_records.cc index a04c2694..8be7fe00 100644 --- a/discovery/mdns/mdns_records.cc +++ b/discovery/mdns/mdns_records.cc @@ -5,6 +5,9 @@ #include "discovery/mdns/mdns_records.h" #include <cctype> +#include <limits> +#include <sstream> +#include <vector> #include "absl/strings/ascii.h" #include "absl/strings/match.h" @@ -562,6 +565,34 @@ size_t MdnsRecord::MaxWireSize() const { return name_.MaxWireSize() + absl::visit(wire_size_visitor, rdata_) + 8; } +std::string MdnsRecord::ToString() const { + std::stringstream ss; + ss << "name: '" << name_.ToString() << "'"; + ss << ", type: " << dns_type_; + + if (dns_type_ == DnsType::kPTR) { + const DomainName& target = absl::get<PtrRecordRdata>(rdata_).ptr_domain(); + ss << ", target: '" << target.ToString() << "'"; + } else if (dns_type_ == DnsType::kSRV) { + const DomainName& target = absl::get<SrvRecordRdata>(rdata_).target(); + ss << ", target: '" << target.ToString() << "'"; + } else if (dns_type_ == DnsType::kNSEC) { + const auto& nsec_rdata = absl::get<NsecRecordRdata>(rdata_); + std::vector<DnsType> types = nsec_rdata.types(); + ss << ", representing ["; + if (!types.empty()) { + auto it = types.begin(); + ss << *it++; + while (it != types.end()) { + ss << ", " << *it++; + } + ss << "]"; + } + } + + return ss.str(); +} + MdnsRecord CreateAddressRecord(DomainName name, const IPAddress& address) { Rdata rdata; DnsType type; |