Apply DNS configuration method
[platform/upstream/connman.git] / src / dhcp.c
old mode 100644 (file)
new mode 100755 (executable)
index 505d9f0..5b0beab
@@ -111,8 +111,14 @@ static bool apply_dhcp_invalidate_on_network(struct connman_dhcp *dhcp)
        }
        if (dhcp->nameservers) {
                for (i = 0; dhcp->nameservers[i]; i++) {
+#if defined TIZEN_EXT
+                       __connman_service_nameserver_remove(service,
+                                               dhcp->nameservers[i], false,
+                                               CONNMAN_IPCONFIG_TYPE_IPV4);
+#else
                        __connman_service_nameserver_remove(service,
                                                dhcp->nameservers[i], false);
+#endif
                }
        }
 
@@ -192,12 +198,16 @@ static int ipv4ll_start_client(struct connman_dhcp *dhcp)
        if (error != G_DHCP_CLIENT_ERROR_NONE)
                return -EINVAL;
 
+#if !defined TIZEN_EXT
        if (getenv("CONNMAN_DHCP_DEBUG")) {
+#endif
                dhcp->ipv4ll_debug_prefix = g_strdup_printf("IPv4LL index %d",
                                                        index);
                g_dhcp_client_set_debug(ipv4ll_client, dhcp_debug,
                                        dhcp->ipv4ll_debug_prefix);
+#if !defined TIZEN_EXT
        }
+#endif
 
        g_dhcp_client_set_id(ipv4ll_client);
 
@@ -355,18 +365,32 @@ static bool apply_lease_available_on_network(GDHCPClient *dhcp_client,
 
        if (!compare_string_arrays(nameservers, dhcp->nameservers)) {
                if (dhcp->nameservers) {
+#if defined TIZEN_EXT
+                       for (i = 0; dhcp->nameservers[i] != NULL; i++) {
+                               __connman_service_nameserver_remove(service,
+                                               dhcp->nameservers[i], false,
+                                               CONNMAN_IPCONFIG_TYPE_IPV4);
+                       }
+#else
                        for (i = 0; dhcp->nameservers[i]; i++) {
                                __connman_service_nameserver_remove(service,
                                                dhcp->nameservers[i], false);
                        }
+#endif
                        g_strfreev(dhcp->nameservers);
                }
 
                dhcp->nameservers = nameservers;
 
                for (i = 0; dhcp->nameservers && dhcp->nameservers[i]; i++) {
+#if defined TIZEN_EXT
+                       __connman_service_nameserver_append(service,
+                                               dhcp->nameservers[i], false,
+                                               CONNMAN_IPCONFIG_TYPE_IPV4);
+#else
                        __connman_service_nameserver_append(service,
                                                dhcp->nameservers[i], false);
+#endif
                }
        } else {
                g_strfreev(nameservers);
@@ -399,7 +423,8 @@ static bool apply_lease_available_on_network(GDHCPClient *dhcp_client,
                                                                dhcp->pac);
        }
 
-       __connman_6to4_probe(service);
+       if (connman_setting_get_bool("Enable6to4"))
+               __connman_6to4_probe(service);
 
        return true;
 }
@@ -461,11 +486,12 @@ static void lease_available_cb(GDHCPClient *dhcp_client, gpointer user_data)
        }
 
        if (!apply_lease_available_on_network(dhcp_client, dhcp))
-               return;
+               goto done;
 
        if (ip_change)
                dhcp_valid(dhcp);
 
+done:
        g_free(address);
        g_free(netmask);
        g_free(gateway);
@@ -474,8 +500,8 @@ static void lease_available_cb(GDHCPClient *dhcp_client, gpointer user_data)
 static void ipv4ll_available_cb(GDHCPClient *ipv4ll_client, gpointer user_data)
 {
        struct connman_dhcp *dhcp = user_data;
-       char *address, *netmask;
-       unsigned char prefixlen;
+               char *address, *netmask;
+               unsigned char prefixlen;
 
        DBG("IPV4LL available");
 
@@ -508,14 +534,25 @@ static int dhcp_initialize(struct connman_dhcp *dhcp)
 
        dhcp_client = g_dhcp_client_new(G_DHCP_IPV4, index, &error);
        if (error != G_DHCP_CLIENT_ERROR_NONE)
+#if defined TIZEN_EXT
+       {
+               DBG("failed g_dhcp_client_new(%d), index(%d)", error, index);
+#endif
                return -EINVAL;
+#if defined TIZEN_EXT
+       }
+#endif
 
+#if !defined TIZEN_EXT
        if (getenv("CONNMAN_DHCP_DEBUG")) {
+#endif
                dhcp->dhcp_debug_prefix = g_strdup_printf("DHCP index %d",
                                                        index);
                g_dhcp_client_set_debug(dhcp_client, dhcp_debug,
                                        dhcp->dhcp_debug_prefix);
+#if !defined TIZEN_EXT
        }
+#endif
 
        g_dhcp_client_set_id(dhcp_client);
 
@@ -582,6 +619,17 @@ static int dhcp_release(struct connman_dhcp *dhcp)
        return 0;
 }
 
+char *__connman_dhcp_get_server_address(struct connman_ipconfig *ipconfig)
+{
+       struct connman_dhcp *dhcp;
+
+       dhcp = g_hash_table_lookup(ipconfig_table, ipconfig);
+       if (!dhcp)
+               return NULL;
+
+       return g_dhcp_client_get_server_address(dhcp->dhcp_client);
+}
+
 int __connman_dhcp_start(struct connman_ipconfig *ipconfig,
                        struct connman_network *network, dhcp_cb callback,
                        gpointer user_data)
@@ -672,4 +720,6 @@ void __connman_dhcp_cleanup(void)
 
        g_hash_table_destroy(ipconfig_table);
        ipconfig_table = NULL;
+
+       dhcp_cleanup_random();
 }