Using updated clatd's Dbus interface and Path values
[platform/core/connectivity/net-config.git] / src / wifi.c
index 3ec8d94..8d3303a 100755 (executable)
@@ -22,6 +22,8 @@
 #include <unistd.h>
 #include <vconf.h>
 #include <vconf-keys.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #include "log.h"
 #include "wifi.h"
@@ -31,6 +33,7 @@
 #include "wifi-eap.h"
 #include "wifi-wps.h"
 #include "wifi-bssid-scan.h"
+#include "wifi-netlink-scan.h"
 #include "wifi-power.h"
 #include "wifi-state.h"
 #include "wifi-agent.h"
 #include "ip-conflict-detect.h"
 #include "wifi-config.h"
 #include "wifi-tdls.h"
+#include "wifi-key-encryption.h"
 #include "wifi-extension.h"
 
 #define SPRD_CP2_FIRMWARE_PATH "/usr/bin/cp2-downloader"
+#define SPRD_CP2_FIRMWARE_STATE_PATH "/tmp/.wifi-firmware-loaded"
 static int is_wifi_firmware_downloaded = FALSE;
 
 static Wifi *wifi_object = NULL;
@@ -109,6 +114,30 @@ void __netconfig_wifi_connect_reply(GObject *source_object, GAsyncResult *res,
        return;
 }
 
+static void _update_wifi_firmware_state(void)
+{
+       int fd;
+       mode_t mode = S_IRGRP | S_IWUSR | S_IXGRP;
+
+       fd = creat(SPRD_CP2_FIRMWARE_STATE_PATH, mode);
+       if (fd >= 0)
+               close(fd);
+       else
+               DBG("Failed to create wifi firmware state file");
+
+       is_wifi_firmware_downloaded = TRUE;
+}
+
+static int _get_wifi_firmware_state(void)
+{
+       if (!is_wifi_firmware_downloaded
+                       && access(SPRD_CP2_FIRMWARE_STATE_PATH, F_OK) != 0)
+               is_wifi_firmware_downloaded = FALSE;
+       else
+               is_wifi_firmware_downloaded = TRUE;
+       return is_wifi_firmware_downloaded;
+}
+
 int wifi_firmware_download(void)
 {
        int rv = 0;
@@ -116,13 +145,13 @@ int wifi_firmware_download(void)
        char *const args[] = { SPRD_CP2_FIRMWARE_PATH, NULL };
        char *const envs[] = { NULL };
 
-       if (!is_wifi_firmware_downloaded) {
+       if (!_get_wifi_firmware_state()) {
                rv = netconfig_execute_file(path, args, envs);
                if (rv < 0) {
                        DBG("wifi firmware download fails");
                        return -EIO;
                }
-               is_wifi_firmware_downloaded = TRUE;
+               _update_wifi_firmware_state();
                DBG("wifi firmware download successes");
        }
 
@@ -166,6 +195,8 @@ void wifi_object_create_and_init(void)
                        G_CALLBACK(handle_request_bssid_scan), NULL);
        g_signal_connect(wifi_object, "handle-get-bssid-list",
                        G_CALLBACK(handle_get_bssid_list), NULL);
+       g_signal_connect(wifi_object, "handle-netlink-scan",
+                       G_CALLBACK(handle_netlink_scan), NULL);
 
        /* WPS Connect */
        g_signal_connect(wifi_object, "handle-request-wps-connect",
@@ -279,6 +310,12 @@ void wifi_object_create_and_init(void)
        g_signal_connect(wifi_object, "handle-tdls-cancel-channel-switch",
                        G_CALLBACK(handle_tdls_cancel_channel_switch), NULL);
 
+       /* Passphrase Encryption */
+       g_signal_connect(wifi_object, "handle-encrypt-passphrase",
+                       G_CALLBACK(handle_encrypt_passphrase), NULL);
+       g_signal_connect(wifi_object, "handle-decrypt-passphrase",
+                       G_CALLBACK(handle_decrypt_passphrase), NULL);
+
        if (!g_dbus_interface_skeleton_export(interface_wifi, connection,
                        NETCONFIG_WIFI_PATH, NULL)) {
                ERR("Export WIFI_PATH for wifi failed");