4G_module/include/cmiot/cm_async_dns.h

137 lines
4.2 KiB
C
Raw Normal View History

2024-09-02 17:54:29 +08:00
/**
* @file cm_async_dns.h
* @brief DNS解析接口
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
* @author By wangk
* @date 2021/08/16
*
* @defgroup async_dns async_dns
* @ingroup NET
* @{
*/
#ifndef __CM_ASYNC_DNS_H__
#define __CM_ASYNC_DNS_H__
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
// 包含平台特定的socket头文件
#include "lwip/sockets.h" // lwip socket
#include "cm_eloop.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Types
****************************************************************************/
/** DNS resolve types */
typedef enum
{
CM_ASYNC_DNS_ADDRTYPE_IPV4 = 0, /**< resolve IPv4 address */
CM_ASYNC_DNS_ADDRTYPE_IPV6, /**< resolve IPv6 address */
CM_ASYNC_DNS_ADDRTYPE_IPV4_IPV6, /**< try to resolve IPv4 first, try IPv6 if IPv4 fails only */
CM_ASYNC_DNS_ADDRTYPE_IPV6_IPV4, /**< try to resolve IPv6 first, try IPv4 if IPv6 fails only */
} cm_async_dns_addrtype_e;
/** 异步DNS解析事件类型 */
typedef enum
{
CM_ASYNC_DNS_EV_NONE = 0,
// responses
CM_ASYNC_DNS_RESOLVE_OK, /**< 域名解析成功 */
CM_ASYNC_DNS_RESOLVE_FAIL, /**< 域名解析失败 */
} cm_async_dns_event_e;
/** IP地址(异步DNS解析结果)类型 */
typedef struct cm_async_dns_ip_addr
{
cm_async_dns_addrtype_e type; /**< 地址类型(IPv4或IPv6) */
union {
struct in_addr sin_addr; /**< IPv4 address */
struct in6_addr sin6_addr; /**< IPv6 address */
} u_addr;
} cm_async_dns_ip_addr_t;
/**
DNS解析事件回调函数类型
@param req_id [in] ID
@param event [in]
@param cb_param [in] (socket时指定)
@param host_name [in]
@param ip_addr [in] IP地址(DNS解析结果)
*/
typedef void (*cm_async_dns_event_cb)(int req_id, cm_async_dns_event_e event, void *cb_param,
const char *host_name, const cm_async_dns_ip_addr_t *ip_addr);
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C" {
#else
#define EXTERN extern
#endif
/**
* @brief dns模块运行的Event Loop
*
* @return
* Event Loop
*
* @details Event Loop(Event Loop)
*/
cm_eloop_handle_t cm_async_dns_eloop(void);
/**
* @brief DNS解析全局优先级
*
* @param [in] priority DNS解析优先级0v4优先1v6优先v6优先
*
* @return
* = 0 - \n
* < 0 -
*
* @details v6优先使(MQTT/HTTP/NTP)
*/
int32_t cm_async_dns_set_priority(uint8_t priority);
/**
* @brief DNS解析
*
* @param [in] host_name
* @param [in] addr_type (IPV4或IPV6)
* @param [out] ip_addr IP地址(DNS解析结果)
* @param [in] event_cb
* @param [in] cb_param (event_cb)
*
* @return
* > 0 - DNS请求成功,DNS请求ID() \n
* = 0 - DNS请求已完成(result输出解析结果) \n
* = -1 -
*
* @details DNS解析
*/
int cm_async_dns_request(const char *host_name, cm_async_dns_addrtype_e addr_type,
cm_async_dns_ip_addr_t *ip_addr, cm_async_dns_event_cb event_cb, void *cb_param);
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif /* __CM_ASYNC_DNS_H__ */
/** @}*/