Add new API for setting IP address 70/155470/2
authorSeonah Moon <seonah1.moon@samsung.com>
Fri, 13 Oct 2017 07:01:23 +0000 (16:01 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Thu, 19 Oct 2017 04:09:10 +0000 (13:09 +0900)
Change-Id: I4d8fc81ff6f36b43cdac308d45d887ea259d4026

include/softap.h
include/softap_private.h
packaging/capi-network-softap.spec
src/softap.c
test/softap_test.c

index a50d9f163fdf0dfe69e6c2191778055a61d2ccab..fa0c25cfc2a79361f1afcedd824d49c83ea86d3d 100644 (file)
@@ -333,6 +333,21 @@ int softap_get_mac_address(softap_h softap, char **mac_address);
  */
 int softap_get_network_interface_name(softap_h softap, char **interface_name);
 
+/**
+ * @brief Sets the local IP address.
+ * @since_tizen 4.0
+ * @remarks This change is applied next time softap is enabled.
+ *          You can use softap_enable() or softap_reload_settings() to enable softap.
+ * @param[in]  softap  The softap handle
+ * @param[in]  address_family  The address family of IP address (currently, #SOFTAP_ADDRESS_FAMILY_IPV4 is only supported)
+ * @param[out]  ip_address  The local IP address
+ * @return 0 on success, otherwise negative error value
+ * @retval  #SOFTAP_ERROR_NONE  Successful
+ * @retval  #SOFTAP_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval  #SOFTAP_ERROR_NOT_SUPPORTED  API is not supported
+ */
+int softap_set_ip_address(softap_h softap, softap_address_family_e address_family, const char *ip_address);
+
 /**
  * @brief Gets the local IP address.
  * @since_tizen 3.0
index c149e4ba6767f93fd9f95d3aaf0f6affb0427e10..20adfcf1c2c8c5f3a51546f18410907bfa003e93 100644 (file)
@@ -182,9 +182,11 @@ typedef enum {
 #define SOFTAP_KEY_MAX_LEN     64      /**< Maximum length of wifi key */
 #define SOFTAP_VENDOR_MAX_LEN  1024    /**< Maximum length of vendor element */
 #define SOFTAP_HASH_KEY_MAX_LEN        64
-
 #define SOFTAP_MODE_MAX_LEN 10  /**< Maximum length of mode */
 
+#define SOFTAP_IPV4_ADDRESS_MAX_LEN    15      /**< Maximum length of IP address */
+#define SOFTAP_IPV4_ADDRESS_MIN_LEN    7       /**< Minimum length of IP address */
+
 #define VCONFKEY_MOBILE_HOTSPOT_SSID   "memory/private/mobileap-agent/ssid"
 #define MAX_ALIAS_LEN  256
 
@@ -235,6 +237,7 @@ typedef struct {
        /* Settings */
        char *ssid;
        char passphrase[SOFTAP_KEY_MAX_LEN + 1];
+       char ip_address[SOFTAP_IPV4_ADDRESS_MAX_LEN + 1];
        char vendor[SOFTAP_VENDOR_MAX_LEN + 1];
        bool visibility;
        bool dhcp_enabled;
index e9fbae29cadbd48a12c329513ba5892abf254b3f..145c4d638f4912d449976a297e8745c61923e370 100644 (file)
@@ -1,6 +1,6 @@
 Name:          capi-network-softap
 Summary:       Softap Framework
-Version:       0.0.17
+Version:       0.0.18
 Release:       1
 Group:         System/Network
 License:       Apache-2.0
index fce607d16ec02d2ad46eccc4436c8e9b85926fad..8a75b72e83213d357980f5aab1b8d76151a0be8a 100755 (executable)
@@ -690,6 +690,9 @@ static GVariant *__prepare_softap_settings(softap_h softap)
        if (sa->sec_type != SOFTAP_SECURITY_TYPE_NONE)
                g_variant_builder_add(builder, "{sv}", "passphrase", g_variant_new_string(sa->passphrase));
 
+       if (strlen(sa->ip_address))
+               g_variant_builder_add(builder, "{sv}", "ip_address", g_variant_new_string(sa->ip_address));
+
        if (strlen(sa->vendor))
                g_variant_builder_add(builder, "{sv}", "vendor", g_variant_new_string(sa->vendor));
 
@@ -1074,6 +1077,35 @@ API int softap_get_network_interface_name(softap_h softap, char **interface_name
        return SOFTAP_ERROR_NONE;
 }
 
+API int softap_set_ip_address(softap_h softap, softap_address_family_e address_family, const char *ip_address)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(ip_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(ip_address) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       int ip_len = 0;
+
+       if (address_family == SOFTAP_ADDRESS_FAMILY_IPV4) {
+               ip_len = strlen(ip_address);
+               if (ip_len < SOFTAP_IPV4_ADDRESS_MIN_LEN || ip_len > SOFTAP_IPV4_ADDRESS_MAX_LEN) {
+                       ERR("parameter(ip_address) is too short or long\n");
+                       return SOFTAP_ERROR_INVALID_PARAMETER;
+               }
+               g_strlcpy(sa->ip_address, ip_address, sizeof(sa->ip_address));
+       } else {
+               /* IPv6 is not supported yet. */
+               ERR("Invalid address type!!\n");
+               return SOFTAP_ERROR_NOT_SUPPORTED;
+       }
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
 API int softap_get_ip_address(softap_h softap, softap_address_family_e address_family,  char **ip_address)
 {
        DBG("+");
index a425837bd76ad8f2ac868acc3819413add524e20..8ed7f4fd37d42125954f241a144764dfcd45254b 100755 (executable)
@@ -664,6 +664,25 @@ static int test_softap_set_mode(void)
        return 1;
 }
 
+static int test_softap_set_ip_address(void)
+{
+       int ret;
+       char ip[16];
+
+       printf("Input IP address for Softap(IPv4 only): ");
+       ret = scanf("%15s", ip);
+       if (ret < 0) {
+               printf("scanf is failed!!\n");
+               return 0;
+       }
+
+       ret = softap_set_ip_address(sa, SOFTAP_ADDRESS_FAMILY_IPV4, ip);
+       if (ret != SOFTAP_ERROR_NONE)
+               return 0;
+
+       return 1;
+}
+
 int main(int argc, char **argv)
 {
        GMainLoop *mainloop;
@@ -715,6 +734,7 @@ gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data)
                printf("h       - Enable DHCP Server\n");
                printf("i       - Disable DHCP Server\n");
                printf("j       - Set wireless mode\n");
+               printf("k       - Set IP address (IPv4 only)\n");
                printf("0       - Exit \n");
                printf("ENTER  - Show options menu.......\n");
        }
@@ -777,6 +797,9 @@ gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data)
        case 'j':
                rv = test_softap_set_mode();
                break;
+       case 'k':
+               rv = test_softap_set_ip_address();
+               break;
        }
 
        if (rv == 1)