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