compress.h revision 518be7faab2498c795e6dc9bb25ac10ca38b3a8d
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley/*
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * Copyright (C) 1999 Internet Software Consortium.
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley *
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * Permission to use, copy, modify, and distribute this software for any
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * purpose with or without fee is hereby granted, provided that the above
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * copyright notice and this permission notice appear in all copies.
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley *
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * SOFTWARE.
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#ifndef DNS_COMPRESS_H
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#define DNS_COMPRESS_H 1
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#include <isc/mem.h>
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#include <dns/types.h>
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews#include <dns/rbt.h>
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews#define DNS_COMPRESS_NONE 0x00 /* no compression */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#define DNS_COMPRESS_GLOBAL14 0x01 /* "normal" compression. */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#define DNS_COMPRESS_GLOBAL16 0x02 /* 16-bit global comp. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews#define DNS_COMPRESS_GLOBAL 0x03 /* all global comp. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews#define DNS_COMPRESS_LOCAL 0x04 /* local compression. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews#define DNS_COMPRESS_ALL 0x07 /* all compression. */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley/*
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * XXX An API for manipulating these structures will be forthcoming.
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * Also magic numbers, _init() and _invalidate(), etc. At that time,
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley * direct manipulation of the structures will be strongly discouraged.
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halleystruct dns_compress {
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews unsigned int magic; /* Magic number. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews unsigned int allowed; /* Allowed methods. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews unsigned int rdata; /* Start of local rdata. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews isc_boolean_t global16; /* 16 bit offsets allowed. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews int edns; /* Edns version or -1. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews dns_rbt_t *local; /* Local RBT. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews dns_rbt_t *global; /* Global RBT. */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews isc_mem_t *mctx; /* Memeory context. */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley};
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halleystruct dns_decompress {
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews unsigned int magic; /* Magic number. */
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews unsigned int allowed; /* Allowed methods. */
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews unsigned int rdata; /* Start of local rdata. */
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews int edns; /* Edns version or -1. */
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews isc_boolean_t strict; /* Strict checking */
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews dns_name_t owner_name; /* For local compression. */
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley};
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_result_t dns_compress_init(dns_compress_t *cctx, int edns,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews isc_mem_t *mctx);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Inialise the compression context structure pointed to by 'cctx'.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' is a valid dns_compress_t structure.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'mctx' is a initalised memory context.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Ensures:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * cctx->global is initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Returns:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * DNS_R_SUCCESS
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * failures from dns_rbt_create()
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_result_t
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_localinit(dns_compress_t *cctx, dns_name_t *owner,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews isc_buffer_t *target);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Initalise 'cctx->local'.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * All compression pointers pointing to logical labels in owner.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Record start of rdata 'target->used'.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Ensures:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx->local' is valid.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' initaliased
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx->local' be NULL
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'owner' is a absolute name
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'target' is a valid buffer
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Returns:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * DNS_R_SUCCESS
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * failures from dns_rbt_create()
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsvoid
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_invalidate(dns_compress_t *cctx);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Invalidate the compression structure pointed to by cctx.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Destroys 'cctx->glocal' and 'cctx->local' RBT.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsvoid
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_localinvalidate(dns_compress_t *cctx);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Destroys 'cctx->local'.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsvoid
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_setmethods(dns_compress_t *cctx, unsigned int allowed);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Sets allowed compression methods.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsunsigned int
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_getmethods(dns_compress_t *cctx);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Gets allowed compression methods.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Returns:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * allowed compression bitmap.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsint
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_getedns(dns_compress_t *cctx);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Gets edns value.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Returns:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * -1 .. 255
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsisc_boolean_t
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_findglobal(dns_compress_t *cctx, dns_name_t *name,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews dns_name_t *prefix, dns_name_t *suffix,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews isc_uint16_t *offset, isc_buffer_t *workspace);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Finds longest possible match of 'name' in the global compression
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * RBT. Workspace needs to be large enough to hold 'name' when split
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * in two (length->name + 3).
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'name' to be a absolute name.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'prefix' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'suffix' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'offset' to point it a isc_uint16_t.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'workspace' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Ensures:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'prefix', 'suffix' and 'offset' are valid is ISC_TRUE is
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * returned.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Returns:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * ISC_TRUE / ISC_FALSE
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsisc_boolean_t
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_findlocal(dns_compress_t *cctx, dns_name_t *name,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews dns_name_t *prefix, dns_name_t *suffix,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews isc_uint16_t *offset, isc_buffer_t *workspace);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Finds longest possible match of 'name' in the local compression
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * RBT. Workspace needs to be large enough to hold 'name' when split
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * in two (length->name + 3).
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'name' to be a absolute name.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'prefix' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'suffix' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'offset' to point it a isc_uint16_t.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'workspace' to be initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Ensures:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'prefix', 'suffix' and 'offset' are valid is ISC_TRUE is
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * returned.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Returns:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * ISC_TRUE / ISC_FALSE
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsvoid
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_add(dns_compress_t *cctx, dns_name_t *prefix,
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews dns_name_t *suffix, isc_uint16_t offset);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Add compression pointers for labels in prefix to RBT's.
518be7faab2498c795e6dc9bb25ac10ca38b3a8dMark Andrews * If 'prefix' is absolute 'suffix' must be NULL.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' initalised
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'prefix' to be initalised
518be7faab2498c795e6dc9bb25ac10ca38b3a8dMark Andrews * 'suffix' to be initalised or NULL
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsvoid
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrewsdns_compress_backout(dns_compress_t *cctx, isc_uint16_t offset);
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews/*
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Remove any compression pointers from global RBT >= offset.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews *
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * Requires:
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews * 'cctx' is initalised.
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews */
52637f592f705ca93fadc218e403fd55e8ce4aeaMark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsvoid
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_init(dns_decompress_t *dctx, int edns, isc_boolean_t strict);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Initalises 'dctx'.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Records 'edns' and 'strict' into the structure.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be a valid pointer.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsvoid
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_localinit(dns_decompress_t *dctx, dns_name_t *name,
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews isc_buffer_t *source);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Initalises 'dctx->name' from name.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Records 'source->current' as the start of the rdata section.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'name' to be absolute
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'source' to be a BINARY buffer.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsvoid
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_invalidate(dns_decompress_t *dctx);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Invalidates 'dctx'.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsvoid
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_localinvalidate(dns_decompress_t *dctx);
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Invalidates 'dctx->name'.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsvoid
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_setmethods(dns_decompress_t *dctx, unsigned int allowed);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Sets 'dctx->allowed' to 'allowed'.
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsunsigned int
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_getmethods(dns_decompress_t *dctx);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Returns 'dctx->allowed'
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsint
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_edns(dns_decompress_t *dctx);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Returns 'dctx->edns'
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsisc_boolean_t
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrewsdns_decompress_strict(dns_decompress_t *dctx);
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews/*
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Returns 'dctx->strict'
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews *
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * Requires:
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews * 'dctx' to be initalised
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews */
d0221bfa6a08f7b284b231886928aa5d8ac87fc2Mark Andrews
985687b4e080182c1a3a2173df02b94a5b78b24fBob Halley#endif /* DNS_COMPRESS_H */