summaryrefslogtreecommitdiffstats
path: root/src/test/writer_pop.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2022-01-14 15:03:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2022-01-14 15:03:48 +0000
commitbe956cd27353a4bb585b1a648e8469cf7adb5edf (patch)
treea473793c3fd59ace461f23a8d75d9ca29a82b4ff /src/test/writer_pop.c
parentInitial commit. (diff)
downloaddnswire-be956cd27353a4bb585b1a648e8469cf7adb5edf.tar.xz
dnswire-be956cd27353a4bb585b1a648e8469cf7adb5edf.zip
Adding upstream version 0.2.0.upstream/0.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/writer_pop.c')
-rw-r--r--src/test/writer_pop.c119
1 files changed, 119 insertions, 0 deletions
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 <dnswire/writer.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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;
+}