• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_RECORD_PARSED_H_
6 #define NET_DNS_RECORD_PARSED_H_
7 
8 #include <string>
9 
10 #include "base/memory/scoped_ptr.h"
11 #include "base/time/time.h"
12 #include "net/base/net_export.h"
13 
14 namespace net {
15 
16 class DnsRecordParser;
17 class RecordRdata;
18 
19 // Parsed record. This is a form of DnsResourceRecord where the rdata section
20 // has been parsed into a data structure.
21 class NET_EXPORT_PRIVATE RecordParsed {
22  public:
23   virtual ~RecordParsed();
24 
25   // All records are inherently immutable. Return a const pointer.
26   static scoped_ptr<const RecordParsed> CreateFrom(DnsRecordParser* parser,
27                                                    base::Time time_created);
28 
name()29   const std::string& name() const { return name_; }
type()30   uint16 type() const { return type_; }
klass()31   uint16 klass() const { return klass_; }
ttl()32   uint32 ttl() const { return ttl_; }
33 
time_created()34   base::Time time_created() const { return time_created_; }
35 
rdata()36   template <class T> const T* rdata() const {
37     if (T::kType != type_)
38       return NULL;
39     return static_cast<const T*>(rdata_.get());
40   }
41 
42   // Check if two records have the same data. Ignores time_created and ttl.
43   // If |is_mdns| is true, ignore the top bit of the class
44   // (the cache flush bit).
45   bool IsEqual(const RecordParsed* other, bool is_mdns) const;
46 
47  private:
48   RecordParsed(const std::string& name, uint16 type, uint16 klass,
49                uint32 ttl, scoped_ptr<const RecordRdata> rdata,
50                base::Time time_created);
51 
52   std::string name_;  // in dotted form
53   const uint16 type_;
54   const uint16 klass_;
55   const uint32 ttl_;
56 
57   const scoped_ptr<const RecordRdata> rdata_;
58 
59   const base::Time time_created_;
60 };
61 
62 }  // namespace net
63 
64 #endif  // NET_DNS_RECORD_PARSED_H_
65