#ifndef	ACL_IFCONF_INCLUDE_H
#define	ACL_IFCONF_INCLUDE_H

#ifdef	__cplusplus
extern "C" {
#endif

#include "stdlib/acl_define.h"

typedef struct ACL_IFADDR {
	char *name;		/* 接口名称 */
#if defined(_WIN32) || defined(_WIN64)
	char *desc;		/* 接口描述 */
#endif
	char  ip[32];		/* 以字符串表示的IP地址 */
	unsigned int addr;	/* 网络字节序的 32 位 IP 地址 */
} ACL_IFADDR;

typedef struct ACL_IFCONF {
	ACL_IFADDR *addrs;	/* ACL_IFADDR 数组 */
	int  length;		/* ACL_IFADDR 数组长度 */

	/* for acl_iterator */

	/* 取迭代器头函数 */
	const ACL_IFADDR *(*iter_head)(ACL_ITER*, struct ACL_IFCONF*);
	/* 取迭代器下一个函数 */
	const ACL_IFADDR *(*iter_next)(ACL_ITER*, struct ACL_IFCONF*);
	/* 取迭代器尾函数 */
	const ACL_IFADDR *(*iter_tail)(ACL_ITER*, struct ACL_IFCONF*);
	/* 取迭代器上一个函数 */
	const ACL_IFADDR *(*iter_prev)(ACL_ITER*, struct ACL_IFCONF*);
} ACL_IFCONF;

/**
 * 获得主机的所有网络地址及网络接口名称
 * @return {ACL_IFCONF*}
 */
ACL_API ACL_IFCONF *acl_get_ifaddrs(void);

/**
 * 释放由 acl_get_ifaddrs() 返回的 ACL_IFCONF 内存
 * @param ifconf {ACL_IFCONF*}
 */
ACL_API void acl_free_ifaddrs(ACL_IFCONF *ifconf);

#ifdef	__cplusplus
}
#endif

#endif
