ba45ba111528f94857296435cec683744f675047
[platform/core/security/suspicious-activity-monitor.git] / device-agent / daemon / main_thread.cpp
1 /**
2  * Samsung Ukraine R&D Center (SRK under a contract between)
3  * LLC "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
4  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
5  */
6 /**
7  * @file   main_thread.cpp
8  * @brief  nmdaemon main routine
9  * @date   Created May 12, 2017
10  * @author Mail to: <A HREF="mailto:d.lomtev@samsung.com">Dmytro Lomtev, d.lomtev@samsung.com</A>
11  * @author Mail to: <A HREF="mailto:i.metelytsia@samsung.com">Iurii Metelytsia, i.metelytsia@samsung.com</A>
12  * @author Mail to: <A HREF="mailto:m.kotsiuruba@samsung.com">Mykhailo Kotsiuruba, m.kotsiuruba@samsung.com</A>
13  * @author Mail to: <A HREF="mailto:a.zabolotnyi@samsung.com">Andrey Zabolotnyi, a.zabolotnyi@samsung.com</A>
14  */
15 #include <string>
16 #include <memory>
17 #include <connection.h>
18 #include <restservice.h>
19 #include "main_thread.h"
20 #include "utils.h"
21 #include "policyhandler.h"
22 #include "proxythread.h"
23 #include "audit_trail_client.h"
24 #include "application_service.h"
25 #include "reportadapter.h"
26 #include "settingshandler.h"
27 #include "macro.h"
28 #include "dpm_api_mapper.h"
29 #include "logging.h"
30 #include "samonitor_tag.h"
31 #include <dpm/restriction.h>
32 #include <unistd.h>
33 #include <cerrno>
34
35 namespace PH = std::placeholders;
36 extern bool volatile g_running;
37
38 #if !defined(DATA_DIR)
39 #   error "DATA_DIR must be defined (directory to store application intermediate files)"
40 #endif
41
42 namespace
43 {
44 const std::string savedConfig{STRINGIFY(DATA_DIR) "/sam.conf"};
45 }
46
47 namespace NMD
48 {
49
50 MainThread::MainThread() : ThreadBase()
51 {
52 }
53
54 MainThread::~MainThread()
55 {
56 }
57
58 void MainThread::routine()
59 {
60     try {
61         LOG_D(TAG, "[MAIN_THREADS] Main routine start");
62
63         NetworkManager::Settings& settings = NetworkManager::Settings::instance();
64         settings.setSaveFileName(savedConfig);
65
66         if (!settings.load() && !settings.loadDefaults()) {
67             throw std::runtime_error("Failed to load settings");
68         }
69
70         NetworkManager::RestService rest(settings.getServerAddress());
71         NetworkManager::Connection conn(settings, &rest);
72
73         PolicyHandler policy_handler(conn);
74         ReportAdapter report_adapter(conn);
75         SettingsHandler settings_handler(conn);
76         std::shared_ptr<AuditTrailClient> audit_trail_client = nullptr;
77
78         if (ApplicationService::get_process_id_by_name("audit-trail") != -1) {
79             audit_trail_client = std::make_shared<AuditTrailClient>(&report_adapter);
80             LOG_D(TAG, "audit-trail start auditing");
81             if (!audit_trail_client->start_auditing()) {
82                 LOG_E(TAG, "audit_trail fail to start auditing.");
83             }
84
85             LOG_D(TAG, "auditing started");
86         }
87
88         conn.loop();
89
90         LOG_D(TAG, "Stop auditing");
91
92         if (audit_trail_client) {
93             audit_trail_client->stop_auditing();
94         }
95     } catch (const std::exception& e) {
96         LOG_E(TAG, "Main routine error: %s", e.what());
97     } catch (...) {
98         LOG_E(TAG, "Main routine error");
99     }
100
101     LOG_D(TAG, "[MAIN_THREADS] stopped");
102     g_running = false;
103 }
104
105 } // namespace NMD