Index: net/dns/mdns_listener.h |
diff --git a/net/dns/mdns_listener.h b/net/dns/mdns_listener.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0f73cd5569f1d82471aa145a442b46a17f967330 |
--- /dev/null |
+++ b/net/dns/mdns_listener.h |
@@ -0,0 +1,120 @@ |
+// Copyright (c) 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 NET_DNS_MDNS_LISTENER_H_ |
+#define NET_DNS_MDNS_LISTENER_H_ |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/callback.h" |
+#include "net/dns/dns_query.h" |
+#include "net/dns/dns_response.h" |
+#include "net/dns/record_parsed.h" |
+ |
+namespace net { |
+ |
+extern const char kMDNSMulticastGroupIPv4[]; |
szym
2013/05/24 15:32:22
Why do you need this?
Noam Samuel
2013/05/24 21:59:18
I put it here so that classes other than the imple
Noam Samuel
2013/05/29 21:25:16
Done.
|
+extern const char kMDNSMulticastGroupIPv6[]; |
+ |
+class RecordParsed; |
+ |
+class MDnsTransaction; |
szym
2013/05/24 15:32:22
I suggest you define MDnsTransaction first so that
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ |
+class MDnsListener; |
+ |
+enum MDnsUpdateType { |
+ kMDnsRecordAdded, |
+ kMDnsRecordChanged, |
+ kMDnsRecordRemoved |
+}; |
szym
2013/05/24 15:32:22
Seems redundant with MDnsCache::UpdateType.
Noam Samuel
2013/05/24 19:00:49
MDnsCache::UpdateType contains a NoChange member,
|
+ |
+enum MDnsTransactionResult { |
+ kMDnsTransactionSuccess, |
+ kMDnsTransactionTimeout, |
+ kMDnsTransactionNsec |
+}; |
+ |
+class MDnsListenerFactory { |
szym
2013/05/24 15:32:22
Needs a comment. I find the name confusing. It can
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ public: |
+ class Delegate { |
+ public: |
+ virtual ~Delegate() {} |
+ |
+ virtual void OnRecordUpdate(MDnsUpdateType update, |
+ const RecordParsed* record) = 0; |
+ |
+ // TODO(noamsml): Called when a record is marked nonexistent by an NSEC |
+ // record. |
szym
2013/05/24 15:32:22
Not sure why there's TODO here. What part is missi
Noam Samuel
2013/05/24 19:00:49
Maybe the TODO should be moved somewhere else. The
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ virtual void OnNSecRecord(const std::string& name, unsigned type) = 0; |
szym
2013/05/24 15:32:22
Spell "NSec" vs. "Nsec" consistently here and in M
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ }; |
+ |
+ typedef base::Callback<void(MDnsTransactionResult, const RecordParsed*)> |
+ QueryCallback; |
+ |
+ virtual ~MDnsListenerFactory() {} |
+ |
+ // Add delegate for RRType |rrtype| and name |name|. |
szym
2013/05/24 15:32:22
Comment says "Add delegate" but it creates a Liste
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ // If |name| is an empty string, listen to all notification of type |
+ // |rrtype|. |
+ virtual scoped_ptr<MDnsListener> CreateListener( |
+ uint16 rrtype, |
+ const std::string& name, |
+ bool active, |
szym
2013/05/24 15:32:22
Needs comment.
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ bool alert_existing_records, |
szym
2013/05/24 15:32:22
Needs comment.
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ Delegate* delegate) = 0; |
+ |
+ // Create a transaction to Query MDNS for a single-value query |
+ // (A, AAAA, TXT, and SRV) asynchronously. May defer to cache. |
+ virtual scoped_ptr<MDnsTransaction> CreateTransaction( |
+ uint16 rrtype, |
+ const std::string& name, |
+ const QueryCallback& callback) = 0; |
+ |
+ // Lazily create and return static instance for MDnsListenerFactory. |
+ static MDnsListenerFactory* GetInstance(); |
+ |
+ // Set the global instance (for testing). MUST be called before the first call |
+ // to GetInstance. |
+ static void SetInstance(MDnsListenerFactory* instance); |
+}; |
+ |
+class MDnsTransaction { |
+ public: |
+ // Destroing the transaction cancels pending transactions. |
szym
2013/05/24 15:32:22
"Destroying"
"it" would be better than "pending tr
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ virtual ~MDnsTransaction() {} |
+ |
+ // Get the host or service name for the query. |
+ virtual const std::string& GetName() const = 0; |
+ |
+ // Get the type for this query (SRV, TXT, A, AAA, etc) |
+ virtual uint16 GetType() const = 0; |
+}; |
+ |
+class MDnsListener { |
+ public: |
+ // Destroying the listener stops listening. |
+ virtual ~MDnsListener() {} |
+ |
+ // Get the host or service name for this query. |
+ // Return an empty string for no name. |
+ virtual const std::string& GetName() const = 0; |
+ |
+ // Get the type for this query (SRV, TXT, A, AAA, etc) |
+ virtual uint16 GetType() const = 0; |
+ |
+ // Whether this listener is active (true) or passive (false) |
szym
2013/05/24 15:32:22
What does that mean?
Noam Samuel
2013/05/24 19:00:49
An active listener is allowed to send periodic que
Noam Samuel
2013/05/29 21:25:16
Done.
|
+ virtual bool IsActive() const = 0; |
+ |
+ // Applies only to listeners with names. Will send out a query for new |
+ // information. |force_refresh_cache| will force a refresh of all cached |
+ // entities. |
+ virtual bool SendQuery(bool force_refresh_cache) = 0; |
+ |
+ // Applies only to listeners with names. Query mDNS cache synchronously for |
+ // either single- or multi- valued records. |
+ virtual bool QueryCache(std::vector<const RecordParsed*>* records) const = 0; |
+}; |
+} // net |
+#endif // NET_DNS_MDNS_LISTENER_H_ |