すべてのプロダクト
Search
ドキュメントセンター

HTTPDNS:C SDK API

最終更新日:Jun 28, 2025

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