📄 lwres.h
字号:
/* * Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000, 2001 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: lwres.h,v 1.49.12.3 2004/03/08 09:05:11 marka Exp $ */#ifndef LWRES_LWRES_H#define LWRES_LWRES_H 1#include <stdio.h>#include <lwres/context.h>#include <lwres/lang.h>#include <lwres/list.h>#include <lwres/lwpacket.h>#include <lwres/platform.h>/* * Design notes: * * Each opcode has two structures and three functions which operate on each * structure. For example, using the "no operation/ping" opcode as an * example: * * lwres_nooprequest_t: * * lwres_nooprequest_render() takes a lwres_nooprequest_t and * and renders it into wire format, storing the allocated * buffer information in a passed-in buffer. When this buffer * is no longer needed, it must be freed by * lwres_context_freemem(). All other memory used by the * caller must be freed manually, including the * lwres_nooprequest_t passed in. * * lwres_nooprequest_parse() takes a wire format message and * breaks it out into a lwres_nooprequest_t. The structure * must be freed via lwres_nooprequest_free() when it is no longer * needed. * * lwres_nooprequest_free() releases into the lwres_context_t * any space allocated during parsing. * * lwres_noopresponse_t: * * The functions used are similar to the three used for * requests, just with different names. * * Typically, the client will use request_render, response_parse, and * response_free, while the daemon will use request_parse, response_render, * and request_free. * * The basic flow of a typical client is: * * fill in a request_t, and call the render function. * * Transmit the buffer returned to the daemon. * * Wait for a response. * * When a response is received, parse it into a response_t. * * free the request buffer using lwres_context_freemem(). * * free the response structure and its associated buffer using * response_free(). */#define LWRES_UDP_PORT 921#define LWRES_RECVLENGTH 16384#define LWRES_ADDR_MAXLEN 16 /* changing this breaks ABI */#define LWRES_RESOLV_CONF "/etc/resolv.conf"/* * Flags. * * These flags are only relevant to rrset queries. * * TRUSTNOTREQUIRED: DNSSEC is not required (input) * SECUREDATA: The data was crypto-verified with DNSSEC (output) * */#define LWRES_FLAG_TRUSTNOTREQUIRED 0x00000001U#define LWRES_FLAG_SECUREDATA 0x00000002U/* * no-op */#define LWRES_OPCODE_NOOP 0x00000000Utypedef struct { /* public */ lwres_uint16_t datalength; unsigned char *data;} lwres_nooprequest_t;typedef struct { /* public */ lwres_uint16_t datalength; unsigned char *data;} lwres_noopresponse_t;/* * get addresses by name */#define LWRES_OPCODE_GETADDRSBYNAME 0x00010001Utypedef struct lwres_addr lwres_addr_t;typedef LWRES_LIST(lwres_addr_t) lwres_addrlist_t;struct lwres_addr { lwres_uint32_t family; lwres_uint16_t length; unsigned char address[LWRES_ADDR_MAXLEN]; LWRES_LINK(lwres_addr_t) link;};typedef struct { /* public */ lwres_uint32_t flags; lwres_uint32_t addrtypes; lwres_uint16_t namelen; char *name;} lwres_gabnrequest_t;typedef struct { /* public */ lwres_uint32_t flags; lwres_uint16_t naliases; lwres_uint16_t naddrs; char *realname; char **aliases; lwres_uint16_t realnamelen; lwres_uint16_t *aliaslen; lwres_addrlist_t addrs; /* if base != NULL, it will be freed when this structure is freed. */ void *base; size_t baselen;} lwres_gabnresponse_t;/* * get name by address */#define LWRES_OPCODE_GETNAMEBYADDR 0x00010002Utypedef struct { /* public */ lwres_uint32_t flags; lwres_addr_t addr;} lwres_gnbarequest_t;typedef struct { /* public */ lwres_uint32_t flags; lwres_uint16_t naliases; char *realname; char **aliases; lwres_uint16_t realnamelen; lwres_uint16_t *aliaslen; /* if base != NULL, it will be freed when this structure is freed. */ void *base; size_t baselen;} lwres_gnbaresponse_t;/* * get rdata by name */#define LWRES_OPCODE_GETRDATABYNAME 0x00010003Utypedef struct { /* public */ lwres_uint32_t flags; lwres_uint16_t rdclass; lwres_uint16_t rdtype; lwres_uint16_t namelen; char *name;} lwres_grbnrequest_t;typedef struct { /* public */ lwres_uint32_t flags; lwres_uint16_t rdclass; lwres_uint16_t rdtype; lwres_uint32_t ttl; lwres_uint16_t nrdatas; lwres_uint16_t nsigs; char *realname; lwres_uint16_t realnamelen; unsigned char **rdatas; lwres_uint16_t *rdatalen; unsigned char **sigs; lwres_uint16_t *siglen; /* if base != NULL, it will be freed when this structure is freed. */ void *base; size_t baselen;} lwres_grbnresponse_t;#define LWRDATA_VALIDATED 0x00000001/* * resolv.conf data */#define LWRES_CONFMAXNAMESERVERS 3 /* max 3 "nameserver" entries */#define LWRES_CONFMAXLWSERVERS 1 /* max 1 "lwserver" entry */#define LWRES_CONFMAXSEARCH 8 /* max 8 domains in "search" entry */#define LWRES_CONFMAXLINELEN 256 /* max size of a line */#define LWRES_CONFMAXSORTLIST 10typedef struct { lwres_context_t *lwctx; lwres_addr_t nameservers[LWRES_CONFMAXNAMESERVERS]; lwres_uint8_t nsnext; /* index for next free slot */ lwres_addr_t lwservers[LWRES_CONFMAXLWSERVERS]; lwres_uint8_t lwnext; /* index for next free slot */ char *domainname; char *search[LWRES_CONFMAXSEARCH]; lwres_uint8_t searchnxt; /* index for next free slot */ struct { lwres_addr_t addr; /* mask has a non-zero 'family' and 'length' if set */ lwres_addr_t mask; } sortlist[LWRES_CONFMAXSORTLIST]; lwres_uint8_t sortlistnxt; lwres_uint8_t resdebug; /* non-zero if 'options debug' set */ lwres_uint8_t ndots; /* set to n in 'options ndots:n' */ lwres_uint8_t no_tld_query; /* non-zero if 'options no_tld_query' */} lwres_conf_t;#define LWRES_ADDRTYPE_V4 0x00000001U /* ipv4 */#define LWRES_ADDRTYPE_V6 0x00000002U /* ipv6 */#define LWRES_MAX_ALIASES 16 /* max # of aliases */#define LWRES_MAX_ADDRS 64 /* max # of addrs */LWRES_LANG_BEGINDECLS/* * This is in host byte order. */LIBLWRES_EXTERNAL_DATA extern lwres_uint16_t lwres_udp_port;LIBLWRES_EXTERNAL_DATA extern const char *lwres_resolv_conf;lwres_result_tlwres_gabnrequest_render(lwres_context_t *ctx, lwres_gabnrequest_t *req, lwres_lwpacket_t *pkt, lwres_buffer_t *b);lwres_result_tlwres_gabnresponse_render(lwres_context_t *ctx, lwres_gabnresponse_t *req, lwres_lwpacket_t *pkt, lwres_buffer_t *b);lwres_result_tlwres_gabnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b, lwres_lwpacket_t *pkt, lwres_gabnrequest_t **structp);lwres_result_tlwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b, lwres_lwpacket_t *pkt, lwres_gabnresponse_t **structp);voidlwres_gabnrequest_free(lwres_context_t *ctx, lwres_gabnrequest_t **structp);/* * Frees any dynamically allocated memory for this structure. * * Requires: * * ctx != NULL, and be a context returned via lwres_contextcreate(). * * structp != NULL && *structp != NULL. * * Ensures: * * *structp == NULL.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -