[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