acl/lib_acl/include/net/acl_netdb.h

184 lines
5.9 KiB
C
Raw Normal View History

#ifndef ACL_NETDB_INCLUDE_H
2014-11-19 00:25:21 +08:00
#define ACL_NETDB_INCLUDE_H
2017-06-02 14:47:24 +08:00
#include "../stdlib/acl_define.h"
2014-11-19 00:25:21 +08:00
#ifdef ACL_UNIX
#include <netinet/in.h>
#endif
2017-06-02 14:47:24 +08:00
#include "../stdlib/acl_array.h"
2018-09-12 17:43:46 +08:00
#include "acl_sane_inet.h"
2014-11-19 00:25:21 +08:00
/**
*
2014-11-19 00:25:21 +08:00
*/
typedef struct ACL_HOSTNAME ACL_HOST_INFO;
typedef struct ACL_HOSTNAME {
2018-09-10 18:30:54 +08:00
char ip[64]; /**< the ip addr of the HOST */
2018-09-11 19:07:43 +08:00
ACL_SOCKADDR saddr; /**< ip addr in ACL_SOCKADDR */
2014-11-19 00:25:21 +08:00
unsigned int ttl; /**< the HOST's ip timeout(second) */
int hport;
unsigned int nrefer; /**< refer number to this HOST */
} ACL_HOSTNAME;
/**
* DNS查询结果集
2014-11-19 00:25:21 +08:00
*/
typedef struct ACL_DNS_DB {
ACL_ARRAY *h_db;
int size;
char name[256];
/* for acl_iterator */
/* 取迭代器头函数 */
2014-11-19 00:25:21 +08:00
const ACL_HOST_INFO *(*iter_head)(ACL_ITER*, struct ACL_DNS_DB*);
/* 取迭代器下一个函数 */
2014-11-19 00:25:21 +08:00
const ACL_HOST_INFO *(*iter_next)(ACL_ITER*, struct ACL_DNS_DB*);
/* 取迭代器尾函数 */
2014-11-19 00:25:21 +08:00
const ACL_HOST_INFO *(*iter_tail)(ACL_ITER*, struct ACL_DNS_DB*);
/* 取迭代器上一个函数 */
2014-11-19 00:25:21 +08:00
const ACL_HOST_INFO *(*iter_prev)(ACL_ITER*, struct ACL_DNS_DB*);
/* 取迭代器关联的当前容器成员结构对象 */
2014-11-19 00:25:21 +08:00
const ACL_HOST_INFO *(*iter_info)(ACL_ITER*, struct ACL_DNS_DB*);
} ACL_DNS_DB;
/* in acl_netdb.c */
/**
*
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @param i {int}
* @return {const ACL_HOSTNAME*}
2014-11-19 00:25:21 +08:00
*/
ACL_API const ACL_HOSTNAME *acl_netdb_index(const ACL_DNS_DB *h_dns_db, int i);
/**
* IP地址
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @param i {int}
* @return {const ACL_SOCKADDR*} IP地址结构, NULL表示失败
2014-11-19 00:25:21 +08:00
*/
2018-09-11 19:07:43 +08:00
ACL_API const ACL_SOCKADDR *acl_netdb_index_saddr(ACL_DNS_DB *h_dns_db, int i);
2014-11-19 00:25:21 +08:00
/**
*
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @param i {int}
* @param n {int}
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_refer_oper(ACL_DNS_DB *h_dns_db, int i, int n);
/**
* 1
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @param i {int}
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_refer(ACL_DNS_DB *h_dns_db, int i);
/**
* 1
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @param i {int}
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_unrefer(ACL_DNS_DB *h_dns_db, int i);
/**
* IP地址
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @param i {int}
* @return {const char*} NULL
2014-11-19 00:25:21 +08:00
*/
ACL_API const char *acl_netdb_index_ip(const ACL_DNS_DB *h_dns_db, int i);
/**
*
* @param h_dns_db {const ACL_DNS_DB*} DNS结果集
* @return {int} > 0, -1
2014-11-19 00:25:21 +08:00
*/
ACL_API int acl_netdb_size(const ACL_DNS_DB *h_dns_db);
/**
*
* @param h_dns_db {ACL_DNS_DB*} DNS结果集
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_free(ACL_DNS_DB *h_dns_db);
/**
* DNS查询
* @param domain {const char*}
* @return {ACL_DNS_DB*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DNS_DB *acl_netdb_new(const char *domain);
/**
* IP地址
* @param h_dns_db {ACL_DNS_DB*}
* @param ip {const char*} IP地址
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_addip(ACL_DNS_DB *h_dns_db, const char *ip);
/**
* IP地址及端口号
* @param h_dns_db {ACL_DNS_DB*}
* @param ip {const char*} IP地址
* @param port {int}
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_add_addr(ACL_DNS_DB *h_dns_db, const char *ip, int port);
/**
*
* @param h_dns_db {const ACL_DNS_DB*}
* @return {ACL_DNS_DB*}
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DNS_DB *acl_netdb_clone(const ACL_DNS_DB *h_dns_db);
/**
* IP地址集
* @param name {const char*}
* @param h_error {int*}
* @return {ACL_DNS_DB*} , NULL则查询失败, 使
* acl_netdb_size()/1
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DNS_DB *acl_gethostbyname(const char *name, int *h_error);
/**
*
* @param errnum {int}
* @return {const char*}
2014-11-19 00:25:21 +08:00
*/
ACL_API const char *acl_netdb_strerror(int errnum);
/* in acl_netdb_cache.c */
/**
* DNS缓存中添加缓存数据
* @param h_dns_db {const ACL_DNS_DB*} DNS查询结果集
* @param timeout {int} <= 0,
* acl_netdb_cache_init()/2 ,
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_cache_push(const ACL_DNS_DB *h_dns_db, int timeout);
/**
* DNS缓存中取得DNS查询结果集
* @param name {const char*}
* @return {ACL_DNS_DB*} DNS查询结果集
2014-11-19 00:25:21 +08:00
*/
ACL_API ACL_DNS_DB *acl_netdb_cache_lookup(const char *name);
/**
* DNS缓存中删除某个DNS查询结果集
* @param name {const char*}
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_cache_del_host(const char *name);
/**
* DNS缓存区
* @param timeout {int} DNS结果集的默认缓存时间()
* @param thread_safe {int} DNS缓存区线程安全, 0: ,
* 1: 线
2014-11-19 00:25:21 +08:00
*/
ACL_API void acl_netdb_cache_init(int timeout, int thread_safe);
#endif