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.
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>
17 #include <connection.h>
18 #include <restservice.h>
19 #include "main_thread.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"
28 #include "dpm_api_mapper.h"
30 #include "samonitor_tag.h"
31 #include <dpm/restriction.h>
35 namespace PH = std::placeholders;
36 extern bool volatile g_running;
38 #if !defined(DATA_DIR)
39 # error "DATA_DIR must be defined (directory to store application intermediate files)"
44 const std::string savedConfig{STRINGIFY(DATA_DIR) "/sam.conf"};
50 MainThread::MainThread() : ThreadBase()
54 MainThread::~MainThread()
58 void MainThread::routine()
61 LOG_D(TAG, "[MAIN_THREADS] Main routine start");
63 NetworkManager::Settings& settings = NetworkManager::Settings::instance();
64 settings.setSaveFileName(savedConfig);
66 if (!settings.load() && !settings.loadDefaults()) {
67 throw std::runtime_error("Failed to load settings");
70 NetworkManager::RestService rest(settings.getServerAddress());
71 NetworkManager::Connection conn(settings, &rest);
73 PolicyHandler policy_handler(conn);
74 ReportAdapter report_adapter(conn);
75 SettingsHandler settings_handler(conn);
76 std::shared_ptr<AuditTrailClient> audit_trail_client = nullptr;
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.");
85 LOG_D(TAG, "auditing started");
90 LOG_D(TAG, "Stop auditing");
92 if (audit_trail_client) {
93 audit_trail_client->stop_auditing();
95 } catch (const std::exception& e) {
96 LOG_E(TAG, "Main routine error: %s", e.what());
98 LOG_E(TAG, "Main routine error");
101 LOG_D(TAG, "[MAIN_THREADS] stopped");