Hackfut Security File Manager
Current Path:
/usr/include/isc
usr
/
include
/
isc
/
📁
..
📄
app.h
(10.29 KB)
📄
assertions.h
(3.24 KB)
📄
atomic.h
(4.16 KB)
📄
base64.h
(2.9 KB)
📄
bind9.h
(1.16 KB)
📄
bitstring.h
(4.37 KB)
📄
boolean.h
(1.18 KB)
📄
buffer.h
(22.4 KB)
📄
bufferlist.h
(1.93 KB)
📄
commandline.h
(1.78 KB)
📄
condition.h
(1.96 KB)
📄
counter.h
(2.27 KB)
📄
dir.h
(2.51 KB)
📄
entropy.h
(9.22 KB)
📄
error.h
(1.83 KB)
📄
event.h
(3.28 KB)
📄
eventclass.h
(1.87 KB)
📄
file.h
(9.04 KB)
📄
formatcheck.h
(1.39 KB)
📄
fsaccess.h
(7.77 KB)
📄
hash.h
(5.83 KB)
📄
heap.h
(5.62 KB)
📄
hex.h
(2.84 KB)
📄
hmacmd5.h
(1.92 KB)
📄
httpd.h
(1.98 KB)
📄
int.h
(1.83 KB)
📄
interfaceiter.h
(3.55 KB)
📄
iterated_hash.h
(1.48 KB)
📄
keyboard.h
(1.47 KB)
📄
lang.h
(1.13 KB)
📄
lex.h
(9.43 KB)
📄
lfsr.h
(3.4 KB)
📄
lib.h
(1.56 KB)
📄
list.h
(5.75 KB)
📄
log.h
(28.29 KB)
📄
magic.h
(1.44 KB)
📄
md5.h
(2.47 KB)
📄
mem.h
(21.26 KB)
📄
msgcat.h
(3.18 KB)
📄
msgs.h
(8.65 KB)
📄
mutex.h
(3.97 KB)
📄
mutexblock.h
(1.86 KB)
📄
namespace.h
(7.02 KB)
📄
net.h
(9.05 KB)
📄
netaddr.h
(4.8 KB)
📄
netdb.h
(1.36 KB)
📄
offset.h
(1.85 KB)
📄
once.h
(1.47 KB)
📄
ondestroy.h
(3.25 KB)
📄
os.h
(1.16 KB)
📄
parseint.h
(2.01 KB)
📄
platform.h
(8.42 KB)
📄
print.h
(2.39 KB)
📄
quota.h
(2.81 KB)
📄
radix.h
(6.89 KB)
📄
random.h
(1.78 KB)
📄
ratelimiter.h
(3.48 KB)
📄
refcount.h
(6.06 KB)
📄
region.h
(2.44 KB)
📄
resource.h
(3.32 KB)
📄
result.h
(4.67 KB)
📄
resultclass.h
(2.03 KB)
📄
rwlock.h
(3.75 KB)
📄
serial.h
(1.91 KB)
📄
sha1.h
(1.76 KB)
📄
sha2.h
(5.72 KB)
📄
sockaddr.h
(6.42 KB)
📄
socket.h
(32.2 KB)
📄
stdio.h
(2.19 KB)
📄
stdlib.h
(1.19 KB)
📄
stdtime.h
(1.84 KB)
📄
string.h
(6.25 KB)
📄
symtab.h
(4.64 KB)
📄
syslog.h
(1.34 KB)
📄
task.h
(19.17 KB)
📄
taskpool.h
(3.7 KB)
📄
thread.h
(1.83 KB)
📄
time.h
(7.86 KB)
📄
timer.h
(11.02 KB)
📄
types.h
(5.79 KB)
📄
util.h
(7.75 KB)
📄
version.h
(1.18 KB)
📄
xml.h
(1.52 KB)
Editing: radix.h
/* * Copyright (C) 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or 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: radix.h,v 1.13 2008-12-01 23:47:45 tbox Exp $ */ /* * This source was adapted from MRT's RCS Ids: * Id: radix.h,v 1.6 1999/08/03 03:32:53 masaki Exp * Id: mrt.h,v 1.57.2.6 1999/12/28 23:41:27 labovit Exp * Id: defs.h,v 1.5.2.2 2000/01/15 14:19:16 masaki Exp */ #include <isc/magic.h> #include <isc/types.h> #include <isc/mutex.h> #include <isc/net.h> #include <isc/refcount.h> #include <string.h> #ifndef _RADIX_H #define _RADIX_H #define NETADDR_TO_PREFIX_T(na,pt,bits) \ do { \ memset(&(pt), 0, sizeof(pt)); \ if((na) != NULL) { \ (pt).family = (na)->family; \ (pt).bitlen = (bits); \ if ((pt).family == AF_INET6) { \ memcpy(&(pt).add.sin6, &(na)->type.in6, \ ((bits)+7)/8); \ } else \ memcpy(&(pt).add.sin, &(na)->type.in, \ ((bits)+7)/8); \ } else { \ (pt).family = AF_UNSPEC; \ (pt).bitlen = 0; \ } \ isc_refcount_init(&(pt).refcount, 0); \ } while(0) typedef struct isc_prefix { unsigned int family; /* AF_INET | AF_INET6, or AF_UNSPEC for "any" */ unsigned int bitlen; /* 0 for "any" */ isc_refcount_t refcount; union { struct in_addr sin; struct in6_addr sin6; } add; } isc_prefix_t; typedef void (*isc_radix_destroyfunc_t)(void *); typedef void (*isc_radix_processfunc_t)(isc_prefix_t *, void **); #define isc_prefix_tochar(prefix) ((char *)&(prefix)->add.sin) #define isc_prefix_touchar(prefix) ((u_char *)&(prefix)->add.sin) #define BIT_TEST(f, b) ((f) & (b)) /* * We need "first match" when we search the radix tree to preserve * compatibility with the existing ACL implementation. Radix trees * naturally lend themselves to "best match". In order to get "first match" * behavior, we keep track of the order in which entries are added to the * tree--and when a search is made, we find all matching entries, and * return the one that was added first. * * An IPv4 prefix and an IPv6 prefix may share a radix tree node if they * have the same length and bit pattern (e.g., 127/8 and 7f::/8). To * disambiguate between them, node_num and data are two-element arrays; * node_num[0] and data[0] are used for IPv4 addresses, node_num[1] * and data[1] for IPv6 addresses. The only exception is a prefix of * 0/0 (aka "any" or "none"), which is always stored as IPv4 but matches * IPv6 addresses too. */ #define ISC_IS6(family) ((family) == AF_INET6 ? 1 : 0) typedef struct isc_radix_node { isc_uint32_t bit; /* bit length of the prefix */ isc_prefix_t *prefix; /* who we are in radix tree */ struct isc_radix_node *l, *r; /* left and right children */ struct isc_radix_node *parent; /* may be used */ void *data[2]; /* pointers to IPv4 and IPV6 data */ int node_num[2]; /* which node this was in the tree, or -1 for glue nodes */ } isc_radix_node_t; #define RADIX_TREE_MAGIC ISC_MAGIC('R','d','x','T'); #define RADIX_TREE_VALID(a) ISC_MAGIC_VALID(a, RADIX_TREE_MAGIC); typedef struct isc_radix_tree { unsigned int magic; isc_mem_t *mctx; isc_radix_node_t *head; isc_uint32_t maxbits; /* for IP, 32 bit addresses */ int num_active_node; /* for debugging purposes */ int num_added_node; /* total number of nodes */ } isc_radix_tree_t; isc_result_t isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target, isc_prefix_t *prefix); /*%< * Search 'radix' for the best match to 'prefix'. * Return the node found in '*target'. * * Requires: * \li 'radix' to be valid. * \li 'target' is not NULL and "*target" is NULL. * \li 'prefix' to be valid. * * Returns: * \li ISC_R_NOTFOUND * \li ISC_R_SUCCESS */ isc_result_t isc_radix_insert(isc_radix_tree_t *radix, isc_radix_node_t **target, isc_radix_node_t *source, isc_prefix_t *prefix); /*%< * Insert 'source' or 'prefix' into the radix tree 'radix'. * Return the node added in 'target'. * * Requires: * \li 'radix' to be valid. * \li 'target' is not NULL and "*target" is NULL. * \li 'prefix' to be valid or 'source' to be non NULL and contain * a valid prefix. * * Returns: * \li ISC_R_NOMEMORY * \li ISC_R_SUCCESS */ void isc_radix_remove(isc_radix_tree_t *radix, isc_radix_node_t *node); /*%< * Remove the node 'node' from the radix tree 'radix'. * * Requires: * \li 'radix' to be valid. * \li 'node' to be valid. */ isc_result_t isc_radix_create(isc_mem_t *mctx, isc_radix_tree_t **target, int maxbits); /*%< * Create a radix tree with a maximum depth of 'maxbits'; * * Requires: * \li 'mctx' to be valid. * \li 'target' to be non NULL and '*target' to be NULL. * \li 'maxbits' to be less than or equal to RADIX_MAXBITS. * * Returns: * \li ISC_R_NOMEMORY * \li ISC_R_SUCCESS */ void isc_radix_destroy(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func); /*%< * Destroy a radix tree optionally calling 'func' to clean up node data. * * Requires: * \li 'radix' to be valid. */ void isc_radix_process(isc_radix_tree_t *radix, isc_radix_processfunc_t func); /*%< * Walk a radix tree calling 'func' to process node data. * * Requires: * \li 'radix' to be valid. * \li 'func' to point to a function. */ #define RADIX_MAXBITS 128 #define RADIX_NBIT(x) (0x80 >> ((x) & 0x7f)) #define RADIX_NBYTE(x) ((x) >> 3) #define RADIX_DATA_GET(node, type) (type *)((node)->data) #define RADIX_DATA_SET(node, value) ((node)->data = (void *)(value)) #define RADIX_WALK(Xhead, Xnode) \ do { \ isc_radix_node_t *Xstack[RADIX_MAXBITS+1]; \ isc_radix_node_t **Xsp = Xstack; \ isc_radix_node_t *Xrn = (Xhead); \ while ((Xnode = Xrn)) { \ if (Xnode->prefix) #define RADIX_WALK_ALL(Xhead, Xnode) \ do { \ isc_radix_node_t *Xstack[RADIX_MAXBITS+1]; \ isc_radix_node_t **Xsp = Xstack; \ isc_radix_node_t *Xrn = (Xhead); \ while ((Xnode = Xrn)) { \ if (1) #define RADIX_WALK_BREAK { \ if (Xsp != Xstack) { \ Xrn = *(--Xsp); \ } else { \ Xrn = (radix_node_t *) 0; \ } \ continue; } #define RADIX_WALK_END \ if (Xrn->l) { \ if (Xrn->r) { \ *Xsp++ = Xrn->r; \ } \ Xrn = Xrn->l; \ } else if (Xrn->r) { \ Xrn = Xrn->r; \ } else if (Xsp != Xstack) { \ Xrn = *(--Xsp); \ } else { \ Xrn = (isc_radix_node_t *) 0; \ } \ } \ } while (0) #endif /* _RADIX_H */
Upload File
Create Folder