2 * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include <pkgmgr-info.h>
23 #include "PrivacyGuardDb.h"
24 #include "PrivacyIdInfo.h"
27 #include "CynaraService.h"
29 //static cynara_monitor_configuration *p_conf;
30 static cynara_monitor *p_cynara_monitor;
31 static cynara_monitor_entry **monitor_entries;
34 std::mutex PrivacyGuardDb::m_singletonMutex;
35 PrivacyGuardDb* PrivacyGuardDb::m_pInstance = NULL;
37 static const char* privacy_list[5] = { "http://tizen.org/privacy/location",
38 "http://tizen.org/privacy/contact",
39 "http://tizen.org/privacy/calendar",
40 "http://tizen.org/privacy/messaging",
41 "http://tizen.org/privacy/callhistory" };
43 #ifdef __FILTER_LISTED_PKG
44 const std::string PrivacyGuardDb::PRIVACY_FILTER_LIST_FILE = std::string("/usr/share/privacy-guard/privacy-guard-list.ini");
45 const std::string PrivacyGuardDb::FILTER_KEY = std::string("package_id");
46 std::map < std::string, bool > PrivacyGuardDb::m_filteredPkgList;
50 PrivacyGuardDb::createDB(void)
56 PrivacyGuardDb::openSqliteDB(void)
59 res = sqlite3_open_v2(PRIVACY_DB_PATH, &m_sqlHandler, SQLITE_OPEN_READWRITE, NULL);
60 if(res == SQLITE_OK) {
61 PG_LOGI("monitor db is opened successfully");
62 // sqlite3_wal_autocheckpoint(m_sqlHandler, 1);
66 PG_LOGE("fail : monitor db open(%d)", res);
71 PrivacyGuardDb::PgAddPrivacyAccessLog(const int userId, std::list < std::pair < std::string, std::string > > logInfoList)
75 current_date = time(NULL);
76 localtime_r(¤t_date, &tm);
78 if(current_date <= 0) {
79 return PRIV_GUARD_ERROR_INVALID_PARAMETER;
84 static const std::string QUERY_INSERT = std::string("INSERT INTO StatisticsMonitorInfo(USER_ID, PKG_ID, PRIVACY_ID, USE_DATE) VALUES(?, ?, ?, ?)");
88 if(m_bDBOpen == false) {
91 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
93 PG_LOGD("addlogToDb m_sqlHandler : %p", m_sqlHandler);
96 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_INSERT.c_str(), -1, &m_stmt, NULL);
97 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
99 for (std::list <std::pair <std::string, std::string>>::iterator iter = logInfoList.begin(); iter != logInfoList.end(); ++iter) {
100 PG_LOGD("packageID : %s, PrivacyID : %s", iter->first.c_str(), iter->second.c_str());
103 res = sqlite3_bind_int(m_stmt, 1, userId);
104 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
106 res = sqlite3_bind_text(m_stmt, 2, iter->first.c_str(), -1, SQLITE_TRANSIENT);
107 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
109 res = sqlite3_bind_text(m_stmt, 3, iter->second.c_str(), -1, SQLITE_TRANSIENT);
110 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
112 res = sqlite3_bind_int(m_stmt, 4, current_date);
113 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
115 res = sqlite3_step(m_stmt);
116 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
118 sqlite3_reset(m_stmt);
122 return PRIV_GUARD_ERROR_SUCCESS;
126 PrivacyGuardDb::PgAddPrivacyAccessLogForCynara(const int userId, const std::string packageId, const std::string privilege, const timespec* timestamp)
128 if(timestamp->tv_sec <= 0) {
129 return PRIV_GUARD_ERROR_INVALID_PARAMETER;
134 // change from privilege to privacy
135 std::string privacyId;
136 res = PrivacyIdInfo::getPrivacyIdFromPrivilege(privilege, privacyId);
137 if (res == PRIV_GUARD_ERROR_NO_DATA) {
138 return PRIV_GUARD_ERROR_SUCCESS;
140 TryReturn( res == PRIV_GUARD_ERROR_SUCCESS, res, , "getPrivacyIdFromPrivilege : %d", res);
142 // change from timespec to time_t
144 logging_date = timestamp->tv_sec;
146 static const std::string QUERY_INSERT = std::string("INSERT INTO StatisticsMonitorInfo(USER_ID, PKG_ID, PRIVACY_ID, USE_DATE) VALUES(?, ?, ?, ?)");
150 if(m_bDBOpen == false) {
153 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
155 PG_LOGD("addlogToDb m_sqlHandler : %p", m_sqlHandler);
158 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_INSERT.c_str(), -1, &m_stmt, NULL);
159 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
162 res = sqlite3_bind_int(m_stmt, 1, userId);
163 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
165 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
166 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
168 res = sqlite3_bind_text(m_stmt, 3, privacyId.c_str(), -1, SQLITE_TRANSIENT);
169 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
171 res = sqlite3_bind_int(m_stmt, 4, logging_date);
172 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
174 res = sqlite3_step(m_stmt);
175 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
177 sqlite3_reset(m_stmt);
181 return PRIV_GUARD_ERROR_SUCCESS;
185 PrivacyGuardDb::PgAddPrivacyAccessLogTest(const int userId, const std::string packageId, const std::string privacyId)
189 current_date = time(NULL);
190 localtime_r(¤t_date, &tm);
192 if(current_date <= 0) {
193 return PRIV_GUARD_ERROR_INVALID_PARAMETER;
198 static const std::string QUERY_INSERT = std::string("INSERT INTO StatisticsMonitorInfo(USER_ID, PKG_ID, PRIVACY_ID, USE_DATE) VALUES(?, ?, ?, ?)");
202 if(m_bDBOpen == false) {
205 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
207 PG_LOGD("addlogToDb m_sqlHandler : %p", m_sqlHandler);
210 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_INSERT.c_str(), -1, &m_stmt, NULL);
211 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
214 res = sqlite3_bind_int(m_stmt, 1, userId);
215 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
217 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
218 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
220 res = sqlite3_bind_text(m_stmt, 3, privacyId.c_str(), -1, SQLITE_TRANSIENT);
221 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
223 res = sqlite3_bind_int(m_stmt, 4, current_date);
224 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
226 res = sqlite3_step(m_stmt);
227 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
229 sqlite3_reset(m_stmt);
233 return PRIV_GUARD_ERROR_SUCCESS;
238 PrivacyGuardDb::PgAddMonitorPolicy(const int userId, const std::string packageId, const std::list < std::string > privacyList, bool monitorPolicy)
242 static const std::string QUERY_INSERT = std::string("INSERT INTO MonitorPolicy(USER_ID, PKG_ID, PRIVACY_ID, MONITOR_POLICY) VALUES(?, ?, ?, ?)");
246 if(m_bDBOpen == false) {
249 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
251 PG_LOGD("addlogToDb m_sqlHandler : %p", m_sqlHandler);
254 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_INSERT.c_str(), -1, &m_stmt, NULL);
255 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
257 for (std::list <std::string>::const_iterator iter = privacyList.begin(); iter != privacyList.end(); ++iter) {
258 PG_LOGD("PrivacyID : %s", iter->c_str());
261 res = sqlite3_bind_int(m_stmt, 1, userId);
262 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
264 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
265 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
267 res = sqlite3_bind_text(m_stmt, 3, iter->c_str(), -1, SQLITE_TRANSIENT);
268 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
270 res = sqlite3_bind_int(m_stmt, 4, monitorPolicy);
271 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
273 res = sqlite3_step(m_stmt);
274 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
276 sqlite3_reset(m_stmt);
280 return PRIV_GUARD_ERROR_SUCCESS;
284 PrivacyGuardDb::PgCheckPrivacyPackage(const int userId, const std::string packageId, bool &isPrivacyPackage)
287 static const std::string query = std::string("SELECT COUNT(*) FROM MonitorPolicy WHERE USER_ID=? AND PKG_ID=?");
291 if(m_bDBOpen == false) {
294 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
297 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
298 TryCatchResLogReturn( res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
301 res = sqlite3_bind_int(m_stmt, 1, userId);
302 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
304 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
305 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
310 if ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
311 count = sqlite3_column_int(m_stmt, 0);
316 isPrivacyPackage = true;
319 isPrivacyPackage = false;
322 return PRIV_GUARD_ERROR_SUCCESS;
326 PrivacyGuardDb::PgDeleteAllLogsAndMonitorPolicy(void)
328 PG_LOGD("PgDeleteAllLogsAndMonitorPolicy");
332 static const std::string LOG_DELETE = std::string("DELETE FROM StatisticsMonitorInfo");
333 static const std::string POLICY_DELETE = std::string("DELETE FROM MonitorPolicy");
334 static const std::string MAIN_POLICY_DELETE = std::string("DELETE FROM MainMonitorPolicy");
338 if(m_bDBOpen == false) {
341 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
344 res = sqlite3_prepare_v2(m_sqlHandler, LOG_DELETE.c_str(), -1, &m_stmt, NULL);
345 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
347 res = sqlite3_step(m_stmt);
348 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
350 res = sqlite3_prepare_v2(m_sqlHandler, POLICY_DELETE.c_str(), -1, &m_stmt, NULL);
351 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
353 res = sqlite3_step(m_stmt);
354 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
356 res = sqlite3_prepare_v2(m_sqlHandler, MAIN_POLICY_DELETE.c_str(), -1, &m_stmt, NULL);
357 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
359 res = sqlite3_step(m_stmt);
360 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
364 return PRIV_GUARD_ERROR_SUCCESS;
369 PrivacyGuardDb::PgDeleteLogsByPackageId(const std::string packageId)
371 PG_LOGD("PrivacyGuardDb::PgDeleteLogsByPackageId packageid : %s", packageId.c_str());
375 static const std::string QUERY_DELETE = std::string("DELETE FROM StatisticsMonitorInfo WHERE PKG_ID=?");
379 if(m_bDBOpen == false) {
382 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
385 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_DELETE.c_str(), -1, &m_stmt, NULL);
386 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
389 res = sqlite3_bind_text(m_stmt, 1, packageId.c_str(), -1, SQLITE_TRANSIENT);
390 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
393 res = sqlite3_step(m_stmt);
394 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
398 return PRIV_GUARD_ERROR_SUCCESS;
402 PrivacyGuardDb::PgDeleteMonitorPolicyByPackageId(const std::string packageId)
404 PG_LOGD("PrivacyGuardDb::PgDeleteMonitorPolicyByPackageId packageid : %s", packageId.c_str());
408 static const std::string QUERY_DELETE = std::string("DELETE FROM MonitorPolicy WHERE PKG_ID=?");
412 if(m_bDBOpen == false) {
415 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
418 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_DELETE.c_str(), -1, &m_stmt, NULL);
419 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
422 res = sqlite3_bind_text(m_stmt, 1, packageId.c_str(), -1, SQLITE_TRANSIENT);
423 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
426 res = sqlite3_step(m_stmt);
427 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
431 return PRIV_GUARD_ERROR_SUCCESS;
435 PrivacyGuardDb::PgForeachTotalPrivacyCountOfPackage(const int userId, const int startDate, const int endDate,
436 std::list < std::pair < std::string, int > >& packageInfoList)
441 // [CYNARA] Fluch Entries
442 int ret= cynara_monitor_entries_flush(p_cynara_monitor);
443 if(ret != CYNARA_API_SUCCESS){
444 PG_LOGE("cynara_monitor_entries_flush FAIL");
445 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
448 // [CYNARA] Get Entries
449 ret = cynara_monitor_entries_get(p_cynara_monitor, &monitor_entries);
450 if(ret != CYNARA_API_SUCCESS){
451 PG_LOGE("cynara_monitor_entries_get FAIL");
452 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
455 // [CYNARA] Update DB
456 ret = CynaraService::updateDb(monitor_entries);
457 if(ret != PRIV_GUARD_ERROR_SUCCESS){
458 PG_LOGE("updateDb FAIL");
463 static const std::string PKGID_SELECT = std::string("SELECT DISTINCT PKG_ID FROM StatisticsMonitorInfo WHERE USER_ID=? AND USE_DATE>=? AND USE_DATE<=?");
464 static const std::string PKGINFO_SELECT = std::string("SELECT COUNT(*) FROM StatisticsMonitorInfo WHERE USER_ID=? AND PKG_ID=? AND USE_DATE>=? AND USE_DATE<=?");
465 sqlite3_stmt* infoStmt;
469 if(m_bDBOpen == false) {
472 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
475 res = sqlite3_prepare_v2(m_sqlHandler, PKGID_SELECT.c_str(), -1, &m_stmt, NULL);
476 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
478 res = sqlite3_bind_int(m_stmt, 1, userId);
479 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
481 res = sqlite3_bind_int(m_stmt, 2, startDate);
482 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
484 res = sqlite3_bind_int(m_stmt, 3, endDate);
485 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
487 while ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
488 const char* packageId = reinterpret_cast < const char* > (sqlite3_column_text(m_stmt, 0));
489 if(packageId == NULL) { continue; }
492 res = sqlite3_prepare_v2(m_sqlHandler, PKGINFO_SELECT.c_str(), -1, &infoStmt, NULL);
493 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
495 res = sqlite3_bind_int(infoStmt, 1, userId);
496 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
498 res = sqlite3_bind_text(infoStmt, 2, packageId, -1, SQLITE_TRANSIENT);
499 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
501 res = sqlite3_bind_int(infoStmt, 3, startDate);
502 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
504 res = sqlite3_bind_int(infoStmt, 4, endDate);
505 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
507 while ((res = sqlite3_step(infoStmt)) == SQLITE_ROW) {
508 int count = sqlite3_column_int(infoStmt, 0);
512 packageInfoList.push_back(std::pair <std::string, int> (std::string(packageId), count));
514 sqlite3_reset(infoStmt);
518 return PRIV_GUARD_ERROR_SUCCESS;
522 PrivacyGuardDb::PgForeachTotalPrivacyCountOfPrivacy(const int userId, const int startDate, const int endDate,
523 std::list < std::pair < std::string, int > >& privacyInfoList)
528 // [CYNARA] Fluch Entries
529 int ret= cynara_monitor_entries_flush(p_cynara_monitor);
530 if(ret != CYNARA_API_SUCCESS){
531 PG_LOGE("cynara_monitor_entries_flush FAIL");
532 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
535 // [CYNARA] Get Entries
536 ret = cynara_monitor_entries_get(p_cynara_monitor, &monitor_entries);
537 if(ret != CYNARA_API_SUCCESS){
538 PG_LOGE("cynara_monitor_entries_get FAIL");
539 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
542 // [CYNARA] Update DB
543 ret = CynaraService::updateDb(monitor_entries);
544 if(ret != PRIV_GUARD_ERROR_SUCCESS){
545 PG_LOGE("updateDb FAIL");
550 static const std::string PRIVACY_SELECT = std::string("SELECT COUNT(*) FROM StatisticsMonitorInfo WHERE USER_ID=? AND PRIVACY_ID=? AND USE_DATE>=? AND USE_DATE<=?");
554 if(m_bDBOpen == false) {
557 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
560 int cnt_privacy = sizeof(privacy_list) / sizeof(privacy_list[0]);
562 for (i = 0; i < cnt_privacy; i++) {
564 res = sqlite3_prepare_v2(m_sqlHandler, PRIVACY_SELECT.c_str(), -1, &m_stmt, NULL);
565 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
568 res = sqlite3_bind_int(m_stmt, 1, userId);
569 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
571 res = sqlite3_bind_text(m_stmt, 2, privacy_list[i], -1, SQLITE_TRANSIENT);
572 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
574 res = sqlite3_bind_int(m_stmt, 3, startDate);
575 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
577 res = sqlite3_bind_int(m_stmt, 4, endDate);
578 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
581 if ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
582 int count = sqlite3_column_int(m_stmt, 0);
586 const char* privacyId = privacy_list[i];
587 privacyInfoList.push_back(std::pair <std::string, int> (std::string(privacyId), count));
589 sqlite3_reset(m_stmt);
594 return PRIV_GUARD_ERROR_SUCCESS;
598 PrivacyGuardDb::PgForeachPrivacyCountByPrivacyId(const int userId, const int startDate, const int endDate,
599 const std::string privacyId, std::list < std::pair < std::string, int > >& packageInfoList)
604 // [CYNARA] Fluch Entries
605 int ret= cynara_monitor_entries_flush(p_cynara_monitor);
606 if(ret != CYNARA_API_SUCCESS){
607 PG_LOGE("cynara_monitor_entries_flush FAIL");
608 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
611 // [CYNARA] Get Entries
612 ret = cynara_monitor_entries_get(p_cynara_monitor, &monitor_entries);
613 if(ret != CYNARA_API_SUCCESS){
614 PG_LOGE("cynara_monitor_entries_get FAIL");
615 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
618 // [CYNARA] Update DB
619 ret = CynaraService::updateDb(monitor_entries);
620 if(ret != PRIV_GUARD_ERROR_SUCCESS){
621 PG_LOGE("updateDb FAIL");
626 static const std::string PKGID_SELECT = std::string("SELECT DISTINCT PKG_ID FROM StatisticsMonitorInfo WHERE USER_ID=? AND PRIVACY_ID=? AND USE_DATE>=? AND USE_DATE<=?");
627 static const std::string PKGINFO_SELECT = std::string("SELECT COUNT(*) FROM StatisticsMonitorInfo WHERE USER_ID=? AND PKG_ID=? AND PRIVACY_ID=? AND USE_DATE>=? AND USE_DATE<=?");
628 sqlite3_stmt* infoStmt;
632 if(m_bDBOpen == false) {
635 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
638 res = sqlite3_prepare_v2(m_sqlHandler, PKGID_SELECT.c_str(), -1, &m_stmt, NULL);
639 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
642 res = sqlite3_bind_int(m_stmt, 1, userId);
643 TryReturn(res == SQLITE_OK, PRIV_GUARD_ERROR_DB_ERROR, , "sqlite3_bind_int : %d", res);
645 res = sqlite3_bind_text(m_stmt, 2, privacyId.c_str(), -1, SQLITE_TRANSIENT);
646 TryReturn(res == SQLITE_OK, PRIV_GUARD_ERROR_DB_ERROR, , "sqlite3_bind_text : %d", res);
648 res = sqlite3_bind_int(m_stmt, 3, startDate);
649 TryReturn(res == SQLITE_OK, PRIV_GUARD_ERROR_DB_ERROR, , "sqlite3_bind_int : %d", res);
651 res = sqlite3_bind_int(m_stmt, 4, endDate);
652 TryReturn(res == SQLITE_OK, PRIV_GUARD_ERROR_DB_ERROR, , "sqlite3_bind_int : %d", res);
654 while ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
655 const char* packageId = reinterpret_cast < const char* > (sqlite3_column_text(m_stmt, 0));
656 if(packageId == NULL) { continue; }
659 res = sqlite3_prepare_v2(m_sqlHandler, PKGINFO_SELECT.c_str(), -1, &infoStmt, NULL);
660 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
663 res = sqlite3_bind_int(infoStmt, 1, userId);
664 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
666 res = sqlite3_bind_text(infoStmt, 2, packageId, -1, SQLITE_TRANSIENT);
667 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
669 res = sqlite3_bind_text(infoStmt, 3, privacyId.c_str(), -1, SQLITE_TRANSIENT);
670 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
672 res = sqlite3_bind_int(infoStmt, 4, startDate);
673 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
675 res = sqlite3_bind_int(infoStmt, 5, endDate);
676 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
678 if ((res = sqlite3_step(infoStmt)) == SQLITE_ROW) {
679 int count = sqlite3_column_int(infoStmt, 0);
683 packageInfoList.push_back(std::pair <std::string, int> (std::string(packageId), count));
685 sqlite3_reset(infoStmt);
690 return PRIV_GUARD_ERROR_SUCCESS;
694 PrivacyGuardDb::PgForeachPrivacyCountByPackageId(const int userId, const int startDate, const int endDate,
695 const std::string packageId, std::list < std::pair < std::string, int > >& privacyInfoList)
700 // [CYNARA] Fluch Entries
701 int ret= cynara_monitor_entries_flush(p_cynara_monitor);
702 if(ret != CYNARA_API_SUCCESS){
703 PG_LOGE("cynara_monitor_entries_flush FAIL");
704 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
707 // [CYNARA] Get Entries
708 ret = cynara_monitor_entries_get(p_cynara_monitor, &monitor_entries);
709 if(ret != CYNARA_API_SUCCESS){
710 PG_LOGE("cynara_monitor_entries_get FAIL");
711 return PRIV_GUARD_ERROR_SYSTEM_ERROR;
714 // [CYNARA] Update DB
715 ret = CynaraService::updateDb(monitor_entries);
716 if(ret != PRIV_GUARD_ERROR_SUCCESS){
717 PG_LOGE("updateDb FAIL");
722 static const std::string PRIVACY_SELECT = std::string("SELECT COUNT(*) FROM StatisticsMonitorInfo WHERE USER_ID=? AND PKG_ID=? AND PRIVACY_ID=? AND USE_DATE>=? AND USE_DATE<=?");
726 if(m_bDBOpen == false) {
729 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
732 int cnt_privacy = sizeof(privacy_list) / sizeof(privacy_list[0]);
734 for (i = 0; i < cnt_privacy; i++) {
736 res = sqlite3_prepare_v2(m_sqlHandler, PRIVACY_SELECT.c_str(), -1, &m_stmt, NULL);
737 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
740 res = sqlite3_bind_int(m_stmt, 1, userId);
741 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
743 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
744 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
746 res = sqlite3_bind_text(m_stmt, 3, privacy_list[i], -1, SQLITE_TRANSIENT);
747 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
749 res = sqlite3_bind_int(m_stmt, 4, startDate);
750 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
752 res = sqlite3_bind_int(m_stmt, 5, endDate);
753 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
755 if ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
756 int count = sqlite3_column_int(m_stmt, 0);
760 const char* privacyId = privacy_list[i];
761 privacyInfoList.push_back(std::pair <std::string, int> (std::string(privacyId), count));
763 sqlite3_reset(m_stmt);
768 return PRIV_GUARD_ERROR_SUCCESS;
772 PrivacyGuardDb::PgGetMonitorPolicy(const int userId, const std::string packageId, const std::string privacyId, int& monitorPolicy)
776 static const std::string query = std::string("SELECT MONITOR_POLICY FROM MonitorPolicy WHERE USER_ID=? AND PKG_ID=? AND PRIVACY_ID=?");
780 if(m_bDBOpen == false) {
783 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
786 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
787 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
790 res = sqlite3_bind_int(m_stmt, 1, userId);
791 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
793 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
794 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
796 res = sqlite3_bind_text(m_stmt, 3, privacyId.c_str(), -1, SQLITE_TRANSIENT);
797 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
801 if ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
802 monitorPolicy = sqlite3_column_int(m_stmt, 0);
806 return PRIV_GUARD_ERROR_SUCCESS;
810 PrivacyGuardDb::PgGetAllMonitorPolicy(std::list < std::pair < std::string, int > >& monitorPolicyList)
814 static const std::string MONITOR_POLICY_SELECT = std::string("SELECT * FROM MonitorPolicy");
818 if(m_bDBOpen == false) {
821 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
824 res = sqlite3_prepare_v2(m_sqlHandler, MONITOR_POLICY_SELECT.c_str(), -1, &m_stmt, NULL);
825 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
828 int monitorPolicy = 0;
829 while ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
830 int userId = sqlite3_column_int(m_stmt, 0);
831 char* tmpPkgId = (char*)sqlite3_column_text(m_stmt, 1);
832 char* tmpPrivacyId = (char*)sqlite3_column_text(m_stmt, 2);
833 if(tmpPkgId == NULL || tmpPrivacyId == NULL) {
836 std::string userPkgIdPrivacyId = std::to_string(userId);
837 userPkgIdPrivacyId.append("|").append(std::string(tmpPkgId));
838 userPkgIdPrivacyId.append("|").append(std::string(tmpPrivacyId));
839 monitorPolicy = sqlite3_column_int(m_stmt, 3);
840 monitorPolicyList.push_back(std::pair < std::string, int > (userPkgIdPrivacyId, monitorPolicy));
844 if(monitorPolicyList.size() > 0) {
845 res = PRIV_GUARD_ERROR_SUCCESS;
848 res = PRIV_GUARD_ERROR_NO_DATA;
855 PrivacyGuardDb::PgForeachMonitorPolicyByPackageId(const int userId, const std::string packageId, std::list <privacy_data_s>& privacyInfoList)
858 static const std::string query = std::string("SELECT DISTINCT PRIVACY_ID, MONITOR_POLICY FROM MonitorPolicy WHERE USER_ID=? AND PKG_ID=?");
862 if(m_bDBOpen == false) {
865 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
868 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
869 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock();, PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
872 res = sqlite3_bind_int(m_stmt, 1, userId);
873 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
875 res = sqlite3_bind_text(m_stmt, 2, packageId.c_str(), -1, SQLITE_TRANSIENT);
876 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
879 while ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
881 char* tmp_data = (char*)sqlite3_column_text(m_stmt, 0);
882 if(tmp_data == NULL) {
885 privacy_data_s p_data;
886 p_data.privacy_id = strdup(tmp_data);
887 p_data.monitor_policy= sqlite3_column_int(m_stmt, 1);
889 privacyInfoList.push_back(p_data);
893 return PRIV_GUARD_ERROR_SUCCESS;
897 PrivacyGuardDb::PgForeachPrivacyPackageId(const int userId, std::list < std::string > &packageList)
900 static const std::string query = std::string("SELECT DISTINCT PKG_ID FROM MonitorPolicy WHERE USER_ID=?");
904 if(m_bDBOpen == false) {
907 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
910 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
911 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock();, PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
914 res = sqlite3_bind_int(m_stmt, 1, userId);
915 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
918 while ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
919 char* p_data = (char*)sqlite3_column_text(m_stmt, 0);
923 packageList.push_back(std::string(p_data));
927 return PRIV_GUARD_ERROR_SUCCESS;
931 PrivacyGuardDb::PgForeachPackageByPrivacyId(const int userId, const std::string privacyId, std::list < std::string > &packageList)
934 static const std::string query = std::string("SELECT DISTINCT PKG_ID FROM MonitorPolicy WHERE USER_ID=? AND PRIVACY_ID=?");
938 if(m_bDBOpen == false) {
941 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
944 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
945 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock();, PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
948 res = sqlite3_bind_int(m_stmt, 1, userId);
949 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
951 res = sqlite3_bind_text(m_stmt, 2, privacyId.c_str(), -1, SQLITE_TRANSIENT);
952 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
955 while ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
956 char* p_data = (char*)sqlite3_column_text(m_stmt, 0);
960 packageList.push_back(std::string(p_data));
964 return PRIV_GUARD_ERROR_SUCCESS;
968 PrivacyGuardDb::PgUpdateMonitorPolicy(const int userId, const std::string packageId, const std::string privacyId, const int monitorPolicy)
971 static const std::string query = std::string("UPDATE MonitorPolicy SET MONITOR_POLICY=? WHERE USER_ID=? AND PKG_ID=? AND PRIVACY_ID=?");
975 if(m_bDBOpen == false) {
978 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
981 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
982 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
985 res = sqlite3_bind_int(m_stmt, 1, monitorPolicy);
986 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
988 res = sqlite3_bind_int(m_stmt, 2, userId);
989 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
991 res = sqlite3_bind_text(m_stmt, 3, packageId.c_str(), -1, SQLITE_TRANSIENT);
992 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
994 res = sqlite3_bind_text(m_stmt, 4, privacyId.c_str(), -1, SQLITE_TRANSIENT);
995 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_text : %d", res);
998 res = sqlite3_step(m_stmt);
999 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
1003 return PRIV_GUARD_ERROR_SUCCESS;
1007 PrivacyGuardDb::PgAddMainMonitorPolicy(const int userId)
1011 static const std::string QUERY_INSERT = std::string("INSERT INTO MainMonitorPolicy(USER_ID) VALUES(?)");
1015 if(m_bDBOpen == false) {
1018 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
1020 PG_LOGD("addlogToDb m_sqlHandler : %p", m_sqlHandler);
1023 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_INSERT.c_str(), -1, &m_stmt, NULL);
1024 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
1027 res = sqlite3_bind_int(m_stmt, 1, userId);
1028 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
1031 res = sqlite3_step(m_stmt);
1032 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
1036 return PRIV_GUARD_ERROR_SUCCESS;
1040 PrivacyGuardDb::PgUpdateMainMonitorPolicy(const int userId, const bool mainMonitorPolicy)
1043 static const std::string query = std::string("UPDATE MainMonitorPolicy SET MAIN_MONITOR_POLICY=? WHERE USER_ID=?");
1047 if(m_bDBOpen == false) {
1050 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
1053 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
1054 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
1057 res = sqlite3_bind_int(m_stmt, 1, mainMonitorPolicy);
1058 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
1060 res = sqlite3_bind_int(m_stmt, 2, userId);
1061 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
1064 res = sqlite3_step(m_stmt);
1065 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
1070 // [CYNARA] Set Filter
1071 cynara_monitor_configuration_set_filter();
1074 return PRIV_GUARD_ERROR_SUCCESS;
1078 PrivacyGuardDb::PgGetMainMonitorPolicy(const int userId, bool &mainMonitorPolicy)
1082 static const std::string query = std::string("SELECT MAIN_MONITOR_POLICY FROM MainMonitorPolicy WHERE USER_ID=?");
1086 if(m_bDBOpen == false) {
1089 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
1092 res = sqlite3_prepare_v2(m_sqlHandler, query.c_str(), -1, &m_stmt, NULL);
1093 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
1096 res = sqlite3_bind_int(m_stmt, 1, userId);
1097 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
1100 mainMonitorPolicy = false;
1101 if ((res = sqlite3_step(m_stmt)) == SQLITE_ROW) {
1102 mainMonitorPolicy = sqlite3_column_int(m_stmt, 0);
1107 res = PgAddMainMonitorPolicy(userId);
1108 TryReturn(res == PRIV_GUARD_ERROR_SUCCESS, res, , "PgAddMainMonitorPolicy failed : %d", res);
1111 return PRIV_GUARD_ERROR_SUCCESS;
1115 PrivacyGuardDb::PgDeleteMainMonitorPolicyByUserId(const int userId)
1119 static const std::string QUERY_DELETE = std::string("DELETE FROM MainMonitorPolicy WHERE USER_ID=?");
1123 if(m_bDBOpen == false) {
1126 TryCatchResLogReturn(m_bDBOpen == true, m_dbMutex.unlock(), PRIV_GUARD_ERROR_IO_ERROR, "openSqliteDB : %d", res);
1129 res = sqlite3_prepare_v2(m_sqlHandler, QUERY_DELETE.c_str(), -1, &m_stmt, NULL);
1130 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);
1133 res = sqlite3_bind_int(m_stmt, 1, userId);
1134 TryCatchResLogReturn(res == SQLITE_OK, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_bind_int : %d", res);
1137 res = sqlite3_step(m_stmt);
1138 TryCatchResLogReturn(res == SQLITE_DONE, m_dbMutex.unlock(), PRIV_GUARD_ERROR_DB_ERROR, "sqlite3_step : %d", res);
1142 return PRIV_GUARD_ERROR_SUCCESS;
1145 PrivacyGuardDb::PrivacyGuardDb(void)
1150 m_sqlHandler = NULL;
1157 PrivacyGuardDb::~PrivacyGuardDb(void)
1160 if(m_bDBOpen == true) {
1162 sqlite3_finalize(m_stmt);
1163 sqlite3_close(m_sqlHandler);
1170 PrivacyGuardDb::getInstance(void)
1172 std::lock_guard < std::mutex > guard(m_singletonMutex);
1174 if (m_pInstance == NULL) {
1175 m_pInstance = new PrivacyGuardDb();