wrt-security - add systemd support
[platform/framework/web/wrt-security.git] / src / main.cpp
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 /*
17  * @file        main.cpp
18  * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
19  * @version     1.0
20  * @brief       This is main routing for Security Daemon
21  */
22
23 #include <systemd/sd-daemon.h>
24 #include <dpl/log/log.h>
25 #include <dpl/single_instance.h>
26
27 #include "security_daemon.h"
28 #include "privacy_manager_daemon.h"
29
30 #include <pthread.h>
31
32 static const std::string DAEMON_INSTANCE_UUID =
33     "5ebf3f24-dad6-4a27-88b4-df7970efe7a9";
34
35 int main(int argc, char* argv[])
36 {
37     DPL::SingleInstance instance;
38     int retVal;
39     Try {
40                 if (!instance.TryLock(DAEMON_INSTANCE_UUID)) {
41                         LogError("Security Daemon is already running");
42                         return -1;
43                 }
44
45                 auto& daemon = SecurityDaemonSingleton::Instance();
46         
47         privacy_manager_daemon_initialize();
48
49         privacy_manager_daemon_start();
50
51                 daemon.initialize(argc, argv);
52
53                 // Notification to systemd
54                 sd_notify(0, "READY=1");
55
56                 //Run daemon
57                 retVal = daemon.execute();
58
59         privacy_manager_daemon_stop();
60         privacy_manager_daemon_shutdown();
61
62                 daemon.shutdown();
63     
64         instance.Release();
65     } Catch (DPL::SingleInstance::Exception::LockError) {
66         LogError("Failed to lock/unlock Security Daemon instance.");
67         return retVal;
68     }
69
70     return retVal;
71 }