BIND 10 trac576, updated. c6b5e0f57cb473f7e2731d8ca1d3619139263a12 [trac576] Remove boss's params from man page
BIND 10 source code commits
bind10-changes at lists.isc.org
Tue Feb 22 20:44:24 UTC 2011
The branch, trac576 has been updated
discards 278e2b1bf3891fc4e1e5d395544282fa79a8a9f5 (commit)
discards ac0f102f2dc37192f79ba897685d9414eb16fdfa (commit)
discards 4146e0d4f41da75837bcf4293b9552d6635ec73c (commit)
discards 2c63f15625eb3110debb05e5312f6bff8a309c0f (commit)
discards 6c03c95ff0813e24702964af2bddf486a352e7a0 (commit)
discards a11457e48a05d0e398e09200f049ce6b957a2dfb (commit)
discards fb41e495d0db3b46248782bd952eaa1de121cd8e (commit)
discards f7421efed5f0c173dd95f7a421f7dd7c825dc397 (commit)
discards de1b8d56e8d4d682a3eac62470fe6e7b2c2ae7f4 (commit)
discards e2bf51d2e5ce4d8ef9140e4e5f7efc78db21cd0a (commit)
discards d24cc0233a081f0be02cc5f8215d7be20819f472 (commit)
discards cf42eb44b73c4f33f2ee3e0ba4bae9e72bbd2795 (commit)
discards 2a66d3aaac4754cf1c91204a4b2da244bfa269bd (commit)
discards 319a4f17b34706ccb023fe571c27e7843bb93bf8 (commit)
discards 9cbeddff8102fd9411417a94449e4933a767084f (commit)
discards 73cb54ee37f9de1c5daf4359e209eae696ff6108 (commit)
discards a8acfae7e9bd6e453bb0a4e2f225c0858d6807ea (commit)
discards 1f569da203364723a3b78152b127b05075f0b9f0 (commit)
discards 59d88e0db46955ed083426327b1b467366ea352d (commit)
discards 8f77709804055982134db51383ee1455e7905692 (commit)
discards 7eb6dab85f3e03104c30127c7af34b75e2c21002 (commit)
via c6b5e0f57cb473f7e2731d8ca1d3619139263a12 (commit)
via 239114f5e894111f47dca785429a9180f2cb1598 (commit)
via 477b53cb86a431a7c38655db3972a554b412e700 (commit)
via 8ffbcda5bbf9729b9ab09d89531520c9f94618ee (commit)
via 77a02471ef75d226a6dbf7e962491fedfef6d6d9 (commit)
via 09b70f9b0f93da5c7034b02837987fc03a675472 (commit)
via de89048d524aef36e88ce770f3f953401e3a24a8 (commit)
via 94b5025336f509832addd712ed2f9f4fce48bfa4 (commit)
via 8578607b1c73c76e16a4eabd4ed45539260e0c74 (commit)
via 0503f4a60a6873d63bb1d9352c6b50a7a40130f9 (commit)
via 71c4e3cb8c0f6c4e51a8afd24928ee10710a49a2 (commit)
via bba7327c68c2242882dcaadbcae4b2db0aabedd3 (commit)
via 783c0a87b919e9d39ab271de6203bb4277758e2d (commit)
via f9be171869937e52f960568773c45cfda28baa3a (commit)
via 955a15527bec6ba0231f0bc377539a169fa34165 (commit)
via d0181f27a73dc4b77bc9c6756cb6583226dafacc (commit)
via cf131c0c98c346b2f075b76c2fc92a658eb58f1f (commit)
via fcb8add55e0b6d5be9104e59e4f47a6d4d4ae9c5 (commit)
via ecbfb7cf929d62a018dd4cdc7a841add3d5a35ae (commit)
via 6689f461849841d7c5a724471107f758535c213e (commit)
via 004e382616150f8a2362e94d3458b59bb2710182 (commit)
via e7a46851671cd942d39e74d0456435401dc15881 (commit)
via 67ff28d5017ac0cb38b591de079809bfe765ddd1 (commit)
via 3c06d0d6c0d002138ab3edbd9a6833a40de3f911 (commit)
via 64c233aa9b565df653928f79e987ff0ffacf68af (commit)
via f8e2229b901ea731ac1fd7e7bac0799b855cd88a (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (278e2b1bf3891fc4e1e5d395544282fa79a8a9f5)
\
N -- N -- N (c6b5e0f57cb473f7e2731d8ca1d3619139263a12)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c6b5e0f57cb473f7e2731d8ca1d3619139263a12
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Tue Feb 22 19:06:11 2011 +0100
[trac576] Remove boss's params from man page
commit 239114f5e894111f47dca785429a9180f2cb1598
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Mon Feb 21 14:18:53 2011 +0100
[trac576] Remove the parameters from boss
commit 477b53cb86a431a7c38655db3972a554b412e700
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Mon Feb 21 11:25:05 2011 +0100
[trac576] Remove tests for -p and -a from boss
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 10 ++++
src/bin/auth/auth.spec.pre.in | 10 ++--
src/bin/auth/b10-auth.xml | 47 --------------------
src/bin/bind10/bind10.py.in | 4 +-
src/bin/resolver/resolver.spec.pre.in | 34 +++++++-------
src/bin/xfrout/tests/xfrout_test.py | 23 ++++++++++
src/bin/xfrout/xfrout.py.in | 3 +
src/lib/cache/resolver_cache.cc | 7 +--
src/lib/cache/resolver_cache.h | 29 ++++++------
src/lib/cache/tests/resolver_cache_unittest.cc | 21 +++------
src/lib/dns/python/messagerenderer_python.cc | 45 ++++++++++++++++++-
.../python/tests/messagerenderer_python_test.py | 28 ++++++++++--
12 files changed, 151 insertions(+), 110 deletions(-)
mode change 100644 => 100755 src/bin/bind10/bind10.py.in
-----------------------------------------------------------------------
diff --git a/ChangeLog b/ChangeLog
index 5634480..37eca98 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+ 176. [func] zhang likun
+ src/lib/cache: Rename one interface: from lookupClosestRRset()
+ to lookupDeepestNS(), and remove one parameter of it.
+ (Trac #492, git ecbfb7cf929d62a018dd4cdc7a841add3d5a35ae)
+
+ 175. [bug] jerry
+ src/bin/xfrout: Xfrout use the case-sensitive mode to compress
+ names in an AXFR massage.
+ (Trac #253, git 004e382616150f8a2362e94d3458b59bb2710182)
+
174. [bug]* jinmei
src/lib/dns: revised dnssectime functions so that they don't rely
on the time_t type (whose size varies on different systems, which
diff --git a/src/bin/auth/auth.spec.pre.in b/src/bin/auth/auth.spec.pre.in
index 1c6ba06..e95dabd 100644
--- a/src/bin/auth/auth.spec.pre.in
+++ b/src/bin/auth/auth.spec.pre.in
@@ -60,7 +60,7 @@
{
"item_name": "listen_on",
"item_type": "list",
- "item_optional": False,
+ "item_optional": false,
"item_default": [
{
"address": "::1",
@@ -69,24 +69,24 @@
{
"address": "127.0.0.1",
"port": 5300
- },
+ }
],
"list_item_spec": {
"item_name": "address",
"item_type": "map",
- "item_optional": False,
+ "item_optional": false,
"item_default": {},
"map_item_spec": [
{
"item_name": "address",
"item_type": "string",
- "item_optional": False,
+ "item_optional": false,
"item_default": "::1"
},
{
"item_name": "port",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 5300
}
]
diff --git a/src/bin/auth/b10-auth.xml b/src/bin/auth/b10-auth.xml
index b22d24d..c9e935a 100644
--- a/src/bin/auth/b10-auth.xml
+++ b/src/bin/auth/b10-auth.xml
@@ -44,11 +44,7 @@
<refsynopsisdiv>
<cmdsynopsis>
<command>b10-auth</command>
- <arg><option>-4</option></arg>
- <arg><option>-6</option></arg>
- <arg><option>-a <replaceable>address</replaceable></option></arg>
<arg><option>-n</option></arg>
- <arg><option>-p <replaceable>number</replaceable></option></arg>
<arg><option>-u <replaceable>username</replaceable></option></arg>
<arg><option>-v</option></arg>
</cmdsynopsis>
@@ -85,39 +81,6 @@
<variablelist>
<varlistentry>
- <term><option>-4</option></term>
- <listitem><para>
- Enables IPv4 only mode.
- This switch may not be used with <option>-6</option> nor
- <option>-a</option>.
- By default, it listens on both IPv4 and IPv6 (if capable).
- </para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-6</option></term>
- <listitem><para>
- Enables IPv6 only mode.
- This switch may not be used with <option>-4</option> nor
- <option>-a</option>.
- By default, it listens on both IPv4 and IPv6 (if capable).
- </para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-a <replaceable>address</replaceable></option></term>
-
- <listitem>
- <para>The IPv4 or IPv6 address to listen on.
- This switch may not be used with <option>-4</option> nor
- <option>-6</option>.
- The default is to listen on all addresses.
- (This is a short term workaround. This argument may change.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term><option>-n</option></term>
<listitem><para>
Do not cache answers in memory.
@@ -130,16 +93,6 @@
</varlistentry>
<varlistentry>
- <term><option>-p <replaceable>number</replaceable></option></term>
- <listitem><para>
- The port number it listens on.
- The default is 5300.</para>
- <note><simpara>This prototype runs on all interfaces
- and on this nonstandard port.</simpara></note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term><option>-u <replaceable>username</replaceable></option></term>
<listitem>
<para>
diff --git a/src/bin/bind10/bind10.py.in b/src/bin/bind10/bind10.py.in
old mode 100644
new mode 100755
index 1d13f4f..ebe1c39
--- a/src/bin/bind10/bind10.py.in
+++ b/src/bin/bind10/bind10.py.in
@@ -312,8 +312,8 @@ class BoB:
sys.stdout.write("\n")
# The next few methods start the individual processes of BIND-10. They
- # are called via start_all_process(). If any fail, an exception is raised
- # which is caught by the caller of start_all_processes(); this kills
+ # are called via start_all_processes(). If any fail, an exception is
+ # raised which is caught by the caller of start_all_processes(); this kills
# processes started up to that point before terminating the program.
def start_msgq(self, c_channel_env):
diff --git a/src/bin/resolver/resolver.spec.pre.in b/src/bin/resolver/resolver.spec.pre.in
index 48e1eb6..bc598b0 100644
--- a/src/bin/resolver/resolver.spec.pre.in
+++ b/src/bin/resolver/resolver.spec.pre.in
@@ -6,48 +6,48 @@
{
"item_name": "timeout_query",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 2000
},
{
"item_name": "timeout_client",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 4000
},
{
"item_name": "timeout_lookup",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 30000
},
{
"item_name": "retries",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 3
},
{
"item_name": "forward_addresses",
"item_type": "list",
- "item_optional": True,
+ "item_optional": true,
"item_default": [],
"list_item_spec" : {
"item_name": "address",
"item_type": "map",
- "item_optional": False,
+ "item_optional": false,
"item_default": {},
"map_item_spec": [
{
"item_name": "address",
"item_type": "string",
- "item_optional": False,
+ "item_optional": false,
"item_default": "::1"
},
{
"item_name": "port",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 53
}
]
@@ -56,24 +56,24 @@
{
"item_name": "root_addresses",
"item_type": "list",
- "item_optional": True,
+ "item_optional": true,
"item_default": [],
"list_item_spec" : {
"item_name": "address",
"item_type": "map",
- "item_optional": False,
+ "item_optional": false,
"item_default": {},
"map_item_spec": [
{
"item_name": "address",
"item_type": "string",
- "item_optional": False,
+ "item_optional": false,
"item_default": "::1"
},
{
"item_name": "port",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 53
}
]
@@ -82,7 +82,7 @@
{
"item_name": "listen_on",
"item_type": "list",
- "item_optional": False,
+ "item_optional": false,
"item_default": [
{
"address": "::1",
@@ -91,24 +91,24 @@
{
"address": "127.0.0.1",
"port": 5300
- },
+ }
],
"list_item_spec": {
"item_name": "address",
"item_type": "map",
- "item_optional": False,
+ "item_optional": false,
"item_default": {},
"map_item_spec": [
{
"item_name": "address",
"item_type": "string",
- "item_optional": False,
+ "item_optional": false,
"item_default": "::1"
},
{
"item_name": "port",
"item_type": "integer",
- "item_optional": False,
+ "item_optional": false,
"item_default": 5300
}
]
diff --git a/src/bin/xfrout/tests/xfrout_test.py b/src/bin/xfrout/tests/xfrout_test.py
index 2fb4463..55a2e52 100644
--- a/src/bin/xfrout/tests/xfrout_test.py
+++ b/src/bin/xfrout/tests/xfrout_test.py
@@ -121,6 +121,29 @@ class TestXfroutSession(unittest.TestCase):
get_msg = self.sock.read_msg()
self.assertEqual(get_msg.get_rcode().to_text(), "NXDOMAIN")
+ def test_send_message(self):
+ msg = self.getmsg()
+ msg.make_response()
+ # soa record data with different cases
+ soa_record = (4, 3, 'Example.com.', 'com.Example.', 3600, 'SOA', None, 'master.Example.com. admin.exAmple.com. 1234 3600 1800 2419200 7200')
+ rrset_soa = self.xfrsess._create_rrset_from_db_record(soa_record)
+ msg.add_rrset(Message.SECTION_ANSWER, rrset_soa)
+ self.xfrsess._send_message(self.sock, msg)
+ send_out_data = self.sock.readsent()[2:]
+
+ # CASE_INSENSITIVE compression mode
+ render = MessageRenderer();
+ render.set_length_limit(XFROUT_MAX_MESSAGE_SIZE)
+ msg.to_wire(render)
+ self.assertNotEqual(render.get_data(), send_out_data)
+
+ # CASE_SENSITIVE compression mode
+ render.clear()
+ render.set_compress_mode(MessageRenderer.CASE_SENSITIVE)
+ render.set_length_limit(XFROUT_MAX_MESSAGE_SIZE)
+ msg.to_wire(render)
+ self.assertEqual(render.get_data(), send_out_data)
+
def test_clear_message(self):
msg = self.getmsg()
qid = msg.get_qid()
diff --git a/src/bin/xfrout/xfrout.py.in b/src/bin/xfrout/xfrout.py.in
index eb96b94..a819640 100755
--- a/src/bin/xfrout/xfrout.py.in
+++ b/src/bin/xfrout/xfrout.py.in
@@ -170,6 +170,9 @@ class XfroutSession(BaseRequestHandler):
def _send_message(self, sock_fd, msg):
render = MessageRenderer()
+ # As defined in RFC5936 section3.4, perform case-preserving name
+ # compression for AXFR message.
+ render.set_compress_mode(MessageRenderer.CASE_SENSITIVE)
render.set_length_limit(XFROUT_MAX_MESSAGE_SIZE)
msg.to_wire(render)
header_len = struct.pack('H', socket.htons(render.get_length()))
diff --git a/src/lib/cache/resolver_cache.cc b/src/lib/cache/resolver_cache.cc
index 8f3fb0f..0734da8 100644
--- a/src/lib/cache/resolver_cache.cc
+++ b/src/lib/cache/resolver_cache.cc
@@ -175,10 +175,10 @@ ResolverCache::lookup(const isc::dns::Name& qname,
}
isc::dns::RRsetPtr
-ResolverCache::lookupClosestRRset(const isc::dns::Name& qname,
- const isc::dns::RRType& qtype,
- const isc::dns::RRClass& qclass) const
+ResolverCache::lookupDeepestNS(const isc::dns::Name& qname,
+ const isc::dns::RRClass& qclass) const
{
+ isc::dns::RRType qtype = RRType::NS();
ResolverClassCache* cc = getClassCache(qclass);
if (cc) {
unsigned int count = qname.getLabelCount();
@@ -199,7 +199,6 @@ ResolverCache::lookupClosestRRset(const isc::dns::Name& qname,
bool
ResolverCache::update(const isc::dns::Message& msg) {
-
QuestionIterator iter = msg.beginQuestion();
ResolverClassCache* cc = getClassCache((*iter)->getClass());
if (cc) {
diff --git a/src/lib/cache/resolver_cache.h b/src/lib/cache/resolver_cache.h
index 0c08b8c..a8149e4 100644
--- a/src/lib/cache/resolver_cache.h
+++ b/src/lib/cache/resolver_cache.h
@@ -241,28 +241,27 @@ public:
const isc::dns::RRType& qtype,
const isc::dns::RRClass& qclass) const;
- /// \brief Look up closest rrset in cache.
+ /// \brief Look up closest enclosing NS rrset in cache.
///
/// \param qname The query name to look up
- /// \param qtype The query type to look up
/// \param qclass The query class to look up
///
- /// \return return the shared_ptr of rrset if it can be found in
- /// cache, or else return NULL.
+ /// \return return the shared_ptr of closest enclosing ns rrset
+ /// if it can be found in cache, or else return NULL.
///
- /// Currently the implementation is: search exact rrset
- /// label by lable, If the rrset can't be found, remove the last
+ /// Currently the implementation is: search exact ns rrset
+ /// label by lable, If the ns rrset can't be found, remove the last
/// label, then search again. The efficiency may be very low when
- /// the name of rrset is very long but it's closest rrset's name
- /// is very short.
- /// If a good perfermance is needed when looking up the closest rrset,
- /// rrset cache structure(HashTable) should be redesigned. By using
- /// HashTable, it can only garantee the performance for looking
- /// up exact rrset.
+ /// the name is very long but it's closest rrset's name is very short.
+ ///
+ /// If a good perfermance is needed when looking up the closest
+ /// enclosing ns rrset, cache structure(HashTable) should be
+ /// redesigned. By using HashTable, it can only garantee the
+ /// performance for looking up exact rrset.
+ ///
/// So here there is another question, which rrset looking up interface
- /// is used frequently? Exact or closest looking up.
- isc::dns::RRsetPtr lookupClosestRRset(const isc::dns::Name& qname,
- const isc::dns::RRType& qtype,
+ /// is used frequently? Exact or closest enclosing ns looking up.
+ isc::dns::RRsetPtr lookupDeepestNS(const isc::dns::Name& qname,
const isc::dns::RRClass& qclass) const;
//@}
diff --git a/src/lib/cache/tests/resolver_cache_unittest.cc b/src/lib/cache/tests/resolver_cache_unittest.cc
index d36d289..20dcec9 100644
--- a/src/lib/cache/tests/resolver_cache_unittest.cc
+++ b/src/lib/cache/tests/resolver_cache_unittest.cc
@@ -18,6 +18,7 @@
#include <dns/rrset.h>
#include "resolver_cache.h"
#include "cache_test_messagefromfile.h"
+#include "cache_test_sectioncount.h"
using namespace isc::cache;
using namespace isc::dns;
@@ -63,7 +64,7 @@ TEST_F(ResolverCacheTest, testUpdateMessage) {
EXPECT_TRUE(cache->lookup(qname, RRType::SOA(), RRClass::IN(), new_msg));
EXPECT_FALSE(new_msg.getHeaderFlag(Message::HEADERFLAG_AA));
}
-#if 0
+
TEST_F(ResolverCacheTest, testUpdateRRset) {
Message msg(Message::PARSE);
messageFromFile(msg, "message_fromWire3");
@@ -86,7 +87,7 @@ TEST_F(ResolverCacheTest, testUpdateRRset) {
cache->update(rrset_ptr);
Message new_msg(Message::RENDER);
- Question question(qname, klass, RRType::NS());
+ Question question(qname, RRClass::IN(), RRType::NS());
new_msg.addQuestion(question);
EXPECT_TRUE(cache->lookup(qname, RRType::NS(), RRClass::IN(), new_msg));
EXPECT_EQ(0, sectionRRsetCount(new_msg, Message::SECTION_AUTHORITY));
@@ -112,26 +113,16 @@ TEST_F(ResolverCacheTest, testLookupClosestRRset) {
Name qname("www.test.example.com.");
- RRsetPtr rrset_ptr = cache->lookupClosestRRset(qname, RRType::NS(),
- RRClass::IN());
+ RRsetPtr rrset_ptr = cache->lookupDeepestNS(qname, RRClass::IN());
EXPECT_TRUE(rrset_ptr);
EXPECT_EQ(rrset_ptr->getName(), Name("example.com."));
- rrset_ptr = cache->lookupClosestRRset(Name("example.com."),
- RRType::NS(), RRClass::IN());
+ rrset_ptr = cache->lookupDeepestNS(Name("example.com."), RRClass::IN());
EXPECT_TRUE(rrset_ptr);
EXPECT_EQ(rrset_ptr->getName(), Name("example.com."));
- rrset_ptr = cache->lookupClosestRRset(Name("com."),
- RRType::NS(), RRClass::IN());
+ rrset_ptr = cache->lookupDeepestNS(Name("com."), RRClass::IN());
EXPECT_FALSE(rrset_ptr);
}
-TEST_F(ResolverCacheTest, testHasClass) {
- EXPECT_TRUE(cache->getClassCache(RRClass::IN()));
- EXPECT_TRUE(cache->getClassCache(RRClass::CH()));
- EXPECT_FALSE(cache->getClassCache(RRClass::ANY()));
-}
-#endif
-
}
diff --git a/src/lib/dns/python/messagerenderer_python.cc b/src/lib/dns/python/messagerenderer_python.cc
index 91ab0c5..a00d8d4 100644
--- a/src/lib/dns/python/messagerenderer_python.cc
+++ b/src/lib/dns/python/messagerenderer_python.cc
@@ -37,9 +37,10 @@ static PyObject* MessageRenderer_getData(s_MessageRenderer* self);
static PyObject* MessageRenderer_getLength(s_MessageRenderer* self);
static PyObject* MessageRenderer_isTruncated(s_MessageRenderer* self);
static PyObject* MessageRenderer_getLengthLimit(s_MessageRenderer* self);
-// TODO: set/get compressmode
+static PyObject* MessageRenderer_getCompressMode(s_MessageRenderer* self);
static PyObject* MessageRenderer_setTruncated(s_MessageRenderer* self);
static PyObject* MessageRenderer_setLengthLimit(s_MessageRenderer* self, PyObject* args);
+static PyObject* MessageRenderer_setCompressMode(s_MessageRenderer* self, PyObject* args);
static PyObject* MessageRenderer_clear(s_MessageRenderer* self);
static PyMethodDef MessageRenderer_methods[] = {
@@ -51,10 +52,14 @@ static PyMethodDef MessageRenderer_methods[] = {
"Returns True if the data is truncated" },
{ "get_length_limit", reinterpret_cast<PyCFunction>(MessageRenderer_getLengthLimit), METH_NOARGS,
"Returns the length limit of the data" },
+ { "get_compress_mode", reinterpret_cast<PyCFunction>(MessageRenderer_getCompressMode), METH_NOARGS,
+ "Returns the current compression mode" },
{ "set_truncated", reinterpret_cast<PyCFunction>(MessageRenderer_setTruncated), METH_NOARGS,
"Sets truncated to true" },
{ "set_length_limit", reinterpret_cast<PyCFunction>(MessageRenderer_setLengthLimit), METH_VARARGS,
"Sets the length limit of the data to the given number" },
+ { "set_compress_mode", reinterpret_cast<PyCFunction>(MessageRenderer_setCompressMode), METH_VARARGS,
+ "Sets the compression mode of the MessageRenderer" },
{ "clear", reinterpret_cast<PyCFunction>(MessageRenderer_clear),
METH_NOARGS,
"Clear the internal buffer and other internal resources." },
@@ -159,6 +164,11 @@ MessageRenderer_getLengthLimit(s_MessageRenderer* self) {
}
static PyObject*
+MessageRenderer_getCompressMode(s_MessageRenderer* self) {
+ return (Py_BuildValue("I", self->messagerenderer->getCompressMode()));
+}
+
+static PyObject*
MessageRenderer_setTruncated(s_MessageRenderer* self) {
self->messagerenderer->setTruncated();
Py_RETURN_NONE;
@@ -177,6 +187,31 @@ MessageRenderer_setLengthLimit(s_MessageRenderer* self,
}
static PyObject*
+MessageRenderer_setCompressMode(s_MessageRenderer* self,
+ PyObject* args)
+{
+ unsigned int mode;
+ if (!PyArg_ParseTuple(args, "I", &mode)) {
+ return (NULL);
+ }
+
+ if (mode == MessageRenderer::CASE_INSENSITIVE) {
+ self->messagerenderer->setCompressMode(MessageRenderer::CASE_INSENSITIVE);
+ // If we return NULL it is seen as an error, so use this for
+ // None returns, it also applies to CASE_SENSITIVE.
+ Py_RETURN_NONE;
+ } else if (mode == MessageRenderer::CASE_SENSITIVE) {
+ self->messagerenderer->setCompressMode(MessageRenderer::CASE_SENSITIVE);
+ Py_RETURN_NONE;
+ } else {
+ PyErr_SetString(PyExc_TypeError,
+ "MessageRenderer compress mode must be MessageRenderer.CASE_INSENSITIVE"
+ "or MessageRenderer.CASE_SENSITIVE");
+ return (NULL);
+ }
+}
+
+static PyObject*
MessageRenderer_clear(s_MessageRenderer* self) {
self->messagerenderer->clear();
Py_RETURN_NONE;
@@ -203,6 +238,14 @@ initModulePart_MessageRenderer(PyObject* mod) {
return (false);
}
Py_INCREF(&messagerenderer_type);
+
+ // Class variables
+ // These are added to the tp_dict of the type object
+ addClassVariable(messagerenderer_type, "CASE_INSENSITIVE",
+ Py_BuildValue("I", MessageRenderer::CASE_INSENSITIVE));
+ addClassVariable(messagerenderer_type, "CASE_SENSITIVE",
+ Py_BuildValue("I", MessageRenderer::CASE_SENSITIVE));
+
PyModule_AddObject(mod, "MessageRenderer",
reinterpret_cast<PyObject*>(&messagerenderer_type));
diff --git a/src/lib/dns/python/tests/messagerenderer_python_test.py b/src/lib/dns/python/tests/messagerenderer_python_test.py
index 62e2d51..544ad23 100644
--- a/src/lib/dns/python/tests/messagerenderer_python_test.py
+++ b/src/lib/dns/python/tests/messagerenderer_python_test.py
@@ -28,7 +28,7 @@ class MessageRendererTest(unittest.TestCase):
c = RRClass("IN")
t = RRType("A")
ttl = RRTTL("3600")
-
+
message = Message(Message.RENDER)
message.set_qid(123)
message.set_opcode(Opcode.QUERY())
@@ -56,14 +56,14 @@ class MessageRendererTest(unittest.TestCase):
self.message1.to_wire(self.renderer1)
self.message2.to_wire(self.renderer2)
self.message2.to_wire(self.renderer3)
-
-
+
+
def test_messagerenderer_get_data(self):
data1 = b'\x00{\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x07example\x03com\x00\x00\x01\x00\x01'
self.assertEqual(data1, self.renderer1.get_data())
data2 = b'\x00{\x84\x00\x00\x01\x00\x00\x00\x02\x00\x00\x07example\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\xc0\x00\x02b\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\xc0\x00\x02c'
self.assertEqual(data2, self.renderer2.get_data())
-
+
def test_messagerenderer_get_length(self):
self.assertEqual(29, self.renderer1.get_length())
self.assertEqual(61, self.renderer2.get_length())
@@ -79,6 +79,14 @@ class MessageRendererTest(unittest.TestCase):
self.assertEqual(512, self.renderer2.get_length_limit())
self.assertEqual(50, self.renderer3.get_length_limit())
+ def test_messagerenderer_get_compress_mode(self):
+ self.assertEqual(MessageRenderer.CASE_INSENSITIVE,
+ self.renderer1.get_compress_mode())
+ self.assertEqual(MessageRenderer.CASE_INSENSITIVE,
+ self.renderer2.get_compress_mode())
+ self.assertEqual(MessageRenderer.CASE_INSENSITIVE,
+ self.renderer3.get_compress_mode())
+
def test_messagerenderer_set_truncated(self):
self.assertFalse(self.renderer1.is_truncated())
self.renderer1.set_truncated()
@@ -91,5 +99,17 @@ class MessageRendererTest(unittest.TestCase):
self.assertEqual(1024, renderer.get_length_limit())
self.assertRaises(TypeError, renderer.set_length_limit, "wrong")
+ def test_messagerenderer_set_compress_mode(self):
+ renderer = MessageRenderer()
+ self.assertEqual(MessageRenderer.CASE_INSENSITIVE,
+ renderer.get_compress_mode())
+ renderer.set_compress_mode(MessageRenderer.CASE_SENSITIVE)
+ self.assertEqual(MessageRenderer.CASE_SENSITIVE,
+ renderer.get_compress_mode())
+ renderer.set_compress_mode(MessageRenderer.CASE_INSENSITIVE)
+ self.assertEqual(MessageRenderer.CASE_INSENSITIVE,
+ renderer.get_compress_mode())
+ self.assertRaises(TypeError, renderer.set_compress_mode, "wrong")
+
if __name__ == '__main__':
unittest.main()
More information about the bind10-changes
mailing list