Release 2.0 beta
[framework/connectivity/libnet-client.git] / src / network-dbus-request.c
index c66e2a7..ff7eb90 100644 (file)
@@ -1,17 +1,20 @@
 /*
- * Copyright 2012  Samsung Electronics Co., Ltd
+ *  Network Client Library
  *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.tizenopensource.org/license
+* Copyright 2012  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://www.tizenopensource.org/license
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
  */
 
 
@@ -352,32 +355,30 @@ static void __net_wifi_power_reply(DBusPendingCall *call, void *user_data)
 {
        __NETWORK_FUNC_ENTER__;
 
+       NETWORK_LOG(NETWORK_LOW, "__net_wifi_power_reply() called\n");
+
        DBusMessage *reply = dbus_pending_call_steal_reply(call);
        net_err_t Error = _net_get_error_from_netconfig_message(reply);
-
-       if (Error == NET_ERR_NONE)
-               goto done;
-
        net_event_info_t event_data = {0,};
-       net_wifi_state_t wifi_state = WIFI_UNKNOWN;
 
-       NETWORK_LOG(NETWORK_ERROR,
-               "Error!!! Wifi Power on/off failed. Error code : [%d]\n", Error);
+       if (Error != NET_ERR_NONE)
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Wifi Power on/off failed. Error code : [%d]\n", Error);
 
        if (request_table[NETWORK_REQUEST_TYPE_WIFI_POWER].flag == TRUE) {
                memset(&request_table[NETWORK_REQUEST_TYPE_WIFI_POWER],
                                0, sizeof(network_request_table_t));
 
                event_data.Event = NET_EVENT_WIFI_POWER_RSP;
-               event_data.Error = Error;
-               event_data.Datalength = sizeof(net_wifi_state_t);
-               event_data.Data = &wifi_state;
                NETWORK_LOG(NETWORK_LOW,
-                       "Sending NET_EVENT_WIFI_POWER_RSP Error = %d\n", event_data.Error);
+                       "Sending NET_EVENT_WIFI_POWER_RSP wifi state : %d Error = %d\n",
+                       NetworkInfo.wifi_state, Error);
+
+               event_data.Datalength = sizeof(net_wifi_state_t);
+               event_data.Data = &(NetworkInfo.wifi_state);
+               event_data.Error = Error;
                _net_client_callback(&event_data);
        }
 
-done:
        dbus_message_unref(reply);
        dbus_pending_call_unref(call);
 
@@ -387,217 +388,190 @@ done:
        __NETWORK_FUNC_EXIT__;
 }
 
-static int __net_append_argument(DBusMessageIter *iter, int ArgType, const char *Value)
+static void __net_specific_scan_wifi_reply(DBusPendingCall *call, void *user_data)
 {
        __NETWORK_FUNC_ENTER__;
 
-       double Double = 0;
-       unsigned char ByteValue = 0;
-       dbus_bool_t booleanvalue = 0;
-
-       dbus_uint16_t Uint16 = 0;
-       dbus_int16_t Int16 = 0;
-       dbus_uint32_t Uint32 = 0;
-       dbus_int32_t Int32 = 0;
+       DBusMessage *reply = dbus_pending_call_steal_reply(call);
+       net_err_t Error = _net_get_error_from_netconfig_message(reply);
 
-       switch(ArgType) {
-       case DBUS_TYPE_BYTE:
-               ByteValue = strtoul(Value, NULL, 0);
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &ByteValue);
-               break;
+       if (Error != NET_ERR_NONE)
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Find hidden AP failed. Error code : [%d]\n", Error);
+       else
+               NETWORK_LOG(NETWORK_LOW, "Hidden AP response received for AP.\n");
+
+       if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE) {
+               net_event_info_t event_data = {0,};
+               if (NET_ERR_NONE != Error) {
+                       /* An error occured. So lets reset specific scan request entry in the request table */
+                       memset(&request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN],
+                                       0, sizeof(network_request_table_t));
+               }
+               event_data.Event = NET_EVENT_SPECIFIC_SCAN_RSP;
+               NETWORK_LOG(NETWORK_LOW,
+                       "Sending NET_EVENT_SPECIFIC_SCAN_RSP wifi state : %d Error = %d\n",
+                       NetworkInfo.wifi_state, Error);
 
-       case DBUS_TYPE_DOUBLE:
-               Double = strtod(Value, NULL);
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_DOUBLE, &Double);
-               break;
+               event_data.Datalength = sizeof(net_wifi_state_t);
+               event_data.Data = &(NetworkInfo.wifi_state);
+               event_data.Error = Error;
+               _net_client_callback(&event_data);
+       }
 
-       case DBUS_TYPE_INT16:
-               Int16 = strtol(Value, NULL, 0);
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_INT16, &Int16);
-               break;
+       dbus_message_unref(reply);
+       dbus_pending_call_unref(call);
 
-       case DBUS_TYPE_UINT16:
-               Uint16 = strtoul(Value, NULL, 0);
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &Uint16);
-               break;
+       network_dbus_pending_call_data.is_used = FALSE;
+       network_dbus_pending_call_data.pcall = NULL;
 
-       case DBUS_TYPE_INT32:
-               Int32 = strtol(Value, NULL, 0);
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &Int32);
-               break;
+       __NETWORK_FUNC_EXIT__;
+}
 
-       case DBUS_TYPE_UINT32:
-               Uint32 = strtoul(Value, NULL, 0);
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &Uint32);
-               break;
+static char *__net_make_group_name(const char *ssid, const char *net_mode, const char *sec)
+{
+       char *buf;
+       const char *g_sec;
+       char buf_tmp[32] = {0,};
+       int i;
+       int ssid_len;
 
-       case DBUS_TYPE_STRING:
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &Value);
-               break;
+       if (ssid == NULL || net_mode == NULL || sec == NULL)
+               return NULL;
 
-       case DBUS_TYPE_OBJECT_PATH:
-               dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &Value);
-               break;
+       ssid_len = strlen(ssid);
+       if (ssid_len < 1)
+               return NULL;
 
-       case DBUS_TYPE_BOOLEAN:
-               if( strcmp (Value, "true") == 0 ) {
-                       booleanvalue = TRUE;
-                       dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &booleanvalue);
-               } else if( strcmp (Value, "false") == 0 ) {
-                       booleanvalue = FALSE;
-                       dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &booleanvalue);
-               } else {
-                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Expected \"true\" or \"false\" instead of \"%s\"\n", Value);
-                       __NETWORK_FUNC_EXIT__;
-                       return NET_ERR_UNKNOWN;
-               }
-               break;
+       if (g_strcmp0(net_mode, "managed") != 0)
+               return NULL;
 
-       default:
-               NETWORK_LOG( NETWORK_ERROR, "Error!!! Unsupported data ArgType %c\n", (char) ArgType);
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
+       if (!g_strcmp0(sec, "wpa") || !g_strcmp0(sec, "rsn"))
+               g_sec = "psk";
+       else
+               g_sec = sec;
 
-       __NETWORK_FUNC_EXIT__;
-       return NET_ERR_NONE;
-}
+       buf = g_try_malloc0((ssid_len * 2) + strlen(net_mode) + strlen(sec) + 3);
+       if (buf == NULL)
+               return NULL;
 
-static int __net_append_array(DBusMessageIter *iter, int ArgType, const char *Value)
-{
-       __NETWORK_FUNC_ENTER__;
+       for (i = 0; i < ssid_len; i++) {
+               snprintf(buf_tmp, 3, "%02x", ssid[i]);
+               strcat(buf, buf_tmp);
+       }
 
-       const char *Val = NULL;
-       char *saveptr = NULL;
-       char *DupValue = strdup(Value);
+       snprintf(buf_tmp, 32, "_%s_%s", net_mode, g_sec);
+       strcat(buf, buf_tmp);
 
-       Val = strtok_r(DupValue, ",", &saveptr);
-       while(Val != NULL) {
-               if( __net_append_argument(iter, ArgType, Val) != NET_ERR_NONE ) {
-                       NET_MEMFREE(DupValue);
-                       __NETWORK_FUNC_EXIT__;
-                       return  NET_ERR_UNKNOWN;
-               }
-               Val = strtok_r(NULL, ",", &saveptr);
-       }
-       NET_MEMFREE(DupValue);
+       NETWORK_LOG(NETWORK_HIGH, "Group name : %s\n", buf);
 
-       __NETWORK_FUNC_EXIT__;
-       return NET_ERR_NONE;
+       return buf;
 }
 
-static int __net_append_dict(DBusMessageIter *iter, int KeyType, int ValueType, const char *Value)
+static int __net_append_param(DBusMessage *message, char *param_array[])
 {
-       __NETWORK_FUNC_ENTER__;
+       int count = 0;
+       dbus_uint32_t uint32 = 0;
+       DBusMessageIter iter;
+       DBusMessageIter container_iter;
+       char *args = NULL;
+       char *ch = NULL;
 
-       const char *Val = NULL;
-       char *saveptr = NULL;
-       char *DupValue = strdup(Value);
+       if (param_array == NULL)
+               return NET_ERR_NONE;
 
-       Val = strtok_r(DupValue, ",", &saveptr);
-       while(Val != NULL) {
-               DBusMessageIter SubIter;
+       dbus_message_iter_init_append(message, &iter);
 
-               dbus_message_iter_open_container(iter,
-                               DBUS_TYPE_DICT_ENTRY,
-                               NULL,
-                               &SubIter);
+       while (param_array[count] != NULL) {
+               args = param_array[count];
+               NETWORK_LOG(NETWORK_HIGH, "parameter %d - [%s]", count, param_array[count]);
 
-               if( __net_append_argument (&SubIter, KeyType, Val) != NET_ERR_NONE ) {
-                       NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_argument() failed\n");
-                       NET_MEMFREE(DupValue);
-                       __NETWORK_FUNC_EXIT__;
-                       return  NET_ERR_UNKNOWN;
-               }
-
-               Val = strtok_r(NULL, ",", &saveptr);
-               if(Val == NULL) {
-                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Crashed dictionary data\n");
-                       NET_MEMFREE(DupValue);
-                       __NETWORK_FUNC_EXIT__;
-                       return NET_ERR_UNKNOWN;
+               ch = strchr(args, ':');
+               if (ch == NULL) {
+                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter[\"%s\"]\n", args);
+                       return NET_ERR_INVALID_PARAM;
                }
+               *ch = 0; ch++;
+
+               if (strcmp(args, CONNMAN_CLIENT_DBUS_TYPE_STRING) == 0) {
+                       dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &ch);
+               } else if (strcmp(args, CONNMAN_CLIENT_DBUS_TYPE_UINT32) == 0) {
+                       uint32 = strtoul(ch, NULL, 0);
+                       dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &uint32);
+               } else if (strcmp(args, CONNMAN_CLIENT_DBUS_TYPE_VARIANT) == 0) {
+                       args = ch;
+                       ch = strchr(args, ':');
+                       if (ch == NULL) {
+                               NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", args);
+                               return NET_ERR_INVALID_PARAM;
+                       }
+                       *ch = 0; ch++;
 
-               if( __net_append_argument (&SubIter, ValueType, Val) != NET_ERR_NONE ) {
-                       NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_argument() failed\n");
-                       NET_MEMFREE(DupValue);
-                       __NETWORK_FUNC_EXIT__;
-                       return  NET_ERR_UNKNOWN;
+                       if (strcmp(args, CONNMAN_CLIENT_DBUS_TYPE_STRING) == 0) {
+                               dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+                                               DBUS_TYPE_STRING_AS_STRING, &container_iter);
+                               dbus_message_iter_append_basic(&container_iter, DBUS_TYPE_STRING, &ch);
+                               dbus_message_iter_close_container(&iter, &container_iter);
+                       } else {
+                               NETWORK_LOG(NETWORK_ERROR, "Error!!! Not supported data format[\"%s\"]\n", args);
+                               return NET_ERR_INVALID_PARAM;
+                       }
+               } else {
+                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Not supported data format[\"%s\"]\n", args);
+                       return NET_ERR_INVALID_PARAM;
                }
 
-               dbus_message_iter_close_container (iter, &SubIter);
-               Val = strtok_r(NULL, ",", &saveptr);
+               count++;
        }
-       NET_MEMFREE(DupValue);
-       __NETWORK_FUNC_EXIT__;
-       return  NET_ERR_NONE;
-}
 
-static int __net_datatype_from_stringname(const char *Args)
-{
-       __NETWORK_FUNC_ENTER__;
-
-       int ArgType = 0;
-
-       if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_STRING) )
-               ArgType = DBUS_TYPE_STRING;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_INT16) )
-               ArgType = DBUS_TYPE_INT16;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_UINT16) )
-               ArgType = DBUS_TYPE_UINT16;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_INT32) )
-               ArgType = DBUS_TYPE_INT32;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_UINT32) )
-               ArgType = DBUS_TYPE_UINT32;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_INT64) )
-               ArgType = DBUS_TYPE_INT64;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_UINT64) )
-               ArgType = DBUS_TYPE_UINT64;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_DOUBLE) )
-               ArgType = DBUS_TYPE_DOUBLE;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_BYTE) )
-               ArgType = DBUS_TYPE_BYTE;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_BOOLEAN) )
-               ArgType = DBUS_TYPE_BOOLEAN;
-       else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_OBJECT_PATH) )
-               ArgType = DBUS_TYPE_OBJECT_PATH;
-       else {
-               NETWORK_LOG( NETWORK_ERROR, "Error!!! Unknown Argument Type \"%s\"\n", Args);
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       __NETWORK_FUNC_EXIT__;
-       return ArgType;
+       return NET_ERR_NONE;
 }
-  
 /*****************************************************************************
  *     Global Functions Definition
  *****************************************************************************/
 
-DBusMessage *_net_invoke_dbus_method(const char* dest, DBusConnection *connection,
-               const char* path, char* interface_name, char* method, int *dbus_error)
+DBusMessage *_net_invoke_dbus_method(const char* dest, const char* path,
+               char* interface_name, char* method, char *param_array[], int *dbus_error)
 {
        __NETWORK_FUNC_ENTER__;
 
        DBusError error;
+       DBusConnection* conn = NULL;
        DBusMessage *reply = NULL;
        DBusMessage *message = NULL;
 
        *dbus_error = NET_ERR_NONE;
 
+       NETWORK_LOG(NETWORK_HIGH, "[DBUS Sync] %s.%s, %s\n", interface_name, method, path);
+
+       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+       if (conn == NULL) {
+               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
+               *dbus_error = NET_ERR_UNKNOWN;
+               __NETWORK_FUNC_EXIT__;
+               return NULL;
+       }
+
        message = dbus_message_new_method_call(dest, path, interface_name, method);
        if (message == NULL) {
                NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
+               dbus_connection_unref(conn);
+               *dbus_error = NET_ERR_UNKNOWN;
+               __NETWORK_FUNC_EXIT__;
+               return NULL;
+       }
+
+       if (__net_append_param(message, param_array) != NET_ERR_NONE) {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_param() failed\n");
+               dbus_message_unref(message);
+               dbus_connection_unref(conn);
+               *dbus_error = NET_ERR_INVALID_PARAM;
                __NETWORK_FUNC_EXIT__;
                return NULL;
        }
 
        dbus_error_init(&error);
 
-       reply = dbus_connection_send_with_reply_and_block(connection,
-                       message, DBUS_REPLY_TIMEOUT, &error);
+       reply = dbus_connection_send_with_reply_and_block(conn, message, DBUS_REPLY_TIMEOUT, &error);
        if (reply == NULL) {
                if (dbus_error_is_set(&error) == TRUE) {
                        NETWORK_LOG(NETWORK_ERROR,
@@ -611,39 +585,51 @@ DBusMessage *_net_invoke_dbus_method(const char* dest, DBusConnection *connectio
                }
 
                dbus_message_unref(message);
+               dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
                return NULL;
        }
 
        dbus_message_unref(message);
+       dbus_connection_unref(conn);
 
        __NETWORK_FUNC_EXIT__;
        return reply;
 }
 
-int _net_invoke_dbus_method_nonblock(const char* dest, DBusConnection *connection,
-               const char* path, char* interface_name, char* method,
-               DBusPendingCallNotifyFunction notify_func)
+int _net_invoke_dbus_method_nonblock(const char* dest, const char* path,
+               char* interface_name, char* method, DBusPendingCallNotifyFunction notify_func)
 {
        __NETWORK_FUNC_ENTER__;
 
+       DBusConnection* conn = NULL;
        DBusMessage *message = NULL;
        DBusPendingCall *call;
        dbus_bool_t result;
 
+       NETWORK_LOG(NETWORK_HIGH, "[DBUS Async] %s.%s, %s\n", interface_name, method, path);
+
+       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+       if (conn == NULL) {
+               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
+               __NETWORK_FUNC_EXIT__;
+               return NET_ERR_UNKNOWN;
+       }
+
        message = dbus_message_new_method_call(dest, path, interface_name, method);
        if (message == NULL) {
                NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() Failed\n");
+               dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
        }
 
-       result = dbus_connection_send_with_reply(connection,
-                       message, &call, DBUS_REPLY_TIMEOUT);
+       result = dbus_connection_send_with_reply(conn, message, &call, DBUS_REPLY_TIMEOUT);
 
        if (result == FALSE || call == NULL) {
                NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_connection_send_with_reply() Failed\n");
                dbus_message_unref(message);
+               dbus_connection_unref(conn);
                return NET_ERR_UNKNOWN;
        }
 
@@ -652,401 +638,92 @@ int _net_invoke_dbus_method_nonblock(const char* dest, DBusConnection *connectio
        network_dbus_pending_call_data.is_used = TRUE;
 
        dbus_message_unref(message);
+       dbus_connection_unref(conn);
 
        __NETWORK_FUNC_EXIT__;
        return NET_ERR_NONE;
 }
 
-
-int _net_send_dbus_request(const char* destination, char *param_array[], DBusMessage** result)
-{
-       __NETWORK_FUNC_ENTER__;
-
-       DBusConnection *connection = NULL;
-       DBusError error;
-       DBusMessage *message = NULL;
-       net_err_t Error = NET_ERR_NONE;
-       char *RequestMethod = NULL;
-       int i = 0;
-       const char *path = NULL;
-       const char *name = NULL;
-       int param_count = 0;
-       // const char *destination = CONNMAN_SERVICE;
-       DBusMessageIter iter;
-
-       for (param_count = 0; param_array[param_count] != NULL; param_count++) {
-               NETWORK_LOG(NETWORK_HIGH, "[%s]\n", param_array[param_count]);
-       }
-       NETWORK_LOG(NETWORK_HIGH, "Total Arguments [%d]\n", param_count);
-
-       path = param_array[i++]; /** 0th is path */
-       name = param_array[i++]; /** 1st is request name */
-
-       if ((strlen(path) == 0) || (strlen(name) == 0) ) {
-               NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid parameters passed path [%s], requested name [%s]\n",
-                               path, name);
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_INVALID_PARAM;
-       }
-
-       dbus_error_init(&error);
-
-       connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
-       if (connection == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Failed to get system dbus, error [%s]\n",
-                               error.message);
-               dbus_error_free(&error);
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       RequestMethod = strrchr(name, '.');
-       if (RequestMethod == NULL) {
-               NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid method in \"%s\"\n", name);
-               dbus_connection_unref(connection);
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       *RequestMethod = '\0';
-       message = dbus_message_new_method_call(NULL, path, name, RequestMethod + 1);
-
-       if (message == NULL) {
-               NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
-               __NETWORK_FUNC_EXIT__;
-               Error = NET_ERR_UNKNOWN;
-               goto end_error;
-       }
-
-       if (destination && !dbus_message_set_destination(message, destination)) {
-               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! dbus_message_set_destination() failed\n");
-               __NETWORK_FUNC_EXIT__;
-               Error = NET_ERR_UNKNOWN;
-               goto end_error;
-       }
-
-       dbus_message_iter_init_append(message, &iter);
-
-       /** Two arguments name and path already extracted, so i == 2 */
-       while (i < param_count) {
-               char *Args = NULL;
-               char *Ch = NULL;
-               int ArgType = 0;
-               int SecondaryType = 0;
-               int ContainerType = 0;
-               DBusMessageIter *TargetIter = NULL;
-               DBusMessageIter ContainerIter;
-
-               ArgType = DBUS_TYPE_INVALID;
-               Args = param_array[i++];
-               Ch = strchr (Args, ':');
-
-               if (Ch == NULL) {
-                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", Args);
-                       Error = NET_ERR_UNKNOWN;
-                       goto end_error;
-               }
-
-               *(Ch++) = 0;
-
-               if (strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_VARIANT) == 0) {
-                       ContainerType = DBUS_TYPE_VARIANT;
-               } else if (strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_ARRAY) == 0) {
-                       ContainerType = DBUS_TYPE_ARRAY;
-               } else if (strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_DICT_ENTRY) == 0) {
-                       ContainerType = DBUS_TYPE_DICT_ENTRY;
-               } else {
-                       ContainerType = DBUS_TYPE_INVALID;
-               }
-
-               if (ContainerType != DBUS_TYPE_INVALID) {
-                       Args = Ch;
-                       Ch = strchr(Args, ':');
-                       if (Ch == NULL) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", Args);
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-                       *(Ch++) = 0;
-               }
-
-               if (Args[0] == 0) {
-                       ArgType = DBUS_TYPE_STRING;
-               } else {
-                       ArgType = __net_datatype_from_stringname(Args);
-                       if (ArgType == NET_ERR_UNKNOWN) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! Unknown data type\n");
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-               }
-
-               if (ContainerType == DBUS_TYPE_DICT_ENTRY) {
-                       char Signature[5] = "";
-                       Args = Ch;
-                       Ch = strchr (Ch, ':');
-
-                       if (Ch == NULL) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", Args);
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-
-                       *(Ch++) = 0;
-                       SecondaryType = __net_datatype_from_stringname(Args);
-
-                       if (SecondaryType == NET_ERR_UNKNOWN) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! Unknown datatype\n");
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-
-                       Signature[0] = DBUS_DICT_ENTRY_BEGIN_CHAR;
-                       Signature[1] = ArgType;
-                       Signature[2] = SecondaryType;
-                       Signature[3] = DBUS_DICT_ENTRY_END_CHAR;
-                       Signature[4] = '\0';
-
-                       dbus_message_iter_open_container(&iter,
-                                       DBUS_TYPE_ARRAY,
-                                       Signature,
-                                       &ContainerIter);
-                       TargetIter = &ContainerIter;
-               } else if (ContainerType != DBUS_TYPE_INVALID) {
-                       char Signature[2] = "";
-                       Signature[0] = ArgType;
-                       Signature[1] = '\0';
-
-                       dbus_message_iter_open_container(&iter,
-                                       ContainerType,
-                                       Signature,
-                                       &ContainerIter);
-                       TargetIter = &ContainerIter;
-               } else {
-                       TargetIter = &iter;
-               }
-
-               if (ContainerType == DBUS_TYPE_ARRAY) {
-                       if (__net_append_array(TargetIter, ArgType, Ch) != NET_ERR_NONE) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_array() failed\n");
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-               } else if (ContainerType == DBUS_TYPE_DICT_ENTRY) {
-                       if (__net_append_dict(TargetIter, ArgType, SecondaryType, Ch) != NET_ERR_NONE) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_dict() failed\n");
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-               } else {
-                       if (__net_append_argument(TargetIter, ArgType, Ch) != NET_ERR_NONE) {
-                               NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_argument() failed\n");
-                               Error = NET_ERR_UNKNOWN;
-                               goto end_error;
-                       }
-               }
-
-               if (ContainerType != DBUS_TYPE_INVALID) {
-                       dbus_message_iter_close_container(&iter, &ContainerIter);
-               }
-       }
-
-       DBusMessage *reply = NULL;
-
-       dbus_error_init (&error);
-
-       reply = dbus_connection_send_with_reply_and_block(connection,
-                       message,
-                       DBUS_REPLY_TIMEOUT,
-                       &error);
-       if (reply == NULL) {
-               if (dbus_error_is_set(&error) == TRUE) {
-                       NETWORK_LOG(NETWORK_ERROR,
-                                       "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
-                                       error.name,
-                                       error.message);
-                       Error = __net_error_string_to_enum(error.name);
-                       dbus_error_free(&error);
-               } else
-                       Error = NET_ERR_UNKNOWN;
-
-               goto end_error;
-       } else {
-               if (result != NULL) {
-                       *result = reply;
-               } else {
-                       dbus_message_unref(reply);
-               }
-       }
-
-end_error:
-       dbus_message_unref(message);
-       dbus_connection_unref(connection);
-
-       if (Error == NET_ERR_NONE)
-               NETWORK_LOG(NETWORK_HIGH, "Successfully requested\n");
-
-       __NETWORK_FUNC_EXIT__;
-       return Error;
-}
-
-
 int _net_dbus_open_connection(const char* profile_name)
 {
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusConnection* conn = NULL;
-
-       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
 
-       if (conn == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       NETWORK_LOG(NETWORK_HIGH,  "Requesting [%s %s]\n",
-                       profile_name, CONNMAN_SERVICE_INTERFACE ".Connect");
-
-       Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, conn, profile_name,
+       Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, profile_name,
                        CONNMAN_SERVICE_INTERFACE, "Connect", __net_open_connection_reply);
 
-       dbus_connection_unref(conn);
-
        __NETWORK_FUNC_EXIT__;
        return Error;
 }
 
-
 int _net_dbus_close_connection(const char* profile_name)
 {
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusConnection* conn = NULL;
-
-       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
 
-       if (conn == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       NETWORK_LOG(NETWORK_HIGH,  "Requesting [%s %s]\n",
-                       profile_name, CONNMAN_SERVICE_INTERFACE ".Disconnect");
-
-       Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, conn, profile_name,
+       Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, profile_name,
                        CONNMAN_SERVICE_INTERFACE, "Disconnect", __net_close_connection_reply);
 
-       dbus_connection_unref(conn);
-
        __NETWORK_FUNC_EXIT__;
        return Error;
 }
 
-
-int _net_dbus_scan_request(void)
-{
-       __NETWORK_FUNC_ENTER__;
-
-       net_err_t Error = NET_ERR_NONE;
-
-       /** dbus-send --system --print-reply --dest=net.connman / net.connman.Manager.RequestScan string:wifi */
-       char request[] = CONNMAN_MANAGER_INTERFACE ".RequestScan";
-       char param1[] = "string:wifi";
-       char path[CONNMAN_MAX_BUFLEN] = "/";
-       char* param_array[] = {NULL, NULL, NULL, NULL};
-       param_array[0] = path;
-       param_array[1] = request;
-       param_array[2] = param1;
-
-       NETWORK_LOG(NETWORK_HIGH, "path [%s]\n", path);
-       NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s %s]\n", param_array[0], param_array[1], param_array[2]);
-
-       if( (Error = _net_send_dbus_request(CONNMAN_SERVICE, param_array, NULL)) != NET_ERR_NONE ) {
-               NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_send_dbus_request failed\n");
-               __NETWORK_FUNC_EXIT__;
-               return Error;
-       }
-
-       __NETWORK_FUNC_EXIT__;
-       return NET_ERR_NONE;
-}
-
-int _net_dbus_provision_service(gchar * config_str, int len)
+int _net_dbus_scan_request(void)
 {
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
+       DBusMessage *message = NULL;
 
-       /** dbus-send --system --print-reply --dest=net.connman / net.connman.Manager.ProvisionService string:xxx..*/
-       char request[] = CONNMAN_MANAGER_INTERFACE ".ProvisionService";
-       char *param1 = NULL;
-       int param1_len = len + strlen("string:");
+       char param1[] = "string:wifi";
        char path[CONNMAN_MAX_BUFLEN] = "/";
-       char* param_array[] = {NULL, NULL, NULL, NULL};
+       char* param_array[] = {NULL, NULL};
 
-       param1 = (char*)calloc(param1_len, sizeof(char));
-       if(param1 == NULL)
-               return NET_ERR_UNKNOWN;
+       param_array[0] = param1;
 
-       snprintf(param1, param1_len, "string:%s", config_str);
+       message = _net_invoke_dbus_method(CONNMAN_SERVICE, path,
+                       CONNMAN_MANAGER_INTERFACE, "RequestScan", param_array, &Error);
 
-       param_array[0] = path;
-       param_array[1] = request;
-       param_array[2] = param1;
+       if (Error == NET_ERR_IN_PROGRESS)
+               Error = NET_ERR_NONE;
 
-       if( (Error = _net_send_dbus_request(CONNMAN_SERVICE, param_array, NULL)) != NET_ERR_NONE ) {
-               NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_send_dbus_request failed\n");
-               NET_MEMFREE(param1);
-               __NETWORK_FUNC_EXIT__;
-               return Error;
-       }
+       if (Error != NET_ERR_NONE)
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_invoke_dbus_method failed\n");
+
+       if (message)
+               dbus_message_unref(message);
 
-       NET_MEMFREE(param1);
        __NETWORK_FUNC_EXIT__;
-       return NET_ERR_NONE;
+       return Error;
 }
 
-
 int _net_dbus_set_bgscan_mode(net_wifi_background_scan_mode_t mode)
 {
        __NETWORK_FUNC_ENTER__;
 
-       /** TODO device interface missing */
-
        net_err_t Error = NET_ERR_NONE;
-       /** dbus-send --system --print-reply --dest=net.connman / net.connman.Manager.SetProperty string:ScanMode variant:uint16:0/1/2 */
-       char request[] = NETCONFIG_WIFI_INTERFACE ".SetBgscan";
+       DBusMessage *message = NULL;
+
        char param1[64] = "";
        char path[CONNMAN_MAX_BUFLEN] = NETCONFIG_WIFI_PATH;
-       char* param_array[] = {NULL, NULL, NULL, NULL};
-
-       NETWORK_LOG(NETWORK_HIGH, "path [%s]\n", path);
+       char* param_array[] = {NULL, NULL};
 
        snprintf(param1, 64, "uint32:%d", mode);
-       
-       param_array[0] = path;
-       param_array[1] = request;
-       param_array[2] = param1;
+       param_array[0] = param1;
 
-       NETWORK_LOG(NETWORK_HIGH,  "Requesting [%s %s %s]\n",
-               param_array[0],
-               param_array[1],
-               param_array[2]
-               );
+       message = _net_invoke_dbus_method(NETCONFIG_SERVICE, path,
+                       NETCONFIG_WIFI_INTERFACE, "SetBgscan", param_array, &Error);
 
-       Error = _net_send_dbus_request(NETCONFIG_SERVICE, param_array, NULL);
-       if (Error != NET_ERR_NONE) {
-               NETWORK_LOG(NETWORK_ERROR,  "Error!!! Request failed\n");
-               __NETWORK_FUNC_EXIT__;
-               return Error;
-       }
+       if (Error != NET_ERR_NONE)
+               NETWORK_LOG(NETWORK_ERROR,  "Error!!! _net_invoke_dbus_method failed\n");
+
+       if (message)
+               dbus_message_unref(message);
 
        __NETWORK_FUNC_EXIT__;
-       return NET_ERR_NONE;
+       return Error;
 }
 
 int _net_dbus_get_technology_state(network_get_tech_state_info_t* tech_state)
@@ -1054,7 +731,6 @@ int _net_dbus_get_technology_state(network_get_tech_state_info_t* tech_state)
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusConnection* conn = NULL;
        DBusMessage *message = NULL;
 
        if ((tech_state == NULL) || (strlen(tech_state->technology) == 0)) {
@@ -1063,14 +739,6 @@ int _net_dbus_get_technology_state(network_get_tech_state_info_t* tech_state)
                return NET_ERR_INVALID_PARAM;
        }
 
-       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-       if (conn == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION,
-                               "Error!!! Can't get on system bus\n");
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
        if (strcmp(tech_state->technology, "wifi") == 0) {
                int hotspot_state = 0;
                vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &hotspot_state);
@@ -1079,12 +747,11 @@ int _net_dbus_get_technology_state(network_get_tech_state_info_t* tech_state)
                        goto done;
        }
 
-       message = _net_invoke_dbus_method(CONNMAN_SERVICE, conn, CONNMAN_MANAGER_PATH,
-                       CONNMAN_MANAGER_INTERFACE, "GetProperties", &Error);
+       message = _net_invoke_dbus_method(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
+                       CONNMAN_MANAGER_INTERFACE, "GetProperties", NULL, &Error);
 
        if (message == NULL) {
-               NETWORK_LOG(NETWORK_ERROR,
-                               "Error!!! Failed to get technology info\n");
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get technology info\n");
                goto done;
        }
 
@@ -1105,12 +772,10 @@ int _net_dbus_get_technology_state(network_get_tech_state_info_t* tech_state)
        dbus_message_unref(message);
 
 done:
-       dbus_connection_unref(conn);
        __NETWORK_FUNC_EXIT__;
        return Error;
 }
 
-
 int _net_dbus_get_network_status(net_device_t device_type, net_cm_network_status_t* network_status)
 {
        __NETWORK_FUNC_ENTER__;
@@ -1145,31 +810,125 @@ done:
        return Error;
 }
 
+int _net_dbus_get_statistics(net_device_t device_type, net_statistics_type_e statistics_type, unsigned long long *size)
+{
+       net_err_t Error = NET_ERR_NONE;
+       DBusMessage *message = NULL;
+       char *method = NULL;
+
+       if (device_type == NET_DEVICE_WIFI) {
+               switch (statistics_type) {
+               case NET_STATISTICS_TYPE_LAST_RECEIVED_DATA:
+                       method = "GetWifiLastRxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_LAST_SENT_DATA:
+                       method = "GetWifiLastTxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
+                       method = "GetWifiTotalRxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_TOTAL_SENT_DATA:
+                       method = "GetWifiTotalTxBytes";
+                       break;
+               default:
+                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid ProfileName passed\n");
+                       return NET_ERR_INVALID_PARAM;
+               }
+       } else {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid ProfileName passed\n");
+               return NET_ERR_INVALID_PARAM;
+       }
+
+       message = _net_invoke_dbus_method(
+                       NETCONFIG_SERVICE, NETCONFIG_STATISTICS_PATH,
+                       NETCONFIG_STATISTICS_INTERFACE, method, NULL, &Error);
+       if (message == NULL) {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service properties\n");
+               return Error;
+       }
+
+       *size = _net_get_uint64(message);
+
+       NETWORK_LOG(NETWORK_HIGH, "success [%s] statistics size : [%llu]\n", method, *size);
+       dbus_message_unref(message);
+
+       return Error;
+}
+
+int _net_dbus_set_statistics(net_device_t device_type, net_statistics_type_e statistics_type)
+{
+       net_err_t Error = NET_ERR_NONE;
+       DBusMessage *message = NULL;
+       char *method = NULL;
+
+       if (device_type == NET_DEVICE_CELLULAR) {
+               switch (statistics_type) {
+               case NET_STATISTICS_TYPE_LAST_RECEIVED_DATA:
+                       method = "ResetCellularLastRxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_LAST_SENT_DATA:
+                       method = "ResetCellularLastTxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
+                       method = "ResetCellularTotalRxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_TOTAL_SENT_DATA:
+                       method = "ResetCellularTotalTxBytes";
+                       break;
+               default:
+                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid ProfileName passed\n");
+                       return NET_ERR_INVALID_PARAM;
+               }
+       } else if (device_type == NET_DEVICE_WIFI) {
+               switch (statistics_type) {
+               case NET_STATISTICS_TYPE_LAST_RECEIVED_DATA:
+                       method = "ResetWifiLastRxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_LAST_SENT_DATA:
+                       method = "ResetWifiLastTxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
+                       method = "ResetWifiTotalRxBytes";
+                       break;
+               case NET_STATISTICS_TYPE_TOTAL_SENT_DATA:
+                       method = "ResetWifiTotalTxBytes";
+                       break;
+               default:
+                       NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid ProfileName passed\n");
+                       return NET_ERR_INVALID_PARAM;
+               }
+       } else {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid ProfileName passed\n");
+               return NET_ERR_INVALID_PARAM;
+       }
+
+       message = _net_invoke_dbus_method(
+                       NETCONFIG_SERVICE, NETCONFIG_STATISTICS_PATH,
+                       NETCONFIG_STATISTICS_INTERFACE, method, NULL, &Error);
+       if (message == NULL) {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service properties\n");
+               return Error;
+       }
+
+       NETWORK_LOG(NETWORK_HIGH, "reset [%s] statistics success\n", method);
+       dbus_message_unref(message);
+
+       return Error;
+}
 
 int _net_dbus_get_state(char* state)
 {
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusConnection* conn = NULL;
        DBusMessage *message = NULL;
        char *net_state = NULL;
 
-       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); 
-       if (conn == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION,
-                               "Error!!! Can't get on system bus\n");
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
        message = _net_invoke_dbus_method(
-                       CONNMAN_SERVICE, conn, CONNMAN_MANAGER_PATH,
-                       CONNMAN_MANAGER_INTERFACE, "GetState", &Error);
+                       CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
+                       CONNMAN_MANAGER_INTERFACE, "GetState", NULL, &Error);
        if (message == NULL) {
-               NETWORK_LOG(NETWORK_ERROR,
-                               "Error!!! Failed to get service properties\n");
-               dbus_connection_unref(conn);
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service properties\n");
                __NETWORK_FUNC_EXIT__;
                return Error;
        }
@@ -1180,119 +939,205 @@ int _net_dbus_get_state(char* state)
        NETWORK_LOG( NETWORK_HIGH, "State : [%s]\n", state);
 
        dbus_message_unref(message);
-       dbus_connection_unref(conn);
 
        __NETWORK_FUNC_EXIT__;
        return Error;
 }
 
-
-int _net_dbus_connect_service(const net_wifi_connect_service_info_t* wifi_connection_info)
+int _net_dbus_connect_service(const net_wifi_connect_service_info_t *wifi_connection_info)
 {
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusError error;
 
        const char *prop_type = "Type";
        const char *prop_mode = "Mode";
        const char *prop_ssid = "SSID";
        const char *prop_security = "Security";
        const char *prop_passphrase = "Passphrase";
-
-       DBusMessage* msg = NULL;
-       DBusMessage* reply = NULL;
-       DBusMessageIter dict, entry, array,value;
+       const char *prop_eap_type = "EAPType";
+       const char *prop_eap_auth = "EAPAuth";
+       const char *prop_identity = "Identity";
+       const char *prop_password = "Password";
+       const char *prop_ca_cert_file = "CACert";
+       const char *prop_client_cert_file = "ClientCert";
+       const char *prop_private_key_file = "PrivateKeyFile";
+       const char *prop_private_key_password = "PrivateKeyPassword";
+
+       DBusMessage* message = NULL;
+       DBusMessageIter dict, entry, array, value;
        DBusConnection* conn = NULL;
+       DBusPendingCall *call;
+       dbus_bool_t result;
+       char *group_name = NULL;
 
        conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); 
-       if(conn == NULL) {
+       if (conn == NULL) {
                NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
        }
 
-       msg = dbus_message_new_method_call(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "ConnectService");
-       if(msg == NULL) {
+       message = dbus_message_new_method_call(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "ConnectService");
+
+       if (message == NULL) {
                NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! dbus_message_new_method_call() failed\n");
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
        }
 
-       dbus_message_iter_init_append(msg, &array);
+       dbus_message_iter_init_append(message, &array);
        dbus_message_iter_open_container(&array, DBUS_TYPE_ARRAY, "{sv}", &dict);
 
-       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
-       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_type);
-       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
-       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->type);
-       dbus_message_iter_close_container(&entry, &value);
-       dbus_message_iter_close_container(&dict, &entry);
-
-       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
-       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_mode);
-       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
-       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->mode);
-       dbus_message_iter_close_container(&entry, &value);
-       dbus_message_iter_close_container(&dict, &entry);
-
-       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
-       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_ssid);
-       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
-       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->ssid);
-       dbus_message_iter_close_container(&entry, &value);
-       dbus_message_iter_close_container(&dict, &entry);
-
-       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
-       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_security);
-       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
-       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->security);
-       dbus_message_iter_close_container(&entry, &value);
-       dbus_message_iter_close_container(&dict, &entry);
-
-       if( strcmp(wifi_connection_info->security, "ieee8021x") == 0 ) {
-               /** TODO Handle EAP */
-       } else {
-               /** none, wep, psk, rsn */
+       if (wifi_connection_info->type != NULL) {
                dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
-               dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_passphrase);
+               dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_type);
                dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
-               dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->passphrase);
+               dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->type);
                dbus_message_iter_close_container(&entry, &value);
                dbus_message_iter_close_container(&dict, &entry);
        }
 
-       dbus_message_iter_close_container(&array, &dict);
+       if (wifi_connection_info->mode != NULL) {
+               dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+               dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_mode);
+               dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+               dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->mode);
+               dbus_message_iter_close_container(&entry, &value);
+               dbus_message_iter_close_container(&dict, &entry);
+       }
 
-       dbus_error_init(&error);
-       reply = dbus_connection_send_with_reply_and_block(conn,
-                       msg,
-                       6 * DBUS_REPLY_TIMEOUT, /** Special case - here profile is created and returned so this need more time */
-                       &error);
+       if (wifi_connection_info->ssid != NULL) {
+               dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+               dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_ssid);
+               dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+               dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->ssid);
+               dbus_message_iter_close_container(&entry, &value);
+               dbus_message_iter_close_container(&dict, &entry);
+       }
 
-       if(reply == NULL) {
-               if( dbus_error_is_set(&error) == TRUE ) {
-                       NETWORK_LOG(NETWORK_ERROR,
-                                       "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
-                                       error.name,
-                                       error.message);
-                       Error = __net_error_string_to_enum(error.name);
-                       dbus_error_free(&error);
-                       dbus_message_unref(msg);
-                       __NETWORK_FUNC_EXIT__;
-                       return Error;
+       if (wifi_connection_info->security != NULL) {
+               dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+               dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_security);
+               dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+               dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->security);
+               dbus_message_iter_close_container(&entry, &value);
+               dbus_message_iter_close_container(&dict, &entry);
+       }
+
+       if (g_str_equal(wifi_connection_info->security, "ieee8021x") == TRUE) {
+               /** EAP */
+               if (wifi_connection_info->eap_type != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_eap_type);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->eap_type);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+
+               if (wifi_connection_info->eap_auth != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_eap_auth);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->eap_auth);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+
+               if (wifi_connection_info->identity != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_identity);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->identity);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
                }
-               dbus_message_unref(msg);
+
+               if (wifi_connection_info->password != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_password);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->password);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+
+               if (wifi_connection_info->ca_cert_file != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_ca_cert_file);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->ca_cert_file);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+
+               if (wifi_connection_info->client_cert_file != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_client_cert_file);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->client_cert_file);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+
+               if (wifi_connection_info->private_key_file != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_private_key_file);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->private_key_file);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+
+               if (wifi_connection_info->private_key_password != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_private_key_password);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->private_key_password);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+       } else {
+               /** none, wep, psk, rsn */
+               if (wifi_connection_info->passphrase != NULL) {
+                       dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
+                       dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_passphrase);
+                       dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
+                       dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->passphrase);
+                       dbus_message_iter_close_container(&entry, &value);
+                       dbus_message_iter_close_container(&dict, &entry);
+               }
+       }
+
+       dbus_message_iter_close_container(&array, &dict);
+
+       group_name = __net_make_group_name(wifi_connection_info->ssid,
+                               wifi_connection_info->mode, wifi_connection_info->security);
+       if (group_name == NULL) {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! can't make a group name\n");
+               dbus_message_unref(message);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
-       } else {
-               char *ProfileName = NULL;
-               ProfileName = _net_get_object(reply);
-               NETWORK_LOG(NETWORK_HIGH, "ObjectPath/ProfileName [%s]\n", ProfileName);
        }
 
-       dbus_message_unref(reply);
-       dbus_message_unref(msg);
+       snprintf(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
+                                       NET_PROFILE_NAME_LEN_MAX+1, "%s", group_name);
+
+       result = dbus_connection_send_with_reply(conn, message, &call, 6 * DBUS_REPLY_TIMEOUT);
+
+       if (result == FALSE || call == NULL) {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_connection_send_with_reply() Failed\n");
+               dbus_message_unref(message);
+               __NETWORK_FUNC_EXIT__;
+               return NET_ERR_UNKNOWN;
+       }
+
+       dbus_pending_call_set_notify(call, __net_open_connection_reply, NULL, NULL);
+       network_dbus_pending_call_data.pcall = call;
+       network_dbus_pending_call_data.is_used = TRUE;
+
+       dbus_message_unref(message);
 
        NETWORK_LOG(NETWORK_HIGH, "Successfully configured\n");
 
@@ -1301,7 +1146,6 @@ int _net_dbus_connect_service(const net_wifi_connect_service_info_t* wifi_connec
        return Error;
 }
 
-
 int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name)
 {
        __NETWORK_FUNC_ENTER__;
@@ -1326,7 +1170,7 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name
        char *netmask = netmask_buffer;
        char *gateway = gateway_buffer; 
 
-       DBusMessage *msg = NULL;
+       DBusMessage *message = NULL;
        DBusMessage *reply = NULL;
        DBusMessageIter itr, variant, dict, entry;
        DBusConnection* conn = NULL;
@@ -1355,9 +1199,9 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name
        }
 
        /** Send ipaddress, netmask, gateway configuration */
-       msg = dbus_message_new_method_call(CONNMAN_SERVICE,
+       message = dbus_message_new_method_call(CONNMAN_SERVICE,
                        profile_name, CONNMAN_SERVICE_INTERFACE, "SetProperty");
-       if (msg == NULL) {
+       if (message == NULL) {
                NETWORK_LOG( NETWORK_ERROR,  "Error!!! dbus_message_new_method_call() failed\n");
                dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
@@ -1366,7 +1210,7 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name
        NETWORK_LOG(NETWORK_ASSERT, "DBus Message 1/2 : %s %s %s %s\n", CONNMAN_SERVICE,
                        profile_name, CONNMAN_SERVICE_INTERFACE, "SetProperty");
 
-       dbus_message_iter_init_append(msg, &itr);
+       dbus_message_iter_init_append(message, &itr);
        dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &prop_ipv4_configuration);
 
        dbus_message_iter_open_container
@@ -1439,7 +1283,7 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name
        dbus_error_init(&error);
 
        reply = dbus_connection_send_with_reply_and_block(conn,
-                       msg, DBUS_REPLY_TIMEOUT,                        
+                       message, DBUS_REPLY_TIMEOUT,
                        &error);
 
        if (reply == NULL) {
@@ -1450,18 +1294,18 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name
                                error.message);
                        Error = __net_error_string_to_enum(error.name);
                        dbus_error_free(&error); 
-                       dbus_message_unref(msg);
+                       dbus_message_unref(message);
                        __NETWORK_FUNC_EXIT__;
                        return Error;
                }
 
-               dbus_message_unref(msg);
+               dbus_message_unref(message);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
        }
 
        dbus_message_unref(reply);
-       dbus_message_unref(msg);
+       dbus_message_unref(message);
 
        NETWORK_LOG(NETWORK_HIGH, "Successfully configured IPv4.Configuration\n");
        
@@ -1482,7 +1326,7 @@ int _net_dbus_set_profile_dns(net_profile_info_t* prof_info, char* profile_name)
        char dns_buffer[NET_DNS_ADDR_MAX][NETPM_IPV4_STR_LEN_MAX+1];
        char *dns_address[NET_DNS_ADDR_MAX];
 
-       DBusMessage *msg = NULL;
+       DBusMessage *message = NULL;
        DBusMessage *reply = NULL;
        DBusMessageIter itr;
        DBusConnection* conn = NULL;
@@ -1513,17 +1357,17 @@ int _net_dbus_set_profile_dns(net_profile_info_t* prof_info, char* profile_name)
        }
 
        if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
-               msg = dbus_message_new_method_call(CONNMAN_SERVICE,
+               message = dbus_message_new_method_call(CONNMAN_SERVICE,
                                profile_name, CONNMAN_SERVICE_INTERFACE, "SetProperty");
 
-               if (msg == NULL) {
+               if (message == NULL) {
                        NETWORK_LOG(NETWORK_ERROR,
                                        "Error!!! dbus_message_new_method_call() failed\n");
                        __NETWORK_FUNC_EXIT__;
                        return NET_ERR_UNKNOWN;
                }
 
-               dbus_message_iter_init_append(msg, &itr);
+               dbus_message_iter_init_append(message, &itr);
                dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &prop_nameserver_configuration);
 
                DBusMessageIter value, array;
@@ -1543,7 +1387,7 @@ int _net_dbus_set_profile_dns(net_profile_info_t* prof_info, char* profile_name)
                dbus_error_init(&error);
 
                reply = dbus_connection_send_with_reply_and_block(conn,
-                               msg, DBUS_REPLY_TIMEOUT,
+                               message, DBUS_REPLY_TIMEOUT,
                                &error);
 
                if (reply == NULL) {
@@ -1554,16 +1398,16 @@ int _net_dbus_set_profile_dns(net_profile_info_t* prof_info, char* profile_name)
                                                error.message);
                                Error = __net_error_string_to_enum(error.name);
                                dbus_error_free(&error);
-                               dbus_message_unref(msg);
+                               dbus_message_unref(message);
                                __NETWORK_FUNC_EXIT__;
                                return Error;
                        }
-                       dbus_message_unref(msg);
+                       dbus_message_unref(message);
                        __NETWORK_FUNC_EXIT__;
                        return NET_ERR_UNKNOWN;
                }
                dbus_message_unref(reply);
-               dbus_message_unref(msg);
+               dbus_message_unref(message);
                NETWORK_LOG(NETWORK_HIGH, "Successfully configured Nameservers.Configuration\n");
        }
 
@@ -1590,7 +1434,7 @@ int _net_dbus_set_proxy(net_profile_info_t* prof_info, char* profile_name)
        char proxy_buffer[NET_PROXY_LEN_MAX+1] = "";
        char *proxy_address = proxy_buffer;
 
-       DBusMessage *msg = NULL;
+       DBusMessage *message = NULL;
        DBusMessage *reply = NULL;
        DBusMessageIter itr, variant, dict, entry, sub_variant, str_array;
        DBusConnection* conn = NULL;
@@ -1614,15 +1458,15 @@ int _net_dbus_set_proxy(net_profile_info_t* prof_info, char* profile_name)
        }
 
        /** Send proxy method, url, servers configuration */
-       msg = dbus_message_new_method_call(CONNMAN_SERVICE, profile_name,
+       message = dbus_message_new_method_call(CONNMAN_SERVICE, profile_name,
                        CONNMAN_SERVICE_INTERFACE, "SetProperty");
-       if (msg == NULL) {
+       if (message == NULL) {
                NETWORK_LOG(NETWORK_ERROR,  "Error!!! dbus_message_new_method_call() failed\n");
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
        }
 
-       dbus_message_iter_init_append(msg, &itr);
+       dbus_message_iter_init_append(message, &itr);
        dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &prop_proxy_configuration);
 
        dbus_message_iter_open_container
@@ -1696,7 +1540,7 @@ int _net_dbus_set_proxy(net_profile_info_t* prof_info, char* profile_name)
        dbus_error_init(&error);
 
        reply = dbus_connection_send_with_reply_and_block(conn,
-                       msg, DBUS_REPLY_TIMEOUT,                        
+                       message, DBUS_REPLY_TIMEOUT,
                        &error);
 
        if (reply == NULL) {
@@ -1707,18 +1551,18 @@ int _net_dbus_set_proxy(net_profile_info_t* prof_info, char* profile_name)
                                        error.message);
                        Error = __net_error_string_to_enum(error.name);
                        dbus_error_free(&error); 
-                       dbus_message_unref(msg);
+                       dbus_message_unref(message);
                        __NETWORK_FUNC_EXIT__;
                        return Error;
                }
 
-               dbus_message_unref(msg);
+               dbus_message_unref(message);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
        }
 
        dbus_message_unref(reply);
-       dbus_message_unref(msg);
+       dbus_message_unref(message);
 
        NETWORK_LOG( NETWORK_HIGH, "Successfully configured Proxy.Configuration\n");
        
@@ -1747,7 +1591,7 @@ int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
        char buff_auth_type[10] = "";
        char *temp_ptr = NULL;
 
-       DBusMessage *msg = NULL;
+       DBusMessage *message = NULL;
        DBusMessage *reply = NULL;
        DBusMessageIter iter, dict, entry;
        DBusConnection* conn = NULL;
@@ -1766,9 +1610,9 @@ int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
        }
 
        /** Create message */
-       msg = dbus_message_new_method_call(TELEPHONY_SERVCE,
+       message = dbus_message_new_method_call(TELEPHONY_SERVCE,
                        TELEPHONY_MASTER_PATH, TELEPHONY_MASTER_INTERFACE, "AddProfile");
-       if (msg == NULL) {
+       if (message == NULL) {
                NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
                dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
@@ -1778,7 +1622,7 @@ int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
        NETWORK_LOG(NETWORK_ASSERT, "DBus Message 1/2 : %s %s %s %s\n", TELEPHONY_SERVCE,
                        TELEPHONY_MASTER_PATH, TELEPHONY_MASTER_INTERFACE, ".AddProfile");
 
-       dbus_message_iter_init_append(msg, &iter);
+       dbus_message_iter_init_append(message, &iter);
 
        dbus_message_iter_open_container
                (&iter, DBUS_TYPE_ARRAY,
@@ -1881,7 +1725,7 @@ int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
 
        /** Send message */
        reply = dbus_connection_send_with_reply_and_block(conn,
-                       msg, DBUS_REPLY_TIMEOUT,
+                       message, DBUS_REPLY_TIMEOUT,
                        &error);
 
        /** Check Error */
@@ -1893,12 +1737,12 @@ int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
                                error.message);
                        Error = __net_error_string_to_enum(error.name);
                        dbus_error_free(&error);
-                       dbus_message_unref(msg);
+                       dbus_message_unref(message);
                        __NETWORK_FUNC_EXIT__;
                        return Error;
                }
 
-               dbus_message_unref(msg);
+               dbus_message_unref(message);
                dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
@@ -1921,7 +1765,7 @@ int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
                Error = NET_ERR_UNKNOWN;
 
        dbus_message_unref(reply);
-       dbus_message_unref(msg);
+       dbus_message_unref(message);
        dbus_connection_unref(conn);
 
        __NETWORK_FUNC_EXIT__;
@@ -1948,7 +1792,7 @@ int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *prof
        char buff_auth_type[10] = "";
        char *temp_ptr = NULL;
 
-       DBusMessage *msg = NULL;
+       DBusMessage *message = NULL;
        DBusMessage *reply = NULL;
        DBusMessageIter iter, dict, entry;
        DBusConnection* conn = NULL;
@@ -1967,9 +1811,9 @@ int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *prof
        }
 
        /** Create message */
-       msg = dbus_message_new_method_call(TELEPHONY_SERVCE,
+       message = dbus_message_new_method_call(TELEPHONY_SERVCE,
                        profile_name, TELEPHONY_PROFILE_INTERFACE, "ModifyProfile");
-       if (msg == NULL) {
+       if (message == NULL) {
                NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
                dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
@@ -1979,7 +1823,7 @@ int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *prof
        NETWORK_LOG(NETWORK_ASSERT, "DBus Message 1/2 : %s %s %s %s\n", TELEPHONY_SERVCE,
                        profile_name, TELEPHONY_PROFILE_INTERFACE, ".ModifyProfile");
 
-       dbus_message_iter_init_append(msg, &iter);
+       dbus_message_iter_init_append(message, &iter);
 
        dbus_message_iter_open_container
                (&iter, DBUS_TYPE_ARRAY,
@@ -2082,7 +1926,7 @@ int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *prof
 
        /** Send message */
        reply = dbus_connection_send_with_reply_and_block(conn,
-                       msg, DBUS_REPLY_TIMEOUT,
+                       message, DBUS_REPLY_TIMEOUT,
                        &error);
 
        /** Check Error */
@@ -2094,12 +1938,12 @@ int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *prof
                                error.message);
                        Error = __net_error_string_to_enum(error.name);
                        dbus_error_free(&error);
-                       dbus_message_unref(msg);
+                       dbus_message_unref(message);
                        __NETWORK_FUNC_EXIT__;
                        return Error;
                }
 
-               dbus_message_unref(msg);
+               dbus_message_unref(message);
                dbus_connection_unref(conn);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_UNKNOWN;
@@ -2122,7 +1966,7 @@ int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *prof
                Error = NET_ERR_UNKNOWN;
 
        dbus_message_unref(reply);
-       dbus_message_unref(msg);
+       dbus_message_unref(message);
        dbus_connection_unref(conn);
 
        __NETWORK_FUNC_EXIT__;
@@ -2135,24 +1979,10 @@ int _net_dbus_load_wifi_driver(void)
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusConnection* conn = NULL;
-
-       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-
-       if (conn == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       NETWORK_LOG(NETWORK_HIGH,  "Requesting [%s %s]\n",
-                       NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE ".LoadDriver");
 
-       Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE, conn, NETCONFIG_WIFI_PATH,
+       Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
                        NETCONFIG_WIFI_INTERFACE, "LoadDriver", __net_wifi_power_reply);
 
-       dbus_connection_unref(conn);
-
        __NETWORK_FUNC_EXIT__;
        return Error;
 }
@@ -2162,24 +1992,10 @@ int _net_dbus_remove_wifi_driver(void)
        __NETWORK_FUNC_ENTER__;
 
        net_err_t Error = NET_ERR_NONE;
-       DBusConnection* conn = NULL;
-
-       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-
-       if (conn == NULL) {
-               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
-               __NETWORK_FUNC_EXIT__;
-               return NET_ERR_UNKNOWN;
-       }
-
-       NETWORK_LOG(NETWORK_HIGH,  "Requesting [%s %s]\n",
-                       NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE ".RemoveDriver");
 
-       Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE, conn, NETCONFIG_WIFI_PATH,
+       Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
                        NETCONFIG_WIFI_INTERFACE, "RemoveDriver", __net_wifi_power_reply);
 
-       dbus_connection_unref(conn);
-
        __NETWORK_FUNC_EXIT__;
        return Error;
 }
@@ -2204,6 +2020,63 @@ void _net_dbus_set_pending_call(DBusPendingCall *call)
        network_dbus_pending_call_data.pcall = call;
 }
 
+void _net_dbus_clear_pending_call(void)
+{
+       if (_net_dbus_is_pending_call_used()) {
+               dbus_pending_call_cancel(_net_dbus_get_pending_call());
+               _net_dbus_set_pending_call(NULL);
+               _net_dbus_set_pending_call_used(FALSE);
+       }
+}
+
+int _net_dbus_specific_scan_request(const char *ssid)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       DBusMessage* message = NULL;
+       DBusConnection* conn = NULL;
+       DBusPendingCall *call = NULL;
+       dbus_bool_t result = FALSE;
+
+       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+       if (conn == NULL) {
+               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
+               __NETWORK_FUNC_EXIT__;
+               return NET_ERR_UNKNOWN;
+       }
+
+       message = dbus_message_new_method_call(NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE, "RequestSpecificScan");
+       if (message == NULL) {
+               NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! dbus_message_new_method_call() failed\n");
+               dbus_connection_unref(conn);
+               __NETWORK_FUNC_EXIT__;
+               return NET_ERR_UNKNOWN;
+       }
+
+       dbus_message_append_args(message, DBUS_TYPE_STRING, &ssid, NULL);
+
+       result = dbus_connection_send_with_reply(conn, message, &call, 6 * DBUS_REPLY_TIMEOUT);
+       if (result == FALSE || call == NULL) {
+               NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_connection_send_with_reply() Failed\n");
+               dbus_message_unref(message);
+               dbus_connection_unref(conn);
+               __NETWORK_FUNC_EXIT__;
+               return NET_ERR_UNKNOWN;
+       }
+
+       NETWORK_LOG(NETWORK_HIGH, "Successfully configured\n");
+
+       dbus_pending_call_set_notify(call, __net_specific_scan_wifi_reply, NULL, NULL);
+       network_dbus_pending_call_data.pcall = call;
+       network_dbus_pending_call_data.is_used = TRUE;
+
+       dbus_message_unref(message);
+       dbus_connection_unref(conn);
+
+       __NETWORK_FUNC_EXIT__;
+       return NET_ERR_NONE;
+}
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */