5 #include "dns-transp-common.h"
9 static const char *const mylabels[NMYLABELS]={"z","example","com"};
10 static const char prefix[6]="PREFIX";
11 static const char suffix[6]="SUFFIX";
12 static uint8_t packet[100];
14 static struct dnsdomainenc enc;
15 static struct dnsdomaindec dec;
17 int main(int argc, const char **argv) {
18 const char **argv_save=argv;
19 dnsdomaindec_globalinit();
21 memcpy(packet+sizeof(packet)-sizeof(suffix), suffix, sizeof(suffix));
22 dnsdomainenc_start(&enc, packet+sizeof(prefix),
23 sizeof(packet)-sizeof(prefix)-sizeof(suffix),
26 const char *arg = *++argv;
27 if (!strcmp(arg,"b")) {
28 uint32_t val=strtoul(*++argv,0,0);
29 int bits=atoi(*++argv);
30 dnsdomainenc_addbits(&enc,val,bits);
31 } else if (!strcmp(arg,"w")) {
32 uint32_t val=strtoul(*++argv,0,0);
33 dnsdomainenc_addu32(&enc,val);
34 } else if (!strcmp(arg,"r")) {
35 const char *rest=*++argv;
37 int nofit=dnsdomainenc_restbytes(&enc,(const uint8_t*)rest,l);
38 printf("FIT %.*s|%.*s\n",l-nofit,rest,nofit,rest+l-nofit);
44 uint8_t *encoded=dnsdomainenc_getresult(&enc);
45 uint8_t *pktbegin=encoded-sizeof(prefix);
46 memcpy(pktbegin,prefix,sizeof(prefix));
48 FILE *hexdump=popen("hexdump -C","w"); assert(hexdump);
49 fwrite(pktbegin,1,packet+sizeof(packet)-pktbegin,hexdump);
50 int r=pclose(hexdump); assert(!r);
52 const uint8_t *domainend;
53 r=dnsdomaindec_start(&dec, pktbegin, packet+sizeof(packet),
54 pktbegin+sizeof(prefix), NMYLABELS,mylabels,
57 printf("DEC ERROR %d\n",r);
62 const char *arg = *++argv;
63 if (!strcmp(arg,"b")) {
65 int bits=atoi(*++argv);
66 uint32_t val=dnsdomaindec_getbits(&dec,bits);
67 printf("b %d 0x%"PRIx32"\n", bits, val);
68 } else if (!strcmp(arg,"w")) {
70 uint32_t val=dnsdomaindec_getu32(&dec);
71 printf("w 0x%"PRIx32"\n", val);
72 } else if (!strcmp(arg,"r")) {
74 uint8_t rbuf[MAX_DOMAIN_BYTES];
75 int l=dnsdomaindec_restbytes(&dec,rbuf);
76 printf("r \"%.*s\"\n",l,rbuf);