[svn] commit: r1827 - in /experiments/python-binding/src/lib/dns/python: TODO message_python.cc messagerenderer_python.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri May 14 14:26:56 UTC 2010
Author: jelte
Date: Fri May 14 14:26:55 2010
New Revision: 1827
Log:
added setTruncated() and setLengthLimit() to messagerenderer wrapper
updated TODO
added some missing INCREFs to message_python
Modified:
experiments/python-binding/src/lib/dns/python/TODO
experiments/python-binding/src/lib/dns/python/message_python.cc
experiments/python-binding/src/lib/dns/python/messagerenderer_python.cc
Modified: experiments/python-binding/src/lib/dns/python/TODO
==============================================================================
--- experiments/python-binding/src/lib/dns/python/TODO (original)
+++ experiments/python-binding/src/lib/dns/python/TODO Fri May 14 14:26:55 2010
@@ -1,6 +1,8 @@
add statics for RRClass::IN() (RRClass.IN()) etc.
(and replace RRClass("IN") in tests with those)
+
+same for RRType? (xfrout.py.in line 256)
__str__ for name, question, everything with to_text()
@@ -9,3 +11,5 @@
at question.to_wire(bytes) does not seem to work right (only return
value seems correct, while i'd like in-place addition if possible)
+
+creating a render message and not setting opcode/rcode results in a segfault later (nullpointer)
Modified: experiments/python-binding/src/lib/dns/python/message_python.cc
==============================================================================
--- experiments/python-binding/src/lib/dns/python/message_python.cc (original)
+++ experiments/python-binding/src/lib/dns/python/message_python.cc Fri May 14 14:26:55 2010
@@ -1478,8 +1478,10 @@
PyErr_Clear();
if (i == Message::PARSE) {
self->message = new Message(Message::PARSE);
+ Py_INCREF(self);
return 0;
} else if (i == Message::RENDER) {
+ Py_INCREF(self);
self->message = new Message(Message::RENDER);
return 0;
} else {
@@ -1723,8 +1725,6 @@
++rrsi) {
s_RRset *rrset = (s_RRset*)rrset_type.tp_alloc(&rrset_type, 0);
if (rrset != NULL) {
- // hmz, copy constructor is private...
- //rrset->rrset = new RRset(*rrsi->get());
rrset->rrset = rrsi->get();
if (rrset->rrset == NULL)
{
@@ -1754,6 +1754,7 @@
&PyBool_Type, &sign)) {
return NULL;
}
+ Py_INCREF(rrset);
RRsetPtr rrset_ptr = RRsetPtr(rrset->rrset);
if (sign == Py_True) {
Modified: experiments/python-binding/src/lib/dns/python/messagerenderer_python.cc
==============================================================================
--- experiments/python-binding/src/lib/dns/python/messagerenderer_python.cc (original)
+++ experiments/python-binding/src/lib/dns/python/messagerenderer_python.cc Fri May 14 14:26:55 2010
@@ -39,12 +39,18 @@
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_setTruncated(s_MessageRenderer* self);
+static PyObject* MessageRenderer_setLengthLimit(s_MessageRenderer* self, PyObject* args);
+
static PyMethodDef MessageRenderer_methods[] = {
{ "get_data", (PyCFunction)MessageRenderer_getData, METH_NOARGS, "Return the data" },
{ "get_length", (PyCFunction)MessageRenderer_getLength, METH_NOARGS, "Return the length of the data" },
{ "is_truncated", (PyCFunction)MessageRenderer_isTruncated, METH_NOARGS, "Returns True if the data is truncated" },
{ "get_length_limit", (PyCFunction)MessageRenderer_getLengthLimit, METH_NOARGS, "Return the length limit of the data" },
+ { "set_truncated", (PyCFunction)MessageRenderer_setTruncated, METH_NOARGS, "Set truncated to true" },
+ { "set_length_limit", (PyCFunction)MessageRenderer_setLengthLimit, METH_VARARGS, "Set the length limit of the data" },
{ NULL, NULL, 0, NULL }
};
@@ -145,6 +151,24 @@
return Py_BuildValue("I", self->messagerenderer->getLengthLimit());
}
+static PyObject*
+MessageRenderer_setTruncated(s_MessageRenderer* self)
+{
+ self->messagerenderer->setTruncated();
+ Py_RETURN_NONE;
+}
+
+static PyObject*
+MessageRenderer_setLengthLimit(s_MessageRenderer* self, PyObject* args)
+{
+ size_t lengthlimit;
+ if (!PyArg_ParseTuple(args, "I", &lengthlimit)) {
+ return NULL;
+ }
+ self->messagerenderer->setLengthLimit(lengthlimit);
+ Py_RETURN_NONE;
+}
+
// end of MessageRenderer
More information about the bind10-changes
mailing list