--- /dev/null
+#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<packet+sizeof(packet); pr++)
+ printf("%02x",*pr);
+ printf("\n");
+
+ uint8_t domainend;
+ int r=dnsbitdec_start(&dec, pktbegin, packet+sizeof(packet),
+ pktbegin+sizeof(prefix), NMYLABELS,mylabels,
+ &domainend);
+ if (r) {
+ printf("DEC ERROR %d\n",r);
+ return 0;
+ }
+ argv=argv_save;
+ for (;;) {
+ const char *arg = *++argv;
+ if (!strcmp(arg,"b")) {
+ ++argv;
+ int bits=atoi(*++argv);
+ uint32_t
+
+ if (nofit)
+
+ } else
+
+ const int c0=*arg++;
+ switch (c0) {
+ case 'b':
+