Openssl: add thread support and fix initialization
[platform/core/security/key-manager.git] / src / manager / main / key-manager-main.cpp
index 00a81d5..67a6631 100644 (file)
 #include <stdlib.h>
 #include <signal.h>
 
-#include <openssl/ssl.h>
-#include <openssl/conf.h>
-#include <openssl/err.h>
-#include <openssl/evp.h>
-
 #include <dpl/log/log.h>
 #include <dpl/singleton.h>
-#include <dpl/singleton_safe_impl.h>
 
 #include <socket-manager.h>
 
-#include <echo.h>
 #include <ckm-service.h>
 #include <ocsp-service.h>
+#include <encryption-service.h>
+#include <crypto-init.h>
 
 #include <key-provider.h>
-#include <CryptoService.h>
-
-IMPLEMENT_SAFE_SINGLETON(CKM::Log::LogSystem);
+#include <file-system.h>
 
 #define REGISTER_SOCKET_SERVICE(manager, service) \
     registerSocketService<service>(manager, #service)
@@ -51,7 +44,7 @@ void registerSocketService(CKM::SocketManager &manager, const std::string& servi
     T *service = NULL;
     try {
         service = new T();
-        service->Create();
+        service->Start();
         manager.RegisterSocketService(service);
         service = NULL;
     } catch (const CKM::Exception &exception) {
@@ -69,15 +62,18 @@ void registerSocketService(CKM::SocketManager &manager, const std::string& servi
 }
 
 int main(void) {
-
-    int ret;
-    ret = system("/usr/bin/key-manager-listener");
-    LogInfo("system return val : " << ret);
-
     UNHANDLED_EXCEPTION_HANDLER_BEGIN
     {
         CKM::Singleton<CKM::Log::LogSystem>::Instance().SetTag("CKM");
 
+        int retCode = CKM::FileSystem::init();
+        if (retCode) {
+            LogError("Fatal error in FileSystem::init()");
+            return 1;
+        }
+
+        CKM::FileLock fl = CKM::FileSystem::lock();
+
         sigset_t mask;
         sigemptyset(&mask);
         sigaddset(&mask, SIGTERM);
@@ -86,32 +82,31 @@ int main(void) {
             LogError("Error in pthread_sigmask");
             return 1;
         }
-        LogInfo("Init external liblaries SKMM and openssl");
+        LogInfo("Init external libraries SKMM and openssl");
 
-        SSL_load_error_strings();
-        SSL_library_init();
-        OpenSSL_add_all_ciphers();
-        OPENSSL_config(NULL);
+        CKM::initOpenSsl();
 
         CKM::KeyProvider::initializeLibrary();
-        CKM::CryptoService::initialize();
 
         {
             LogInfo("Start!");
             CKM::SocketManager manager;
 
-            REGISTER_SOCKET_SERVICE(manager, CKM::EchoService);
             REGISTER_SOCKET_SERVICE(manager, CKM::CKMService);
             REGISTER_SOCKET_SERVICE(manager, CKM::OCSPService);
+            REGISTER_SOCKET_SERVICE(manager, CKM::EncryptionService);
 
             manager.MainLoop();
         }
         // Manager has been destroyed and we may close external libraries.
         LogInfo("Deinit SKMM and openssl");
         CKM::KeyProvider::closeLibrary();
-        // Deinit OPENSSL ?
-        EVP_cleanup();
-        ERR_free_strings();
+
+        CKM::deinitOpenSsl();
+    }
+    catch (const std::runtime_error& e)
+    {
+        LogError(e.what());
     }
     UNHANDLED_EXCEPTION_HANDLER_END
     return 0;