Added config CAPI to set DNS address. 33/186233/9
authorNiraj Kumar Goit <niraj.g@samsung.com>
Wed, 8 Aug 2018 07:27:32 +0000 (12:57 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Wed, 5 Sep 2018 07:02:34 +0000 (12:32 +0530)
Added config CAPI "wifi_manager_config_set_dns_address" for
Hidden AP connection with static IP setting.

Change-Id: I5a69912336da1b741907170e9c5dd13a39ac461f
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
include/network_interface.h
include/wifi_internal.h
src/network_dbus.c
src/wifi_config.c

index 2812b18..378acb7 100755 (executable)
@@ -253,10 +253,11 @@ typedef struct {
        net_ip_config_type_e ip_type;
        gchar *ip_address;
        gchar *subnet_mask;
-       int prefix_length;
        gchar *gateway_address;
+       int prefix_length;
+       int dns_count;
        net_dns_config_type_e dns_type;
-       gchar *dns_address;
+       gchar *dns_address[NET_DNS_ADDR_MAX];
 } net_ip_info_config_s;
 
 typedef void (*net_event_cb)(const net_event_info_s* net_event, void* user_data);
index 6d28798..59eb0f6 100755 (executable)
@@ -52,6 +52,7 @@ extern "C" {
 #define WIFI_CONFIG_IPV4_SUBNET_MASK           "IPv4.netmask_prefixlen"
 #define WIFI_CONFIG_IPV4_GATEWAY_ADDRESS       "IPv4.gateway"
 #define WIFI_CONFIG_IPV4_DNS_METHOD                    "Nameservers.IPv4method"
+#define WIFI_CONFIG_DNS_ADDRESS                                "Nameservers"
 #define WIFI_CONFIG_FAILURE                                    "Failure"
 #define WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY     "AnonymousIdentity"
 #define WIFI_CONFIG_EAP_CACERT                         "CACertFile"
@@ -168,10 +169,11 @@ typedef struct {
        wifi_manager_ip_config_type_e ip_type;
        gchar *ip_address;
        gchar *subnet_mask;
-       int prefix_length;
        gchar *gateway_address;
-       wifi_manager_dns_config_type_e dns_type;
-       gchar *dns_address;
+       int prefix_length;
+       int dns_count;
+       net_dns_config_type_e dns_type;
+       gchar *dns_address[NET_DNS_ADDR_MAX];
 } wifi_config_ip_info_s;
 
 typedef struct {
index df24a21..f172c54 100755 (executable)
@@ -2827,6 +2827,8 @@ int _net_dbus_config_save_configurations(const gchar *config_id, const gchar *na
        GVariant *message = NULL;
        const char *manual_method = "manual";
        const char *dhcp_method = "dhcp";
+       int i;
+       char *dns_address = NULL, *temp = NULL;
 
        b = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
        g_variant_builder_add(b, "{sv}", WIFI_CONFIG_NAME, g_variant_new_string(name));
@@ -2858,6 +2860,24 @@ int _net_dbus_config_save_configurations(const gchar *config_id, const gchar *na
                if (ip_info->dns_type == NET_DNS_CONFIG_TYPE_STATIC)
                        g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_DNS_METHOD,
                                                  g_variant_new_string(manual_method));
+
+               for (i = 0; i < ip_info->dns_count; i++) {
+                       if (temp)
+                               dns_address = g_strdup_printf("%s%s;", temp,
+                                                                         ip_info->dns_address[i]);
+                       else
+                               dns_address = g_strdup_printf("%s;", ip_info->dns_address[i]);
+
+                       g_free(temp);
+                       temp = dns_address;
+               }
+
+               if (ip_info->dns_count > 0)
+                       g_variant_builder_add(b, "{sv}", WIFI_CONFIG_DNS_ADDRESS,
+                                                 g_variant_new_string(dns_address));
+
+               g_free(dns_address);
+
                break;
        case NET_IP_CONFIG_TYPE_DYNAMIC:
                        g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_METHOD,
@@ -2867,9 +2887,28 @@ int _net_dbus_config_save_configurations(const gchar *config_id, const gchar *na
                        g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_DNS_METHOD,
                                                          g_variant_new_string(dhcp_method));
 
-               else if (ip_info->dns_type == NET_DNS_CONFIG_TYPE_STATIC)
+               else if (ip_info->dns_type == NET_DNS_CONFIG_TYPE_STATIC) {
                        g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_DNS_METHOD,
-                                                 g_variant_new_string(manual_method));
+                                                                 g_variant_new_string(manual_method));
+
+                       for (i = 0; i < ip_info->dns_count; i++) {
+                               if (temp)
+                                       dns_address = g_strdup_printf("%s%s;", temp,
+                                                                                                 ip_info->dns_address[i]);
+                               else
+                                       dns_address = g_strdup_printf("%s;",
+                                                                                                 ip_info->dns_address[i]);
+
+                               g_free(temp);
+                               temp = dns_address;
+                       }
+
+                       if (ip_info->dns_count > 0)
+                               g_variant_builder_add(b, "{sv}", WIFI_CONFIG_DNS_ADDRESS,
+                                                                         g_variant_new_string(dns_address));
+
+                       g_free(dns_address);
+               }
                break;
        default:
                break;
index 6d635e4..29bbf96 100755 (executable)
@@ -61,7 +61,7 @@ EXPORT_API int wifi_manager_config_create(wifi_manager_h wifi, const char *name,
        h->ip_info->prefix_length = 0;
        h->ip_info->gateway_address = NULL;
        h->ip_info->dns_type = WIFI_MANAGER_DNS_CONFIG_TYPE_NONE;
-       h->ip_info->dns_address = NULL;
+       h->ip_info->dns_count = 0;
 
        if (security_type == WIFI_MANAGER_SECURITY_TYPE_EAP) {
                h->eap_config = g_new0(wifi_eap_config_s, 1);
@@ -101,6 +101,7 @@ EXPORT_API int wifi_manager_config_clone(wifi_manager_config_h origin, wifi_mana
 
        wifi_config_s *h = NULL;
        wifi_config_s *config = NULL;
+       int i;
 
        if (_wifi_check_config_validity(origin) == false || cloned_config == NULL) {
                WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
@@ -141,7 +142,9 @@ EXPORT_API int wifi_manager_config_clone(wifi_manager_config_h origin, wifi_mana
                h->ip_info->prefix_length = config->ip_info->prefix_length;
                h->ip_info->gateway_address = g_strdup(config->ip_info->gateway_address);
                h->ip_info->dns_type = config->ip_info->dns_type;
-               h->ip_info->dns_address = g_strdup(config->ip_info->dns_address);
+               h->ip_info->dns_count = config->ip_info->dns_count;
+               for (i = 0; i < config->ip_info->dns_count; i++)
+                       h->ip_info->dns_address[i] = g_strdup(config->ip_info->dns_address[i]);
        }
 
        if (config->eap_config) {
@@ -153,7 +156,8 @@ EXPORT_API int wifi_manager_config_clone(wifi_manager_config_h origin, wifi_mana
                        g_free(h->ip_info->ip_address); //LCOV_EXCL_LINE
                        g_free(h->ip_info->subnet_mask); //LCOV_EXCL_LINE
                        g_free(h->ip_info->gateway_address); //LCOV_EXCL_LINE
-                       g_free(h->ip_info->dns_address); //LCOV_EXCL_LINE
+                       for (i = 0; i < h->ip_info->dns_count; i++) //LCOV_EXCL_LINE
+                               g_free(h->ip_info->dns_address[i]); //LCOV_EXCL_LINE
                        g_free(h->ip_info); //LCOV_EXCL_LINE
                        g_free(h); //LCOV_EXCL_LINE
                        __NETWORK_CAPI_FUNC_EXIT__; //LCOV_EXCL_LINE
@@ -186,6 +190,7 @@ EXPORT_API int wifi_manager_config_destroy(wifi_manager_config_h config)
        CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
 
        wifi_config_s *h = (wifi_config_s *)config;
+       int i;
 
        if (_wifi_check_config_validity(config) == false) {
                WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
@@ -200,7 +205,8 @@ EXPORT_API int wifi_manager_config_destroy(wifi_manager_config_h config)
                g_free(h->ip_info->ip_address);
                g_free(h->ip_info->subnet_mask);
                g_free(h->ip_info->gateway_address);
-               g_free(h->ip_info->dns_address);
+               for (i = 0; i < h->ip_info->dns_count; i++)
+                       g_free(h->ip_info->dns_address[i]);
                g_free(h->ip_info);
        }
        if (h->eap_config) {
@@ -601,6 +607,35 @@ EXPORT_API int wifi_manager_config_set_dns_config_type(wifi_manager_config_h con
        return WIFI_MANAGER_ERROR_NONE;
 }
 
+EXPORT_API int wifi_manager_config_set_dns_address(wifi_manager_config_h config,
+               int order, wifi_manager_address_family_e address_family,
+               const char *dns_address)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (_wifi_check_config_validity(config) == false ||
+                       (address_family != WIFI_MANAGER_ADDRESS_FAMILY_IPV4 &&
+                        address_family != WIFI_MANAGER_ADDRESS_FAMILY_IPV6) ||
+                       order <= 0 ||
+                       order > NET_DNS_ADDR_MAX) {
+               WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
+               __NETWORK_CAPI_FUNC_EXIT__; //LCOV_EXCL_LINE
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
+       }
+
+       wifi_config_s *h = (wifi_config_s *)config;
+
+       h->ip_info->dns_address[order-1] = g_strdup(dns_address);
+       if (order == 1 || order == 2)
+               h->ip_info->dns_count += 1;
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
+
 EXPORT_API int wifi_manager_config_get_eap_anonymous_identity(wifi_manager_config_h config,
                char **anonymous_identity)
 {