compress.h revision 3ddd814a97de1d152ba0913c592d6e6dc83d38a6
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Copyright (C) 1999 Internet Software Consortium.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Permission to use, copy, modify, and distribute this software for any
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson * purpose with or without fee is hereby granted, provided that the above
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson * copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define DNS_COMPRESS_NONE 0x00 /* no compression */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define DNS_COMPRESS_GLOBAL14 0x01 /* "normal" compression. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define DNS_COMPRESS_GLOBAL16 0x02 /* 16-bit global comp. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define DNS_COMPRESS_GLOBAL 0x03 /* all global comp. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define DNS_COMPRESS_LOCAL 0x04 /* local compression. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define DNS_COMPRESS_ALL 0x07 /* all compression. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * XXX An API for manipulating these structures will be forthcoming.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Also magic numbers, _init() and _invalidate(), etc. At that time,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * direct manipulation of the structures will be strongly discouraged.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_boolean_t global16; /* 16 bit offsets allowed. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dns_name_t owner_name; /* For local compression. */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinisc_result_t dns_compress_init(dns_compress_t *cctx, int edns,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Inialise the compression context structure pointed to by 'cctx'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' is a valid dns_compress_t structure.
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews * 'mctx' is a initalised memory context.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * cctx->global is initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * DNS_R_SUCCESS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * failures from dns_rbt_create()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_localinit(dns_compress_t *cctx, dns_name_t *owner,
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson * Initalise 'cctx->local'.
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson * All compression pointers pointing to logical labels in owner.
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson * Record start of rdata 'target->used'.
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson * 'cctx->local' is valid.
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson * 'cctx' initaliased
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx->local' be NULL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'owner' is a absolute name
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'target' is a valid buffer
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * DNS_R_SUCCESS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * failures from dns_rbt_create()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Invalidate the compression structure pointed to by cctx.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Destroys 'cctx->glocal' and 'cctx->local' RBT.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_localinvalidate(dns_compress_t *cctx);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Destroys 'cctx->local'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_setmethods(dns_compress_t *cctx, unsigned int allowed);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Sets allowed compression methods.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Gets allowed compression methods.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * allowed compression bitmap.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Gets edns value.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_findglobal(dns_compress_t *cctx, dns_name_t *name,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Finds longest possible match of 'name' in the global compression
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * RBT. Workspace needs to be large enough to hold 'name' when split
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * in two (length->name + 3).
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'name' to be a absolute name.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'prefix' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'suffix' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'offset' to point it a isc_uint16_t.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'workspace' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'prefix', 'suffix' and 'offset' are valid is ISC_TRUE is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * ISC_TRUE / ISC_FALSE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_findlocal(dns_compress_t *cctx, dns_name_t *name,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Finds longest possible match of 'name' in the local compression
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * RBT. Workspace needs to be large enough to hold 'name' when split
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * in two (length->name + 3).
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'name' to be a absolute name.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'prefix' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'suffix' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'offset' to point it a isc_uint16_t.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'workspace' to be initalised.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'prefix', 'suffix' and 'offset' are valid is ISC_TRUE is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * ISC_TRUE / ISC_FALSE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_add(dns_compress_t *cctx, dns_name_t *prefix,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Add compression pointers for labels in prefix to RBT's.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * If 'prefix' is absolute 'suffix' must be NULL otherwise
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * suffix must be absolute.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'local' indicates that the domain name at offset contains
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * a local compression pointer.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' initalised
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews * 'prefix' to be initalised
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'suffix' to be initalised or NULL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_compress_rollback(dns_compress_t *cctx, isc_uint16_t offset);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Remove any compression pointers from global RBT >= offset.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * 'cctx' is initalised.