static struct netconfig_headed_plugin_t *headed_plugin;
static struct netconfig_telephony_plugin_t *telephony_plugin;
+static bool is_feature_checked[NETCONFIG_SUPPORTED_FEATURE_MAX] = {0, };
+static bool feature_supported[NETCONFIG_SUPPORTED_FEATURE_MAX] = {0, };
+
gboolean netconfig_check_passphrase(const gchar *service, const char *passphrase)
{
gsize length;
gboolean netconfig_is_wifi_direct_on(void)
{
-#if defined TIZEN_P2P_ENABLE
+ if (!netconfig_check_feature_supported(NETCONFIG_SUPPORTED_FEATURE_WIFI_DIRECT))
+ return FALSE;
+
int wifi_direct_state = 0;
netconfig_vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &wifi_direct_state);
DBG("Wi-Fi direct mode %d", wifi_direct_state);
return (wifi_direct_state != 0) ? TRUE : FALSE;
-#else
- return FALSE;
-#endif
}
gboolean netconfig_is_wifi_tethering_on(void)
{
-#if defined TIZEN_TETHERING_ENABLE
- int wifi_tethering_state = 0;
-
- netconfig_vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &wifi_tethering_state);
- DBG("Wi-Ti tethering mode %d", wifi_tethering_state);
- if ((wifi_tethering_state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI)
- || (wifi_tethering_state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP)) {
- DBG("Mobile AP is on");
- return TRUE;
+ if (netconfig_check_feature_supported(NETCONFIG_SUPPORTED_FEATURE_TETHERING)) {
+ int wifi_tethering_state = 0;
+
+ netconfig_vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &wifi_tethering_state);
+ DBG("Wi-Ti tethering mode %d", wifi_tethering_state);
+ if ((wifi_tethering_state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI)
+ || (wifi_tethering_state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP)) {
+ DBG("Mobile AP is on");
+ return TRUE;
+ }
}
-#endif
+
DBG("Mobile AP is off");
return FALSE;
}
errno = 0;
if (execve(file_path, args, envs) == -1) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Fail to execute command (%s)", error_buf);
+ DBG("Fail to execute command (%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
exit(1);
}
} else if (pid > 0) {
return rv;
}
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("failed to fork(%s)", error_buf);
+ DBG("failed to fork(%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -EIO;
}
errno = 0;
if (execv(args[0], args) == -1) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Fail to execute command (%s)", error_buf);
+ DBG("Fail to execute command (%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
g_strfreev(args);
exit(1);
}
return rv;
}
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("failed to fork(%s)", error_buf);
+ DBG("failed to fork(%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
g_strfreev(args);
return -EIO;
state = sigaction(SIGCHLD, &act, 0);
if (state != 0) {
- DBG("sigaction() : %d");
+ DBG("sigaction() : %d", state);
return -1;
}
errno = 0;
if (execvp(file_path, args) == -1) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- ERR("Fail to execute command (%s)", error_buf);
+ ERR("Fail to execute command (%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
} else if (pid > 0) {
return rv;
}
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("failed to fork(%s)", error_buf);
+ DBG("failed to fork(%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -EIO;
}
struct sigaction act;
int state = 0;
+ char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
act.sa_handler = no_wait_signal_handler;
sigemptyset(&act.sa_mask);
state = sigaction(SIGCHLD, &act, 0);
if (state != 0) {
- DBG("sigaction() : %d");
+ DBG("sigaction() : %d", state);
return -1;
}
errno = 0;
if (execvp(file_path, args) == -1) {
- ERR("Fail to execute command (%s)", strerror(errno));
+ ERR("Fail to execute command (%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
} else if (pid > 0) {
return rv;
}
- DBG("failed to fork(%s)", strerror(errno));
+ DBG("failed to fork(%s)",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -EIO;
}
errno = 0;
sock = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (sock < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to create socket : %s", error_buf);
+ DBG("Failed to create socket : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
close(sock);
if (result < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to get ifr index: %s", error_buf);
+ DBG("Failed to get ifr index: %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
sock = socket(PF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to create socket : %s", error_buf);
+ DBG("Failed to create socket : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
if (ioctl(sock, SIOCADDRT, &rt) < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to set route address : %s", error_buf);
+ DBG("Failed to set route address : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
close(sock);
return -1;
}
sock = socket(PF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to create socket : %s", error_buf);
+ DBG("Failed to create socket : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
if (ioctl(sock, SIOCDELRT, &rt) < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to set route address : %s", error_buf);
+ DBG("Failed to set route address : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
close(sock);
return -1;
}
errno = 0;
if (inet_pton(AF_INET6, ip_addr, &rt.rtmsg_dst) < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("inet_pton failed : %s", error_buf);
+ DBG("inet_pton failed : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
if (gateway != NULL) {
rt.rtmsg_flags |= RTF_GATEWAY;
if (inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway) < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("inet_pton failed : %s", error_buf);
+ DBG("inet_pton failed : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
}
fd = socket(AF_INET6, SOCK_DGRAM, 0);
if (fd < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to create socket : %s", error_buf);
+ DBG("Failed to create socket : %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
return -1;
}
}
if ((err = ioctl(fd, SIOCADDRT, &rt)) < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- DBG("Failed to add route: %s", error_buf);
+ DBG("Failed to add route: %s",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
close(fd);
return -1;
}
gboolean handle_launch_direct(Wifi *wifi, GDBusMethodInvocation *context)
{
-#if defined TIZEN_P2P_ENABLE
+ if (!netconfig_check_feature_supported(NETCONFIG_SUPPORTED_FEATURE_WIFI_DIRECT)) {
+ wifi_complete_launch_direct(wifi, context);
+ return TRUE;
+ }
+
int ret = 0;
DBG("Launch Wi-Fi direct daemon");
if (ret < 0) {
ERR("Failed to launch Wi-Fi direct daemon");
netconfig_error_wifi_direct_failed(context);
- return FALSE;
+ return TRUE;
}
wifi_complete_launch_direct(wifi, context);
return TRUE;
-#else
- wifi_complete_launch_direct(wifi, context);
- return FALSE;
-#endif
}
int execute_mdnsd_script(char* op)
if (execute_mdnsd_script("start") < 0) {
ERR("Failed to launch mdnsresponder daemon");
netconfig_error_invalid_parameter(context);
- return FALSE;
+ return TRUE;
}
mdnsd_ref_count++;
return netconfig_plugin_telephony_enabled;
}
+bool netconfig_check_feature_supported(netconfig_supported_feature_e feature)
+{
+ const char *key = NULL;
+
+ if (!is_feature_checked[feature]) {
+ switch (feature) {
+ case NETCONFIG_SUPPORTED_FEATURE_ETHERNET:
+ key = ETHERNET_FEATURE;
+ break;
+ case NETCONFIG_SUPPORTED_FEATURE_TETHERING:
+ key = TETHERING_FEATURE;
+ break;
+ case NETCONFIG_SUPPORTED_FEATURE_WIFI_DIRECT:
+ key = WIFI_DIRECT_FEATURE;
+ break;
+ case NETCONFIG_SUPPORTED_FEATURE_WIFI_SOFTAP:
+ key = WIFI_SOFTAP_FEATURE;
+ break;
+ default:
+ ERR("Uknown feature");
+ return false;
+ }
+
+ if (system_info_get_platform_bool(key, &feature_supported[feature]) < 0) {
+ ERR("Get feature is failed");
+ return false;
+ }
+ is_feature_checked[feature] = true;
+ }
+ return feature_supported[feature];
+}