全部產品
Search
文件中心

HTTPDNS:C SDK API

更新時間:Apr 11, 2025

列舉SDK提供的API,這些API定義於SDK的hdns_api.h中。

SDK環境建立/銷毀

SDK運行需要初始化一些必須的全域資源,比如串連池、線程池、網路檢測器等,這些全域資源被所有用戶端執行個體所共用,需要在建立用戶端執行個體之前進行初始化,並在退出SDK使用時釋放。

/*
 * @brief SDK環境初始化,主要包括全域隨機數、session池、網路檢測器、線程池
 * @return 0:初始化成功;1:初始化失敗
 * @note:
 *  - 調用該介面之後,請務必調用一次hdns_sdk_cleanup進行資源釋放
 *  - 該介面並非安全執行緒介面
 */
int hdns_sdk_init();


/*
 *
 * @brief 清理釋放HTTPDNS SDK環境
 * @node :
 *  - 該介面並非安全執行緒介面
 */
void hdns_sdk_cleanup();

用戶端建立/配置/啟動/銷毀

HTTPDNS支援使用不同的帳號ID初始化多個用戶端執行個體,這些用戶端執行個體負責與HTTPDNS服務端的互動和緩衝管理。用戶端執行個體的生命週期包含:建立、配置、啟動和銷毀,SDK提供了與該生命週期對應的介面。

/*
 * @brief 建立用戶端執行個體
 * @param[in]   account_id    HTTPDNS賬戶ID
 * @param[in]   secret_key    用於加簽HTTP請求的秘鑰,如果不需要加簽可以填NULL
 * @return 建立成功返回用戶端執行個體,否則返回NULL
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
hdns_client_t *hdns_client_create(const char *account_id, const char *secret_key);

/*
 * @brief  設定本機快取失效時,用戶端單次請求服務端的最大逾時時間
 * @param[in]   client        用戶端執行個體
 * @param[in]   timeout       逾時毫秒數
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_timeout(hdns_client_t *client, int32_t timeout);

/*
 * @brief  設定服務是否使用本機快取
 * @param[in]   client        用戶端執行個體
 * @param[in]   using_cache    false:不使用本機快取,true:使用本機快取
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_using_cache(hdns_client_t *client, bool using_cache);

/*
 * @brief  設定訪問HTTPDNS伺服器時是否使用https協議
 * @param[in]   client        用戶端執行個體
 * @param[in]   using_https    false:不使用https協議,true:使用https協議
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_using_https(hdns_client_t *client, bool using_https);


/*
 * @brief  設定訪問HTTPDNS伺服器時是否對請求進行簽名
 * @param[in]   client        用戶端執行個體
 * @param[in]   using_sign    false:不進行簽名,true:簽名
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_using_sign(hdns_client_t *client, bool using_sign);

/*
 * @brief   設定訪問HTTPDNS伺服器時的重試次數,預設為1
 * @param[in]   client        用戶端執行個體
 * @param[in]   retry_times   重試次數
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_retry_times(hdns_client_t *client, int32_t retry_times);

/*
 * @brief   設定訪問HTTPDNS伺服器的叢集
 * @param[in]   client        用戶端執行個體
 * @param[in]   region        global: 就近訪問(預設),cn:中國大陸,hk:中國香港,sg: 新加坡,us: 美國,de: 德國
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_region(hdns_client_t *client, const char *region);

/*
 * @brief   設定HTTPDNS調度中心的region
 * @param[in]   client        用戶端執行個體
 * @param[in]   region        cn:中國大陸(預設),hk:中國香港,sg: 新加坡,us: 美國,de: 德國
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_set_schedule_center_region(hdns_client_t *client, const char *region);

/*
 * @brief   是否開啟網路變化時緩衝更新
 * @param[in]   client        用戶端執行個體
 * @param[in]   enable        true: 重新整理,false:不重新整理
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_enable_update_cache_after_net_change(hdns_client_t *client, bool enable);

/*
 * @brief   是否開啟允許使用到期ip
 * @param[in]   client        用戶端執行個體
 * @param[in]   enable        true: 允許使用到期ip,false:不允許
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_enable_expired_ip(hdns_client_t *client, bool enable);

/*
 * @brief   是否允許降級到localdns
 * @param[in]   client        用戶端執行個體
 * @param[in]   enable        true: 允許使用到期ip,false:不允許
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_enable_failover_localdns(hdns_client_t *client, bool enable);

/*
 * @brief   添加用戶端啟動時預解析的網域名稱
 * @param[in]   client        用戶端執行個體
 * @param[in]   host          預解析網域名稱
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_add_pre_resolve_host(hdns_client_t *client, const char *host);

/*
 * @brief   添加進行IP嗅探的網域名稱和連接埠,一個網域名稱只允許探測一個連接埠
 * @param[in]   client        用戶端執行個體
 * @param[in]   host          探測網域名稱
 * @param[in]   port          探測連接埠
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_add_ip_probe_item(hdns_client_t *client, const char *host, const int port);


/*
 * @brief   針對某個網域名稱,添加一個自訂的解析ttl,僅對HTTPDNS的解析結果有效,降級到localdns無效
 * @param[in]   client        用戶端執行個體
 * @param[in]   host          探測網域名稱
 * @param[in]   ttl           自訂ttl
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
void hdns_client_add_custom_ttl_item(hdns_client_t *client, const char *host, const int ttl);


/*
 * @brief  啟動用戶端,執行網域名稱的非同步預解析和拉取網域名稱解析伺服器列表
 * @param[in]   client        用戶端執行個體
 * @return  用戶端啟動狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t是安全執行緒的,可多線程共用
 */
hdns_status_t hdns_client_start(hdns_client_t *client);

/*
 *
 * @brief 清理釋放HTTPDNS用戶端資源
 *
 * @param[in]      client     用戶端執行個體
 */
void hdns_client_cleanup(hdns_client_t *client);

標準網域名稱解析介面

HTTPDNS用戶端啟動之後可以通過標準的介面進行網域名稱解析,根據同步/非同步介面、使用緩衝/不使用緩衝解析、單網域名稱/批量網域名稱解析,SDK共提供了8個標準的介面,其中同步介面hdns_get_result_for_host_sync_with_cache和非同步介面hdns_get_result_for_host_async_with_cache的網域名稱解析邏輯與LocalDNS等價:優先查詢本機快取,緩衝未命中則請求DNS服務端。

/*
 *
 * @brief 單網域名稱同步解析,阻塞線程,先查緩衝,緩衝為空白則查詢HTTPDNS伺服器,直到結果返回或者逾時
 * @param[in]   client          用戶端執行個體
 * @param[in]      host          待解析的網域名稱
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[out]     results         解析結果,需要通過hdns_list_cleanup進行記憶體釋放
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_result_for_host_sync_with_cache(hdns_client_t *client,
                                                       const char *host,
                                                       hdns_query_type_t query_type,
                                                       const char *client_ip,
                                                       hdns_list_head_t **results);


/*
 *
 * @brief 單網域名稱同步解析,阻塞線程,查詢HTTPDNS伺服器,直到結果返回或者逾時
 * @param[in]      client        用戶端執行個體
 * @param[in]      host          待解析的網域名稱
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[out]     results         解析結果,需要通過hdns_list_cleanup進行記憶體釋放
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_result_for_host_sync_without_cache(hdns_client_t *client,
                                                          const char *host,
                                                          hdns_query_type_t query_type,
                                                          const char *client_ip,
                                                          hdns_list_head_t **results);

/*
 *
 * @brief 批量網域名稱同步解析,阻塞線程,先查緩衝,緩衝為空白則查詢HTTPDNS伺服器,直到結果返回或者逾時
 *
 * @param[in]      client          用戶端執行個體
 * @param[in]      hosts         待解析的網域名稱列表
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[out]     results         解析結果,需要通過hdns_list_cleanup進行記憶體釋放
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_results_for_hosts_sync_with_cache(hdns_client_t *client,
                                                         const hdns_list_head_t *hosts,
                                                         hdns_query_type_t query_type,
                                                         const char *client_ip,
                                                         hdns_list_head_t **results);

/*
 *
 * @brief 批量網域名稱同步解析,阻塞線程,查詢HTTPDNS伺服器,直到結果返回或者逾時
 *
 * @param[in]      client        用戶端執行個體
 * @param[in]      hosts         待解析的網域名稱列表
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[out]     results         解析結果,需要通過hdns_list_cleanup進行記憶體釋放
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_results_for_hosts_sync_without_cache(hdns_client_t *client,
                                                            const hdns_list_head_t *hosts,
                                                            hdns_query_type_t query_type,
                                                            const char *client_ip,
                                                            hdns_list_head_t **results);
/*
 * @brief 非同步解析回呼函數
 * @param[in]   status    解析最終狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @param[in]   results   解析結果清單
 * @param[in]   param     使用者傳遞的自訂參數
 */
typedef void (*hdns_resv_done_callback_pt)(hdns_status_t *status, hdns_list_head_t *results, void *param);
/*
 *
 * @brief 單網域名稱非同步解析,不阻塞線程,先查緩衝,緩衝為空白則查詢HTTPDNS伺服器,直到結果返回或者逾時,最後觸發函數回調
 *
 * @param[in]      client        用戶端執行個體
 * @param[in]      host          待解析的網域名稱
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[in]   cb              解析結束後的回呼函數
 * @param[in]   cb_param        回呼函數的使用者自訂參數
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_result_for_host_async_with_cache(hdns_client_t *client,
                                                        const char *host,
                                                        hdns_query_type_t query_type,
                                                        const char *client_ip,
                                                        hdns_resv_done_callback_pt cb,
                                                        void *cb_param);

/*
 *
 * @brief 單網域名稱非同步解析,不阻塞線程,查詢HTTPDNS伺服器,直到結果返回或者逾時,,最後觸發函數回調
 *
 * @param[in]      client        用戶端執行個體
 * @param[in]      host          待解析的網域名稱
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[in]   cb              解析結束後的回呼函數
 * @param[in]   cb_param        回呼函數的使用者自訂參數
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_result_for_host_async_without_cache(hdns_client_t *client,
                                                           const char *host,
                                                           hdns_query_type_t query_type,
                                                           const char *client_ip,
                                                           hdns_resv_done_callback_pt cb,
                                                           void *cb_param);

/*
 *
 * @brief 批量網域名稱非同步解析,不阻塞線程,先查緩衝,緩衝為空白則查詢HTTPDNS伺服器,直到結果返回或者逾時,最後觸發函數回調
 *
 * @param[in]      client          用戶端執行個體
 * @param[in]      hosts         待解析的網域名稱列表
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[in]   cb              解析結束後的回呼函數
 * @param[in]   cb_param        回呼函數的使用者自訂參數
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_results_for_hosts_async_with_cache(hdns_client_t *client,
                                                          const hdns_list_head_t *hosts,
                                                          hdns_query_type_t query_type,
                                                          const char *client_ip,
                                                          hdns_resv_done_callback_pt cb,
                                                          void *cb_param);

/*
 *
 * @brief 批量網域名稱非同步解析,不阻塞線程,查詢HTTPDNS伺服器,直到結果返回或者逾時,最後觸發函數回調
 *
 * @param[in]      client          用戶端執行個體
 * @param[in]      hosts         待解析的網域名稱列表
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[in]      client_ip 可選,用戶端ip, 預設為介面調用方的出口IP
 * @param[in]   cb              解析結束後的回呼函數
 * @param[in]   cb_param        回呼函數的使用者自訂參數
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_results_for_hosts_async_without_cache(hdns_client_t *client,
                                                             const hdns_list_head_t *hosts,
                                                             hdns_query_type_t query_type,
                                                             const char *client_ip,
                                                             hdns_resv_done_callback_pt cb,
                                                             void *cb_param);

自訂網域名解析介面

SDK提供了自訂網域名解析的介面,使用者可以通過介面配置解析請求的參數,主要用於自訂解析需要傳遞業務參數的情境。

/*
 * @brief   自訂同步解析
 * @param[in]   client          用戶端執行個體
 * @param[in]   req             自訂解析請求執行個體
 * @param[out]  results         解析結果,需要通過hdns_list_cleanup進行記憶體釋放
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_list_head_t是非安全執行緒的,多線程共用時應該通過互斥量等手段進行同步
 */
hdns_status_t hdns_get_result_for_host_sync_with_custom_request(hdns_client_t *client,
                                                                const hdns_resv_req_t *req,
                                                                hdns_list_head_t **results);

/*
 * @brief   先進行自訂非同步步解析,最後觸發函數回調
 * @param[in]   client          用戶端執行個體
 * @param[in]   req             自訂解析請求執行個體
 * @param[in]   cb              解析結束後的回呼函數
 * @param[in]   cb_param        回呼函數的使用者自訂參數
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_client_t安全執行緒,可多線程共用
 */
hdns_status_t hdns_get_result_for_host_async_with_custom_request(hdns_client_t *client,
                                                                 const hdns_resv_req_t *resv_req,
                                                                 hdns_resv_done_callback_pt cb,
                                                                 void *cb_param);

/*
 * @brief   自訂網域名解析時,建立解析請求執行個體
 * @param[in]   client        用戶端執行個體
 * @return  該用戶端對應的請求執行個體
 * @note :
 *    - hdns_resv_req_t是安全執行緒的,可多線程共用
 */
hdns_resv_req_t *hdns_resv_req_create(hdns_client_t *client);

/*
 * @brief   自訂網域名解析時,佈建要求執行個體的用戶端IP
 * @param[in]   client        用戶端執行個體
 * @param[in]   client_ip     用戶端IP
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_resv_req_t是安全執行緒的,可多線程共用
 */
hdns_status_t hdns_resv_req_set_client_ip(hdns_resv_req_t *req, const char *client_ip);

/*
 * @brief   自訂網域名解析時,佈建要求執行個體的網域名稱
 * @param[in]   req          請求執行個體
 * @param[in]   host          待解析網域名稱
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_resv_req_t是安全執行緒的,可多線程共用
 */
hdns_status_t hdns_resv_req_set_host(hdns_resv_req_t *req, const char *host);

/*
 * @brief   自訂網域名解析時,添加業務參數對
 * @param[in]   req          請求執行個體
 * @param[in]   key           參數名
 * @param[in]   value         參數值
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_resv_req_t是安全執行緒的,可多線程共用
 */
hdns_status_t hdns_resv_req_append_sdns_param(hdns_resv_req_t *req, const char *key, const char *value);

/*
 * @brief   自訂網域名解析時,佈建要求執行個體的DNS解析類型
 * @param[in]   req          請求執行個體
 * @param[in]   query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_resv_req_t是安全執行緒的,可多線程共用
 */
hdns_status_t hdns_resv_req_set_query_type(hdns_resv_req_t *req, hdns_query_type_t query_type);

/*
 * @brief   自訂網域名解析時,設定解析結果的緩衝key
 * @param[in]   req          請求執行個體
 * @param[in]   key           參數名
 * @param[in]   value         參數值
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_resv_req_t是安全執行緒的,可多線程共用
 */
hdns_status_t hdns_resv_req_set_cache_key(hdns_resv_req_t *req, const char *cache_key);

/*
 * @brief   自訂網域名解析時,釋放請求執行個體資源
 * @param[in]   req          請求執行個體
 */
void hdns_resv_req_cleanup(hdns_resv_req_t *req);


/*
 *
 * @brief 返回軟體自訂解析中的extra欄位
 *
 * @param[in]      results       已擷取的解析結果
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[out]     extra      寫入extra的buffer
 * @return  操作狀態,0表示成功,否則表示失敗
 */
int hdns_get_sdns_extra(hdns_list_head_t *results, hdns_query_type_t query_type, char *extra);

排查追蹤

SDK提供了日誌和會話追蹤的功能,用於解析不符合預期時的問題排查。日誌預設列印到控制台,記錄層級為warn級。每個用戶端執行個體都會產生一個與服務端交匯的SessionID,並在用戶端執行個體生命週期內有效,SessionID會在每次請求時傳遞給服務端,當解析結果不符合預期時,根據該SessionID可以協助確定問題原因。

/*
 *
 * @brief 設定SDK記錄檔路徑
 *
 * @param[in]      file_path     記錄檔路徑
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 */
hdns_status_t hdns_log_set_log_file_path(const char *file_path);


/*
 *
 * @brief 設定SDK日誌等級
 *
 * @param[in]      level     日誌等級
 *    - HDNS_LOG_OFF    不開啟日誌
 *    - HDNS_LOG_FATAL  fatal級及以下
 *    - HDNS_LOG_ERROR  error級及以下
 *    - HDNS_LOG_WARN   warn級及以下
 *    - HDNS_LOG_INFO   info級及以下
 *    - HDNS_LOG_DEBUG  debug級及以下
 *    - HDNS_LOG_TRACE  trace級及以下
 */
void hdns_log_set_log_level(hdns_log_level_e level);

/*
 * @brief   擷取用戶端的session id,用於問題排查
 * @param[in]   client        用戶端執行個體
 * @param[out]   session_id    session id
 * @return 0 擷取成功,否則失敗
 * @note:
 *    - session id 為長度12的字串,請確保接收的buffer大於12
 */
int hdns_client_get_session_id(hdns_client_t *client, char *session_id);

緩衝管理

支援手動清理某網域名稱的本地解析緩衝。

/*
 *
 * @brief 清除某網域名稱的本機快取
 *
 * @param[in]      client     用戶端執行個體
 * @param[in]      host       網域名稱
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 */
void hdns_remove_host_cache(hdns_client_t *client, const char *host);

輔助介面

工具性介面,用於降低使用者使用SDK的複雜度。

/*
 *
 * @brief 從解析列表中隨機播放一個ip,雙棧時ipv4優先,僅適用於單個網域名稱解析的情況
 *
 * @param[in]      results       已擷取的解析結果
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[out]     ip            寫入ip的buffer
 * @return  操作狀態,0表示成功,否則表示失敗
 */
int hdns_select_ip_randomly(hdns_list_head_t *results, hdns_query_type_t query_type, char *ip);

/*
 *
 * @brief 返回解析ip列表中第一個ip,如果開啟了ip優選,往往意味著最優ip,僅適用於單個網域名稱解析的情況
 *
 * @param[in]      results       已擷取的解析結果
 * @param[in]      query_type    請求類型
 *         - HDNS_QUERY_AUTO:根據網路棧自動解析;
 *         - HDNS_QUERY_IPV4:解析IPV4類型;
 *         - HDNS_QUERY_IPV6:解析IPV6類型;
 *         - HDNS_QUERY_BOTH:解析IPV4和IPV6類型
 * @param[out]     ip            寫入ip的buffer
 * @return  操作狀態,0表示成功,否則表示失敗
 */
int hdns_select_first_ip(hdns_list_head_t *results, hdns_query_type_t query_type, char *ip);

/*
 * @brief   建立鏈表執行個體
 * @return  鏈表執行個體,如果失敗返回NULL
 * @note :
 *    - hdns_list_head_t非安全執行緒,多線程共用時應該通過互斥量等手段進行同步
 */
hdns_list_head_t *hdns_list_create();

/*
 * @brief   向鏈表中添加字串
 * @return  操作狀態,如果status的code是0表示成功,否則表示失敗,error_msg包含了錯誤資訊
 * @note :
 *    - hdns_list_head_t非安全執行緒,多線程共用時應該通過互斥量等手段進行同步
 */
hdns_status_t hdns_list_add_str(hdns_list_head_t *list, const char *str);

/*
 * @brief   釋放鏈表資源
 * @param[in]   list          待釋放的列表執行個體
 * @note :
 *    - hdns_list_head_t非安全執行緒,多線程共用時應該通過互斥量等手段進行同步
 */
void hdns_list_cleanup(hdns_list_head_t *list);