chiark / gitweb /
WIP DNS bitenc test compiles
[secnet.git] / dns-bitenc-test.c
index 5d09cfb4ec8cb205c50a41ff0433424a362a673e..a11ecd9b37144b9489afc6e187a08a0843e03d55 100644 (file)
@@ -1,37 +1,50 @@
+/*
+ * Simple test program
+ */
+
+#include "dns-transp-common.h"
+
+#include <stdio.h>
+#include <inttypes.h>
+
 #define NMYLABELS 3
 static const char *const mylabels[NMYLABELS]={"z","example","com"};
 static const char prefix[]="PREFIX ";
 static const char suffix[]=" SUFFIX";
 static uint8_t packet[100];
 
-static struct dnsbitenc enc;
+static struct dnsdomainenc enc;
+static struct dnsdomaindec dec;
 
 int main(int argc, const char **argv) {
-    const char **argv_save=
+    dnsdomaindec_globalinit();
+
+    const char **argv_save=argv;
     memcpy(packet+sizeof(packet)-sizeof(suffix), suffix, sizeof(suffix));
-    dnsbitenc_start(&enc, packet+sizeof(prefix),
-                   sizeof(packet)-sizeof(prefix)-sizeof(suffix));
+    dnsdomainenc_start(&enc, packet+sizeof(prefix),
+                      sizeof(packet)-sizeof(prefix)-sizeof(suffix),
+                      NMYLABELS,mylabels);
     for (;;) {
        const char *arg = *++argv;
        if (!strcmp(arg,"b")) {
-           uint32_t val=strtoul(*++argv,0,0);
            int bits=atoi(*++argv);
-           dnsbitenc_addbits(&enc,val,bits);
+           uint32_t val=strtoul(*++argv,0,0);
+           dnsdomainenc_addbits(&enc,val,bits);
        } else if (!strcmp(arg,"w")) {
            uint32_t val=strtoul(*++argv,0,0);
-           dnsbitenc_addu32(&enc,val);
+           dnsdomainenc_addu32(&enc,val);
        } else if (!strcmp(arg,"r")) {
            const char *rest=*++argv;
            int l=strlen(rest);
-           int nofit=dnsbitenc_restbytes(&enc,rest,l);
+           int nofit=dnsdomainenc_restbytes(&enc,(const uint8_t*)rest,l);
            printf("FIT %.*s|%.*s\n",l-nofit,rest,nofit,rest+l-nofit);
            break;
        } else {
            abort();
        }
     }
-    const uint8_t *encoded=dnsbitenc_getresult(&enc);
-    const uint8_t *pktbegin=encoded-sizeof(prefix);
+    uint8_t *encoded=dnsdomainenc_getresult(&enc);
+    uint8_t *pktbegin=encoded-sizeof(prefix);
     memcpy(pktbegin,prefix,sizeof(prefix));
 
     const uint8_t *pr;
@@ -39,10 +52,10 @@ int main(int argc, const char **argv) {
        printf("%02x",*pr);
     printf("\n");
 
-    uint8_t domainend;
-    int r=dnsbitdec_start(&dec, pktbegin, packet+sizeof(packet),
-                         pktbegin+sizeof(prefix), NMYLABELS,mylabels,
-                         &domainend);
+    const uint8_t *domainend;
+    int r=dnsdomaindec_start(&dec, pktbegin, packet+sizeof(packet),
+                            pktbegin+sizeof(prefix), NMYLABELS,mylabels,
+                            &domainend);
     if (r) {
        printf("DEC ERROR %d\n",r);
        return 0;
@@ -51,15 +64,19 @@ int main(int argc, const char **argv) {
     for (;;) {
        const char *arg = *++argv;
        if (!strcmp(arg,"b")) {
-           ++argv;
            int bits=atoi(*++argv);
-           uint32_t 
-
-           if (nofit)
-               
-           } else 
-
-       const int c0=*arg++;
-       switch (c0) {
-       case 'b':
-           
+           ++argv;
+           uint32_t val=dnsdomaindec_getbits(&dec,bits);
+           printf("b %d 0x%"PRIx32, bits, val);
+       } else if (!strcmp(arg,"w")) {
+           uint32_t val=dnsdomaindec_getu32(&dec);
+           printf("w 0x%"PRIx32, val);
+       } else if (!strcmp(arg,"r")) {
+           uint8_t rbuf[MAX_DOMAIN_BYTES];
+           int l=dnsdomaindec_restbytes(&dec,rbuf);
+           printf("r %.*s",l,rbuf);
+       } else {
+           abort();
+       }
+    }
+}