[SPIN] Added the connman disconnect reason property. 06/74706/2
authorNiraj Kumar Goit <niraj.g@samsung.com>
Wed, 15 Jun 2016 14:43:09 +0000 (20:13 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Fri, 17 Jun 2016 10:33:30 +0000 (03:33 -0700)
Change-Id: I11fd7baa7d00fa3f3a12bdafda7ff7aa6943d020
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
gsupplicant/gsupplicant.h
gsupplicant/supplicant.c
include/network.h
plugins/wifi.c
src/dhcp.c
src/network.c
src/service.c

index 83525e3..8efa202 100755 (executable)
@@ -293,6 +293,7 @@ int g_supplicant_interface_disconnect(GSupplicantInterface *interface,
 
 #if defined TIZEN_EXT
 int g_supplicant_interface_remove_network(GSupplicantInterface *interface);
+int g_supplicant_interface_get_disconnect_reason(GSupplicantInterface *interface);
 #endif
 int g_supplicant_interface_set_apscan(GSupplicantInterface *interface,
                                                        unsigned int ap_scan);
index 6fb9c7b..89591fe 100755 (executable)
@@ -181,6 +181,9 @@ struct _GSupplicantInterface {
        GHashTable *bss_mapping;
        void *data;
        const char *pending_peer_path;
+#if defined TIZEN_EXT
+       int disconnect_reason;
+#endif
 };
 
 struct g_supplicant_bss {
@@ -2280,6 +2283,17 @@ static void interface_property(const char *key, DBusMessageIter *iter,
        } else if (g_strcmp0(key, "Networks") == 0) {
                supplicant_dbus_array_foreach(iter, interface_network_added,
                                                                interface);
+#if defined TIZEN_EXT
+       } else if (g_strcmp0(key, "DisconnectReason") == 0) {
+               int disconnect_reason = 0;
+
+               dbus_message_iter_get_basic(iter, &disconnect_reason);
+               interface->disconnect_reason = disconnect_reason;
+
+               SUPPLICANT_DBG("disconnect reason (%d)",
+                               interface->disconnect_reason);
+
+#endif
        } else
                SUPPLICANT_DBG("key %s type %c",
                                key, dbus_message_iter_get_arg_type(iter));
@@ -5651,6 +5665,23 @@ int g_supplicant_interface_remove_network(GSupplicantInterface *interface)
 
        return network_remove(data);
 }
+
+int g_supplicant_interface_get_disconnect_reason(GSupplicantInterface *interface)
+{
+       int reason_code = 0;
+
+       SUPPLICANT_DBG("");
+
+       if (interface == NULL)
+               return -EINVAL;
+
+       if (system_available == FALSE)
+               return -EFAULT;
+
+       reason_code = interface->disconnect_reason;
+
+       return reason_code;
+}
 #endif
 
 static const char *g_supplicant_rule0 = "type=signal,"
index c3d75ac..4b852b5 100755 (executable)
@@ -149,6 +149,9 @@ unsigned int connman_network_get_is_hs20AP(struct connman_network *network);
 int connman_network_set_keymgmt(struct connman_network *network,
                                unsigned int keymgmt);
 unsigned int connman_network_get_keymgmt(struct connman_network *network);
+int connman_network_set_disconnect_reason(struct connman_network *network,
+                               int reason_code);
+int connman_network_get_disconnect_reason(struct connman_network *network);
 #endif
 
 int connman_network_set_name(struct connman_network *network,
index f8642ad..632e138 100755 (executable)
@@ -2674,11 +2674,14 @@ static void interface_state(GSupplicantInterface *interface)
 
 #if defined TIZEN_EXT
                int err;
+               int reason_code = 0;
 
                err = g_supplicant_interface_remove_network(wifi->interface);
                if (err < 0)
                        DBG("Failed to remove network(%d)", err);
 
+               reason_code = g_supplicant_interface_get_disconnect_reason(wifi->interface);
+
                /* Some of Wi-Fi networks are not comply Wi-Fi specification.
                 * Retry association until its retry count is expired */
                if (handle_wifi_assoc_retry(network, wifi) == true) {
@@ -2687,6 +2690,11 @@ static void interface_state(GSupplicantInterface *interface)
                        break;
                }
 
+               if(reason_code > 0){
+                       DBG("Set disconnect reason code(%d)", reason_code);
+                       connman_network_set_disconnect_reason(network, reason_code);
+               }
+
                /* To avoid unnecessary repeated association in wpa_supplicant,
                 * "RemoveNetwork" should be made when Wi-Fi is disconnected */
                if (wps != true && wifi->network && wifi->disconnecting == false) {
index 5514c33..644aac6 100755 (executable)
@@ -528,7 +528,14 @@ 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")) {
index f67dbb6..57a1db3 100755 (executable)
@@ -100,6 +100,7 @@ struct connman_network {
                unsigned int keymgmt;
                char *keymgmt_type;
                bool rsn_selected;
+               int disconnect_reason;
 #endif
        } wifi;
 
@@ -1962,6 +1963,25 @@ unsigned int connman_network_get_keymgmt(struct connman_network *network)
 
        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,
index 2325f64..8140926 100755 (executable)
@@ -157,6 +157,13 @@ struct connman_service {
         */
        int user_pdn_connection_refcount;
        bool storage_reload;
+       /*
+        * Description: In case of EAP security type,
+        *                                user can select the keymgmt type for roaming(802.11r).
+        *                                - FT, CCKM, OKC, ...
+        */
+       char *keymgmt_type;
+       int disconnect_reason;
 #endif
 #if defined TIZEN_TV_EXT
        enum connman_dnsconfig_method dns_config_method;
@@ -2845,6 +2852,10 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
 
                connman_dbus_dict_append_dict(dict, "Ethernet",
                                                append_ethernet, service);
+
+               connman_dbus_dict_append_basic(dict, "DisconnectReason",
+                               DBUS_TYPE_INT32, &service->disconnect_reason);
+
                break;
 #endif
        case CONNMAN_SERVICE_TYPE_ETHERNET:
@@ -6540,6 +6551,7 @@ static int service_indicate_state(struct connman_service *service)
                reply_pending(service, ECONNABORTED);
 
                def_service = __connman_service_get_default();
+               service->disconnect_reason = connman_network_get_disconnect_reason(service->network);
 
                if (!__connman_notifier_is_connected() &&
                        def_service &&