chiark / gitweb /
WIP DNS bitenc test compiles
[secnet.git] / dns-transp-common.h
index d2ad5aa5a730717b113eb72073356ee06ffdb7ec..b4b718aeb623f681ca040ce673c4d37533fe0552 100644 (file)
@@ -1,6 +1,33 @@
 
-struct dnsbitenc {
-    /* private for dnsbitenc_... functions; do not access direcctly */
+#ifndef dns_transp_common_h
+#define dns_transp_common_h
+
+#define MAX_DOMAIN_BYTES 255
+
+
+#define RCODE_NOERROR  0
+#define RCODE_FORMERR  1
+#define RCODE_SERVFAIL 2
+#define RCODE_NXDOMAIN 3
+#define RCODE_REFUSED  5
+
+#define FAKERCODE_NOTAUTH -1
+#define FAKERCODE_MYDOMAINTOOLONG -2
+#define FAKERCODE_MYDOMAINLABELTOOLONG -3
+
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+
+void dnsdomaindec_globalinit(void);
+
+
+struct dnsdomainenc {
+    /* private for dnsdomainenc_... functions; do not access direcctly */
     uint32_t pending;
     int npending; /* never more than 4 unless we're in the middle */
     uint8_t *out, *bufstop; /* counts backwards */
@@ -15,18 +42,44 @@ struct dnsbitenc {
  *   getresult
  */
 
-void dnsbitenc_start(struct dnsbitenc *be, uint8_t *buf, int buflen);
+int dnsdomainenc_start(struct dnsdomainenc *be, uint8_t *buf, int buflen,
+                      int mydompathlen, const char *const mydompath[]);
+    /* returns -1 if mydompath is too long somehow */
 
-void dnsbitenc_addbits(struct dnsbitenc *be, uint32_t val, int nbits);
+void dnsdomainenc_addbits(struct dnsdomainenc *be, uint32_t val, int nbits);
     /* adds the bottom nbits bits of val; must be enough space; nbits<=28 */
-void dnsbitenc_addu32(struct dnsbitenc *be, uint32_t val);
+void dnsdomainenc_addu32(struct dnsdomainenc *be, uint32_t val);
     /* must be enough space */
 
-int dnsbitenc_restbytes(struct dnsbitenc *be, uint8_t *bytes, int qty);
+int dnsdomainenc_restbytes(struct dnsdomainenc *be,
+                          const uint8_t *bytes, int avail);
     /* returns number of bytes which did not fit */
 
-uint8_t *dnsbitenc_getresult(struct dnsbitenc *be);
+uint8_t *dnsdomainenc_getresult(struct dnsdomainenc *be);
     /* returns pointer into caller-supplied buffer; we have used
      * bytes from the result to the end (so the caller needs to remember
      * the buffer len to know what the encoded length is */
-fixme needs to add mylabels too
+
+
+struct dnsdomaindec {
+    /* private for dnsbitdec_... functions; do not access direcctly */
+    uint8_t databuf[MAX_DOMAIN_BYTES];
+    const uint8_t *in;
+    uint32_t pending;
+    int npending;
+};
+
+int dnsdomaindec_start(struct dnsdomaindec *bd, const uint8_t *packet,
+                      const uint8_t *endpacket, const uint8_t *domain,
+                      int mydompathlen, const char *const mydompath[],
+                      const uint8_t **domain_end_r);
+
+uint32_t dnsdomaindec_getbits(struct dnsdomaindec *bd, int nbits);
+
+uint32_t dnsdomaindec_getu32(struct dnsdomaindec *bd);
+
+int dnsdomaindec_restbytes(struct dnsdomaindec *bd,
+                          uint8_t outbuf[MAX_DOMAIN_BYTES]);
+
+
+#endif /* dns_transp_common_h */