summaryrefslogtreecommitdiffstats
path: root/chrome/common/local_discovery/service_discovery_client.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/local_discovery/service_discovery_client.h')
-rw-r--r--chrome/common/local_discovery/service_discovery_client.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/chrome/common/local_discovery/service_discovery_client.h b/chrome/common/local_discovery/service_discovery_client.h
new file mode 100644
index 0000000..82f5e6f
--- /dev/null
+++ b/chrome/common/local_discovery/service_discovery_client.h
@@ -0,0 +1,137 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_COMMON_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_H_
+#define CHROME_COMMON_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_H_
+
+#include <string>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/time/time.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/net_util.h"
+
+namespace net {
+class MDnsClient;
+}
+
+namespace local_discovery {
+
+struct ServiceDescription {
+ public:
+ ServiceDescription();
+ ~ServiceDescription();
+
+ // Convenience function to get useful parts of the service name. A service
+ // name follows the format <instance_name>.<service_type>.
+ std::string instance_name() const;
+ std::string service_type() const;
+
+ // The name of the service.
+ std::string service_name;
+ // The address (in host/port format) for the service (from SRV record).
+ net::HostPortPair address;
+ // The metadata (from TXT record) of the service.
+ std::vector<std::string> metadata;
+ // IP address of the service, if available from cache. May be empty.
+ net::IPAddressNumber ip_address;
+ // Last time the service was seen.
+ base::Time last_seen;
+};
+
+// Lets users browse the network for services of interest or listen for changes
+// in the services they are interested in. See
+// |ServiceDiscoveryClient::CreateServiceWatcher|.
+class ServiceWatcher {
+ public:
+ enum UpdateType {
+ UPDATE_ADDED,
+ UPDATE_CHANGED,
+ UPDATE_REMOVED
+ };
+
+ class Delegate {
+ public:
+ virtual ~Delegate() {}
+
+ // A service has been added or removed for a certain service name.
+ virtual void OnServiceUpdated(UpdateType update,
+ const std::string& service_name) = 0;
+ };
+
+ // Listening will automatically stop when the destructor is called.
+ virtual ~ServiceWatcher() {}
+
+ // Start the service type watcher.
+ virtual bool Start() = 0;
+
+ // Get all known services names of this watcher's type. Return them in
+ // |services|.
+ virtual void GetAvailableServices(
+ std::vector<std::string>* services) const = 0;
+
+ // Read services from the cache, alerting the delegate to any service that
+ // is not yet known.
+ virtual void ReadCachedServices() = 0;
+
+ // Probe for services of this type.
+ virtual void DiscoverNewServices(bool force_update) = 0;
+
+ virtual std::string GetServiceType() const = 0;
+};
+
+// Represents a service on the network and allows users to access the service's
+// address and metadata. See |ServiceDiscoveryClient::CreateServiceResolver|.
+class ServiceResolver {
+ public:
+ enum RequestStatus {
+ STATUS_SUCCESS = 0,
+ STATUS_REQUEST_TIMEOUT = 1,
+ STATUS_KNOWN_NONEXISTENT = 2
+ };
+
+ // A callback called once the service has been resolved.
+ typedef base::Callback<void(RequestStatus, const ServiceDescription&)>
+ ResolveCompleteCallback;
+
+ // Listening will automatically stop when the destructor is called.
+ virtual ~ServiceResolver() {}
+
+ // Start the service reader.
+ virtual bool StartResolving() = 0;
+
+ // Check whether the resolver is currently resolving. Can be called multiple
+ // times.
+ virtual bool IsResolving() const = 0;
+
+ // Check wheteher the resolver has resolved the service already.
+ virtual bool HasResolved() const = 0;
+
+ virtual std::string GetName() const = 0;
+
+ virtual const ServiceDescription& GetServiceDescription() const = 0;
+};
+
+class ServiceDiscoveryClient {
+ public:
+ virtual ~ServiceDiscoveryClient() {}
+
+ // Create a service watcher object listening for DNS-SD service announcements
+ // on service type |service_type|.
+ virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher(
+ const std::string& service_type,
+ ServiceWatcher::Delegate* delegate) = 0;
+
+ // Create a service resolver object for getting detailed service information
+ // for the service called |service_name|.
+ virtual scoped_ptr<ServiceResolver> CreateServiceResolver(
+ const std::string& service_name,
+ const ServiceResolver::ResolveCompleteCallback& callback) = 0;
+};
+
+} // namespace local_discovery
+
+#endif // CHROME_COMMON_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_H_