]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
Add Lua interface for kr_pkt_clear_payload().
authorPetr Špaček <petr.spacek@nic.cz>
Mon, 22 Jan 2018 14:50:16 +0000 (15:50 +0100)
committerPetr Špaček <petr.spacek@nic.cz>
Tue, 23 Jan 2018 08:45:41 +0000 (09:45 +0100)
daemon/lua/kres-gen.lua
daemon/lua/kres-gen.sh
daemon/lua/kres.lua
tests/config/basic_test.lua

index 76eb974306a331e9462d996ce0fca63f4deabde4..6d63ee4d9e6bc46733c0242f9b6a2b6a1b093e46 100644 (file)
@@ -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 *);
index d1bf4d362999eaf03c343728073de916d004439b..066a274b70b7144365f818b389f4ab2a3f3b9c79 100755 (executable)
@@ -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
index 216911975f5ca84f06aa948b6c281d2001415c32..073db62a64d92c73645d12c528f81715bbe9e899 100644 (file)
@@ -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))
index 6dca8bcbbffbcc80bb6ec547805cf85c3ba23ab3..b4d756285f942c75ba6c807133be64a8dd749afa 100644 (file)
@@ -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
+}