aboutsummaryrefslogtreecommitdiff
path: root/discovery/mdns/mdns_records.cc
diff options
context:
space:
mode:
Diffstat (limited to 'discovery/mdns/mdns_records.cc')
-rw-r--r--discovery/mdns/mdns_records.cc31
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;