From 2278df1493e064c197913e49b5d1935942d83448 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 6 May 2025 16:57:32 -0700 Subject: initial import --- test/test-parse_dns_udp-multi.c | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/test-parse_dns_udp-multi.c (limited to 'test/test-parse_dns_udp-multi.c') diff --git a/test/test-parse_dns_udp-multi.c b/test/test-parse_dns_udp-multi.c new file mode 100644 index 0000000..854b61a --- /dev/null +++ b/test/test-parse_dns_udp-multi.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include "dns.h" + +int main() { + uint8_t pkt[512] = {0}; + + // DNS header + pkt[4] = 0x00; + pkt[5] = 0x02; // QDCOUNT = 2 + + uint8_t *ptr = pkt + 12; + + // Question 1: foo.com A + *ptr++ = 3; memcpy(ptr, "foo", 3); ptr += 3; + *ptr++ = 3; memcpy(ptr, "com", 3); ptr += 3; + *ptr++ = 0; // null terminator + *ptr++ = 0x00; *ptr++ = 0x01; // QTYPE A + *ptr++ = 0x00; *ptr++ = 0x01; // QCLASS IN + + // Question 2: bar.org AAAA + *ptr++ = 3; memcpy(ptr, "bar", 3); ptr += 3; + *ptr++ = 3; memcpy(ptr, "org", 3); ptr += 3; + *ptr++ = 0; + *ptr++ = 0x00; *ptr++ = 0x1c; // QTYPE AAAA + *ptr++ = 0x00; *ptr++ = 0x01; + + size_t pkt_len = ptr - pkt; + + struct dns_question out[4]; + size_t count = parse_dns_udp(pkt, pkt_len, out, 4); + + //printf("Got %zu questions:\n", count); + //for (size_t i = 0; i < count; i++) { + // printf(" %s (%s)\n", out[i].name, dns_type_to_string(out[i].qtype)); + //} + + int res = (count == 2 && + strcmp(out[0].name, "foo.com") == 0 && + out[0].qtype == 1 && + strcmp(out[1].name, "bar.org") == 0 && + out[1].qtype == 28); + + printf("%s: parse_dns_udp-multi\n", res ? "PASS" : "FAIL"); + return res; +} -- cgit v1.2.3