SDK によって提供される API の一覧です。これらの API は、SDK の hdns_api.h で定義されています。
SDK 環境の作成/破棄
SDK は、接続プール、スレッドプール、ネットワーク検出器などの重要なグローバルリソースの初期化を必要とします。これらのグローバルリソースはすべてのクライアントインスタンスで共有され、クライアントインスタンスを作成する前に初期化する必要があり、SDK の使用を終了する際に解放する必要があります。
/*
* @brief SDK 環境の初期化。主にグローバル乱数、セッションプール、ネットワーク検出器、スレッドプールを含む
* @return 0: 初期化成功; 1: 初期化失敗
* @note:
* - このインターフェースを呼び出した後、必ず hdns_sdk_cleanup を 1 回呼び出してリソースを解放してください
* - このインターフェースはスレッドセーフではありません
*/
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 スケジューリングセンターの地域を設定します
* @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 ローカル DNS へのフォールバックを許可するかどうか
* @param[in] client クライアントインスタンス
* @param[in] enable true: ローカル DNS の使用を許可する、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 スニッフィングを行うドメイン名とポートを追加します。ドメインごとに検出できるポートは 1 つだけです。
* @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 解決結果に対してのみ有効で、ローカル DNS にフォールバックした場合は無効です
* @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 クライアントの起動状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 最終的な解決状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 操作状態。状態コードが 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 カスタムドメイン名解決時に、解決結果のキャッシュキーを設定します
* @param[in] req リクエストインスタンス
* @param[in] key パラメーター名
* @param[in] value パラメーター値
* @return 操作状態。状態コードが 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 ソフトウェアカスタム解決の追加フィールドを返します
*
* @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 追加を書き込むバッファー
* @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 操作状態。状態コードが 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 クライアントのセッション ID を取得します。トラブルシューティングに使用されます
* @param[in] client クライアントインスタンス
* @param[out] session_id セッション ID
* @return 0 成功、それ以外の場合は失敗
* @note:
* - セッション ID は長さ 12 の文字列です。受信バッファーが 12 より大きいことを確認してください
*/
int hdns_client_get_session_id(hdns_client_t *client, char *session_id);キャッシュ管理
特定のドメイン名のローカル解決キャッシュを手動でクリアすることをサポートします。
/*
*
* @brief 特定のドメイン名のローカルキャッシュをクリアします
*
* @param[in] client クライアントインスタンス
* @param[in] host ドメイン名
* @return 操作状態。状態コードが 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 を書き込むバッファー
* @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 を書き込むバッファー
* @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 操作状態。状態コードが 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);