列舉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);