Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
Kea
Commits
ca06de9c
Commit
ca06de9c
authored
Mar 03, 2011
by
zhanglikun
Browse files
[trac493] Refactor the code by removing duplicated code, breaking the long line
parent
0e52d28e
Changes
6
Hide whitespace changes
Inline
Side-by-side
src/lib/cache/message_entry.cc
View file @
ca06de9c
...
...
@@ -232,25 +232,24 @@ MessageEntry::parseNegativeResponseAuthoritySection(const isc::dns::Message& msg
uint32_t
&
min_ttl
,
uint16_t
&
rrset_count
)
{
// We found the SOA record, so we can cache the message and RRsets in the cache
uint16_t
count
=
0
;
for
(
RRsetIterator
iter
=
msg
.
beginSection
(
Message
::
SECTION_AUTHORITY
);
iter
!=
msg
.
endSection
(
Message
::
SECTION_AUTHORITY
);
++
iter
)
{
RRsetPtr
rrset_ptr
=
*
iter
;
RRsetTrustLevel
level
=
getRRsetTrustLevel
(
msg
,
rrset_ptr
,
Message
::
SECTION_AUTHORITY
);
uint32_t
rrset_ttl
=
0
;
if
(
rrset_ptr
->
getType
()
==
RRType
::
SOA
()){
RRsetEntryPtr
rrset_entry
=
negative_soa_cache_
->
update
(
*
rrset_ptr
,
level
);
rrset
s_
.
push_back
(
RRsetRef
(
rrset_ptr
->
getName
(),
rrset_ptr
->
getType
(),
negative_soa_cache_
)
)
;
rrset_ttl
=
rrset_entry
->
getTTL
();
}
else
{
RRsetEntryPtr
rrset_entry
=
rrset_cache_
->
update
(
*
rrset_ptr
,
level
);
rrsets_
.
push_back
(
RRsetRef
(
rrset_ptr
->
getName
(),
rrset_ptr
->
getType
(),
rrset_cache_
));
rrset_ttl
=
rrset_
en
tr
y
->
getT
TL
()
;
}
RRsetTrustLevel
level
=
getRRsetTrustLevel
(
msg
,
rrset_ptr
,
Message
::
SECTION_AUTHORITY
)
;
boost
::
shared_ptr
<
RRsetCache
>
rrset_cache_ptr
=
rrset_cache_
;
if
(
rrset_ptr
->
getType
()
==
RRType
::
SOA
())
{
rrset
_cache_ptr
.
reset
(
negative_soa_cache_
);
}
RRsetEntryPtr
rrset_entry
=
rrset_cache_
ptr
->
update
(
*
rrset_ptr
,
level
);
rrsets_
.
push_back
(
RRsetRef
(
rrset_ptr
->
getName
(),
rrset_
p
tr
->
getT
ype
()
,
rrset_cache_ptr
));
uint32_t
rrset_ttl
=
rrset_entry
->
getTTL
();
if
(
min_ttl
>
rrset_ttl
)
{
min_ttl
=
rrset_ttl
;
}
...
...
@@ -280,22 +279,18 @@ MessageEntry::initMessageEntry(const isc::dns::Message& msg) {
parseSection
(
msg
,
Message
::
SECTION_AUTHORITY
,
min_ttl
,
authority_count_
);
parseSection
(
msg
,
Message
::
SECTION_ADDITIONAL
,
min_ttl
,
additional_count_
);
}
else
{
uint16_t
rrset_count
=
0
;
// For negative response, if no soa RRset is found in authority section, dont cache it
// For negative response, if no soa RRset is found in authority
// section, don't cache it
if
(
!
hasTheRecordInAuthoritySection
(
msg
,
RRType
::
SOA
()))
{
return
;
}
parseNegativeResponseAuthoritySection
(
msg
,
min_ttl
,
rrset_count
);
authority_count_
=
rrset_count
;
parseNegativeResponseAuthoritySection
(
msg
,
min_ttl
,
authority_count_
);
parseSection
(
msg
,
Message
::
SECTION_ANSWER
,
min_ttl
,
answer_count_
);
parseSection
(
msg
,
Message
::
SECTION_ADDITIONAL
,
min_ttl
,
additional_count_
);
}
expire_time_
=
time
(
NULL
)
+
min_ttl
;
}
bool
...
...
src/lib/cache/message_entry.h
View file @
ca06de9c
...
...
@@ -168,23 +168,27 @@ protected:
//@}
private:
/// \brief Check whetehr the message is a negative response(NXDOMAIN or NOERROR_NODATA)
/// \brief Check whetehr the message is a negative response
/// (NXDOMAIN or NOERROR_NODATA)
///
/// \param msg The response message
bool
isNegativeResponse
(
const
isc
::
dns
::
Message
&
msg
);
/// \brief Check whether there is some type of record in Authority section
/// \brief Check whether there is some type of record in
/// Authority section
///
/// \param msg The response message to be checked
/// \param type The RR type that need to check
bool
hasTheRecordInAuthoritySection
(
const
isc
::
dns
::
Message
&
msg
,
const
isc
::
dns
::
RRType
&
type
);
bool
hasTheRecordInAuthoritySection
(
const
isc
::
dns
::
Message
&
msg
,
const
isc
::
dns
::
RRType
&
type
);
std
::
string
entry_name_
;
// The name for this entry(name + type)
HashKey
*
hash_key_ptr_
;
// the key for messag entry in hash table.
std
::
vector
<
RRsetRef
>
rrsets_
;
boost
::
shared_ptr
<
RRsetCache
>
rrset_cache_
;
//Normal rrset cache
boost
::
shared_ptr
<
RRsetCache
>
negative_soa_cache_
;
// SOA rrset from negative response
// SOA rrset from negative response
boost
::
shared_ptr
<
RRsetCache
>
negative_soa_cache_
;
std
::
string
query_name_
;
// query name of the message.
uint16_t
query_class_
;
// query class of the message.
...
...
src/lib/cache/resolver_cache.cc
View file @
ca06de9c
...
...
@@ -35,7 +35,8 @@ ResolverClassCache::ResolverClassCache(const RRClass& cache_class) :
rrsets_cache_
=
RRsetCachePtr
(
new
RRsetCache
(
RRSET_CACHE_DEFAULT_SIZE
,
cache_class_
.
getCode
()));
// SOA rrset cache from negative response
negative_soa_cache_
=
RRsetCachePtr
(
new
RRsetCache
(
NEGATIVE_RRSET_CACHE_DEFAULT_SIZE
,
cache_class_
.
getCode
()));
negative_soa_cache_
=
RRsetCachePtr
(
new
RRsetCache
(
NEGATIVE_RRSET_CACHE_DEFAULT_SIZE
,
cache_class_
.
getCode
()));
messages_cache_
=
MessageCachePtr
(
new
MessageCache
(
rrsets_cache_
,
MESSAGE_CACHE_DEFAULT_SIZE
,
...
...
@@ -51,7 +52,8 @@ ResolverClassCache::ResolverClassCache(CacheSizeInfo cache_info) :
rrsets_cache_
=
RRsetCachePtr
(
new
RRsetCache
(
cache_info
.
rrset_cache_size
,
klass
));
// SOA rrset cache from negative response
negative_soa_cache_
=
RRsetCachePtr
(
new
RRsetCache
(
cache_info
.
rrset_cache_size
,
klass
));
negative_soa_cache_
=
RRsetCachePtr
(
new
RRsetCache
(
cache_info
.
rrset_cache_size
,
klass
));
messages_cache_
=
MessageCachePtr
(
new
MessageCache
(
rrsets_cache_
,
cache_info
.
message_cache_size
,
...
...
src/lib/cache/resolver_cache.h
View file @
ca06de9c
...
...
@@ -47,7 +47,7 @@ public:
/// \param cls The RRClass code
/// \param msg_cache_size The size for the message cache
/// \param rst_cache_size The size for the RRset cache
CacheSizeInfo
(
const
isc
::
dns
::
RRClass
&
cls
,
CacheSizeInfo
(
const
isc
::
dns
::
RRClass
&
cls
,
uint32_t
msg_cache_size
,
uint32_t
rst_cache_size
)
:
cclass
(
cls
),
...
...
src/lib/cache/tests/Makefile.am
View file @
ca06de9c
...
...
@@ -65,3 +65,10 @@ EXTRA_DIST += testdata/message_fromWire3
EXTRA_DIST
+=
testdata/message_fromWire4
EXTRA_DIST
+=
testdata/message_fromWire5
EXTRA_DIST
+=
testdata/message_fromWire6
EXTRA_DIST
+=
testdata/message_cname_referral.wire
EXTRA_DIST
+=
testdata/message_example_com_soa.wire
EXTRA_DIST
+=
testdata/message_nodata_with_soa.wire
EXTRA_DIST
+=
testdata/message_nxdomain_cname.wire
EXTRA_DIST
+=
testdata/message_nxdomain_no_soa.wire
EXTRA_DIST
+=
testdata/message_nxdomain_with_soa.wire
EXTRA_DIST
+=
testdata/message_referral.wire
src/lib/cache/tests/message_cache_unittest.cc
View file @
ca06de9c
...
...
@@ -53,8 +53,8 @@ public:
uint16_t
class_
=
RRClass
::
IN
().
getCode
();
rrset_cache_
.
reset
(
new
RRsetCache
(
RRSET_CACHE_DEFAULT_SIZE
,
class_
));
negative_soa_cache_
.
reset
(
new
RRsetCache
(
NEGATIVE_RRSET_CACHE_DEFAULT_SIZE
,
class_
));
message_cache_
.
reset
(
new
DerivedMessageCache
(
rrset_cache_
,
MESSAGE_CACHE_DEFAULT_SIZE
,
class_
,
message_cache_
.
reset
(
new
DerivedMessageCache
(
rrset_cache_
,
MESSAGE_CACHE_DEFAULT_SIZE
,
class_
,
negative_soa_cache_
));
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment