INM_DNS_LOOKUP_ERROR_TIMEOUT,
} inm_dns_lookup_error_e;
+typedef void (*inm_default_dns_lookup_callback)(
+ inm_dns_lookup_error_e err,
+ gboolean found,
+ gchar *host_name,
+ gpointer user_data);
+
+int inm_default_dns_lookup_start(inm_default_dns_lookup_callback cb, gpointer user_data);
+
int inm_dns_lookup_init();
int inm_dns_lookup_deinit();
#include "inm-util.h"
#include "inm-dns-lookup.h"
+#define ARES_DEFAULT_TIMEOUT_MS 1000
+#define DEFAULT_TEST_URL "www.tizen.org"
+
+typedef struct {
+ guint timer_source_id;
+ inm_default_dns_lookup_callback cb;
+ gpointer cb_user_data;
+} inm_dns_lookup_s;
+
+static inm_dns_lookup_s *g_default_dns_lookup_data;
+
+static inline int __create_default_dns_lookup_data()
+{
+ inm_dns_lookup_s *dns_lookup_data = NULL;
+
+ dns_lookup_data = g_try_malloc0(sizeof(inm_dns_lookup_s));
+ if (!dns_lookup_data) {
+ INM_LOGI("");
+ return -1;
+ }
+
+ g_default_dns_lookup_data = dns_lookup_data;
+ return 0;
+}
+
+static inline void __destroy_default_dns_lookup_data()
+{
+ inm_dns_lookup_s *dns_lookup_data;
+
+ __INM_FUNC_ENTER__;
+ if (!g_default_dns_lookup_data) {
+ __INM_FUNC_EXIT__;
+ return;
+ }
+ dns_lookup_data = g_default_dns_lookup_data;
+ g_default_dns_lookup_data = NULL;
+
+ REMOVE_G_SOURCE(dns_lookup_data->timer_source_id);
+
+ __INM_FUNC_EXIT__;
+ return;
+}
+
+static gboolean __default_dns_lookup_timer_cb(gpointer user_data)
+{
+ inm_dns_lookup_s *dns_lookup_data;
+
+ __INM_FUNC_ENTER__;
+ if (!g_default_dns_lookup_data) {
+ __INM_FUNC_EXIT__;
+ return FALSE;
+ }
+
+ PRINT_LOG("default dns lookup timeout");
+ dns_lookup_data = g_default_dns_lookup_data;
+ dns_lookup_data->cb(INM_DNS_LOOKUP_ERROR_TIMEOUT,
+ FALSE,
+ DEFAULT_TEST_URL,
+ dns_lookup_data->cb_user_data);
+
+ /* timer source'll be freed automatically
+ * if this function returns FALSE */
+ dns_lookup_data->timer_source_id = 0;
+ __destroy_default_dns_lookup_data();
+
+ __INM_FUNC_EXIT__;
+ return FALSE;
+}
+
+int inm_default_dns_lookup_start(inm_default_dns_lookup_callback cb, gpointer user_data)
+{
+ int ret;
+
+ if (g_default_dns_lookup_data) {
+ INM_LOGI("");
+ return INM_DNS_LOOKUP_ERROR_IN_PROGRESS;
+ }
+
+ ret = __create_default_dns_lookup_data();
+ if (ret != 0) {
+ INM_LOGI("");
+ return INM_DNS_LOOKUP_ERROR_OPERATION_FAILED;
+ }
+
+ g_default_dns_lookup_data->cb = cb;
+ g_default_dns_lookup_data->cb_user_data = user_data;
+
+ g_default_dns_lookup_data->timer_source_id =
+ g_timeout_add(ARES_DEFAULT_TIMEOUT_MS,
+ __default_dns_lookup_timer_cb,
+ NULL);
+
+ return 0;
+}
+
int inm_dns_lookup_init()
{
int version;
int inm_dns_lookup_deinit()
{
+ __destroy_default_dns_lookup_data();
+
return INM_DNS_LOOKUP_ERROR_NONE;
}