summaryrefslogtreecommitdiffstats
path: root/chrome/utility/local_discovery/service_discovery_message_handler.cc
diff options
context:
space:
mode:
authornoamsml@chromium.org <noamsml@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-24 21:49:08 +0000
committernoamsml@chromium.org <noamsml@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-24 21:49:08 +0000
commit7b0ac436fb788c3ac0709eac560e1a8cda278668 (patch)
tree3bb8dc6f797075c0827275b89fdab9c88ee44550 /chrome/utility/local_discovery/service_discovery_message_handler.cc
parent73ebd579edea0188022ac295ab59cc058fd0a637 (diff)
downloadchromium_src-7b0ac436fb788c3ac0709eac560e1a8cda278668.zip
chromium_src-7b0ac436fb788c3ac0709eac560e1a8cda278668.tar.gz
chromium_src-7b0ac436fb788c3ac0709eac560e1a8cda278668.tar.bz2
Add support for local domain resolution in ServiceDiscoveryHostClient
Add support for local domain resolution in ServiceDiscoveryHostClient and ServiceDiscoveryMessageHandler. This will allow the browser process to resolve A and AAAA records for "*.local" domains. This does not yet include support for resolving domains through the default domain resolver. BUG= Review URL: https://chromiumcodereview.appspot.com/19924004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213523 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/utility/local_discovery/service_discovery_message_handler.cc')
-rw-r--r--chrome/utility/local_discovery/service_discovery_message_handler.cc62
1 files changed, 61 insertions, 1 deletions
diff --git a/chrome/utility/local_discovery/service_discovery_message_handler.cc b/chrome/utility/local_discovery/service_discovery_message_handler.cc
index afb39f5..7591864 100644
--- a/chrome/utility/local_discovery/service_discovery_message_handler.cc
+++ b/chrome/utility/local_discovery/service_discovery_message_handler.cc
@@ -4,6 +4,8 @@
#include "chrome/utility/local_discovery/service_discovery_message_handler.h"
+#include <algorithm>
+
#include "base/command_line.h"
#include "chrome/common/local_discovery/local_discovery_messages.h"
#include "chrome/utility/local_discovery/service_discovery_client_impl.h"
@@ -72,6 +74,7 @@ class SocketFactory : public net::PlatformSocketFactory {
SOCKET socket_v4_;
SOCKET socket_v6_;
+ private:
DISALLOW_COPY_AND_ASSIGN(SocketFactory);
};
@@ -131,6 +134,12 @@ void SendServiceUpdated(uint64 id, ServiceWatcher::UpdateType update,
new LocalDiscoveryHostMsg_WatcherCallback(id, update, name));
}
+void SendLocalDomainResolved(uint64 id, bool success,
+ const net::IPAddressNumber& address) {
+ content::UtilityThread::Get()->Send(
+ new LocalDiscoveryHostMsg_LocalDomainResolverCallback(
+ id, success, address));
+}
} // namespace
@@ -187,6 +196,10 @@ bool ServiceDiscoveryMessageHandler::OnMessageReceived(
IPC_MESSAGE_HANDLER(LocalDiscoveryMsg_DestroyWatcher, OnDestroyWatcher)
IPC_MESSAGE_HANDLER(LocalDiscoveryMsg_ResolveService, OnResolveService)
IPC_MESSAGE_HANDLER(LocalDiscoveryMsg_DestroyResolver, OnDestroyResolver)
+ IPC_MESSAGE_HANDLER(LocalDiscoveryMsg_ResolveLocalDomain,
+ OnResolveLocalDomain)
+ IPC_MESSAGE_HANDLER(LocalDiscoveryMsg_DestroyLocalDomainResolver,
+ OnDestroyLocalDomainResolver)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -235,6 +248,21 @@ void ServiceDiscoveryMessageHandler::OnDestroyResolver(uint64 id) {
base::Unretained(this), id));
}
+void ServiceDiscoveryMessageHandler::OnResolveLocalDomain(
+ uint64 id, const std::string& domain,
+ net::AddressFamily address_family) {
+ PostTask(FROM_HERE,
+ base::Bind(&ServiceDiscoveryMessageHandler::ResolveLocalDomain,
+ base::Unretained(this), id, domain, address_family));
+}
+
+void ServiceDiscoveryMessageHandler::OnDestroyLocalDomainResolver(uint64 id) {
+ PostTask(FROM_HERE,
+ base::Bind(
+ &ServiceDiscoveryMessageHandler::DestroyLocalDomainResolver,
+ base::Unretained(this), id));
+}
+
void ServiceDiscoveryMessageHandler::StartWatcher(
uint64 id,
const std::string& service_type) {
@@ -287,6 +315,29 @@ void ServiceDiscoveryMessageHandler::DestroyResolver(uint64 id) {
service_resolvers_.erase(id);
}
+void ServiceDiscoveryMessageHandler::ResolveLocalDomain(
+ uint64 id,
+ const std::string& domain,
+ net::AddressFamily address_family) {
+ if (!service_discovery_client_)
+ return;
+ DCHECK(!ContainsKey(local_domain_resolvers_, id));
+ scoped_ptr<LocalDomainResolver> resolver(
+ service_discovery_client_->CreateLocalDomainResolver(
+ domain, address_family,
+ base::Bind(&ServiceDiscoveryMessageHandler::OnLocalDomainResolved,
+ base::Unretained(this), id)));
+ resolver->Start();
+ local_domain_resolvers_[id].reset(resolver.release());
+}
+
+void ServiceDiscoveryMessageHandler::DestroyLocalDomainResolver(uint64 id) {
+ if (!service_discovery_client_)
+ return;
+ DCHECK(ContainsKey(local_domain_resolvers_, id));
+ local_domain_resolvers_.erase(id);
+}
+
void ServiceDiscoveryMessageHandler::OnServiceUpdated(
uint64 id,
ServiceWatcher::UpdateType update,
@@ -305,5 +356,14 @@ void ServiceDiscoveryMessageHandler::OnServiceResolved(
base::Bind(&SendServiceResolved, id, status, description));
}
-} // namespace local_discovery
+void ServiceDiscoveryMessageHandler::OnLocalDomainResolved(
+ uint64 id,
+ bool success,
+ const net::IPAddressNumber& address) {
+ DCHECK(service_discovery_client_);
+ utility_task_runner_->PostTask(FROM_HERE, base::Bind(&SendLocalDomainResolved,
+ id, success, address));
+}
+
+} // namespace local_discovery