Index: cloud_print/gcp20/prototype/dns_sd_server.cc |
diff --git a/cloud_print/gcp20/prototype/dns_sd_server.cc b/cloud_print/gcp20/prototype/dns_sd_server.cc |
index 85b3f8778d67e340e6a5c09ee566b8a755456c6f..f5500decd59c8b501ca0f25065c56a5edea5e6e9 100644 |
--- a/cloud_print/gcp20/prototype/dns_sd_server.cc |
+++ b/cloud_print/gcp20/prototype/dns_sd_server.cc |
@@ -101,7 +101,7 @@ void DnsSdServer::UpdateMetadata(const std::vector<std::string>& metadata) { |
if (!CommandLine::ForCurrentProcess()->HasSwitch("no-announcement")) { |
DnsResponseBuilder builder(current_ttl); |
- builder.AppendTxt(serv_params_.service_name_, current_ttl, metadata_); |
+ builder.AppendTxt(serv_params_.service_name_, current_ttl, metadata_, true); |
scoped_refptr<net::IOBufferWithSize> buffer(builder.Build()); |
DCHECK(buffer.get() != NULL); |
@@ -203,7 +203,20 @@ void DnsSdServer::ProccessQuery(uint32 current_ttl, const DnsQueryRecord& query, |
if (query.qname == serv_params_.service_type_ || |
query.qname == serv_params_.secondary_service_type_) { |
builder->AppendPtr(query.qname, current_ttl, |
- serv_params_.service_name_); |
+ serv_params_.service_name_, true); |
+ |
+ if (CommandLine::ForCurrentProcess()->HasSwitch("extended-response")) { |
+ builder->AppendSrv(serv_params_.service_name_, current_ttl, |
+ kSrvPriority, kSrvWeight, serv_params_.http_port_, |
+ serv_params_.service_domain_name_, false); |
+ builder->AppendA(serv_params_.service_domain_name_, current_ttl, |
+ serv_params_.http_ipv4_, false); |
+ builder->AppendAAAA(serv_params_.service_domain_name_, current_ttl, |
+ serv_params_.http_ipv6_, false); |
+ builder->AppendTxt(serv_params_.service_name_, current_ttl, metadata_, |
+ false); |
+ } |
+ |
responded = true; |
} |
@@ -213,7 +226,7 @@ void DnsSdServer::ProccessQuery(uint32 current_ttl, const DnsQueryRecord& query, |
if (query.qname == serv_params_.service_name_) { |
builder->AppendSrv(serv_params_.service_name_, current_ttl, |
kSrvPriority, kSrvWeight, serv_params_.http_port_, |
- serv_params_.service_domain_name_); |
+ serv_params_.service_domain_name_, true); |
responded = true; |
} |
break; |
@@ -221,14 +234,23 @@ void DnsSdServer::ProccessQuery(uint32 current_ttl, const DnsQueryRecord& query, |
log = "Processing A query"; |
if (query.qname == serv_params_.service_domain_name_) { |
builder->AppendA(serv_params_.service_domain_name_, current_ttl, |
- serv_params_.http_ipv4_); |
+ serv_params_.http_ipv4_, true); |
+ responded = true; |
+ } |
+ break; |
+ case net::dns_protocol::kTypeAAAA: |
+ log = "Processing AAAA query"; |
+ if (query.qname == serv_params_.service_domain_name_) { |
+ builder->AppendAAAA(serv_params_.service_domain_name_, current_ttl, |
+ serv_params_.http_ipv6_, true); |
responded = true; |
} |
break; |
case net::dns_protocol::kTypeTXT: |
log = "Processing TXT query"; |
if (query.qname == serv_params_.service_name_) { |
- builder->AppendTxt(serv_params_.service_name_, current_ttl, metadata_); |
+ builder->AppendTxt(serv_params_.service_name_, current_ttl, metadata_, |
+ true); |
responded = true; |
} |
break; |
@@ -261,15 +283,18 @@ void DnsSdServer::SendAnnouncement(uint32 ttl) { |
DnsResponseBuilder builder(ttl); |
builder.AppendPtr(serv_params_.service_type_, ttl, |
- serv_params_.service_name_); |
+ serv_params_.service_name_, true); |
builder.AppendPtr(serv_params_.secondary_service_type_, ttl, |
- serv_params_.service_name_); |
- builder.AppendSrv(serv_params_.service_name_, ttl, kSrvPriority, kSrvWeight, |
- serv_params_.http_port_, |
- serv_params_.service_domain_name_); |
+ serv_params_.service_name_, true); |
+ builder.AppendSrv(serv_params_.service_name_, ttl, kSrvPriority, |
+ kSrvWeight, serv_params_.http_port_, |
+ serv_params_.service_domain_name_, true); |
builder.AppendA(serv_params_.service_domain_name_, ttl, |
- serv_params_.http_ipv4_); |
- builder.AppendTxt(serv_params_.service_name_, ttl, metadata_); |
+ serv_params_.http_ipv4_, true); |
+ builder.AppendAAAA(serv_params_.service_domain_name_, ttl, |
+ serv_params_.http_ipv6_, true); |
+ builder.AppendTxt(serv_params_.service_name_, ttl, metadata_, true); |
+ |
scoped_refptr<net::IOBufferWithSize> buffer(builder.Build()); |
DCHECK(buffer.get() != NULL); |