1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*
* Copyright (c) 2017-2020 Samsung Electronics Co., Ltd. All rights reserved.
*
* This file is licensed under the terms of MIT License or the Apache License
* Version 2.0 of your choice. See the LICENSE.MIT file for MIT license details.
* See the LICENSE file or the notice below for Apache License Version 2.0
* details.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file src/license-manager/agent/main.cpp
* @author Bartlomiej Grzelewski <b.grzelewski@samsung.com>
* @brief Main function of license manager agent
*/
#include <csignal>
#include <cstdlib>
#include <cstring>
#include <exception>
#include <systemd/sd-daemon.h>
#include <openssl/evp.h>
#include <openssl/ssl.h>
#include <openssl/conf.h>
#include <openssl/err.h>
#include <alog.h>
#include <agent_logic.h>
#include <agent.h>
static LicenseManager::Agent *s_agentPtr = nullptr;
void kill_handler(int sig UNUSED) {
ALOGD("License manager service is going down now");
if (s_agentPtr)
s_agentPtr->exitLoop();
}
int main(int, char **) {
init_agent_log();
int ret;
struct sigaction act;
memset(&act, 0, sizeof(act));
act.sa_handler = &kill_handler;
if ((ret = sigaction(SIGTERM, &act, NULL)) < 0) {
ALOGE("sigaction failed [<<" << ret << "]");
return EXIT_FAILURE;
}
OpenSSL_add_all_algorithms();
SSL_library_init();
OPENSSL_config(NULL);
SSL_load_error_strings();
try {
LicenseManager::AgentLogic *logic = new LicenseManager::AgentLogic;
LicenseManager::Agent agent;
if (!agent.initialize(logic)) {
ALOGE("cynara initialization failed");
return -1;
}
s_agentPtr = &agent;
ret = sd_notify(0, "READY=1");
if (ret == 0) {
ALOGW("Agent was not configured to notify its status");
} else if (ret < 0) {
ALOGE("sd_notify failed: [" << ret << "]");
}
agent.mainLoop();
s_agentPtr = nullptr;
} catch (const std::exception &e) {
s_agentPtr = nullptr;
std::string error = e.what();
ALOGE("Exception: %s", error.c_str());
}
CONF_modules_free();
EVP_cleanup();
ERR_free_strings();
CRYPTO_cleanup_all_ex_data();
return 0;
}
|