diff --git a/daemon/lua/kres.lua b/daemon/lua/kres.lua index 8578b057b535fa7dfddff88824461f5639ca5562..216911975f5ca84f06aa948b6c281d2001415c32 100644 --- a/daemon/lua/kres.lua +++ b/daemon/lua/kres.lua @@ -454,7 +454,12 @@ ffi.metatype( knot_pkt_t, { if ret ~= 0 then return nil, knot_strerror(ret) end return true end, - clear = function (pkt) return C.kr_pkt_recycle(pkt) end, + recycle = function (pkt) + assert(pkt ~= nil) + local ret = C.kr_pkt_recycle(pkt) + if ret ~= 0 then return nil, knot_strerror(ret) end + return true + end, question = function(pkt, qname, qclass, qtype) assert(pkt ~= nil) assert(qclass ~= nil, string.format('invalid class: %s', qclass)) diff --git a/lib/README.rst b/lib/README.rst index 0e844669a70883f043bdd02f988825b2b94ef251..267931bcaf16c97f809077977057f4cf98372abc 100644 --- a/lib/README.rst +++ b/lib/README.rst @@ -227,7 +227,7 @@ e.g. you can't write to ANSWER after writing AUTHORITY, it's like stages where y pkt:rcode(kres.rcode.NXDOMAIN) -- Clear answer and write QUESTION - pkt:clear() + pkt:recycle() pkt:question('\7blocked', kres.class.IN, kres.type.SOA) -- Start writing data pkt:begin(kres.section.ANSWER) diff --git a/modules/renumber/renumber.lua b/modules/renumber/renumber.lua index a44f10111fdc0fd9f1ea282d0f6a354fcc919e12..457e06f4bc99c9a01fc8a7cf248f9da156dd331f 100644 --- a/modules/renumber/renumber.lua +++ b/modules/renumber/renumber.lua @@ -88,7 +88,7 @@ local function rule() local qname = pkt:qname() local qclass = pkt:qclass() local qtype = pkt:qtype() - pkt:clear() + pkt:recycle() pkt:question(qname, qclass, qtype) for i = 1, ancount do local rr = records[i] diff --git a/tests/config/basic_test.lua b/tests/config/basic_test.lua index df4fff71089ebb9cffb0c7661c91b982e7a79150..6dca8bcbbffbcc80bb6ec547805cf85c3ba23ab3 100644 --- a/tests/config/basic_test.lua +++ b/tests/config/basic_test.lua @@ -87,6 +87,11 @@ local function test_packet_functions() same(parsed:id(), pkt:id(), 'parsed packet has same MSGID') same(parsed:ancount(), pkt:ancount(), 'parsed packet has same answer count') same(parsed:tostring(), pkt:tostring(), 'parsed packet is equal to source packet') + -- Test recycling of packets + ok(pkt:recycle(), 'recycle() works') + is(pkt:ancount(), 0, 'recycle() clears records') + is(pkt:qname(), nil, 'recycle() clears question') + is(#pkt:towire(), 12, 'recycle() clears the packet wireformat') end return {