Home | History | Annotate | Download | only in dns
      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 
     29   const std::string& name() const { return name_; }
     30   uint16 type() const { return type_; }
     31   uint16 klass() const { return klass_; }
     32   uint32 ttl() const { return ttl_; }
     33 
     34   base::Time time_created() const { return time_created_; }
     35 
     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