Apply DNS configuration method
[platform/upstream/connman.git] / src / network.c
index 0d6b442..2585841 100755 (executable)
@@ -97,7 +97,10 @@ struct connman_network {
                unsigned char bssid[WIFI_BSSID_LEN_MAX];
                unsigned int maxrate;
                unsigned int isHS20AP;
-               bool rsn_selected;
+               unsigned int keymgmt;
+               char *keymgmt_type;
+               bool rsn_mode;
+               int disconnect_reason;
 #endif
        } wifi;
 
@@ -844,23 +847,6 @@ static void network_remove(struct connman_network *network)
        network->driver = NULL;
 }
 
-static void network_change(struct connman_network *network)
-{
-       DBG("network %p name %s", network, network->name);
-
-       if (!network->connected)
-               return;
-
-       connman_device_set_disconnected(network->device, true);
-
-       if (network->driver && network->driver->disconnect) {
-               network->driver->disconnect(network);
-               return;
-       }
-
-       network->connected = false;
-}
-
 static void probe_driver(struct connman_network_driver *driver)
 {
        GSList *list;
@@ -1201,6 +1187,15 @@ bool __connman_network_get_weakness(struct connman_network *network)
        return false;
 }
 
+#if defined TIZEN_EXT
+void connman_network_set_connecting(struct connman_network *network)
+{
+       DBG("set network connecting true");
+       network->connecting = TRUE;
+       return;
+}
+#endif
+
 bool connman_network_get_connecting(struct connman_network *network)
 {
        return network->connecting;
@@ -1365,8 +1360,13 @@ static void set_associate_error(struct connman_network *network)
 
        service = connman_service_lookup_from_network(network);
 
+#if defined TIZEN_EXT
+       __connman_service_indicate_error(service,
+                                       CONNMAN_SERVICE_ERROR_AUTH_FAILED);
+#else
        __connman_service_indicate_error(service,
                                        CONNMAN_SERVICE_ERROR_CONNECT_FAILED);
+#endif
 }
 
 static void set_configure_error(struct connman_network *network)
@@ -1385,6 +1385,10 @@ static void set_invalid_key_error(struct connman_network *network)
 
        service = connman_service_lookup_from_network(network);
 
+#if defined TIZEN_EXT
+       if (service)
+               __connman_service_set_favorite(service, false);
+#endif
        __connman_service_indicate_error(service,
                                        CONNMAN_SERVICE_ERROR_INVALID_KEY);
 }
@@ -1399,6 +1403,32 @@ static void set_connect_error(struct connman_network *network)
                                        CONNMAN_SERVICE_ERROR_CONNECT_FAILED);
 }
 
+static void set_blocked_error(struct connman_network *network)
+{
+       struct connman_service *service;
+
+       service = connman_service_lookup_from_network(network);
+
+       __connman_service_indicate_error(service,
+                                       CONNMAN_SERVICE_ERROR_BLOCKED);
+}
+
+
+#if defined TIZEN_EXT
+static void set_dhcp_error(struct connman_network *network)
+{
+       struct connman_service *service;
+
+       if (network->associating != FALSE)
+               network->associating = FALSE;
+
+       service = connman_service_lookup_from_network(network);
+
+       __connman_service_indicate_error(service,
+                                       CONNMAN_SERVICE_ERROR_DHCP_FAILED);
+}
+#endif
+
 void connman_network_set_ipv4_method(struct connman_network *network,
                                        enum connman_ipconfig_method method)
 {
@@ -1438,9 +1468,6 @@ void connman_network_set_error(struct connman_network *network,
 {
        DBG("network %p error %d", network, error);
 
-       network->connecting = false;
-       network->associating = false;
-
        switch (error) {
        case CONNMAN_NETWORK_ERROR_UNKNOWN:
                return;
@@ -1456,9 +1483,19 @@ void connman_network_set_error(struct connman_network *network,
        case CONNMAN_NETWORK_ERROR_CONNECT_FAIL:
                set_connect_error(network);
                break;
+#if defined TIZEN_EXT
+       case CONNMAN_NETWORK_ERROR_DHCP_FAIL:
+               set_dhcp_error(network);
+               break;
+#endif
+
+       case CONNMAN_NETWORK_ERROR_BLOCKED:
+               set_blocked_error(network);
+               break;
+
        }
 
-       network_change(network);
+       __connman_network_disconnect(network);
 }
 
 /**
@@ -1479,8 +1516,7 @@ int connman_network_set_connected(struct connman_network *network,
                                                        !connected) {
                connman_network_set_error(network,
                                        CONNMAN_NETWORK_ERROR_CONNECT_FAIL);
-               if (__connman_network_disconnect(network) == 0)
-                       return 0;
+               return 0;
        }
 
        if (network->connected == connected)
@@ -1693,6 +1729,29 @@ int __connman_network_clear_ipconfig(struct connman_network *network,
        return 0;
 }
 
+#if defined TIZEN_EXT
+void __connman_network_set_auto_ipv6_gateway(char *gateway, void *user_data)
+{
+       DBG("");
+
+       struct connman_network *network = user_data;
+       struct connman_service *service;
+       struct connman_ipconfig *ipconfig = NULL;
+
+       service = connman_service_lookup_from_network(network);
+       if (service == NULL)
+               return;
+
+       ipconfig = __connman_service_get_ipconfig(service, AF_INET6);
+       if (ipconfig == NULL)
+               return;
+
+       __connman_ipconfig_set_gateway(ipconfig, gateway);
+
+       return;
+}
+#endif
+
 int __connman_network_enable_ipconfig(struct connman_network *network,
                                struct connman_ipconfig *ipconfig)
 {
@@ -1876,10 +1935,10 @@ const char *connman_network_get_enc_mode(struct connman_network *network)
        return (const char *)network->wifi.encryption_mode;
 }
 
-int connman_network_set_rsn_selected(struct connman_network *network,
-                               bool rsn_selected)
+int connman_network_set_rsn_mode(struct connman_network *network,
+                               bool rsn_mode)
 {
-       network->wifi.rsn_selected = rsn_selected;
+       network->wifi.rsn_mode = rsn_mode;
 
        return 0;
 }
@@ -1921,6 +1980,44 @@ unsigned int connman_network_get_is_hs20AP(struct connman_network *network)
 
        return network->wifi.isHS20AP;
 }
+
+int connman_network_set_keymgmt(struct connman_network *network,
+                               unsigned int keymgmt)
+{
+       if (network == NULL)
+               return 0;
+
+       network->wifi.keymgmt = keymgmt;
+
+       return 0;
+}
+
+unsigned int connman_network_get_keymgmt(struct connman_network *network)
+{
+       if (network == NULL)
+               return 0;
+
+       return network->wifi.keymgmt;
+}
+
+int connman_network_set_disconnect_reason(struct connman_network *network,
+                               int reason_code)
+{
+       if (network == NULL)
+               return 0;
+
+       network->wifi.disconnect_reason = reason_code;
+
+       return 0;
+}
+
+int connman_network_get_disconnect_reason(struct connman_network *network)
+{
+       if (network == NULL)
+               return 0;
+
+       return network->wifi.disconnect_reason;
+}
 #endif
 
 int connman_network_set_nameservers(struct connman_network *network,
@@ -1944,8 +2041,14 @@ int connman_network_set_nameservers(struct connman_network *network,
        nameservers_array = g_strsplit(nameservers, " ", 0);
 
        for (i = 0; nameservers_array[i]; i++) {
+#if defined TIZEN_EXT
+               __connman_service_nameserver_append(service,
+                                               nameservers_array[i], false,
+                                               CONNMAN_IPCONFIG_TYPE_ALL);
+#else
                __connman_service_nameserver_append(service,
                                                nameservers_array[i], false);
+#endif
        }
 
        g_strfreev(nameservers_array);
@@ -2135,7 +2238,7 @@ const char *connman_network_get_string(struct connman_network *network,
                return network->wifi.mode;
        else if (g_str_equal(key, "WiFi.Security"))
 #if defined TIZEN_EXT
-               if (network->wifi.rsn_selected != true ||
+               if (network->wifi.rsn_mode != true ||
                    g_str_equal(network->wifi.security, "ieee8021x"))
                        return network->wifi.security;
                else