5 #include "dns-transp-common.h"
11 static const char *const mylabels[NMYLABELS]={"z","example","com"};
12 static const char prefix[]="PREFIX ";
13 static const char suffix[]=" SUFFIX";
14 static uint8_t packet[100];
16 static struct dnsdomainenc enc;
17 static struct dnsdomaindec dec;
19 int main(int argc, const char **argv) {
20 dnsdomaindec_globalinit();
22 const char **argv_save=argv;
23 memcpy(packet+sizeof(packet)-sizeof(suffix), suffix, sizeof(suffix));
24 dnsdomainenc_start(&enc, packet+sizeof(prefix),
25 sizeof(packet)-sizeof(prefix)-sizeof(suffix),
28 const char *arg = *++argv;
29 if (!strcmp(arg,"b")) {
30 int bits=atoi(*++argv);
31 uint32_t val=strtoul(*++argv,0,0);
32 dnsdomainenc_addbits(&enc,val,bits);
33 } else if (!strcmp(arg,"w")) {
34 uint32_t val=strtoul(*++argv,0,0);
35 dnsdomainenc_addu32(&enc,val);
36 } else if (!strcmp(arg,"r")) {
37 const char *rest=*++argv;
39 int nofit=dnsdomainenc_restbytes(&enc,(const uint8_t*)rest,l);
40 printf("FIT %.*s|%.*s\n",l-nofit,rest,nofit,rest+l-nofit);
46 uint8_t *encoded=dnsdomainenc_getresult(&enc);
47 uint8_t *pktbegin=encoded-sizeof(prefix);
48 memcpy(pktbegin,prefix,sizeof(prefix));
51 for (pr=pktbegin; pr<packet+sizeof(packet); pr++)
55 const uint8_t *domainend;
56 int r=dnsdomaindec_start(&dec, pktbegin, packet+sizeof(packet),
57 pktbegin+sizeof(prefix), NMYLABELS,mylabels,
60 printf("DEC ERROR %d\n",r);
65 const char *arg = *++argv;
66 if (!strcmp(arg,"b")) {
67 int bits=atoi(*++argv);
69 uint32_t val=dnsdomaindec_getbits(&dec,bits);
70 printf("b %d 0x%"PRIx32, bits, val);
71 } else if (!strcmp(arg,"w")) {
72 uint32_t val=dnsdomaindec_getu32(&dec);
73 printf("w 0x%"PRIx32, val);
74 } else if (!strcmp(arg,"r")) {
75 uint8_t rbuf[MAX_DOMAIN_BYTES];
76 int l=dnsdomaindec_restbytes(&dec,rbuf);
77 printf("r %.*s",l,rbuf);