From: Petr Špaček Date: Mon, 22 Jan 2018 14:50:16 +0000 (+0100) Subject: Add Lua interface for kr_pkt_clear_payload(). X-Git-Tag: v2.0.0~20^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90b2e4d6d013b91345929993c8f28e2ef600af1c;p=thirdparty%2Fknot-resolver.git Add Lua interface for kr_pkt_clear_payload(). --- diff --git a/daemon/lua/kres-gen.lua b/daemon/lua/kres-gen.lua index 76eb97430..6d63ee4d9 100644 --- a/daemon/lua/kres-gen.lua +++ b/daemon/lua/kres-gen.lua @@ -261,6 +261,7 @@ uint32_t kr_rand_uint(uint32_t); void kr_pkt_make_auth_header(knot_pkt_t *); int kr_pkt_put(knot_pkt_t *, const knot_dname_t *, uint32_t, uint16_t, uint16_t, const uint8_t *, uint16_t); int kr_pkt_recycle(knot_pkt_t *); +int kr_pkt_clear_payload(knot_pkt_t *); const char *kr_inaddr(const struct sockaddr *); int kr_inaddr_family(const struct sockaddr *); int kr_inaddr_len(const struct sockaddr *); diff --git a/daemon/lua/kres-gen.sh b/daemon/lua/kres-gen.sh index d1bf4d362..066a274b7 100755 --- a/daemon/lua/kres-gen.sh +++ b/daemon/lua/kres-gen.sh @@ -132,6 +132,7 @@ EOF kr_pkt_make_auth_header kr_pkt_put kr_pkt_recycle + kr_pkt_clear_payload kr_inaddr kr_inaddr_family kr_inaddr_len diff --git a/daemon/lua/kres.lua b/daemon/lua/kres.lua index 216911975..073db62a6 100644 --- a/daemon/lua/kres.lua +++ b/daemon/lua/kres.lua @@ -460,6 +460,12 @@ ffi.metatype( knot_pkt_t, { if ret ~= 0 then return nil, knot_strerror(ret) end return true end, + clear_payload = function (pkt) + assert(pkt ~= nil) + local ret = C.kr_pkt_clear_payload(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/tests/config/basic_test.lua b/tests/config/basic_test.lua index 6dca8bcbb..b4d756285 100644 --- a/tests/config/basic_test.lua +++ b/tests/config/basic_test.lua @@ -82,12 +82,40 @@ local function test_packet_functions() same(parsed:qname(), pkt:qname(), 'parsed packet has same QNAME') same(parsed:qtype(), pkt:qtype(), 'parsed packet has same QTYPE') same(parsed:qclass(), pkt:qclass(), 'parsed packet has same QCLASS') + same(parsed:opcode(), pkt:opcode(), 'parsed packet has same opcode') same(parsed:rcode(), pkt:rcode(), 'parsed packet has same rcode') same(parsed:rd(), pkt:rd(), 'parsed packet has same RD') same(parsed:id(), pkt:id(), 'parsed packet has same MSGID') + same(parsed:qdcount(), pkt:qdcount(), 'parsed packet has same question count') same(parsed:ancount(), pkt:ancount(), 'parsed packet has same answer count') + same(parsed:nscount(), pkt:nscount(), 'parsed packet has same authority count') + same(parsed:arcount(), pkt:arcount(), 'parsed packet has same additional count') same(parsed:tostring(), pkt:tostring(), 'parsed packet is equal to source packet') + -- Test recycling of packets + -- Clear_payload keeps header + question intact + local cleared = kres.packet(#wire, wire) -- same as "parsed" above + ok(cleared:parse(), 'parsing packet from wire works') + ok(cleared:clear_payload(), 'clear_payload works') + same(cleared:id(), pkt:id(), 'cleared packet has same MSGID') + same(cleared:qr(), pkt:qr(), 'cleared packet has same QR') + same(cleared:opcode(), pkt:opcode(), 'cleared packet has same OPCODE') + same(cleared:aa(), pkt:aa(), 'cleared packet has same AA') + same(cleared:tc(), pkt:tc(), 'cleared packet has same TC') + same(cleared:rd(), pkt:rd(), 'cleared packet has same RD') + same(cleared:ra(), pkt:ra(), 'cleared packet has same RA') + same(cleared:ad(), pkt:ad(), 'cleared packet has same AD') + same(cleared:cd(), pkt:cd(), 'cleared packet has same CD') + same(cleared:rcode(), pkt:rcode(), 'cleared packet has same RCODE') + same(cleared:qdcount(), pkt:qdcount(), 'cleared packet has same question count') + same(cleared:ancount(), 0, 'cleared packet has no answers') + same(cleared:nscount(), 0, 'cleared packet has no authority') + same(cleared:arcount(), 0, 'cleared packet has no additional') + same(cleared:qname(), pkt:qname(), 'cleared packet has same QNAME') + same(cleared:qtype(), pkt:qtype(), 'cleared packet has same QTYPE') + same(cleared:qclass(), pkt:qclass(), 'cleared packet has same QCLASS') + + -- Recycle clears question as well ok(pkt:recycle(), 'recycle() works') is(pkt:ancount(), 0, 'recycle() clears records') is(pkt:qname(), nil, 'recycle() clears question') @@ -99,4 +127,4 @@ return { test_globals, test_rrset_functions, test_packet_functions, -} \ No newline at end of file +}