Use handler functions for each key 59/187959/1
authorchleun.moon <chleun.moon@samsung.com>
Thu, 30 Aug 2018 04:06:19 +0000 (13:06 +0900)
committerchleun.moon <chleun.moon@samsung.com>
Thu, 30 Aug 2018 04:06:26 +0000 (13:06 +0900)
Change-Id: I13e111c8262ca14f03de0d9a7bcd53cd356b1439
Signed-off-by: Cheoleun Moon <chleun.moon@samsung.com>
src/network-profile-intf.c

index c353cf7..c118f80 100755 (executable)
@@ -808,112 +808,157 @@ static gboolean __net_check_address_type(int address_family, const char *address
        return FALSE;
 }
 
-static int __net_extract_common_info(const char *key, GVariant *variant, net_profile_info_t* ProfInfo)
+static void __net_extract_state_value(GVariant *variant, net_profile_info_t* ProfInfo)
 {
-       __NETWORK_FUNC_ENTER__;
+       const gchar* value = g_variant_get_string(variant, NULL);
+
+       if (g_strcmp0(value, "idle") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_IDLE;
+       else if (g_strcmp0(value, "failure") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_FAILURE;
+       else if (g_strcmp0(value, "association") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_ASSOCIATION;
+       else if (g_strcmp0(value, "configuration") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_CONFIGURATION;
+       else if (g_strcmp0(value, "ready") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_READY;
+       else if (g_strcmp0(value, "disconnect") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_DISCONNECT;
+       else if (g_strcmp0(value, "online") == 0)
+               ProfInfo->ProfileState = NET_STATE_TYPE_ONLINE;
+       else
+               ProfInfo->ProfileState = NET_STATE_TYPE_UNKNOWN;
+}
 
-       net_err_t Error = NET_ERR_NONE;
+static void __net_extract_state6_value(GVariant *variant, net_profile_info_t* ProfInfo)
+{
+       const gchar* value = g_variant_get_string(variant, NULL);
+
+       if (g_strcmp0(value, "idle") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_IDLE;
+       else if (g_strcmp0(value, "failure") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_FAILURE;
+       else if (g_strcmp0(value, "association") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_ASSOCIATION;
+       else if (g_strcmp0(value, "configuration") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_CONFIGURATION;
+       else if (g_strcmp0(value, "disconnect") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_DISCONNECT;
+       else if (g_strcmp0(value, "ready") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_READY;
+       else if (g_strcmp0(value, "online") == 0)
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_ONLINE;
+       else
+               ProfInfo->ProfileState6 = NET_STATE_TYPE_UNKNOWN;
+}
+
+static void __net_extract_error(GVariant *variant, net_profile_info_t* ProfInfo)
+{
+       const gchar *value = g_variant_get_string(variant, NULL);
+
+       if (g_strcmp0(value, "invalid-key") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_INVALID_KEY;
+       else if (g_strcmp0(value, "connect-failed") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_CONNECT_FAILED;
+       else if (g_strcmp0(value, "auth-failed") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_AUTH_FAILED;
+       else if (g_strcmp0(value, "login-failed") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_LOGIN_FAILED;
+       else if (g_strcmp0(value, "dhcp-failed") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_DHCP_FAILED;
+       else if (g_strcmp0(value, "out-of-range") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_OUT_OF_RANGE;
+       else if (g_strcmp0(value, "pin-missing") == 0)
+               ProfInfo->ProfileErrorState = NET_STATE_ERROR_PIN_MISSING;
+}
+
+static void __net_extract_ethernet_value(GVariant *variant, net_dev_info_t* net_info)
+{
        const gchar *subKey = NULL;
        const gchar *value = NULL;
-       net_dev_info_t* net_info = NULL;
        GVariant *var = NULL;
        GVariantIter *iter = NULL;
+       g_variant_get(variant, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
+               if (g_strcmp0(subKey, "Interface") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-       if (ProfInfo->profile_type == NET_DEVICE_CELLULAR) {
-               net_info = &(ProfInfo->ProfileInfo.Pdp.net_info);
-       } else if (ProfInfo->profile_type == NET_DEVICE_WIFI) {
-               net_info = &(ProfInfo->ProfileInfo.Wlan.net_info);
-       } else if (ProfInfo->profile_type == NET_DEVICE_ETHERNET) {
-               net_info = &(ProfInfo->ProfileInfo.Ethernet.net_info);
-       } else if (ProfInfo->profile_type == NET_DEVICE_BLUETOOTH) {
-               net_info = &(ProfInfo->ProfileInfo.Bluetooth.net_info);
-       } else if (ProfInfo->profile_type == NET_DEVICE_MESH) {
-               net_info = &(ProfInfo->ProfileInfo.Mesh.net_info);
-       } else {
-               NETWORK_LOG(NETWORK_ERROR,
-                               "Invalid Profile type. [%d]", ProfInfo->profile_type);
-               return NET_ERR_INVALID_PARAM;
+                       if (value != NULL)
+                               g_strlcpy(net_info->DevName, value, NET_MAX_DEVICE_NAME_LEN);
+               } else if (g_strcmp0(subKey, "Address") == 0) {
+                       value = g_variant_get_string(var, NULL);
+
+                       if (value != NULL)
+                               g_strlcpy(net_info->MacAddr, value, NET_MAX_MAC_ADDR_LEN);
+               }
        }
+       g_variant_iter_free(iter);
+}
 
-       if (g_strcmp0(key, "State") == 0) {
-               value = g_variant_get_string(variant, NULL);
-
-               if (g_strcmp0(value, "idle") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_IDLE;
-               else if (g_strcmp0(value, "failure") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_FAILURE;
-               else if (g_strcmp0(value, "association") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_ASSOCIATION;
-               else if (g_strcmp0(value, "configuration") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_CONFIGURATION;
-               else if (g_strcmp0(value, "ready") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_READY;
-               else if (g_strcmp0(value, "disconnect") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_DISCONNECT;
-               else if (g_strcmp0(value, "online") == 0)
-                       ProfInfo->ProfileState = NET_STATE_TYPE_ONLINE;
-               else
-                       ProfInfo->ProfileState = NET_STATE_TYPE_UNKNOWN;
-       } else if (g_strcmp0(key, "StateIPv6") == 0) {
-               value = g_variant_get_string(variant, NULL);
-
-               if (g_strcmp0(value, "idle") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_IDLE;
-               else if (g_strcmp0(value, "failure") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_FAILURE;
-               else if (g_strcmp0(value, "association") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_ASSOCIATION;
-               else if (g_strcmp0(value, "configuration") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_CONFIGURATION;
-               else if (g_strcmp0(value, "disconnect") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_DISCONNECT;
-               else if (g_strcmp0(value, "ready") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_READY;
-               else if (g_strcmp0(value, "online") == 0)
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_ONLINE;
-               else
-                       ProfInfo->ProfileState6 = NET_STATE_TYPE_UNKNOWN;
-       } else if (g_strcmp0(key, "Error") == 0) {
-               value = g_variant_get_string(variant, NULL);
-
-               if (g_strcmp0(value, "invalid-key") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_INVALID_KEY;
-               else if (g_strcmp0(value, "connect-failed") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_CONNECT_FAILED;
-               else if (g_strcmp0(value, "auth-failed") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_AUTH_FAILED;
-               else if (g_strcmp0(value, "login-failed") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_LOGIN_FAILED;
-               else if (g_strcmp0(value, "dhcp-failed") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_DHCP_FAILED;
-               else if (g_strcmp0(value, "out-of-range") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_OUT_OF_RANGE;
-               else if (g_strcmp0(value, "pin-missing") == 0)
-                       ProfInfo->ProfileErrorState = NET_STATE_ERROR_PIN_MISSING;
-       } else if (g_strcmp0(key, "Favorite") == 0) {
-               gboolean val = g_variant_get_boolean(variant);
+static void __net_extract_ipv4_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       const gchar *subKey = NULL;
+       const gchar *value = NULL;
+       GVariant *var = NULL;
+       GVariantIter *iter = NULL;
+       g_variant_get(variant, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
+               if (g_strcmp0(subKey, "Method") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-               if (val)
-                       ProfInfo->Favourite = (char)TRUE;
-               else
-                       ProfInfo->Favourite = (char)FALSE;
-       } else if (g_strcmp0(key, "Ethernet") == 0) {
-               g_variant_get(variant, "a{sv}", &iter);
-               while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
-                       if (g_strcmp0(subKey, "Interface") == 0) {
-                               value = g_variant_get_string(var, NULL);
+                       if (g_strcmp0(value, "dhcp") == 0)
+                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_DYNAMIC;
+                       else if (g_strcmp0(value, "manual") == 0)
+                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(value, "fixed") == 0)
+                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
+                       else if (g_strcmp0(value, "off") == 0)
+                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_OFF;
+
+                       if (net_info->IpConfigType != NET_IP_CONFIG_TYPE_DYNAMIC) {
+                               net_info->BServerAddr = FALSE;
+                               net_info->ServerAddr.Type = NET_ADDR_IPV4;
+                               net_info->ServerAddr.Data.Ipv4.s_addr = 0;
+                       }
 
-                               if (value != NULL)
-                                       g_strlcpy(net_info->DevName, value, NET_MAX_DEVICE_NAME_LEN);
-                       } else if (g_strcmp0(subKey, "Address") == 0) {
-                               value = g_variant_get_string(var, NULL);
+               } else if (g_strcmp0(subKey, "Address") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               if (value != NULL)
-                                       g_strlcpy(net_info->MacAddr, value, NET_MAX_MAC_ADDR_LEN);
-                       }
+                       __net_extract_ip(value, &net_info->IpAddr);
+               } else if (g_strcmp0(subKey, "Netmask") == 0) {
+                       value = g_variant_get_string(var, NULL);
+
+                       __net_extract_ip(value, &net_info->SubnetMask);
+                       net_info->PrefixLen = __net_get_prefix_len(value);
+                       net_info->BNetmask = TRUE;
+               } else if (g_strcmp0(subKey, "Gateway") == 0) {
+                       value = g_variant_get_string(var, NULL);
+
+                       __net_extract_ip(value, &net_info->GatewayAddr);
+                       net_info->BDefGateway = TRUE;
+               } else if (g_strcmp0(subKey, "DHCPServerIP") == 0) {
+                       value = g_variant_get_string(var, NULL);
+
+                       __net_extract_ip(value, &net_info->ServerAddr);
+                       net_info->BServerAddr = TRUE;
+               } else if (g_strcmp0(subKey, "DHCPLeaseDuration") == 0) {
+                       net_info->DHCPLeaseDuration = g_variant_get_int32(var);
                }
-               g_variant_iter_free(iter);
-       } else if (g_strcmp0(key, "IPv4") == 0) {
+       }
+       g_variant_iter_free(iter);
+}
+
+static void __net_extract_ipv4_configuration_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       const gchar *subKey = NULL;
+       const gchar *value = NULL;
+       GVariant *var = NULL;
+       GVariantIter *iter = NULL;
+       if (net_info->IpConfigType != NET_IP_CONFIG_TYPE_DYNAMIC &&
+                       net_info->IpConfigType != NET_IP_CONFIG_TYPE_STATIC &&
+                       net_info->IpConfigType != NET_IP_CONFIG_TYPE_FIXED &&
+                       net_info->IpConfigType != NET_IP_CONFIG_TYPE_OFF) {
+
                g_variant_get(variant, "a{sv}", &iter);
                while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
                        if (g_strcmp0(subKey, "Method") == 0) {
@@ -928,323 +973,358 @@ static int __net_extract_common_info(const char *key, GVariant *variant, net_pro
                                else if (g_strcmp0(value, "off") == 0)
                                        net_info->IpConfigType = NET_IP_CONFIG_TYPE_OFF;
 
-                               if (net_info->IpConfigType != NET_IP_CONFIG_TYPE_DYNAMIC) {
-                                       net_info->BServerAddr = FALSE;
-                                       net_info->ServerAddr.Type = NET_ADDR_IPV4;
-                                       net_info->ServerAddr.Data.Ipv4.s_addr = 0;
-                               }
-
-                       } else if (g_strcmp0(subKey, "Address") == 0) {
+                       } else if (g_strcmp0(subKey, "Address") == 0 &&
+                                       net_info->IpAddr.Data.Ipv4.s_addr == 0) {
                                value = g_variant_get_string(var, NULL);
 
                                __net_extract_ip(value, &net_info->IpAddr);
-                       } else if (g_strcmp0(subKey, "Netmask") == 0) {
+                       } else if (g_strcmp0(subKey, "Netmask") == 0 &&
+                                       net_info->SubnetMask.Data.Ipv4.s_addr == 0) {
                                value = g_variant_get_string(var, NULL);
 
                                __net_extract_ip(value, &net_info->SubnetMask);
-                               net_info->PrefixLen = __net_get_prefix_len(value);
                                net_info->BNetmask = TRUE;
-                       } else if (g_strcmp0(subKey, "Gateway") == 0) {
+                       } else if (g_strcmp0(subKey, "Gateway") == 0 &&
+                                       net_info->GatewayAddr.Data.Ipv4.s_addr == 0) {
                                value = g_variant_get_string(var, NULL);
 
                                __net_extract_ip(value, &net_info->GatewayAddr);
                                net_info->BDefGateway = TRUE;
-                       } else if (g_strcmp0(subKey, "DHCPServerIP") == 0) {
-                               value = g_variant_get_string(var, NULL);
-
-                               __net_extract_ip(value, &net_info->ServerAddr);
-                               net_info->BServerAddr = TRUE;
-                       } else if (g_strcmp0(subKey, "DHCPLeaseDuration") == 0) {
-                               net_info->DHCPLeaseDuration = g_variant_get_int32(var);
                        }
                }
                g_variant_iter_free(iter);
-       } else if (g_strcmp0(key, "IPv4.Configuration") == 0) {
-               if (net_info->IpConfigType != NET_IP_CONFIG_TYPE_DYNAMIC &&
-                       net_info->IpConfigType != NET_IP_CONFIG_TYPE_STATIC &&
-                       net_info->IpConfigType != NET_IP_CONFIG_TYPE_FIXED &&
-                       net_info->IpConfigType != NET_IP_CONFIG_TYPE_OFF) {
+       }
+}
 
-                       g_variant_get(variant, "a{sv}", &iter);
-                       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
-                               if (g_strcmp0(subKey, "Method") == 0) {
-                                       value = g_variant_get_string(var, NULL);
-
-                                       if (g_strcmp0(value, "dhcp") == 0)
-                                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_DYNAMIC;
-                                       else if (g_strcmp0(value, "manual") == 0)
-                                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_STATIC;
-                                       else if (g_strcmp0(value, "fixed") == 0)
-                                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
-                                       else if (g_strcmp0(value, "off") == 0)
-                                               net_info->IpConfigType = NET_IP_CONFIG_TYPE_OFF;
-
-                               } else if (g_strcmp0(subKey, "Address") == 0 &&
-                                               net_info->IpAddr.Data.Ipv4.s_addr == 0) {
-                                       value = g_variant_get_string(var, NULL);
-
-                                       __net_extract_ip(value, &net_info->IpAddr);
-                               } else if (g_strcmp0(subKey, "Netmask") == 0 &&
-                                               net_info->SubnetMask.Data.Ipv4.s_addr == 0) {
-                                       value = g_variant_get_string(var, NULL);
-
-                                       __net_extract_ip(value, &net_info->SubnetMask);
-                                       net_info->BNetmask = TRUE;
-                               } else if (g_strcmp0(subKey, "Gateway") == 0 &&
-                                               net_info->GatewayAddr.Data.Ipv4.s_addr == 0) {
-                                       value = g_variant_get_string(var, NULL);
-
-                                       __net_extract_ip(value, &net_info->GatewayAddr);
-                                       net_info->BDefGateway = TRUE;
-                               }
-                       }
-                       g_variant_iter_free(iter);
-               }
-       } else if (g_strcmp0(key, "IPv6") == 0) {
-               g_variant_get(variant, "a{sv}", &iter);
-               while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
-                       if (g_strcmp0(subKey, "Method") == 0) {
-                               value = g_variant_get_string(var, NULL);
+static void __net_extract_ipv6_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       const gchar *subKey = NULL;
+       const gchar *value = NULL;
+       GVariant *var = NULL;
+       GVariantIter *iter = NULL;
+       g_variant_get(variant, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
+               if (g_strcmp0(subKey, "Method") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               if (g_strcmp0(value, "manual") == 0)
-                                       net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_STATIC;
-                               else if (g_strcmp0(value, "off") == 0)
-                                       net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_OFF;
-                               else if (g_strcmp0(value, "auto") == 0)
-                                       net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_AUTO_IP;
+                       if (g_strcmp0(value, "manual") == 0)
+                               net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(value, "off") == 0)
+                               net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_OFF;
+                       else if (g_strcmp0(value, "auto") == 0)
+                               net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_AUTO_IP;
 
-                       } else if (g_strcmp0(subKey, "Address") == 0) {
-                               value = g_variant_get_string(var, NULL);
+               } else if (g_strcmp0(subKey, "Address") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               inet_pton(AF_INET6, value, &net_info->IpAddr6.Data.Ipv6);
-                       } else if (g_strcmp0(subKey, "PrefixLength") == 0) {
-                               net_info->PrefixLen6 = g_variant_get_byte(var);
-                       } else if (g_strcmp0(subKey, "Gateway") == 0) {
-                               value = g_variant_get_string(var, NULL);
+                       inet_pton(AF_INET6, value, &net_info->IpAddr6.Data.Ipv6);
+               } else if (g_strcmp0(subKey, "PrefixLength") == 0) {
+                       net_info->PrefixLen6 = g_variant_get_byte(var);
+               } else if (g_strcmp0(subKey, "Gateway") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               inet_pton(AF_INET6, value, &net_info->GatewayAddr6.Data.Ipv6);
-                               net_info->BDefGateway6 = TRUE;
-                       } else if (g_strcmp0(subKey, "Privacy") == 0) {
-                               value = g_variant_get_string(var, NULL);
+                       inet_pton(AF_INET6, value, &net_info->GatewayAddr6.Data.Ipv6);
+                       net_info->BDefGateway6 = TRUE;
+               } else if (g_strcmp0(subKey, "Privacy") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               if (value != NULL)
-                                       g_strlcpy(net_info->Privacy6, value, NETPM_IPV6_MAX_PRIVACY_LEN);
-                       }
+                       if (value != NULL)
+                               g_strlcpy(net_info->Privacy6, value, NETPM_IPV6_MAX_PRIVACY_LEN);
                }
-               g_variant_iter_free(iter);
-       } else if (g_strcmp0(key, "IPv6.Configuration") == 0) {
-               g_variant_get(variant, "a{sv}", &iter);
-               while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
-                       if (g_strcmp0(subKey, "Method") == 0) {
-                               value = g_variant_get_string(var, NULL);
+       }
+       g_variant_iter_free(iter);
+}
 
-                               if (g_strcmp0(value, "manual") == 0)
-                                       net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_STATIC;
-                               else if (g_strcmp0(value, "off") == 0)
-                                       net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_OFF;
-                               else if (g_strcmp0(value, "auto") == 0)
-                                       net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_AUTO_IP;
+static void __net_extract_ipv6_configuration_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       const gchar *subKey = NULL;
+       const gchar *value = NULL;
+       GVariant *var = NULL;
+       GVariantIter *iter = NULL;
+       g_variant_get(variant, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
+               if (g_strcmp0(subKey, "Method") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                       } else if (g_strcmp0(subKey, "Address") == 0) {
-                               value = g_variant_get_string(var, NULL);
+                       if (g_strcmp0(value, "manual") == 0)
+                               net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(value, "off") == 0)
+                               net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_OFF;
+                       else if (g_strcmp0(value, "auto") == 0)
+                               net_info->IpConfigType6 = NET_IP_CONFIG_TYPE_AUTO_IP;
 
-                               inet_pton(AF_INET6, value, &net_info->IpAddr6.Data.Ipv6);
-                       } else if (g_strcmp0(subKey, "PrefixLength") == 0) {
-                               net_info->PrefixLen6 = g_variant_get_byte(var);
-                       } else if (g_strcmp0(subKey, "Gateway") == 0) {
-                               value = g_variant_get_string(var, NULL);
+               } else if (g_strcmp0(subKey, "Address") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               inet_pton(AF_INET6, value, &net_info->GatewayAddr6.Data.Ipv6);
-                               net_info->BDefGateway6 = TRUE;
-                       } else if (g_strcmp0(subKey, "Privacy") == 0) {
-                               value = g_variant_get_string(var, NULL);
+                       inet_pton(AF_INET6, value, &net_info->IpAddr6.Data.Ipv6);
+               } else if (g_strcmp0(subKey, "PrefixLength") == 0) {
+                       net_info->PrefixLen6 = g_variant_get_byte(var);
+               } else if (g_strcmp0(subKey, "Gateway") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               if (value != NULL)
-                                       g_strlcpy(net_info->Privacy6, value, NETPM_IPV6_MAX_PRIVACY_LEN);
-                       }
+                       inet_pton(AF_INET6, value, &net_info->GatewayAddr6.Data.Ipv6);
+                       net_info->BDefGateway6 = TRUE;
+               } else if (g_strcmp0(subKey, "Privacy") == 0) {
+                       value = g_variant_get_string(var, NULL);
+
+                       if (value != NULL)
+                               g_strlcpy(net_info->Privacy6, value, NETPM_IPV6_MAX_PRIVACY_LEN);
                }
-               g_variant_iter_free(iter);
-       } else if (g_strcmp0(key, "Nameservers") == 0) {
-               int dnsCount = 0;
-               int dnsCount6 = 0;
-               gchar *dns_value = NULL;
-               gchar *dns_type = NULL;
-
-               g_variant_get(variant, "as", &iter);
-
-               while (g_variant_iter_loop(iter, "s", &dns_value)) {
-                       /* Check Type of DNS Address */
-                       if (__net_check_address_type(AF_INET6, dns_value)) {
-                               /* IPv6 */
-                               if (dnsCount6 < NET_DNS_ADDR_MAX) {
-                                       net_info->DnsAddr6[dnsCount6].Type =
-                                               NET_ADDR_IPV6;
-                                       inet_pton(AF_INET6, dns_value,
-                                                       &net_info->DnsAddr6[dnsCount6]\
-                                                       .Data.Ipv6);
-                                       dnsCount6++;
-                               }
-                       } else if (__net_check_address_type(AF_INET, dns_value)) {
-                               /* IPv4 */
-                               if (dnsCount < NET_DNS_ADDR_MAX) {
-                                       net_info->DnsAddr[dnsCount].Type =
-                                               NET_ADDR_IPV4;
-                                       __net_extract_ip(dns_value,
-                                                       &net_info->DnsAddr[dnsCount]);
-                                       dnsCount++;
-                               }
-                       } else { /* DNS Type */
-                               dns_type = g_strdup(dns_value);
-                               if (g_strcmp0(dns_type, "ipv4.manual") == 0)
-                                       net_info->DnsConfigType =
-                                               NET_DNS_CONFIG_TYPE_STATIC;
-                               else if (g_strcmp0(dns_type, "ipv4.dhcp") == 0)
-                                       net_info->DnsConfigType =
-                                               NET_DNS_CONFIG_TYPE_DYNAMIC;
-                               if (g_strcmp0(dns_type, "ipv6.manual") == 0)
-                                       net_info->DnsConfigType6 =
-                                               NET_DNS_CONFIG_TYPE_STATIC;
-                               else if (g_strcmp0(dns_type, "ipv6.dhcp") == 0)
-                                       net_info->DnsConfigType6 =
-                                               NET_DNS_CONFIG_TYPE_DYNAMIC;
-                               g_free(dns_type);
+       }
+       g_variant_iter_free(iter);
+}
+
+static void __net_extract_nameserver_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       GVariantIter *iter = NULL;
+       int dnsCount = 0;
+       int dnsCount6 = 0;
+       gchar *dns_value = NULL;
+       gchar *dns_type = NULL;
+
+       g_variant_get(variant, "as", &iter);
+
+       while (g_variant_iter_loop(iter, "s", &dns_value)) {
+               /* Check Type of DNS Address */
+               if (__net_check_address_type(AF_INET6, dns_value)) {
+                       /* IPv6 */
+                       if (dnsCount6 < NET_DNS_ADDR_MAX) {
+                               net_info->DnsAddr6[dnsCount6].Type =
+                                       NET_ADDR_IPV6;
+                               inet_pton(AF_INET6, dns_value,
+                                               &net_info->DnsAddr6[dnsCount6]\
+                                               .Data.Ipv6);
+                               dnsCount6++;
+                       }
+               } else if (__net_check_address_type(AF_INET, dns_value)) {
+                       /* IPv4 */
+                       if (dnsCount < NET_DNS_ADDR_MAX) {
+                               net_info->DnsAddr[dnsCount].Type =
+                                       NET_ADDR_IPV4;
+                               __net_extract_ip(dns_value,
+                                               &net_info->DnsAddr[dnsCount]);
+                               dnsCount++;
                        }
+               } else { /* DNS Type */
+                       dns_type = g_strdup(dns_value);
+                       if (g_strcmp0(dns_type, "ipv4.manual") == 0)
+                               net_info->DnsConfigType =
+                                       NET_DNS_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(dns_type, "ipv4.dhcp") == 0)
+                               net_info->DnsConfigType =
+                                       NET_DNS_CONFIG_TYPE_DYNAMIC;
+                       if (g_strcmp0(dns_type, "ipv6.manual") == 0)
+                               net_info->DnsConfigType6 =
+                                       NET_DNS_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(dns_type, "ipv6.dhcp") == 0)
+                               net_info->DnsConfigType6 =
+                                       NET_DNS_CONFIG_TYPE_DYNAMIC;
+                       g_free(dns_type);
                }
-               g_variant_iter_free(iter);
+       }
+       g_variant_iter_free(iter);
 
-               net_info->DnsCount = dnsCount;
-               net_info->DnsCount6 = dnsCount6;
-       } else if (g_strcmp0(key, "Nameservers.Configuration") == 0 && net_info->DnsCount == 0) {
-               int dnsCount = 0;
-               int dnsCount6 = 0;
-               gchar *dns_value = NULL;
-               gchar *dns_type = NULL;
-
-               g_variant_get(variant, "as", &iter);
-
-               while (g_variant_iter_loop(iter, "s", &dns_value)) {
-                       /* Check Type of DNS Address */
-                       if (__net_check_address_type(AF_INET6, dns_value)) {
-                               /* IPv6 */
-                               if (dnsCount6 < NET_DNS_ADDR_MAX) {
-                                       net_info->DnsAddr6[dnsCount6].Type =
-                                               NET_ADDR_IPV6;
-                                       inet_pton(AF_INET6, dns_value,
-                                                       &net_info->DnsAddr6[dnsCount6]\
-                                                       .Data.Ipv6);
-                                       dnsCount6++;
-                               }
-                       } else if (__net_check_address_type(AF_INET, dns_value)) {
-                               /* IPv4 */
-                               if (dnsCount < NET_DNS_ADDR_MAX) {
-                                       net_info->DnsAddr[dnsCount].Type =
-                                               NET_ADDR_IPV4;
-                                       __net_extract_ip(dns_value,
-                                                       &net_info->DnsAddr[dnsCount]);
-                                       dnsCount++;
-                               }
-                       } else { /* DNS Type */
-                               dns_type = g_strdup(dns_value);
-                               if (g_strcmp0(dns_type, "ipv4.manual") == 0)
-                                       net_info->DnsConfigType =
-                                               NET_DNS_CONFIG_TYPE_STATIC;
-                               else if (g_strcmp0(dns_type, "ipv4.dhcp") == 0)
-                                       net_info->DnsConfigType =
-                                               NET_DNS_CONFIG_TYPE_DYNAMIC;
-                               if (g_strcmp0(dns_type, "ipv6.manual") == 0)
-                                       net_info->DnsConfigType6 =
-                                               NET_DNS_CONFIG_TYPE_STATIC;
-                               else if (g_strcmp0(dns_type, "ipv6.dhcp") == 0)
-                                       net_info->DnsConfigType6 =
-                                               NET_DNS_CONFIG_TYPE_DYNAMIC;
-                               g_free(dns_type);
+       net_info->DnsCount = dnsCount;
+       net_info->DnsCount6 = dnsCount6;
+}
+
+static void __net_extract_nameserver_configuration_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       GVariantIter *iter = NULL;
+       int dnsCount = 0;
+       int dnsCount6 = 0;
+       gchar *dns_value = NULL;
+       gchar *dns_type = NULL;
+
+       g_variant_get(variant, "as", &iter);
+
+       while (g_variant_iter_loop(iter, "s", &dns_value)) {
+               /* Check Type of DNS Address */
+               if (__net_check_address_type(AF_INET6, dns_value)) {
+                       /* IPv6 */
+                       if (dnsCount6 < NET_DNS_ADDR_MAX) {
+                               net_info->DnsAddr6[dnsCount6].Type =
+                                       NET_ADDR_IPV6;
+                               inet_pton(AF_INET6, dns_value,
+                                               &net_info->DnsAddr6[dnsCount6]\
+                                               .Data.Ipv6);
+                               dnsCount6++;
+                       }
+               } else if (__net_check_address_type(AF_INET, dns_value)) {
+                       /* IPv4 */
+                       if (dnsCount < NET_DNS_ADDR_MAX) {
+                               net_info->DnsAddr[dnsCount].Type =
+                                       NET_ADDR_IPV4;
+                               __net_extract_ip(dns_value,
+                                               &net_info->DnsAddr[dnsCount]);
+                               dnsCount++;
+                       }
+               } else { /* DNS Type */
+                       dns_type = g_strdup(dns_value);
+                       if (g_strcmp0(dns_type, "ipv4.manual") == 0)
+                               net_info->DnsConfigType =
+                                       NET_DNS_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(dns_type, "ipv4.dhcp") == 0)
+                               net_info->DnsConfigType =
+                                       NET_DNS_CONFIG_TYPE_DYNAMIC;
+                       if (g_strcmp0(dns_type, "ipv6.manual") == 0)
+                               net_info->DnsConfigType6 =
+                                       NET_DNS_CONFIG_TYPE_STATIC;
+                       else if (g_strcmp0(dns_type, "ipv6.dhcp") == 0)
+                               net_info->DnsConfigType6 =
+                                       NET_DNS_CONFIG_TYPE_DYNAMIC;
+                       g_free(dns_type);
                        }
                }
                g_variant_iter_free(iter);
 
                net_info->DnsCount = dnsCount;
                net_info->DnsCount6 = dnsCount6;
-       } else if (g_strcmp0(key, "Domains") == 0) {
-       } else if (g_strcmp0(key, "Domains.Configuration") == 0) {
-       } else if (g_strcmp0(key, "Proxy") == 0) {
-               const gchar *url = NULL;
-               gchar *servers = NULL;
+}
 
-               g_variant_get(variant, "a{sv}", &iter);
-               while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
-                       if (g_strcmp0(subKey, "Method") == 0) {
-                               value = g_variant_get_string(var, NULL);
+static void __net_extract_proxy_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       const gchar *subKey = NULL;
+       const gchar *value = NULL;
+       GVariant *var = NULL;
+       GVariantIter *iter = NULL;
+       const gchar *url = NULL;
+       gchar *servers = NULL;
 
-                               if (g_strcmp0(value, "direct") == 0)
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
-                               else if (g_strcmp0(value, "auto") == 0)
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
-                               else if (g_strcmp0(value, "manual") == 0)
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
-                               else
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
-                       } else if (g_strcmp0(subKey, "URL") == 0) {
-                               url = g_variant_get_string(var, NULL);
-                       } else if (g_strcmp0(subKey, "Servers") == 0) {
-                               GVariantIter *iter_sub = NULL;
-
-                               g_variant_get(var, "as", &iter_sub);
-                               if (!g_variant_iter_loop(iter_sub, "s", &servers))
-                                       NETWORK_LOG(NETWORK_LOW, "There was no value");
-                               g_variant_iter_free(iter_sub);
-                       }
+       g_variant_get(variant, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
+               if (g_strcmp0(subKey, "Method") == 0) {
+                       value = g_variant_get_string(var, NULL);
+
+                       if (g_strcmp0(value, "direct") == 0)
+                               net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
+                       else if (g_strcmp0(value, "auto") == 0)
+                               net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
+                       else if (g_strcmp0(value, "manual") == 0)
+                               net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
+                       else
+                               net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
+               } else if (g_strcmp0(subKey, "URL") == 0) {
+                       url = g_variant_get_string(var, NULL);
+               } else if (g_strcmp0(subKey, "Servers") == 0) {
+                       GVariantIter *iter_sub = NULL;
+
+                       g_variant_get(var, "as", &iter_sub);
+                       if (!g_variant_iter_loop(iter_sub, "s", &servers))
+                               NETWORK_LOG(NETWORK_LOW, "There was no value");
+                       g_variant_iter_free(iter_sub);
                }
-               g_variant_iter_free(iter);
+       }
+       g_variant_iter_free(iter);
 
-               if (net_info->ProxyMethod == NET_PROXY_TYPE_AUTO && url != NULL)
-                       g_strlcpy(net_info->ProxyAddr, url, NET_PROXY_LEN_MAX);
-               else if (net_info->ProxyMethod == NET_PROXY_TYPE_MANUAL && servers != NULL)
-                       g_strlcpy(net_info->ProxyAddr, servers, NET_PROXY_LEN_MAX);
+       if (net_info->ProxyMethod == NET_PROXY_TYPE_AUTO && url != NULL)
+               g_strlcpy(net_info->ProxyAddr, url, NET_PROXY_LEN_MAX);
+       else if (net_info->ProxyMethod == NET_PROXY_TYPE_MANUAL && servers != NULL)
+               g_strlcpy(net_info->ProxyAddr, servers, NET_PROXY_LEN_MAX);
 
-               if (servers)
-                       g_free(servers);
-       } else if (g_strcmp0(key, "Proxy.Configuration") == 0 &&
-                       net_info->ProxyMethod != NET_PROXY_TYPE_AUTO &&
-                       net_info->ProxyMethod != NET_PROXY_TYPE_MANUAL) {
+       if (servers)
+               g_free(servers);
+}
 
-               const gchar *url = NULL;
-               gchar *servers = NULL;
+static void __net_extract_proxy_configuration_value(GVariant *variant, net_dev_info_t* net_info)
+{
+       const gchar *subKey = NULL;
+       const gchar *value = NULL;
+       GVariant *var = NULL;
+       GVariantIter *iter = NULL;
+       const gchar *url = NULL;
+       gchar *servers = NULL;
 
-               g_variant_get(variant, "a{sv}", &iter);
-               while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
-                       if (g_strcmp0(subKey, "Method") == 0) {
-                               value = g_variant_get_string(var, NULL);
+       g_variant_get(variant, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &subKey, &var)) {
+               if (g_strcmp0(subKey, "Method") == 0) {
+                       value = g_variant_get_string(var, NULL);
 
-                               if (g_strcmp0(value, "direct") == 0)
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
-                               else if (g_strcmp0(value, "auto") == 0)
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
-                               else if (g_strcmp0(value, "manual") == 0)
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
-                               else
-                                       net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
-                       } else if (g_strcmp0(subKey, "URL") == 0) {
-                               url = g_variant_get_string(var, NULL);
-                       } else if (g_strcmp0(subKey, "Servers") == 0) {
-                               GVariantIter *iter_sub = NULL;
-
-                               g_variant_get(var, "as", &iter_sub);
-                               if (!g_variant_iter_loop(iter_sub, "s", &servers))
-                                       NETWORK_LOG(NETWORK_LOW, "There was no value");
-                               g_variant_iter_free(iter_sub);
-                       }
+                       if (g_strcmp0(value, "direct") == 0)
+                               net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
+                       else if (g_strcmp0(value, "auto") == 0)
+                               net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
+                       else if (g_strcmp0(value, "manual") == 0)
+                               net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
+                       else
+                               net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
+               } else if (g_strcmp0(subKey, "URL") == 0) {
+                       url = g_variant_get_string(var, NULL);
+               } else if (g_strcmp0(subKey, "Servers") == 0) {
+                       GVariantIter *iter_sub = NULL;
+
+                       g_variant_get(var, "as", &iter_sub);
+                       if (!g_variant_iter_loop(iter_sub, "s", &servers))
+                               NETWORK_LOG(NETWORK_LOW, "There was no value");
+                       g_variant_iter_free(iter_sub);
                }
-               g_variant_iter_free(iter);
+       }
+       g_variant_iter_free(iter);
 
-               if (net_info->ProxyMethod == NET_PROXY_TYPE_AUTO && url != NULL)
-                       g_strlcpy(net_info->ProxyAddr, url, NET_PROXY_LEN_MAX);
-               else if (net_info->ProxyMethod == NET_PROXY_TYPE_MANUAL && servers != NULL)
-                       g_strlcpy(net_info->ProxyAddr, servers, NET_PROXY_LEN_MAX);
+       if (net_info->ProxyMethod == NET_PROXY_TYPE_AUTO && url != NULL)
+               g_strlcpy(net_info->ProxyAddr, url, NET_PROXY_LEN_MAX);
+       else if (net_info->ProxyMethod == NET_PROXY_TYPE_MANUAL && servers != NULL)
+               g_strlcpy(net_info->ProxyAddr, servers, NET_PROXY_LEN_MAX);
+
+       if (servers)
+               g_free(servers);
+}
+
+static int __net_extract_common_info(const char *key, GVariant *variant, net_profile_info_t* ProfInfo)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_t Error = NET_ERR_NONE;
+       net_dev_info_t* net_info = NULL;
+
+       if (ProfInfo->profile_type == NET_DEVICE_CELLULAR) {
+               net_info = &(ProfInfo->ProfileInfo.Pdp.net_info);
+       } else if (ProfInfo->profile_type == NET_DEVICE_WIFI) {
+               net_info = &(ProfInfo->ProfileInfo.Wlan.net_info);
+       } else if (ProfInfo->profile_type == NET_DEVICE_ETHERNET) {
+               net_info = &(ProfInfo->ProfileInfo.Ethernet.net_info);
+       } else if (ProfInfo->profile_type == NET_DEVICE_BLUETOOTH) {
+               net_info = &(ProfInfo->ProfileInfo.Bluetooth.net_info);
+       } else if (ProfInfo->profile_type == NET_DEVICE_MESH) {
+               net_info = &(ProfInfo->ProfileInfo.Mesh.net_info);
+       } else {
+               NETWORK_LOG(NETWORK_ERROR,
+                               "Invalid Profile type. [%d]", ProfInfo->profile_type);
+               return NET_ERR_INVALID_PARAM;
+       }
 
-               if (servers)
-                       g_free(servers);
+       if (g_strcmp0(key, "State") == 0) {
+               __net_extract_state_value(variant, ProfInfo);
+       } else if (g_strcmp0(key, "StateIPv6") == 0) {
+               __net_extract_state6_value(variant, ProfInfo);
+       } else if (g_strcmp0(key, "Error") == 0) {
+               __net_extract_error(variant, ProfInfo);
+       } else if (g_strcmp0(key, "Favorite") == 0) {
+               ProfInfo->Favourite = (char)g_variant_get_boolean(variant);
+       } else if (g_strcmp0(key, "Ethernet") == 0) {
+               __net_extract_ethernet_value(variant, net_info);
+       } else if (g_strcmp0(key, "IPv4") == 0) {
+               __net_extract_ipv4_value(variant, net_info);
+       } else if (g_strcmp0(key, "IPv4.Configuration") == 0) {
+               __net_extract_ipv4_configuration_value(variant, net_info);
+       } else if (g_strcmp0(key, "IPv6") == 0) {
+               __net_extract_ipv6_value(variant, net_info);
+       } else if (g_strcmp0(key, "IPv6.Configuration") == 0) {
+               __net_extract_ipv6_configuration_value(variant, net_info);
+       } else if (g_strcmp0(key, "Nameservers") == 0) {
+               __net_extract_nameserver_value(variant, net_info);
+       } else if (g_strcmp0(key, "Nameservers.Configuration") == 0 && net_info->DnsCount == 0) {
+               __net_extract_nameserver_configuration_value(variant, net_info);
+       } else if (g_strcmp0(key, "Domains") == 0) {
+       } else if (g_strcmp0(key, "Domains.Configuration") == 0) {
+       } else if (g_strcmp0(key, "Proxy") == 0) {
+               __net_extract_proxy_value(variant, net_info);
+       } else if (g_strcmp0(key, "Proxy.Configuration") == 0 &&
+                       net_info->ProxyMethod != NET_PROXY_TYPE_AUTO &&
+                       net_info->ProxyMethod != NET_PROXY_TYPE_MANUAL) {
+               __net_extract_proxy_configuration_value(variant, net_info);
        } else if (g_strcmp0(key, "Provider") == 0) {
-               /* Do noting */
+               /* Do nothing */
        }
 
        __NETWORK_FUNC_EXIT__;