#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),
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);
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;
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;
}