OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef NET_DNS_MDNS_CACHE_H_ | |
6 #define NET_DNS_MDNS_CACHE_H_ | |
7 | |
8 #include <map> | |
9 #include <string> | |
10 #include <vector> | |
11 | |
12 #include "base/callback.h" | |
13 #include "base/memory/scoped_ptr.h" | |
14 #include "base/time.h" | |
15 #include "net/base/net_export.h" | |
16 | |
17 namespace net { | |
18 | |
19 class ParsedDnsRecord; | |
20 class RecordParsed; | |
21 | |
22 // MDNS CACHE | |
szym
2013/05/21 22:09:05
nit: unnecessary caps.
Noam Samuel
2013/05/21 23:00:56
Done.
| |
23 // This is a cache of mDNS records. It keeps track of expiration times and is | |
24 // guaranteed not to return expired records. It also has facilities for timely | |
25 // record expiration. | |
26 | |
szym
2013/05/21 22:09:05
nit: unnecessary blank line.
Noam Samuel
2013/05/21 23:00:56
Done.
| |
27 class NET_EXPORT_PRIVATE MDnsCache { | |
28 public: | |
29 typedef base::Callback<void(const RecordParsed*)> RecordRemovedCallback; | |
30 | |
31 enum UpdateType { | |
32 RecordAdded, | |
33 RecordChanged, | |
34 NoChange | |
35 }; | |
36 | |
37 MDnsCache(); | |
38 ~MDnsCache(); | |
39 | |
40 // Return value indicates whether the record was added, changed | |
41 // (existed previously with different value) or not changed (existed | |
42 // previously with same value). | |
43 UpdateType UpdateDnsRecord(scoped_ptr<const RecordParsed> record); | |
44 | |
45 // Return records with type |type| and name |name|. Expired records will not | |
46 // be returned. If |name| is empty, return all records with type |type|. | |
47 void FindDnsRecords(unsigned type, | |
48 const std::string& name, | |
49 std::vector<const RecordParsed*>* records, | |
50 base::Time now) const; | |
51 | |
52 // Remove expired records, call |record_removed_callback| for every removed | |
53 // record. | |
54 void CleanupRecords(base::Time now, | |
55 const RecordRemovedCallback& record_removed_callback); | |
56 | |
57 // Returns a time less than or equal to the next time a record will expire. | |
58 // Is updated when CleanupRecords or UpdateDnsRecord are called. Returns | |
59 // base::Time when the cache is empty. | |
60 base::Time next_expiration() const { return next_expiration_; } | |
61 | |
62 void Clear(); | |
63 | |
64 private: | |
65 // Key type for the record map. It is a 3-tuple of type, name and optional | |
66 // value ordered by type, then name, then optional value. This allows us to | |
67 // query for all records of a certain type and name, while also allowing us | |
68 // to set records of a certain type, name and optionally value as unique. | |
69 class Key { | |
70 public: | |
71 Key(unsigned type, const std::string& name, const std::string& optional); | |
72 Key(const Key&); | |
73 Key& operator=(const Key&); | |
74 ~Key(); | |
75 bool operator<(const Key& key) const; | |
76 bool operator==(const Key& key) const; | |
77 | |
78 unsigned type() const { return type_; } | |
79 const std::string& name() const { return name_; } | |
80 const std::string& optional() const { return optional_; } | |
81 | |
82 private: | |
83 unsigned type_; | |
84 std::string name_; | |
85 std::string optional_; | |
86 }; | |
87 | |
88 typedef std::map<Key, const RecordParsed*> RecordMap; | |
89 | |
90 // Get the effective expiration of a cache entry, based on its creation time | |
91 // and TTL. Does adjustments so entries with a TTL of zero will have a | |
92 // nonzero TTL, as explained in RFC 6762 Section 10.1. | |
93 base::Time GetEffectiveExpiration(const RecordParsed* entry) const; | |
94 | |
95 // Get optional part of the DNS key for shared records. For example, in PTR | |
96 // records this is the pointed domain, since multiple PTR records may exist | |
97 // for the same name. | |
98 std::string GetOptionalFieldForRecord(const RecordParsed* record) const; | |
99 | |
100 RecordMap mdns_cache_; | |
101 | |
102 base::Time next_expiration_; | |
103 | |
104 DISALLOW_COPY_AND_ASSIGN(MDnsCache); | |
105 }; | |
106 | |
107 } // namespace net | |
108 | |
109 #endif // NET_DNS_MDNS_CACHE_H_ | |
OLD | NEW |