chiark / gitweb /
WIP dns transport packets etc.
[secnet.git] / dns-bitenc-test.c
index 19536ac1aab55676b3fa6fdf0e3e6750a55ea5a1..4191eeb669422cda9dbbb576b4971361ea004c48 100644 (file)
@@ -4,22 +4,20 @@
 
 #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 const char prefix[6]="PREFIX";
+static const char suffix[6]="SUFFIX";
 static uint8_t packet[100];
 
 static struct dnsdomainenc enc;
 static struct dnsdomaindec dec;
 
 int main(int argc, const char **argv) {
+    const char **argv_save=argv;
     dnsdomaindec_globalinit();
 
-    const char **argv_save=argv;
     memcpy(packet+sizeof(packet)-sizeof(suffix), suffix, sizeof(suffix));
     dnsdomainenc_start(&enc, packet+sizeof(prefix),
                       sizeof(packet)-sizeof(prefix)-sizeof(suffix),
@@ -27,8 +25,8 @@ int main(int argc, const char **argv) {
     for (;;) {
        const char *arg = *++argv;
        if (!strcmp(arg,"b")) {
-           int bits=atoi(*++argv);
            uint32_t val=strtoul(*++argv,0,0);
+           int bits=atoi(*++argv);
            dnsdomainenc_addbits(&enc,val,bits);
        } else if (!strcmp(arg,"w")) {
            uint32_t val=strtoul(*++argv,0,0);
@@ -47,15 +45,14 @@ int main(int argc, const char **argv) {
     uint8_t *pktbegin=encoded-sizeof(prefix);
     memcpy(pktbegin,prefix,sizeof(prefix));
 
-    const uint8_t *pr;
-    for (pr=pktbegin; pr<packet+sizeof(packet); pr++)
-       printf(" %02x",*pr);
-    printf("\n");
+    FILE *hexdump=popen("hexdump -C","w");  assert(hexdump);
+    fwrite(pktbegin,1,packet+sizeof(packet)-pktbegin,hexdump);
+    int r=pclose(hexdump);  assert(!r);
 
     const uint8_t *domainend;
-    int r=dnsdomaindec_start(&dec, pktbegin, packet+sizeof(packet),
-                            pktbegin+sizeof(prefix), NMYLABELS,mylabels,
-                            &domainend);
+    r=dnsdomaindec_start(&dec, pktbegin, packet+sizeof(packet),
+                        pktbegin+sizeof(prefix), NMYLABELS,mylabels,
+                        &domainend);
     if (r) {
        printf("DEC ERROR %d\n",r);
        return 0;
@@ -64,19 +61,23 @@ int main(int argc, const char **argv) {
     for (;;) {
        const char *arg = *++argv;
        if (!strcmp(arg,"b")) {
-           int bits=atoi(*++argv);
            ++argv;
+           int bits=atoi(*++argv);
            uint32_t val=dnsdomaindec_getbits(&dec,bits);
-           printf("b %d 0x%"PRIx32, bits, val);
+           printf("b %d 0x%"PRIx32"\n", bits, val);
        } else if (!strcmp(arg,"w")) {
+           ++argv;
            uint32_t val=dnsdomaindec_getu32(&dec);
-           printf("w 0x%"PRIx32, val);
+           printf("w 0x%"PRIx32"\n", val);
        } else if (!strcmp(arg,"r")) {
+           ++argv;
            uint8_t rbuf[MAX_DOMAIN_BYTES];
            int l=dnsdomaindec_restbytes(&dec,rbuf);
-           printf("r %.*s",l,rbuf);
+           printf("r \"%.*s\"\n",l,rbuf);
+           break;
        } else {
            abort();
        }
     }
+    return 0;
 }