From c2ed2c844c48551c9a852f86b65ba8678ed93486 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 21 Jul 2011 20:02:39 +0100 Subject: [PATCH] WIP dns packet en/decoding test program --- dns-bitenc-test.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 dns-bitenc-test.c diff --git a/dns-bitenc-test.c b/dns-bitenc-test.c new file mode 100644 index 0000000..5d09cfb --- /dev/null +++ b/dns-bitenc-test.c @@ -0,0 +1,65 @@ +#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; + +int main(int argc, const char **argv) { + const char **argv_save= + memcpy(packet+sizeof(packet)-sizeof(suffix), suffix, sizeof(suffix)); + dnsbitenc_start(&enc, packet+sizeof(prefix), + sizeof(packet)-sizeof(prefix)-sizeof(suffix)); + 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); + } else if (!strcmp(arg,"w")) { + uint32_t val=strtoul(*++argv,0,0); + dnsbitenc_addu32(&enc,val); + } else if (!strcmp(arg,"r")) { + const char *rest=*++argv; + int l=strlen(rest); + int nofit=dnsbitenc_restbytes(&enc,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); + memcpy(pktbegin,prefix,sizeof(prefix)); + + const uint8_t *pr; + for (pr=pktbegin; pr