From be956cd27353a4bb585b1a648e8469cf7adb5edf Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 14 Jan 2022 16:03:48 +0100 Subject: Adding upstream version 0.2.0. Signed-off-by: Daniel Baumann --- src/test/writer_pop.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/test/writer_pop.c (limited to 'src/test/writer_pop.c') diff --git a/src/test/writer_pop.c b/src/test/writer_pop.c new file mode 100644 index 0000000..69070b3 --- /dev/null +++ b/src/test/writer_pop.c @@ -0,0 +1,119 @@ +#include + +#include +#include +#include + +#include "create_dnstap.c" + +int main(int argc, const char* argv[]) +{ + if (argc < 2) { + return 1; + } + + FILE* fp = fopen(argv[1], "w"); + if (!fp) { + return 1; + } + + struct dnswire_writer writer; + if (dnswire_writer_init(&writer) != dnswire_ok) { + return 1; + } + + uint8_t buf[4096]; + + struct dnstap d = DNSTAP_INITIALIZER; + create_dnstap(&d, "writer_pop-1"); + + dnswire_writer_set_dnstap(writer, &d); + + while (1) { + if (dnswire_writer_popped(writer)) { + if (fwrite(buf, 1, dnswire_writer_popped(writer), fp) != dnswire_writer_popped(writer)) { + fprintf(stderr, "fwrite() failed\n"); + return 1; + } + } + enum dnswire_result res = dnswire_writer_pop(&writer, buf, sizeof(buf), 0, 0); + switch (res) { + case dnswire_ok: + break; + + case dnswire_again: + case dnswire_need_more: + continue; + + default: + fprintf(stderr, "dnswire_writer_pop() error\n"); + return 1; + } + break; + } + + create_dnstap(&d, "writer_pop-2"); + + while (1) { + if (dnswire_writer_popped(writer)) { + if (fwrite(buf, 1, dnswire_writer_popped(writer), fp) != dnswire_writer_popped(writer)) { + fprintf(stderr, "fwrite() failed\n"); + return 1; + } + } + enum dnswire_result res = dnswire_writer_pop(&writer, buf, sizeof(buf), 0, 0); + switch (res) { + case dnswire_ok: + break; + + case dnswire_again: + case dnswire_need_more: + continue; + + default: + fprintf(stderr, "dnswire_writer_pop() error\n"); + return 1; + } + break; + } + + if (dnswire_writer_stop(&writer) != dnswire_ok) { + fprintf(stderr, "dnswire_writer_stop() failed\n"); + return 1; + } + + while (1) { + if (dnswire_writer_popped(writer)) { + if (fwrite(buf, 1, dnswire_writer_popped(writer), fp) != dnswire_writer_popped(writer)) { + fprintf(stderr, "fwrite() failed\n"); + return 1; + } + } + enum dnswire_result res = dnswire_writer_pop(&writer, buf, sizeof(buf), 0, 0); + switch (res) { + case dnswire_ok: + case dnswire_endofdata: + break; + + case dnswire_again: + case dnswire_need_more: + continue; + + default: + fprintf(stderr, "dnswire_reader_add() error\n"); + return 1; + } + break; + } + + if (dnswire_writer_popped(writer)) { + if (fwrite(buf, 1, dnswire_writer_popped(writer), fp) != dnswire_writer_popped(writer)) { + fprintf(stderr, "fwrite() failed\n"); + return 1; + } + } + + dnswire_writer_destroy(writer); + fclose(fp); + return 0; +} -- cgit v1.2.3