Add SD Card Event Receiver 69/109469/3
authorSungjun, Lee <sjun221.lee@samsung.com>
Tue, 10 Jan 2017 06:48:23 +0000 (15:48 +0900)
committerSungbae Yoo <sungbae.yoo@samsung.com>
Tue, 10 Jan 2017 06:54:32 +0000 (22:54 -0800)
Change-Id: I775482a74e48698d10088a5d1ba03209d319604c
Signed-off-by: Sungjun, Lee <sjun221.lee@samsung.com>
server/external-encryption.cpp

index 0904773..8906b8d 100644 (file)
@@ -26,6 +26,8 @@
 #include "app-bundle.h"
 #include "engine/ecryptfs-engine.h"
 #include "key-manager/key-manager.h"
+#include <klay/dbus/variant.h>
+#include <klay/dbus/connection.h>
 
 #include "rmi/external-encryption.h"
 
@@ -57,6 +59,77 @@ void showProgressUI(const std::string type) {
        launchpad.launch("org.tizen.ode-gui", bundle);
 }
 
+void externalCallback(dbus::Variant parameters)
+{
+       INFO("SD Card State Changed");
+       int intparams[6];
+       char* strparams[7];
+
+       parameters.get("(issssssisibii)",
+                    &intparams[0], // block type: 0 - scsi, 1 : mmc
+                    &strparams[0], // devnode
+                    &strparams[1], // syspath
+                    &strparams[2], // usage
+                    &strparams[3], // fs type
+                    &strparams[4], // fs version
+                    &strparams[5], // fs uuid enc
+                    &intparams[1], // readonly: 0 - rw, 1 - ro
+                    &strparams[6], // mount point
+                    &intparams[2], // state: 0 - unmount, 1 - mount
+                    &intparams[3], // primary: 0 - flase, 1 - true
+                    &intparams[4], // flags: 1 - unmounted 2 - broken filesystem 4 - no filesystem 8 - not supported 16 - readonly
+                    &intparams[5]); // strage id
+       if(intparams[2] == 0) {
+               INFO("Unmounted!!!");
+       }
+       else {
+               INFO("Mounted!!!");
+               // TODO
+               // Password Popup
+               std::string pw = "tizen";
+               KeyManager::data pwData(pw.begin(), pw.end());
+               engine.mount(keyManager.getDEK(pwData));
+       }
+}
+
+void externalAddEventReceiver()
+{
+       dbus::Connection &systemDBus = dbus::Connection::getSystem();
+       dbus::Connection::SubscriptionId id;
+
+       id = systemDBus.subscribeSignal("",
+                                                           "org.tizen.system.storage.BlockManager",
+                                                           "DeviceChanged",
+                                                           "/Org/Tizen/System/Storage/Block/Manager",
+                                                           externalCallback);
+       INFO("Event ID: " + std::to_string(id));
+}
+
+void externalCheckMount()
+{
+       INFO("EcryptfsEncrypt");
+       if (!engine.isMountpointMounted(EXTERNAL_STORAGE_PATH)) {
+               INFO("SD Card not inserted!");
+       }
+       else {
+               INFO("SD Card inserted!");
+               if (engine.checkEncryptMetaData(ORIG_META_FILE_PATH) == 0) {
+                       INFO("SD Card encrypted!");
+                       if (engine.isEcryptfsMountpointMounted(EXTERNAL_STORAGE_PATH) == 0) {
+                               INFO("Already Ecryptfs Mounted");
+                       }
+                       else {
+                               std::string pw = "tizen";
+                               KeyManager::data pwData(pw.begin(), pw.end());
+                               engine.mount(keyManager.getDEK(pwData));
+                       }
+               }
+               else {
+                       INFO("SD Card not encrypted!");
+               }
+       }
+}
+
 }
 
 ExternalEncryption::ExternalEncryption(ODEControlContext& ctx) :
@@ -68,6 +141,9 @@ ExternalEncryption::ExternalEncryption(ODEControlContext& ctx) :
        context.registerParametricMethod(this, "", (int)(ExternalEncryption::decrypt)(std::string));
        context.registerParametricMethod(this, "", (int)(ExternalEncryption::changePassword)(std::string, std::string));
        context.registerNonparametricMethod(this, "", (int)(ExternalEncryption::getState));
+
+       externalAddEventReceiver();
+       externalCheckMount();
 }