1/* 2 * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 1999-2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or 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: fixedname.h,v 1.19 2007/06/19 23:47:16 tbox Exp $ */ 19 20#ifndef DNS_FIXEDNAME_H 21#define DNS_FIXEDNAME_H 1 22 23/***** 24 ***** Module Info 25 *****/ 26 27/*! \file dns/fixedname.h 28 * \brief 29 * Fixed-size Names 30 * 31 * dns_fixedname_t is a convenience type containing a name, an offsets table, 32 * and a dedicated buffer big enough for the longest possible name. 33 * 34 * MP: 35 *\li The caller must ensure any required synchronization. 36 * 37 * Reliability: 38 *\li No anticipated impact. 39 * 40 * Resources: 41 *\li Per dns_fixedname_t: 42 *\code 43 * sizeof(dns_name_t) + sizeof(dns_offsets_t) + 44 * sizeof(isc_buffer_t) + 255 bytes + structure padding 45 *\endcode 46 * 47 * Security: 48 *\li No anticipated impact. 49 * 50 * Standards: 51 *\li None. 52 */ 53 54/***** 55 ***** Imports 56 *****/ 57 58#include <isc/buffer.h> 59 60#include <dns/name.h> 61 62/***** 63 ***** Types 64 *****/ 65 66struct dns_fixedname { 67 dns_name_t name; 68 dns_offsets_t offsets; 69 isc_buffer_t buffer; 70 unsigned char data[DNS_NAME_MAXWIRE]; 71}; 72 73#define dns_fixedname_init(fn) \ 74 do { \ 75 dns_name_init(&((fn)->name), (fn)->offsets); \ 76 isc_buffer_init(&((fn)->buffer), (fn)->data, \ 77 DNS_NAME_MAXWIRE); \ 78 dns_name_setbuffer(&((fn)->name), &((fn)->buffer)); \ 79 } while (0) 80 81#define dns_fixedname_invalidate(fn) \ 82 dns_name_invalidate(&((fn)->name)) 83 84#define dns_fixedname_name(fn) (&((fn)->name)) 85 86#endif /* DNS_FIXEDNAME_H */ 87