Merge "Append AssocStatusCode Property for Wi-Fi Manager Layer" into tizen
[platform/upstream/connman.git] / src / service.c
index 4497b39..003b629 100755 (executable)
@@ -58,6 +58,10 @@ static unsigned int vpn_autoconnect_timeout = 0;
 static struct connman_service *current_default = NULL;
 static bool services_dirty = false;
 
+#if defined TIZEN_EXT
+static bool auto_connect_mode = TRUE;
+#endif
+
 struct connman_stats {
        bool valid;
        bool enabled;
@@ -156,6 +160,7 @@ struct connman_service {
         */
        char *keymgmt_type;
        int disconnect_reason;
+       int assoc_status_code;
 #endif
 #ifdef TIZEN_EXT
        enum connman_dnsconfig_method dns_config_method_ipv4;
@@ -3162,6 +3167,7 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
        unsigned int keymgmt;
        uint16_t frequency;
        const char *enc_mode;
+       const char *str;
        gboolean passpoint;
 
        ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
@@ -3190,6 +3196,41 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
                                        DBUS_TYPE_BOOLEAN, &passpoint);
        connman_dbus_dict_append_basic(dict, "Keymgmt",
                                        DBUS_TYPE_UINT32, &keymgmt);
+
+       str = connman_network_get_string(network, "WiFi.Security");
+       if (str != NULL && g_str_equal(str, "ieee8021x") == TRUE) {
+               str = connman_network_get_string(network, "WiFi.EAP");
+               if (str != NULL)
+                       connman_dbus_dict_append_basic(dict, "EAP",
+                                       DBUS_TYPE_STRING, &str);
+
+               str = connman_network_get_string(network, "WiFi.Phase2");
+               if (str != NULL)
+                       connman_dbus_dict_append_basic(dict, "Phase2",
+                                       DBUS_TYPE_STRING, &str);
+
+               str = connman_network_get_string(network, "WiFi.Identity");
+               if (str != NULL)
+                       connman_dbus_dict_append_basic(dict, "Identity",
+                                       DBUS_TYPE_STRING, &str);
+
+               str = connman_network_get_string(network, "WiFi.CACertFile");
+               if (str != NULL)
+                       connman_dbus_dict_append_basic(dict, "CACertFile",
+                                       DBUS_TYPE_STRING, &str);
+
+               str = connman_network_get_string(network,
+                               "WiFi.ClientCertFile");
+               if (str != NULL)
+                       connman_dbus_dict_append_basic(dict, "ClientCertFile",
+                                       DBUS_TYPE_STRING, &str);
+
+               str = connman_network_get_string(network,
+                               "WiFi.PrivateKeyFile");
+               if (str != NULL)
+                       connman_dbus_dict_append_basic(dict, "PrivateKeyFile",
+                                       DBUS_TYPE_STRING, &str);
+       }
 }
 #endif
 
@@ -3207,6 +3248,14 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_dbus_dict_append_basic(dict, "Frequency",
                                DBUS_TYPE_UINT16, &frequency);
        }
+       const void *wifi_vsie;
+       unsigned int wifi_vsie_len;
+       wifi_vsie = connman_network_get_blob(service->network, "WiFi.Vsie", &wifi_vsie_len);
+       if(wifi_vsie_len > 0) {
+               DBG("ConnMan, service->path=%s vsie length=%d", service->path, wifi_vsie_len);
+       }
+       connman_dbus_dict_append_fixed_array(dict, "Vsie", DBUS_TYPE_BYTE,
+                       &wifi_vsie, wifi_vsie_len);
 #endif
 
        str = __connman_service_type2string(service->type);
@@ -3284,6 +3333,9 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_dbus_dict_append_basic(dict, "DisconnectReason",
                                DBUS_TYPE_INT32, &service->disconnect_reason);
 
+               connman_dbus_dict_append_basic(dict, "AssocStatusCode",
+                               DBUS_TYPE_INT32, &service->assoc_status_code);
+
                break;
 #endif
        case CONNMAN_SERVICE_TYPE_ETHERNET:
@@ -3381,53 +3433,6 @@ void __connman_service_list_struct(DBusMessageIter *iter)
        g_list_foreach(service_list, append_struct, iter);
 }
 
-#if defined TIZEN_EXT
-static void append_wifi_vsie_properties(DBusMessageIter *iter,
-                                       struct connman_service *service)
-{
-       DBusMessageIter dict;
-       const void *wifi_vsie;
-       unsigned int wifi_vsie_len;
-
-       connman_dbus_dict_open(iter, &dict);
-
-       wifi_vsie = connman_network_get_blob(service->network, "WiFi.Vsie", &wifi_vsie_len);
-
-       if(wifi_vsie_len > 0) {
-               DBG("ConnMan, service->path=%s vsie length=%d", service->path, wifi_vsie_len);
-       }
-
-       connman_dbus_dict_append_fixed_array(&dict, "Vsie", DBUS_TYPE_BYTE,
-                       &wifi_vsie, wifi_vsie_len);
-
-       connman_dbus_dict_close(iter, &dict);
-}
-
-void __connman_wifi_vsie_list_struct(DBusMessageIter *iter)
-{
-       GList *list;
-       DBusMessageIter entry;
-
-       DBG("ConnMan, __connman_wifi_vsie_list_struct API called");
-
-       for (list = service_list; list; list = list->next) {
-               struct connman_service *service = list->data;
-
-               if (!service->path ||
-                               service->type !=  CONNMAN_SERVICE_TYPE_WIFI ||
-                               service->network == NULL)
-                       continue;
-
-               dbus_message_iter_open_container(iter, DBUS_TYPE_STRUCT,
-                               NULL, &entry);
-               dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH,
-                               &service->path);
-               append_wifi_vsie_properties(&entry, service);
-               dbus_message_iter_close_container(iter, &entry);
-       }
-}
-#endif
-
 bool __connman_service_is_hidden(struct connman_service *service)
 {
        return service->hidden;
@@ -4962,6 +4967,21 @@ static gboolean run_auto_connect(gpointer data)
        return FALSE;
 }
 
+#if defined TIZEN_EXT
+bool __connman_service_get_auto_connect_mode(void)
+{
+       return auto_connect_mode;
+}
+
+void __connman_service_set_auto_connect_mode(bool enable)
+{
+       DBG("set auto_connect_mode = %d", enable);
+
+       if (auto_connect_mode != enable)
+               auto_connect_mode = enable;
+}
+#endif
+
 void __connman_service_auto_connect(enum connman_service_connect_reason reason)
 {
        DBG("");
@@ -4969,6 +4989,13 @@ void __connman_service_auto_connect(enum connman_service_connect_reason reason)
        if (autoconnect_timeout != 0)
                return;
 
+#if defined TIZEN_EXT
+       if (auto_connect_mode == FALSE) {
+               DBG("Currently, not auto connection mode");
+               return;
+       }
+#endif
+
        if (!__connman_session_policy_autoconnect(reason))
                return;
 
@@ -5193,6 +5220,12 @@ static DBusMessage *connect_service(DBusConnection *conn,
         */
        if (service->type == CONNMAN_SERVICE_TYPE_CELLULAR)
                connman_service_user_pdn_connection_ref(service);
+
+       /*Reset the Disconnect Reason while issue connect request*/
+       service->disconnect_reason = 0;
+
+       /*Reset the association status code while issue connect request*/
+       service->assoc_status_code = 0;
 #endif
 
        if (service->pending)
@@ -7067,6 +7100,7 @@ static int service_indicate_state(struct connman_service *service)
 
                def_service = __connman_service_get_default();
                service->disconnect_reason = connman_network_get_disconnect_reason(service->network);
+               service->assoc_status_code = connman_network_get_assoc_status_code(service->network);
 
                if (!__connman_notifier_is_connected() &&
                        def_service &&
@@ -7107,6 +7141,9 @@ static int service_indicate_state(struct connman_service *service)
 
        case CONNMAN_SERVICE_STATE_FAILURE:
 #if defined TIZEN_EXT
+
+               service->assoc_status_code = connman_network_get_assoc_status_code(service->network);
+
                if (service->type == CONNMAN_SERVICE_TYPE_WIFI)
                        service->order = 5;
                __connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);