Release TIZEN beta
authorDanny Jeongseok Seo <s.seo@samsung.com>
Fri, 10 Feb 2012 06:50:20 +0000 (15:50 +0900)
committerDanny Jeongseok Seo <s.seo@samsung.com>
Fri, 10 Feb 2012 06:50:20 +0000 (15:50 +0900)
16 files changed:
Makefile.am
configure.ac
debian/changelog
doc/service-api.txt
gdbus/mainloop.c
gsupplicant/gsupplicant.h
gsupplicant/supplicant.c
include/network.h
plugins/alwayson.c
plugins/sonet.c
plugins/wifi.c
src/connman-dbus.conf
src/connman-polkit.conf
src/network.c
src/notifier.c
src/service.c

index b432201..218c442 100644 (file)
@@ -228,7 +228,7 @@ DISTCHECK_CONFIGURE_FLAGS = --disable-gtk-doc \
                                --enable-bluetooth \
                                --enable-ofono \
                                --enable-sonet \
-                               --enable-sec-ext \
+                               --enable-tizen-ext \
                                --enable-alwayson \
                                --enable-pacrunner \
                                --enable-google \
index 3f4deca..2899994 100755 (executable)
@@ -178,7 +178,7 @@ AM_CONDITIONAL(VPNC_BUILTIN, test "${enable_vpnc}" = "builtin")
 
 AC_ARG_ENABLE(loopback,
        AC_HELP_STRING([--enable-loopback], [enable loopback support]),
-                       [enable_loopback=${enableval}], [enable_loopback="no"])
+                       [enable_loopback=${enableval}], [enable_loopback="yes"])
 if (test "${enable_loopback}" != "no"); then
        AC_CHECK_HEADERS(sys/inotify.h, dummy=yes,
                        AC_MSG_ERROR(inotify header files are required))
index 1f50abe..68fadc3 100644 (file)
@@ -1,10 +1,77 @@
+connman (0.77.2-0slp2+63) unstable; urgency=low
+
+  * Change sonet's dbus service name
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+63
+
+ -- Sunkey Lee <yuvjjang.lee@samsung.com>  Thu, 09 Feb 2012 10:36:51 +0900
+
+connman (0.77.2-0slp2+62) unstable; urgency=low
+
+  * Add mixed wifi encryption mode to service interface
+  * Lookup a matched service using essid and update it immediately when Manager.ProvisionService is invoked
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+62
+
+ -- Jaehyun Kim <jeik01.kim@samsung.com>  Thu, 02 Feb 2012 20:00:10 +0900
+
+connman (0.77.2-0slp2+61) unstable; urgency=low
+
+  * Add a propertiy(wifi encryption mode) to service interface
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+61
+
+ -- Jaehyun Kim <jeik01.kim@samsung.com>  Wed, 01 Feb 2012 16:42:26 +0900
+
+connman (0.77.2-0slp2+60) unstable; urgency=low
+
+  * Fix wifi disconnect callback bug
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+60
+
+ -- Sunkey Lee <yuvjjang.lee@samsung.com>  Tue, 31 Jan 2012 16:20:46 +0900
+
+connman (0.77.2-0slp2+59) unstable; urgency=low
+
+  * Enable loopback plugin
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+59
+
+ -- Sunkey Lee <yuvjjang.lee@samsung.com>  Wed, 25 Jan 2012 14:29:57 +0900
+
+connman (0.77.2-0slp2+58) unstable; urgency=low
+
+  * Modify the way to set dbus access authority
+  * According to security plicy, change to use ID from string
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+58
+
+ -- Sanghoon Cho <sanghoon80.cho@samsung.com>  Tue, 17 Jan 2012 17:13:02 +0900
+
+connman (0.77.2-0slp2+57) unstable; urgency=low
+
+  * Fix a disconnect callback crash
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+57
+
+ -- Sunkey Lee <yuvjjang.lee@samsung.com>  Thu, 12 Jan 2012 21:50:24 +0900
+
+connman (0.77.2-0slp2+56) unstable; urgency=low
+
+  * Fix a bug
+  * The WPS flag("UseWPS") is not cleared when cancel the wps connection
+  * Git: pkgs/c/connman
+  * Tag: connman_0.77.2-0slp2+56
+
+ -- Sanghoon Cho <sanghoon80.cho@samsung.com>  Thu, 12 Jan 2012 20:36:07 +0900
+
 connman (0.77.2-0slp2+55) unstable; urgency=low
 
   * Release connman_0.77.2-0slp2+55
   * Git: pkgs/c/connman
   * Tag: connman_0.77.2-0slp2+55
 
- -- DongHoo Park <donghoo.park@samsung.com>  Fri, 23 Dec 2011 12:50:07 +0900
+ -- Jaehyun Kim <jeik01.kim@samsung.com>  Thu, 12 Jan 2012 11:20:49 +0900
 
 connman (0.77.2-0slp2+54) unstable; urgency=low
 
index 2123e91..63e98c5 100644 (file)
@@ -200,6 +200,32 @@ Properties string State [readonly]
                        passphrase is needed, then this property will
                        be set to false.
 
+               string BSSID [readonly]
+
+                       If the service type is WiFi, then this property
+                       indicates the BSSID of the service.
+
+               uint32 MaxRate [readonly]
+
+                       If the service type is WiFi, then this property
+                       indicates the Maximum speed(bps) of the service.
+
+               uint16 Frequency [readonly]
+
+                       If the service type is WiFi, then this property
+                       indicates the frequency band(MHz) of the service.
+
+               string EncryptionMode [readonly]
+
+                       If the service type is WiFi, then this property
+                       indicates the key encryption mode.
+
+                       Possible values are "none", "wep", "tkip", "aes"
+                       and "mixed".
+
+                       This property might be only present for WiFi
+                       services.
+
                uint8 Strength [readonly]
 
                        Indicates the signal strength of the service. This
index f97748a..8718da0 100644 (file)
@@ -200,11 +200,6 @@ static void timeout_handler_free(void *data)
 {
        struct timeout_handler *handler = data;
 
-#if defined TIZEN_EXT
-       if (handler == NULL)
-               return;
-#endif
-
        if (handler->id > 0) {
                g_source_remove(handler->id);
                handler->id = 0;
index c39d596..b8f898e 100644 (file)
@@ -198,6 +198,16 @@ const char *g_supplicant_network_get_security(GSupplicantNetwork *network);
 dbus_int16_t g_supplicant_network_get_signal(GSupplicantNetwork *network);
 dbus_bool_t g_supplicant_network_get_wps(GSupplicantNetwork *network);
 
+#if defined TIZEN_EXT
+/*
+ * Description: Network client requires additional wifi specific info
+ */
+const unsigned char *g_supplicant_network_get_bssid(GSupplicantNetwork *network);
+unsigned int g_supplicant_network_get_maxrate(GSupplicantNetwork *network);
+unsigned short g_supplicant_network_get_frequency(GSupplicantNetwork *network);
+const char *g_supplicant_network_get_enc_mode(GSupplicantNetwork *network);
+#endif
+
 struct _GSupplicantCallbacks {
        void (*system_ready) (void);
        void (*system_killed) (void);
index 0ae13e5..d58c7ee 100644 (file)
@@ -803,6 +803,53 @@ dbus_bool_t g_supplicant_network_get_wps(GSupplicantNetwork *network)
        return network->wps;
 }
 
+#if defined TIZEN_EXT
+/*
+ * Description: Network client requires additional wifi specific info
+ */
+const unsigned char *g_supplicant_network_get_bssid(GSupplicantNetwork *network)
+{
+       if (network == NULL || network->best_bss == NULL)
+               return NULL;
+
+       return (const unsigned char *)network->best_bss->bssid;
+}
+
+unsigned int g_supplicant_network_get_maxrate(GSupplicantNetwork *network)
+{
+       if (network == NULL || network->best_bss == NULL)
+               return 0;
+
+       return network->best_bss->maxrate;
+}
+
+unsigned short g_supplicant_network_get_frequency(GSupplicantNetwork *network)
+{
+       if (network == NULL || network->best_bss == NULL)
+               return 0;
+
+       return network->best_bss->frequency;
+}
+
+const char *g_supplicant_network_get_enc_mode(GSupplicantNetwork *network)
+{
+       if (network == NULL || network->best_bss == NULL)
+               return NULL;
+
+       if ((network->best_bss->pairwise & G_SUPPLICANT_PAIRWISE_CCMP) &&
+           (network->best_bss->pairwise & G_SUPPLICANT_PAIRWISE_TKIP))
+               return "mixed";
+       else if (network->best_bss->pairwise & G_SUPPLICANT_PAIRWISE_CCMP)
+               return "aes";
+       else if (network->best_bss->pairwise & G_SUPPLICANT_PAIRWISE_TKIP)
+               return "tkip";
+       else if (network->best_bss->security == G_SUPPLICANT_SECURITY_WEP)
+               return "wep";
+
+       return "none";
+}
+#endif
+
 static void merge_network(GSupplicantNetwork *network)
 {
        GString *str;
@@ -3086,10 +3133,6 @@ static void network_remove_result(const char *error,
 
        SUPPLICANT_DBG("");
 
-       interface = g_hash_table_lookup(interface_table, data->path);
-       if (interface == NULL)
-               return;
-
        if (error != NULL)
                result = -EIO;
 
@@ -3143,8 +3186,15 @@ static void interface_disconnect_result(const char *error,
        if (interface == NULL)
                return;
 
+#if defined TIZEN_EXT
+       if (error != NULL && data->callback != NULL) {
+               data->callback(-EIO, interface, data->user_data);
+               data->user_data = NULL;
+       }
+#else
        if (error != NULL && data->callback != NULL)
                data->callback(-EIO, interface, data->user_data);
+#endif
 
        /* If we are disconnecting from previous WPS successful
         * association. i.e.: it did not went through AddNetwork,
index d353606..2bce960 100644 (file)
@@ -107,7 +107,22 @@ int connman_network_set_domain(struct connman_network *network,
  */
 int connman_network_set_proxy(struct connman_network *network,
                                const char *proxies);
+/*
+ * Description: Network client requires additional wifi specific info
+ */
+int connman_network_set_bssid(struct connman_network *network,
+                               const unsigned char *bssid);
+unsigned char *connman_network_get_bssid(struct connman_network *network);
+
+int connman_network_set_maxrate(struct connman_network *network,
+                               unsigned int maxrate);
+unsigned int connman_network_get_maxrate(struct connman_network *network);
+
+int connman_network_set_enc_mode(struct connman_network *network,
+                               const char *encryption_mode);
+const char *connman_network_get_enc_mode(struct connman_network *network);
 #endif
+
 int connman_network_set_name(struct connman_network *network,
                                                        const char *name);
 int connman_network_set_strength(struct connman_network *network,
index 136ebd6..3c0fb5d 100644 (file)
@@ -135,11 +135,11 @@ static void __always_on_service_added(struct connman_service *service, const cha
        gchar **strv;
        int index = 0;
 
-       strv = g_strsplit_set(path, "_", -1);   
+       strv = g_strsplit_set(path, "_", -1);
        index = g_strv_length(strv);
        svc_category_id = atoi(strv[index-1]);
        g_strfreev(strv);
-       
+
        DBG("svc category id (%d)",svc_category_id);
 
        //internet service
@@ -148,7 +148,7 @@ static void __always_on_service_added(struct connman_service *service, const cha
 
                __reset_retry_timer();
 
-               DBG("cellular internet service path (%s), service(%p) added", path, service); 
+               DBG("cellular internet service path (%s), service(%p) added", path, service);
 
                if(connected_default_service == NULL){
                        DBG("request to connect default cellular service");
@@ -169,7 +169,7 @@ static void __always_on_service_removed(struct connman_service *service)
                DBG("service type is not cellular device");
                return;
        }
-       
+
        if(celluar_default_service == service){
                DBG("cellular internet service removed");
                celluar_default_service = NULL;
@@ -182,7 +182,7 @@ static void __always_on_service_removed(struct connman_service *service)
                        __send_default_connection_info(service, CONNMAN_SERVICE_STATE_IDLE);
                }
        }
-       
+
        return;
 }
 
@@ -207,13 +207,13 @@ void __always_on_cellular_service_enabled(connman_bool_t enabled)
        if(enabled && connected_default_service == NULL){
                DBG("connect default cellular service");
                __request_service_connect(celluar_default_service);
-               
+
        }
        else if(enabled == FALSE && connected_default_service == celluar_default_service){
                DBG("disconnect default cellular service");
                __request_service_disconnect(celluar_default_service);
        }
-       
+
        return;
 }
 
@@ -224,7 +224,7 @@ static void __always_on_service_state_changed(struct connman_service *service, e
        }
 
        DBG("service state changed service type[%d] state[%d]",connman_service_get_type(service), state);
-       
+
        if(state == CONNMAN_SERVICE_STATE_IDLE){
                __unset_default_connected_service(service, state);
        }
@@ -252,14 +252,14 @@ static void  __always_on_service_proxy_changed(struct connman_service *service)
 {
        DBG("service proxy changed notifier");
        int service_state = 0;
-       
+
        if(connected_default_service == NULL ||service != connected_default_service){
                return;
        }
 
        service_state = CONNMAN_SERVICE_STATE_READY;
        __send_default_connection_info(service, service_state);
-       
+
        return;
 }
 
@@ -312,7 +312,7 @@ void __unset_default_connected_service(struct connman_service *service, enum con
                DBG("not a default cellular service");
                return;
        }
-       
+
        if(connected_default_service == NULL || connected_default_service == service){
                DBG("request default cellular service connect");
                connected_default_service = NULL;
@@ -371,7 +371,7 @@ void __set_default_connected_service(struct connman_service *service, enum connm
        }
 
        DBG("current default connected service (%p)", connected_default_service);
-       return; 
+       return;
 }
 
 static int __dbus_request(const char *path, const char *interface, const char *method,
@@ -390,7 +390,7 @@ static int __dbus_request(const char *path, const char *interface, const char *m
        if (path == NULL)
                return -EINVAL;
 
-       message = dbus_message_new_method_call("org.tizen.sonet", path, interface, method);
+       message = dbus_message_new_method_call("net.sonet", path, interface, method);
        if (message == NULL)
                return -ENOMEM;
 
@@ -418,7 +418,7 @@ static int __dbus_request(const char *path, const char *interface, const char *m
        dbus_pending_call_set_notify(call, notify, user_data, free_function);
 
        dbus_message_unref(message);
-       
+
        return -EINPROGRESS;
 }
 
@@ -428,7 +428,7 @@ void __send_default_connection_info(struct connman_service *service, enum connma
        gchar *connection_type = NULL, *connection_state = NULL, *ip_addr = NULL, *proxy_addr = NULL;
        int service_type = 0;
        gchar **proxy_list = NULL;
-       
+
        service_type = connman_service_get_type(service);
        const char* tmp = __always_on_service_type2string(service_type);
        connection_type = g_strdup(tmp);
@@ -455,9 +455,9 @@ void __send_default_connection_info(struct connman_service *service, enum connma
        if(proxy_addr == NULL)
                proxy_addr = g_strdup("");
 
-       __dbus_request("/", "org.tizen.sonet.master", "UpdateDefaultConnectionInfo",
-               NULL, NULL, NULL, 
-               DBUS_TYPE_STRING,&connection_type, DBUS_TYPE_STRING,&connection_state, 
+       __dbus_request("/", "net.sonet.master", "UpdateDefaultConnectionInfo",
+               NULL, NULL, NULL,
+               DBUS_TYPE_STRING,&connection_type, DBUS_TYPE_STRING,&connection_state,
                DBUS_TYPE_STRING,&ip_addr, DBUS_TYPE_STRING,&proxy_addr,DBUS_TYPE_INVALID);
 
        g_free(connection_type);
@@ -465,7 +465,7 @@ void __send_default_connection_info(struct connman_service *service, enum connma
        g_free(ip_addr);
        g_free(proxy_addr);
        g_strfreev(proxy_list);
-       
+
        return;
 }
 
@@ -510,7 +510,7 @@ static struct connman_notifier notifier = {
 
 static int alwayson_init(void)
 {
-       DBG("alwayson init");   
+       DBG("alwayson init");
        connection = connman_dbus_get_connection();
        connman_notifier_register(&notifier);
        connection_timeout = TIMEOUT_DEFAULT;
index af2b0bd..a755210 100644 (file)
@@ -18,7 +18,7 @@
 #include <connman/technology.h>
 #include <connman/log.h>
 
-#define SONET_SERVICE                          "org.tizen.sonet"
+#define SONET_SERVICE                          "net.sonet"
 
 #define SONET_MASTER_INTERFACE         SONET_SERVICE ".master"
 #define SONET_MODEM_INTERFACE          SONET_SERVICE ".modem"
@@ -1329,5 +1329,5 @@ static void sonet_exit(void)
        dbus_connection_unref(connection);
 }
 
-CONNMAN_PLUGIN_DEFINE(sonet, "Tizen OpenSrc Network Framework plugin", VERSION,
+CONNMAN_PLUGIN_DEFINE(sonet, "Samsung OpenSrc Network Framework plugin", VERSION,
                CONNMAN_PLUGIN_PRIORITY_DEFAULT, sonet_init, sonet_exit)
index 3ec25a5..f9e6be1 100644 (file)
@@ -1048,6 +1048,17 @@ static void network_added(GSupplicantNetwork *supplicant_network)
 
        connman_network_set_available(network, TRUE);
 
+#if defined TIZEN_EXT
+       connman_network_set_bssid(network,
+                       g_supplicant_network_get_bssid(supplicant_network));
+       connman_network_set_maxrate(network,
+                       g_supplicant_network_get_maxrate(supplicant_network));
+       connman_network_set_frequency(network,
+                       g_supplicant_network_get_frequency(supplicant_network));
+       connman_network_set_enc_mode(network,
+                       g_supplicant_network_get_enc_mode(supplicant_network));
+#endif
+
        if (ssid != NULL)
                connman_network_set_group(network, group);
 }
@@ -1105,6 +1116,20 @@ static void network_changed(GSupplicantNetwork *network, const char *property)
                                        calculate_strength(network));
               connman_network_update(connman_network);
        }
+
+#if defined TIZEN_EXT
+       const unsigned char *bssid;
+       unsigned int maxrate;
+       connman_uint16_t frequency;
+
+       bssid = g_supplicant_network_get_bssid(network);
+       maxrate = g_supplicant_network_get_maxrate(network);
+       frequency = g_supplicant_network_get_frequency(network);
+
+       connman_network_set_bssid(connman_network, bssid);
+       connman_network_set_maxrate(connman_network, maxrate);
+       connman_network_set_frequency(connman_network, frequency);
+#endif
 }
 
 static void debug(const char *str)
index dcd015a..42e473c 100644 (file)
@@ -1,14 +1,14 @@
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
  "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 <busconfig>
-    <policy user="root">
+    <policy user="0">
         <allow own="net.connman"/>
         <allow send_destination="net.connman"/>
         <allow send_interface="net.connman.Agent"/>
         <allow send_interface="net.connman.Counter"/>
         <allow send_interface="net.connman.Notification"/>
     </policy>
-    <policy user="inhouse">
+    <policy user="5000">
         <allow own="net.connman"/>
         <allow send_destination="net.connman"/>
         <allow send_interface="net.connman.Agent"/>
index cf2f9be..2b13e25 100644 (file)
@@ -1,11 +1,11 @@
 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
  "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
 <busconfig>
-    <policy user="root">
+    <policy user="0">
         <allow own="net.connman"/>
         <allow send_interface="net.connman.Agent"/>
     </policy>
-    <policy user="inhouse">
+    <policy user="5000">
         <allow own="net.connman"/>
         <allow send_interface="net.connman.Agent"/>
     </policy>
index 5cc5794..403f173 100755 (executable)
@@ -73,6 +73,11 @@ struct connman_network {
                connman_bool_t wps;
                connman_bool_t use_wps;
                char *pin_wps;
+#if defined TIZEN_EXT
+               char encryption_mode[6];
+               unsigned char bssid[6];
+               unsigned int maxrate;
+#endif
        } wifi;
 
        struct {
@@ -1456,6 +1461,64 @@ int connman_network_set_proxy(struct connman_network *network,
 
        return 0;
 }
+
+/*
+ * Description: Network client requires additional wifi specific info
+ */
+int connman_network_set_bssid(struct connman_network *network,
+                               const unsigned char *bssid)
+{
+       if (bssid == NULL)
+               return -EINVAL;
+
+       DBG("network %p bssid %02x:%02x:%02x:%02x:%02x:%02x", network,
+                       bssid[0], bssid[1], bssid[2],
+                       bssid[3], bssid[4], bssid[5]);
+
+       int i = 0;
+       for (;i < 6;i++)
+               network->wifi.bssid[i] = bssid[i];
+
+       return 0;
+}
+
+unsigned char *connman_network_get_bssid(struct connman_network *network)
+{
+       return (unsigned char *)network->wifi.bssid;
+}
+
+int connman_network_set_maxrate(struct connman_network *network,
+                               unsigned int maxrate)
+{
+       DBG("network %p maxrate %d", network, maxrate);
+
+       network->wifi.maxrate = maxrate;
+
+       return 0;
+}
+
+unsigned int connman_network_get_maxrate(struct connman_network *network)
+{
+       return network->wifi.maxrate;
+}
+
+int connman_network_set_enc_mode(struct connman_network *network,
+                               const char *encryption_mode)
+{
+       if (encryption_mode == NULL)
+               return -EINVAL;
+
+       DBG("network %p encryption mode %s", network, encryption_mode);
+
+       g_strlcpy(network->wifi.encryption_mode, encryption_mode, 6);
+
+       return 0;
+}
+
+const char *connman_network_get_enc_mode(struct connman_network *network)
+{
+       return (const char *)network->wifi.encryption_mode;
+}
 #endif
 
 int connman_network_set_nameservers(struct connman_network *network,
index 50d3512..63b7bfd 100644 (file)
@@ -392,7 +392,12 @@ void __connman_notifier_default_changed(struct connman_service *service)
        technology_default(type);
 
        interface = connman_service_get_interface(service);
+#if !defined TIZEN_EXT
+/*
+ * Description: Tethering service is provided by external module in TIZEN
+ */
        __connman_tethering_update_interface(interface);
+#endif
        g_free(interface);
 
        for (list = notifier_list; list; list = list->next) {
index b80ee31..24941a9 100644 (file)
@@ -1705,6 +1705,37 @@ connman_bool_t __connman_service_session_dec(struct connman_service *service)
        return TRUE;
 }
 
+#if defined TIZEN_EXT
+static void append_wifi_ext_info(DBusMessageIter *dict,
+                                       struct connman_network *network)
+{
+       char bssid_buff[18] = {0,};
+       unsigned char *bssid_str = bssid_buff;
+       unsigned char *bssid;
+       unsigned int maxrate;
+       connman_uint16_t frequency;
+       const char *enc_mode;
+
+       bssid = connman_network_get_bssid(network);
+       maxrate = connman_network_get_maxrate(network);
+       frequency = connman_network_get_frequency(network);
+       enc_mode = connman_network_get_enc_mode(network);
+
+       snprintf(bssid_str, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+                               bssid[0], bssid[1], bssid[2],
+                               bssid[3], bssid[4], bssid[5]);
+
+       connman_dbus_dict_append_basic(dict, "BSSID",
+                                       DBUS_TYPE_STRING, &bssid_str);
+       connman_dbus_dict_append_basic(dict, "MaxRate",
+                                       DBUS_TYPE_UINT32, &maxrate);
+       connman_dbus_dict_append_basic(dict, "Frequency",
+                                       DBUS_TYPE_UINT16, &frequency);
+       connman_dbus_dict_append_basic(dict, "EncryptionMode",
+                                       DBUS_TYPE_STRING, &enc_mode);
+}
+#endif
+
 static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                                        struct connman_service *service)
 {
@@ -1795,6 +1826,11 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_dbus_dict_append_basic(dict, "PassphraseRequired",
                                                DBUS_TYPE_BOOLEAN, &required);
 
+#if defined TIZEN_EXT
+               if (service->network != NULL)
+                       append_wifi_ext_info(dict, service->network);
+#endif
+
                /* fall through */
        case CONNMAN_SERVICE_TYPE_ETHERNET:
        case CONNMAN_SERVICE_TYPE_WIMAX:
@@ -3802,6 +3838,13 @@ static int __connman_service_indicate_state(struct connman_service *service)
 
        if (new_state == CONNMAN_SERVICE_STATE_IDLE) {
 #if defined TIZEN_EXT
+               if (service->type == CONNMAN_SERVICE_TYPE_WIFI &&
+                       connman_network_get_bool(service->network,
+                                               "WiFi.UseWPS") == TRUE) {
+                       connman_network_set_bool(service->network,
+                                                       "WiFi.UseWPS", FALSE);
+               }
+
                reply_pending(service, ECONNABORTED);
                __connman_device_request_scan(service->type);
 #else
@@ -3891,10 +3934,6 @@ static int __connman_service_indicate_state(struct connman_service *service)
                service_complete(service);
 
                __connman_device_request_scan(CONNMAN_DEVICE_TYPE_UNKNOWN);
-#if defined TIZEN_EXT
-               if (service->type == CONNMAN_SERVICE_TYPE_CELLULAR)
-                       g_atomic_int_set(&service->user_initiated_pdp_connection_refcount, 0);
-#endif
        } else
                service->error = CONNMAN_SERVICE_ERROR_UNKNOWN;
 
@@ -4020,6 +4059,12 @@ int __connman_service_ipconfig_indicate_state(struct connman_service *service,
        if (ipconfig == NULL)
                return -EINVAL;
 
+#if defined TIZEN_EXT
+       if (new_state == CONNMAN_SERVICE_STATE_FAILURE &&
+           service->type == CONNMAN_SERVICE_TYPE_CELLULAR) {
+               g_atomic_int_set(&service->user_initiated_pdp_connection_refcount, 0);
+       }
+#endif
        /* Any change? */
        if (old_state == new_state)
                return -EALREADY;
@@ -4168,13 +4213,14 @@ static int service_connect(struct connman_service *service)
                case CONNMAN_SERVICE_SECURITY_PSK:
                case CONNMAN_SERVICE_SECURITY_WPA:
                case CONNMAN_SERVICE_SECURITY_RSN:
+                       DBG("service->wps : %d", service->wps);
                        if (service->passphrase == NULL) {
                                if (service->network == NULL)
                                        return -EOPNOTSUPP;
 #if defined TIZEN_EXT
                                if(service->wps == TRUE)
                                {
-                                       connman_network_set_bool(service->network,      "WiFi.UseWPS", TRUE);
+                                       connman_network_set_bool(service->network, "WiFi.UseWPS", TRUE);
                                        break;
                                }
                                else
@@ -4189,6 +4235,7 @@ static int service_connect(struct connman_service *service)
                        }
                        break;
                case CONNMAN_SERVICE_SECURITY_8021X:
+                       DBG("service->eap : %s", service->eap);
                        if (service->eap == NULL)
                                return -EINVAL;
 
@@ -4322,7 +4369,7 @@ int __connman_service_connect(struct connman_service *service)
                                                        NULL) == -EIO)
                                return -EINPROGRESS;
                }
-               reply_pending(service, err);
+               reply_pending(service, -err);
        }
 
        return err;
@@ -4434,6 +4481,7 @@ static struct connman_service *lookup_by_identifier(const char *identifier)
 {
        GSequenceIter *iter;
 
+       DBG("ident %s", identifier);
        iter = g_hash_table_lookup(service_hash, identifier);
        if (iter != NULL)
                return g_sequence_get(iter);
@@ -4669,6 +4717,13 @@ int __connman_service_provision(DBusMessage *msg)
        char *group = NULL, *ident = NULL;
        int err = 0;
        struct connman_service *service;
+#if defined TIZEN_EXT
+       struct connman_device * device;
+       const char *mode = "managed", *security = "ieee8021x";
+       char * name = NULL, *type = NULL;
+       char * device_ident = NULL;
+       int name_len = 0;
+#endif
 
        DBG("");
 
@@ -4702,8 +4757,46 @@ int __connman_service_provision(DBusMessage *msg)
        if (err < 0)
                goto done;
 
+#if !defined TIZEN_EXT
        ident = group + strlen("service_");
+#else
+       device = __connman_device_find_device(CONNMAN_SERVICE_TYPE_WIFI);
+       if (device == NULL) {
+               err = -EOPNOTSUPP;
+               goto done;
+       }
+
+       device_ident = connman_device_get_ident(device);
+       if (device_ident == NULL) {
+               err = -EOPNOTSUPP;
+               goto done;
+       }
+
+       type = g_key_file_get_string(keyfile, group, "Type", NULL);
+       if(type == NULL) {
+               err = -EINVAL;
+               goto done;
+       }
+
+       name = g_key_file_get_string(keyfile, group, "Name", NULL);
+       if(name == NULL) {
+               err = -EINVAL;
+               goto done;
+       }
+
+       name_len = strlen(name);
 
+       group = wifi_build_group_name((unsigned char *) name,
+                                               name_len, mode, security);
+       if (group == NULL) {
+               err = -EINVAL;
+               goto done;
+       }
+
+       DBG("group %s ", group);
+
+       ident = g_strdup_printf("%s_%s_%s", type, device_ident, group);
+#endif
        /* trigger service provisioning if service exists */
        service = lookup_by_identifier(ident);
        if (service != NULL)