home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / dns / rdataslab.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-09-17  |  4.3 KB  |  164 lines

  1. /*
  2.  * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
  3.  * Copyright (C) 1999-2002  Internet Software Consortium.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software for any
  6.  * purpose with or without fee is hereby granted, provided that the above
  7.  * copyright notice and this permission notice appear in all copies.
  8.  *
  9.  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  10.  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  11.  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  12.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  13.  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  14.  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15.  * PERFORMANCE OF THIS SOFTWARE.
  16.  */
  17.  
  18. /* $Id: rdataslab.h,v 1.25.18.2 2005/04/29 00:16:19 marka Exp $ */
  19.  
  20. #ifndef DNS_RDATASLAB_H
  21. #define DNS_RDATASLAB_H 1
  22.  
  23. /*! \file
  24.  * \brief
  25.  * Implements storage of rdatasets into slabs of memory.
  26.  *
  27.  * MP:
  28.  *\li    Clients of this module must impose any required synchronization.
  29.  *
  30.  * Reliability:
  31.  *\li    This module deals with low-level byte streams.  Errors in any of
  32.  *    the functions are likely to crash the server or corrupt memory.
  33.  *
  34.  *\li    If the caller passes invalid memory references, these functions are
  35.  *    likely to crash the server or corrupt memory.
  36.  *
  37.  * Resources:
  38.  *\li    None.
  39.  *
  40.  * Security:
  41.  *\li    None.
  42.  *
  43.  * Standards:
  44.  *\li    None.
  45.  */
  46.  
  47. /***
  48.  *** Imports
  49.  ***/
  50.  
  51. #include <isc/lang.h>
  52.  
  53. #include <dns/types.h>
  54.  
  55. ISC_LANG_BEGINDECLS
  56.  
  57. #define DNS_RDATASLAB_FORCE 0x1
  58. #define DNS_RDATASLAB_EXACT 0x2
  59.  
  60. /***
  61.  *** Functions
  62.  ***/
  63.  
  64. isc_result_t
  65. dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
  66.                isc_region_t *region, unsigned int reservelen);
  67. /*%<
  68.  * Slabify a rdataset.  The slab area will be allocated and returned
  69.  * in 'region'.
  70.  *
  71.  * Requires:
  72.  *\li    'rdataset' is valid.
  73.  *
  74.  * Ensures:
  75.  *\li    'region' will have base pointing to the start of allocated memory,
  76.  *    with the slabified region beginning at region->base + reservelen.
  77.  *    region->length contains the total length allocated.
  78.  *
  79.  * Returns:
  80.  *\li    ISC_R_SUCCESS        - successful completion
  81.  *\li    ISC_R_NOMEMORY        - no memory.
  82.  *\li    XXX others
  83.  */
  84.  
  85. void
  86. dns_rdataslab_tordataset(unsigned char *slab, unsigned int reservelen,
  87.              dns_rdataclass_t rdclass, dns_rdatatype_t rdtype,
  88.              dns_rdatatype_t covers, dns_ttl_t ttl,
  89.              dns_rdataset_t *rdataset);
  90. /*%<
  91.  * Construct an rdataset from a slab.
  92.  *
  93.  * Requires:
  94.  *\li    'slab' points to a slab.
  95.  *\li    'rdataset' is disassociated.
  96.  *
  97.  * Ensures:
  98.  *\li    'rdataset' is associated and points to a valid rdataest.
  99.  */
  100. unsigned int
  101. dns_rdataslab_size(unsigned char *slab, unsigned int reservelen);
  102. /*%<
  103.  * Return the total size of an rdataslab.
  104.  *
  105.  * Requires:
  106.  *\li    'slab' points to a slab.
  107.  *
  108.  * Returns:
  109.  *\li    The number of bytes in the slab, including the reservelen.
  110.  */
  111.  
  112. isc_result_t
  113. dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab,
  114.             unsigned int reservelen, isc_mem_t *mctx,
  115.             dns_rdataclass_t rdclass, dns_rdatatype_t type,
  116.             unsigned int flags, unsigned char **tslabp);
  117. /*%<
  118.  * Merge 'oslab' and 'nslab'.
  119.  */
  120.  
  121. isc_result_t
  122. dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
  123.                unsigned int reservelen, isc_mem_t *mctx,
  124.                dns_rdataclass_t rdclass, dns_rdatatype_t type,
  125.                unsigned int flags, unsigned char **tslabp);
  126. /*%<
  127.  * Subtract 'sslab' from 'mslab'.  If 'exact' is true then all elements
  128.  * of 'sslab' must exist in 'mslab'.
  129.  *
  130.  * XXX
  131.  * valid flags are DNS_RDATASLAB_EXACT
  132.  */
  133.  
  134. isc_boolean_t
  135. dns_rdataslab_equal(unsigned char *slab1, unsigned char *slab2,
  136.             unsigned int reservelen);
  137. /*%<
  138.  * Compare two rdataslabs for equality.  This does _not_ do a full
  139.  * DNSSEC comparison.
  140.  *
  141.  * Requires:
  142.  *\li    'slab1' and 'slab2' point to slabs.
  143.  *
  144.  * Returns:
  145.  *\li    ISC_TRUE if the slabs are equal, ISC_FALSE otherwise.
  146.  */
  147. isc_boolean_t
  148. dns_rdataslab_equalx(unsigned char *slab1, unsigned char *slab2,
  149.              unsigned int reservelen, dns_rdataclass_t rdclass, 
  150.              dns_rdatatype_t type);
  151. /*%<
  152.  * Compare two rdataslabs for DNSSEC equality. 
  153.  *
  154.  * Requires:
  155.  *\li    'slab1' and 'slab2' point to slabs.
  156.  *
  157.  * Returns:
  158.  *\li    ISC_TRUE if the slabs are equal, #ISC_FALSE otherwise.
  159.  */
  160.  
  161. ISC_LANG_ENDDECLS
  162.  
  163. #endif /* DNS_RDATASLAB_H */
  164.