audit-trail client launch fixed
authori.metelytsia <i.metelytsia@samsung.com>
Fri, 4 Aug 2017 16:19:22 +0000 (19:19 +0300)
committeri.metelytsia <i.metelytsia@samsung.com>
Fri, 4 Aug 2017 16:19:22 +0000 (19:19 +0300)
device_core/nmdaemon/application_service.cpp
device_core/nmdaemon/application_service.h
device_core/nmdaemon/main_thread.cpp

index 78abe2c..6b6a7d2 100644 (file)
@@ -1,7 +1,10 @@
 #include <iostream>
+#include <fstream>
 #include <string>
 #include <cstdlib>
 #include <linux/limits.h>
+#include <sys/types.h>
+#include <dirent.h>
 #include <cassert>
 
 #include "application_service.h"
@@ -50,4 +53,43 @@ std::string ApplicationService::find_package_by_app_name(const std::string& app_
     return res;
 }
 
+int ApplicationService::get_process_id_by_name(const std::string& name)
+{
+    int pid = -1;
+
+    // Open the /proc directory
+    DIR* dp = opendir("/proc");
+
+    if(dp != NULL)
+    {
+        // Enumerate all entries in directory until process found
+        struct dirent* dirp;
+
+        while(pid < 0 && (dirp = readdir(dp)))
+        {
+            // Skip non-numeric entries
+            int id = atoi(dirp->d_name);
+            if(id > 0)
+            {
+                // Read contents of virtual /proc/{pid}/cmdline file
+                std::string cmdPath = std::string("/proc/") + dirp->d_name + std::string("/cmdline");
+                std::ifstream cmdFile(cmdPath.c_str());
+                std::string cmdLine;
+
+                getline(cmdFile, cmdLine);
+
+                if(!cmdLine.empty() && cmdLine.find(name) != std::string::npos)
+                {
+                    pid = id;
+                    break;
+                }
+            }
+        }
+    }
+
+    closedir(dp);
+
+    return pid;
+}
+
 } // namespace NMD
index 34d8da5..ea6ba09 100644 (file)
@@ -37,6 +37,14 @@ public:
      */
     static std::string find_package_by_app_name(const std::string& app_name);
 
+    /**
+     * @brief Find process id by application name
+     * @details This API can be used to find out process id
+     * @param name [in] application name
+     * @return process id or -1
+     */
+    static int get_process_id_by_name(const std::string& name);
+
 };
 
 } // namespace NMD
index f625180..3de4170 100644 (file)
@@ -20,6 +20,7 @@
 #include "audit_trail_client.h"
 #endif
 #include "registration_mq.h"
+#include "application_service.h"
 
 using namespace NetworkManager;
 namespace PH = std::placeholders;
@@ -191,8 +192,13 @@ void MainThread::routine()
         std::thread rmi_thread(&AgentPolicyService::run, &agent_policy_service);
 
 #ifndef __BUILD_UBUNTU__
-        AuditTrailClient audit_trail_client(iotivity->getDeviceID(), proxy_thread, report_handler, g_working_mode);
-        audit_trail_client.start_auditing();
+        std::shared_ptr<AuditTrailClient> audit_trail_client = nullptr;
+
+        if(ApplicationService::get_process_id_by_name("audit-trail") != -1)
+        {
+            audit_trail_client = std::make_shared<AuditTrailClient>(iotivity->getDeviceID(), proxy_thread, report_handler, g_working_mode);
+            audit_trail_client->start_auditing();
+        }
 #endif
 
         while(m_running)
@@ -205,7 +211,8 @@ void MainThread::routine()
         }
 
 #ifndef __BUILD_UBUNTU__
-        audit_trail_client.stop_auditing();
+        if(audit_trail_client)
+            audit_trail_client->stop_auditing();
 #endif
 
         if (proxy_thread)