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.
5 #ifndef NET_DNS_RECORD_PARSED_H_
6 #define NET_DNS_RECORD_PARSED_H_
10 #include "base/memory/scoped_ptr.h"
11 #include "base/time/time.h"
12 #include "net/base/net_export.h"
16 class DnsRecordParser
;
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
{
23 virtual ~RecordParsed();
25 // All records are inherently immutable. Return a const pointer.
26 static scoped_ptr
<const RecordParsed
> CreateFrom(DnsRecordParser
* parser
,
27 base::Time time_created
);
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_
; }
34 base::Time
time_created() const { return time_created_
; }
36 template <class T
> const T
* rdata() const {
37 if (T::kType
!= type_
)
39 return static_cast<const T
*>(rdata_
.get());
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;
48 RecordParsed(const std::string
& name
, uint16 type
, uint16 klass
,
49 uint32 ttl
, scoped_ptr
<const RecordRdata
> rdata
,
50 base::Time time_created
);
52 std::string name_
; // in dotted form
57 const scoped_ptr
<const RecordRdata
> rdata_
;
59 const base::Time time_created_
;
64 #endif // NET_DNS_RECORD_PARSED_H_