From: Yu Date: Tue, 26 Feb 2019 02:05:55 +0000 (+0900) Subject: Add function body to start dns lookup X-Git-Tag: submit/tizen/20190314.071214~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F08%2F200508%2F3;p=platform%2Fcore%2Fconnectivity%2Finm-manager.git Add function body to start dns lookup Change-Id: Ifd4cf2d1e0e9b1ef07ee21974ec78c7bded86bb4 Signed-off-by: Yu Jiung --- diff --git a/include/inm-dns-lookup.h b/include/inm-dns-lookup.h index f883cc1..68e63ee 100644 --- a/include/inm-dns-lookup.h +++ b/include/inm-dns-lookup.h @@ -40,6 +40,14 @@ typedef enum { 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(); diff --git a/src/inm-dns-lookup.c b/src/inm-dns-lookup.c index 4866bc9..0d94b8a 100644 --- a/src/inm-dns-lookup.c +++ b/src/inm-dns-lookup.c @@ -32,6 +32,101 @@ #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; @@ -43,5 +138,7 @@ int inm_dns_lookup_init() int inm_dns_lookup_deinit() { + __destroy_default_dns_lookup_data(); + return INM_DNS_LOOKUP_ERROR_NONE; }