⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdata.h

📁 非常好的dns解析软件
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1998-2003  Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. *//* $Id: rdata.h,v 1.60.18.3 2005/05/19 04:59:56 marka Exp $ */#ifndef DNS_RDATA_H#define DNS_RDATA_H 1/***** ***** Module Info *****//*! \file * \brief * Provides facilities for manipulating DNS rdata, including conversions to * and from wire format and text format. * * Given the large amount of rdata possible in a nameserver, it was important * to come up with a very efficient way of storing rdata, but at the same * time allow it to be manipulated. * * The decision was to store rdata in uncompressed wire format, * and not to make it a fully abstracted object; i.e. certain parts of the * server know rdata is stored that way.  This saves a lot of memory, and * makes adding rdata to messages easy.  Having much of the server know * the representation would be perilous, and we certainly don't want each * user of rdata to be manipulating such a low-level structure.  This is * where the rdata module comes in.  The module allows rdata handles to be * created and attached to uncompressed wire format regions.  All rdata * operations and conversions are done through these handles. * * Implementation Notes: * *\li	The routines in this module are expected to be synthesized by the *	build process from a set of source files, one per rdata type.  For *	portability, it's probably best that the building be done by a C *	program.  Adding a new rdata type will be a simple matter of adding *	a file to a directory and rebuilding the server.  *All* knowlege of *	the format of a particular rdata type is in this file. * * MP: *\li	Clients of this module must impose any required synchronization. * * Reliability: *\li	This module deals with low-level byte streams.  Errors in any of *	the functions are likely to crash the server or corrupt memory. * *\li	Rdata is typed, and the caller must know what type of rdata it has. *	A caller that gets this wrong could crash the server. * *\li	The fromstruct() and tostruct() routines use a void * pointer to *	represent the structure.  The caller must ensure that it passes a *	pointer to the appropriate type, or the server could crash or memory *	could be corrupted. * * Resources: *\li	None. * * Security: * *\li	*** WARNING *** *	dns_rdata_fromwire() deals with raw network data.  An error in *	this routine could result in the failure or hijacking of the server. * * Standards: *\li	RFC1035 *\li	Draft EDNS0 (0) *\li	Draft EDNS1 (0) *\li	Draft Binary Labels (2) *\li	Draft Local Compression (1) *\li	Various RFCs for particular types; these will be documented in the *	 sources files of the types. * *//*** *** Imports ***/#include <isc/lang.h>#include <dns/types.h>#include <dns/name.h>ISC_LANG_BEGINDECLS/*** *** Types ***//*% ***** An 'rdata' is a handle to a binary region.  The handle has an RR ***** class and type, and the data in the binary region is in the format ***** of the given class and type. *****//*% * Clients are strongly discouraged from using this type directly, with * the exception of the 'link' field which may be used directly for whatever * purpose the client desires. */struct dns_rdata {	unsigned char *			data;	unsigned int			length;	dns_rdataclass_t		rdclass;	dns_rdatatype_t			type;	unsigned int			flags;	ISC_LINK(dns_rdata_t)		link;};#define DNS_RDATA_INIT { NULL, 0, 0, 0, 0, {(void*)(-1), (void *)(-1)}}#define DNS_RDATA_UPDATE	0x0001		/*%< update pseudo record *//* * Flags affecting rdata formatting style.  Flags 0xFFFF0000 * are used by masterfile-level formatting and defined elsewhere. * See additional comments at dns_rdata_tofmttext(). *//*% Split the rdata into multiple lines to try to keep it within the "width". */#define DNS_STYLEFLAG_MULTILINE		0x00000001U/*% Output explanatory comments. */#define DNS_STYLEFLAG_COMMENT		0x00000002U#define DNS_RDATA_DOWNCASE		DNS_NAME_DOWNCASE#define DNS_RDATA_CHECKNAMES		DNS_NAME_CHECKNAMES#define DNS_RDATA_CHECKNAMESFAIL	DNS_NAME_CHECKNAMESFAIL#define DNS_RDATA_CHECKREVERSE		DNS_NAME_CHECKREVERSE#define DNS_RDATA_CHECKMX		DNS_NAME_CHECKMX#define DNS_RDATA_CHECKMXFAIL		DNS_NAME_CHECKMXFAIL/*** *** Initialization ***/voiddns_rdata_init(dns_rdata_t *rdata);/*%< * Make 'rdata' empty. * * Requires: *	'rdata' is a valid rdata (i.e. not NULL, points to a struct dns_rdata) */voiddns_rdata_reset(dns_rdata_t *rdata);/*%< * Make 'rdata' empty. * * Requires: *\li	'rdata' is a previously initialized rdata and is not linked. */voiddns_rdata_clone(const dns_rdata_t *src, dns_rdata_t *target);/*%< * Clone 'target' from 'src'. * * Requires: *\li	'src' to be initialized. *\li	'target' to be initialized. *//*** *** Comparisons ***/intdns_rdata_compare(const dns_rdata_t *rdata1, const dns_rdata_t *rdata2);/*%< * Determine the relative ordering under the DNSSEC order relation of * 'rdata1' and 'rdata2'. * * Requires: * *\li	'rdata1' is a valid, non-empty rdata * *\li	'rdata2' is a valid, non-empty rdata * * Returns: *\li	< 0		'rdata1' is less than 'rdata2' *\li	0		'rdata1' is equal to 'rdata2' *\li	> 0		'rdata1' is greater than 'rdata2' *//*** *** Conversions ***/voiddns_rdata_fromregion(dns_rdata_t *rdata, dns_rdataclass_t rdclass,		     dns_rdatatype_t type, isc_region_t *r);/*%< * Make 'rdata' refer to region 'r'. * * Requires: * *\li	The data in 'r' is properly formatted for whatever type it is. */voiddns_rdata_toregion(const dns_rdata_t *rdata, isc_region_t *r);/*%< * Make 'r' refer to 'rdata'. */isc_result_tdns_rdata_fromwire(dns_rdata_t *rdata, dns_rdataclass_t rdclass,		   dns_rdatatype_t type, isc_buffer_t *source,		   dns_decompress_t *dctx, unsigned int options,		   isc_buffer_t *target);/*%< * Copy the possibly-compressed rdata at source into the target region. * * Notes: *\li	Name decompression policy is controlled by 'dctx'. * *	'options' *\li	DNS_RDATA_DOWNCASE	downcase domain names when they are copied *				into target. * * Requires: * *\li	'rdclass' and 'type' are valid. * *\li	'source' is a valid buffer, and the active region of 'source' *	references the rdata to be processed. * *\li	'target' is a valid buffer. * *\li	'dctx' is a valid decompression context. * * Ensures, *	if result is success: *	\li 	If 'rdata' is not NULL, it is attached to the target. *	\li	The conditions dns_name_fromwire() ensures for names hold *		for all names in the rdata. *	\li	The current location in source is advanced, and the used space *		in target is updated. * * Result: *\li	Success *\li	Any non-success status from dns_name_fromwire() *\li	Various 'Bad Form' class failures depending on class and type *\li	Bad Form: Input too short *\li	Resource Limit: Not enough space */isc_result_tdns_rdata_towire(dns_rdata_t *rdata, dns_compress_t *cctx,		 isc_buffer_t *target);/*%< * Convert 'rdata' into wire format, compressing it as specified by the * compression context 'cctx', and storing the result in 'target'. * * Notes: *\li	If the compression context allows global compression, then the *	global compression table may be updated. * * Requires: *\li	'rdata' is a valid, non-empty rdata * *\li	target is a valid buffer * *\li	Any offsets specified in a global compression table are valid *	for target. * * Ensures, *	if the result is success: *	\li	The used space in target is updated. * * Returns: *\li	Success *\li	Any non-success status from dns_name_towire() *\li	Resource Limit: Not enough space */isc_result_tdns_rdata_fromtext(dns_rdata_t *rdata, dns_rdataclass_t rdclass,		   dns_rdatatype_t type, isc_lex_t *lexer, dns_name_t *origin,		   unsigned int options, isc_mem_t *mctx,		   isc_buffer_t *target, dns_rdatacallbacks_t *callbacks);/*%< * Convert the textual representation of a DNS rdata into uncompressed wire * form stored in the target region.  Tokens constituting the text of the rdata * are taken from 'lexer'. * * Notes: *\li	Relative domain names in the rdata will have 'origin' appended to them. *	A NULL origin implies "origin == dns_rootname". * * *	'options' *\li	DNS_RDATA_DOWNCASE	downcase domain names when they are copied *				into target. *\li	DNS_RDATA_CHECKNAMES 	perform checknames checks. *\li	DNS_RDATA_CHECKNAMESFAIL fail if the checknames check fail.  If *				not set a warning will be issued. *\li	DNS_RDATA_CHECKREVERSE  this should set if the owner name ends *				in IP6.ARPA, IP6.INT or IN-ADDR.ARPA. * * Requires: * *\li	'rdclass' and 'type' are valid. * *\li	'lexer' is a valid isc_lex_t. * *\li	'mctx' is a valid isc_mem_t. * *\li	'target' is a valid region. * *\li	'origin' if non NULL it must be absolute. *	 *\li	'callbacks' to be NULL or callbacks->warn and callbacks->error be *	initialized. * * Ensures,  *	if result is success: *\li	 	If 'rdata' is not NULL, it is attached to the target. *\li		The conditions dns_name_fromtext() ensures for names hold *		for all names in the rdata. *\li		The used space in target is updated. * * Result: *\li	Success *\li	Translated result codes from isc_lex_gettoken *\li	Various 'Bad Form' class failures depending on class and type *\li	Bad Form: Input too short *\li	Resource Limit: Not enough space *\li	Resource Limit: Not enough memory */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -