-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 */
* 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 */