All Products
Search
Document Center

HTTPDNS:C SDK API

Last Updated:Jun 28, 2025

Menyediakan daftar API yang disediakan oleh SDK, didefinisikan dalam hdns_api.h milik SDK.

Pembuatan/Penghancuran Lingkungan SDK

SDK memerlukan inisialisasi sumber daya global penting seperti kumpulan koneksi, kumpulan thread, dan detektor jaringan. Sumber daya global ini dibagi oleh semua instance klien dan harus diinisialisasi sebelum membuat instance klien serta dilepaskan saat keluar dari penggunaan SDK.

/*
 * @brief Inisialisasi lingkungan SDK, terutama mencakup nomor acak global, kumpulan sesi, detektor jaringan, kumpulan thread
 * @return 0: inisialisasi berhasil; 1: inisialisasi gagal
 * @note:
 *  - Setelah memanggil antarmuka ini, pastikan untuk memanggil hdns_sdk_cleanup sekali untuk melepaskan sumber daya
 *  - Antarmuka ini tidak aman-thread
 */
int hdns_sdk_init();


/*
 *
 * @brief Bersihkan dan lepaskan lingkungan SDK HTTPDNS
 * @node :
 *  - Antarmuka ini tidak aman-thread
 */
void hdns_sdk_cleanup();

Pembuatan/Konfigurasi/Penjalanan/Penghancuran Klien

HTTPDNS mendukung inisialisasi beberapa instance klien menggunakan ID akun yang berbeda. Instance klien ini menangani interaksi dengan server HTTPDNS dan mengelola cache. Siklus hidup instance klien meliputi pembuatan, konfigurasi, penjalanan, dan penghancuran. SDK menyediakan antarmuka yang sesuai dengan siklus hidup ini.

/*
 * @brief Buat instance klien
 * @param[in]   account_id    ID akun HTTPDNS
 * @param[in]   secret_key    Kunci rahasia untuk menandatangani permintaan HTTP, bisa NULL jika penandatanganan tidak diperlukan
 * @return Mengembalikan instance klien jika pembuatan berhasil, jika tidak mengembalikan NULL
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_client_t *hdns_client_create(const char *account_id, const char *secret_key);

/*
 * @brief  Atur batas waktu maksimum untuk permintaan server tunggal ketika cache lokal tidak valid
 * @param[in]   client        Instance klien
 * @param[in]   timeout       Batas waktu dalam milidetik
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_timeout(hdns_client_t *client, int32_t timeout);

/*
 * @brief  Atur apakah layanan menggunakan cache lokal
 * @param[in]   client        Instance klien
 * @param[in]   using_cache    false: tidak menggunakan cache lokal, true: menggunakan cache lokal
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_using_cache(hdns_client_t *client, bool using_cache);

/*
 * @brief  Atur apakah menggunakan protokol https saat mengakses server HTTPDNS
 * @param[in]   client        Instance klien
 * @param[in]   using_https    false: tidak menggunakan protokol https, true: menggunakan protokol https
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_using_https(hdns_client_t *client, bool using_https);


/*
 * @brief  Atur apakah menandatangani permintaan saat mengakses server HTTPDNS
 * @param[in]   client        Instance klien
 * @param[in]   using_sign    false: tidak menandatangani, true: menandatangani
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_using_sign(hdns_client_t *client, bool using_sign);

/*
 * @brief   Atur jumlah percobaan ulang saat mengakses server HTTPDNS, default adalah 1
 * @param[in]   client        Instance klien
 * @param[in]   retry_times   Jumlah percobaan ulang
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_retry_times(hdns_client_t *client, int32_t retry_times);

/*
 * @brief   Atur kluster untuk mengakses server HTTPDNS
 * @param[in]   client        Instance klien
 * @param[in]   region        global: akses terdekat (default), cn: Tiongkok Daratan, hk: Hong Kong (Tiongkok), sg: Singapura, us: Amerika Serikat, de: Jerman
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_region(hdns_client_t *client, const char *region);

/*
 * @brief   Atur wilayah untuk pusat penjadwalan HTTPDNS
 * @param[in]   client        Instance klien
 * @param[in]   region        cn: Tiongkok Daratan (default), hk: Hong Kong (Tiongkok), sg: Singapura, us: Amerika Serikat, de: Jerman
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_set_schedule_center_region(hdns_client_t *client, const char *region);

/*
 * @brief   Apakah akan mengaktifkan pembaruan cache saat jaringan berubah
 * @param[in]   client        Instance klien
 * @param[in]   enable        true: segarkan, false: jangan segarkan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_enable_update_cache_after_net_change(hdns_client_t *client, bool enable);

/*
 * @brief   Apakah mengizinkan penggunaan IP kadaluarsa
 * @param[in]   client        Instance klien
 * @param[in]   enable        true: izinkan menggunakan IP kadaluarsa, false: jangan izinkan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_enable_expired_ip(hdns_client_t *client, bool enable);

/*
 * @brief   Apakah mengizinkan fallback ke DNS lokal
 * @param[in]   client        Instance klien
 * @param[in]   enable        true: izinkan menggunakan IP kadaluarsa, false: jangan izinkan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_enable_failover_localdns(hdns_client_t *client, bool enable);

/*
 * @brief   Tambahkan nama domain untuk praresolusi saat klien dimulai
 * @param[in]   client        Instance klien
 * @param[in]   host          Nama domain untuk praresolusi
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_add_pre_resolve_host(hdns_client_t *client, const char *host);

/*
 * @brief   Tambahkan nama domain dan port untuk deteksi IP, hanya satu port yang diizinkan untuk deteksi per domain
 * @param[in]   client        Instance klien
 * @param[in]   host          Nama domain untuk deteksi
 * @param[in]   port          Port untuk deteksi
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_add_ip_probe_item(hdns_client_t *client, const char *host, const int port);


/*
 * @brief   Tambahkan TTL resolusi kustom untuk nama domain tertentu, hanya berlaku untuk hasil resolusi HTTPDNS, tidak berlaku saat fallback ke DNS lokal
 * @param[in]   client        Instance klien
 * @param[in]   host          Nama domain untuk deteksi
 * @param[in]   ttl           TTL kustom
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
void hdns_client_add_custom_ttl_item(hdns_client_t *client, const char *host, const int ttl);


/*
 * @brief  Mulai klien, lakukan praresolusi domain secara asinkron dan ambil daftar server resolusi nama domain
 * @param[in]   client        Instance klien
 * @return  Status startup klien, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_status_t hdns_client_start(hdns_client_t *client);

/*
 *
 * @brief Bersihkan dan lepaskan sumber daya klien HTTPDNS
 *
 * @param[in]      client     Instance klien
 */
void hdns_client_cleanup(hdns_client_t *client);

Antarmuka Resolusi Nama Domain Standar

Setelah klien HTTPDNS dimulai, Anda dapat melakukan resolusi nama domain melalui antarmuka standar. Berdasarkan antarmuka sinkron/asinkron, menggunakan cache/tidak menggunakan cache untuk resolusi, serta resolusi domain tunggal/batch domain, SDK menyediakan total 8 antarmuka standar. Logika resolusi nama domain dari antarmuka sinkron hdns_get_result_for_host_sync_with_cache dan antarmuka asinkron hdns_get_result_for_host_async_with_cache setara dengan LocalDNS: pertama-tama periksa cache lokal, dan jika cache tidak tercapai, minta server DNS.

/*
 *
 * @brief Resolusi sinkron domain tunggal, memblokir thread, pertama-tama memeriksa cache, jika cache kosong maka meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis
 * @param[in]   client          Instance klien
 * @param[in]      host          Nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[out]     results         Hasil resolusi, memori perlu dilepaskan melalui hdns_list_cleanup
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Resolusi sinkron domain tunggal, memblokir thread, meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis
 * @param[in]      client        Instance klien
 * @param[in]      host          Nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[out]     results         Hasil resolusi, memori perlu dilepaskan melalui hdns_list_cleanup
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Resolusi sinkron batch domain, memblokir thread, pertama-tama memeriksa cache, jika cache kosong maka meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis
 *
 * @param[in]      client          Instance klien
 * @param[in]      hosts         Daftar nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[out]     results         Hasil resolusi, memori perlu dilepaskan melalui hdns_list_cleanup
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Resolusi sinkron batch domain, memblokir thread, meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis
 *
 * @param[in]      client        Instance klien
 * @param[in]      hosts         Daftar nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[out]     results         Hasil resolusi, memori perlu dilepaskan melalui hdns_list_cleanup
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Fungsi callback resolusi asinkron
 * @param[in]   status    Status resolusi akhir, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @param[in]   results   Daftar hasil resolusi
 * @param[in]   param     Parameter kustom yang ditentukan pengguna
 */
typedef void (*hdns_resv_done_callback_pt)(hdns_status_t *status, hdns_list_head_t *results, void *param);
/*
 *
 * @brief Resolusi asinkron domain tunggal, tidak memblokir thread, pertama-tama memeriksa cache, jika cache kosong maka meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis, akhirnya memicu fungsi callback
 *
 * @param[in]      client        Instance klien
 * @param[in]      host          Nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[in]   cb              Fungsi callback setelah resolusi selesai
 * @param[in]   cb_param        Parameter kustom pengguna untuk fungsi callback
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Resolusi asinkron domain tunggal, tidak memblokir thread, meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis, akhirnya memicu fungsi callback
 *
 * @param[in]      client        Instance klien
 * @param[in]      host          Nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[in]   cb              Fungsi callback setelah resolusi selesai
 * @param[in]   cb_param        Parameter kustom pengguna untuk fungsi callback
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Resolusi asinkron batch domain, tidak memblokir thread, pertama-tama memeriksa cache, jika cache kosong maka meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis, akhirnya memicu fungsi callback
 *
 * @param[in]      client          Instance klien
 * @param[in]      hosts         Daftar nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[in]   cb              Fungsi callback setelah resolusi selesai
 * @param[in]   cb_param        Parameter kustom pengguna untuk fungsi callback
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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 Resolusi asinkron batch domain, tidak memblokir thread, meminta server HTTPDNS, hingga hasil dikembalikan atau waktu habis, akhirnya memicu fungsi callback
 *
 * @param[in]      client          Instance klien
 * @param[in]      hosts         Daftar nama domain yang akan diselesaikan
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[in]      client_ip Opsional, IP klien, default adalah IP keluar dari pemanggil antarmuka
 * @param[in]   cb              Fungsi callback setelah resolusi selesai
 * @param[in]   cb_param        Parameter kustom pengguna untuk fungsi callback
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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);

Antarmuka Resolusi Nama Domain Kustom

SDK menyediakan antarmuka resolusi nama domain kustom. Pengguna dapat mengonfigurasi parameter permintaan resolusi melalui antarmuka, terutama digunakan untuk skenario resolusi kustom yang perlu meneruskan parameter bisnis.

/*
 * @brief   Resolusi sinkron kustom
 * @param[in]   client          Instance klien
 * @param[in]   req             Instance permintaan resolusi kustom
 * @param[out]  results         Hasil resolusi, memori perlu dilepaskan melalui hdns_list_cleanup
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_list_head_t tidak aman-thread, saat dibagi di beberapa thread, sinkronisasi harus dicapai melalui sarana seperti mutex
 */
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   Pertama-tama lakukan resolusi asinkron kustom, akhirnya picu fungsi callback
 * @param[in]   client          Instance klien
 * @param[in]   req             Instance permintaan resolusi kustom
 * @param[in]   cb              Fungsi callback setelah resolusi selesai
 * @param[in]   cb_param        Parameter kustom pengguna untuk fungsi callback
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_client_t aman-thread dan dapat dibagi di beberapa thread
 */
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   Saat resolusi nama domain kustom, buat instance permintaan resolusi
 * @param[in]   client        Instance klien
 * @return  Instance permintaan yang sesuai dengan klien
 * @note :
 *    - hdns_resv_req_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_resv_req_t *hdns_resv_req_create(hdns_client_t *client);

/*
 * @brief   Saat resolusi nama domain kustom, atur IP klien untuk instance permintaan
 * @param[in]   client        Instance klien
 * @param[in]   client_ip     IP klien
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_resv_req_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_status_t hdns_resv_req_set_client_ip(hdns_resv_req_t *req, const char *client_ip);

/*
 * @brief   Saat resolusi nama domain kustom, atur nama domain untuk instance permintaan
 * @param[in]   req          Instance permintaan
 * @param[in]   host          Nama domain yang akan diselesaikan
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_resv_req_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_status_t hdns_resv_req_set_host(hdns_resv_req_t *req, const char *host);

/*
 * @brief   Saat resolusi nama domain kustom, tambahkan pasangan parameter bisnis
 * @param[in]   req          Instance permintaan
 * @param[in]   key           Nama parameter
 * @param[in]   value         Nilai parameter
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_resv_req_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_status_t hdns_resv_req_append_sdns_param(hdns_resv_req_t *req, const char *key, const char *value);

/*
 * @brief   Saat resolusi nama domain kustom, atur jenis resolusi DNS untuk instance permintaan
 * @param[in]   req          Instance permintaan
 * @param[in]   query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_resv_req_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_status_t hdns_resv_req_set_query_type(hdns_resv_req_t *req, hdns_query_type_t query_type);

/*
 * @brief   Saat resolusi nama domain kustom, atur kunci cache untuk hasil resolusi
 * @param[in]   req          Instance permintaan
 * @param[in]   key           Nama parameter
 * @param[in]   value         Nilai parameter
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_resv_req_t aman-thread dan dapat dibagi di beberapa thread
 */
hdns_status_t hdns_resv_req_set_cache_key(hdns_resv_req_t *req, const char *cache_key);

/*
 * @brief   Saat resolusi nama domain kustom, lepaskan sumber daya instance permintaan
 * @param[in]   req          Instance permintaan
 */
void hdns_resv_req_cleanup(hdns_resv_req_t *req);


/*
 *
 * @brief Kembalikan bidang ekstra dalam resolusi kustom perangkat lunak
 *
 * @param[in]      results       Hasil resolusi yang sudah diperoleh
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[out]     extra      Buffer untuk menulis ekstra
 * @return  Status operasi, 0 menunjukkan keberhasilan, jika tidak kegagalan
 */
int hdns_get_sdns_extra(hdns_list_head_t *results, hdns_query_type_t query_type, char *extra);

Pemecahan Masalah dan Pelacakan

SDK menyediakan fungsi pencatatan log dan pelacakan sesi untuk pemecahan masalah saat resolusi tidak sesuai harapan. Log dicetak ke konsol secara default, dengan level log warn. Setiap instance klien menghasilkan SessionID yang berinteraksi dengan server dan tetap valid selama siklus hidup instance klien. SessionID dikirim ke server selama setiap permintaan. Ketika hasil resolusi tidak sesuai harapan, SessionID ini dapat membantu menentukan penyebab masalah.

/*
 *
 * @brief Atur jalur file log SDK
 *
 * @param[in]      file_path     Jalur file log
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 */
hdns_status_t hdns_log_set_log_file_path(const char *file_path);


/*
 *
 * @brief Atur level log SDK
 *
 * @param[in]      level     Level log
 *    - HDNS_LOG_OFF    Jangan buka log
 *    - HDNS_LOG_FATAL  level fatal dan di bawahnya
 *    - HDNS_LOG_ERROR  level error dan di bawahnya
 *    - HDNS_LOG_WARN   level warn dan di bawahnya
 *    - HDNS_LOG_INFO   level info dan di bawahnya
 *    - HDNS_LOG_DEBUG  level debug dan di bawahnya
 *    - HDNS_LOG_TRACE  level trace dan di bawahnya
 */
void hdns_log_set_log_level(hdns_log_level_e level);

/*
 * @brief   Dapatkan session id klien, digunakan untuk pemecahan masalah
 * @param[in]   client        Instance klien
 * @param[out]   session_id    session id
 * @return 0 berhasil, jika tidak gagal
 * @note:
 *    - session id adalah string dengan panjang 12, pastikan buffer penerima lebih besar dari 12
 */
int hdns_client_get_session_id(hdns_client_t *client, char *session_id);

Manajemen Cache

Mendukung pembersihan manual cache resolusi lokal untuk nama domain tertentu.

/*
 *
 * @brief Bersihkan cache lokal untuk nama domain tertentu
 *
 * @param[in]      client     Instance klien
 * @param[in]      host       Nama domain
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 */
void hdns_remove_host_cache(hdns_client_t *client, const char *host);

Antarmuka Bantu

Antarmuka utilitas, digunakan untuk mengurangi kompleksitas penggunaan SDK bagi pengguna.

/*
 *
 * @brief Pilih secara acak IP dari daftar resolusi, IPv4 diprioritaskan dalam dual-stack, hanya berlaku untuk resolusi domain tunggal
 *
 * @param[in]      results       Hasil resolusi yang sudah diperoleh
 * @param[in]      query_type *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[out]     ip            Buffer untuk menulis IP
 * @return  Status operasi, 0 menunjukkan keberhasilan, jika tidak kegagalan
 */
int hdns_select_ip_randomly(hdns_list_head_t *results, hdns_query_type_t query_type, char *ip);

/*
 *
 * @brief Kembalikan IP pertama dalam daftar IP resolusi, jika optimisasi IP diaktifkan, sering kali berarti IP optimal, hanya berlaku untuk resolusi domain tunggal
 *
 * @param[in]      results       Hasil resolusi yang sudah diperoleh
 * @param[in]      query_type    Jenis permintaan
 *         - HDNS_QUERY_AUTO: Secara otomatis menyelesaikan berdasarkan tumpukan jaringan;
 *         - HDNS_QUERY_IPV4: Menyelesaikan tipe IPV4;
 *         - HDNS_QUERY_IPV6: Menyelesaikan tipe IPV6;
 *         - HDNS_QUERY_BOTH: Menyelesaikan kedua tipe IPV4 dan IPV6
 * @param[out]     ip            Buffer untuk menulis IP
 * @return  Status operasi, 0 menunjukkan keberhasilan, jika tidak kegagalan
 */
int hdns_select_first_ip(hdns_list_head_t *results, hdns_query_type_t query_type, char *ip);

/*
 * @brief   Buat instance daftar tertaut
 * @return  Instance daftar tertaut, mengembalikan NULL jika gagal
 * @note :
 *    - hdns_list_head_t tidak aman-thread, saat dibagi di beberapa thread, sinkronisasi harus dicapai melalui sarana seperti mutex
 */
hdns_list_head_t *hdns_list_create();

/*
 * @brief   Tambahkan string ke daftar tertaut
 * @return  Status operasi, jika kode status 0 menunjukkan keberhasilan, jika tidak kegagalan, error_msg berisi informasi kesalahan
 * @note :
 *    - hdns_list_head_t tidak aman-thread, saat dibagi di beberapa thread, sinkronisasi harus dicapai melalui sarana seperti mutex
 */
hdns_status_t hdns_list_add_str(hdns_list_head_t *list, const char *str);

/*
 * @brief   Lepaskan sumber daya daftar tertaut
 * @param[in]   list          Instance daftar yang akan dilepaskan
 * @note :
 *    - hdns_list_head_t tidak aman-thread, saat dibagi di beberapa thread, sinkronisasi harus dicapai melalui sarana seperti mutex
 */
void hdns_list_cleanup(hdns_list_head_t *list);