summaryrefslogtreecommitdiff
path: root/src/components/policy/src/policy/include/policy/cache_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/policy/src/policy/include/policy/cache_manager.h')
-rw-r--r--src/components/policy/src/policy/include/policy/cache_manager.h189
1 files changed, 123 insertions, 66 deletions
diff --git a/src/components/policy/src/policy/include/policy/cache_manager.h b/src/components/policy/src/policy/include/policy/cache_manager.h
index 4783a3979..ff30d9536 100644
--- a/src/components/policy/src/policy/include/policy/cache_manager.h
+++ b/src/components/policy/src/policy/include/policy/cache_manager.h
@@ -1,34 +1,34 @@
-/*
-* Copyright (c) 2014, Ford Motor Company
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*
-* Redistributions of source code must retain the above copyright notice, this
-* list of conditions and the following disclaimer.
-*
-* Redistributions in binary form must reproduce the above copyright notice,
-* this list of conditions and the following
-* disclaimer in the documentation and/or other materials provided with the
-* distribution.
-*
-* Neither the name of the Ford Motor Company nor the names of its contributors
-* may be used to endorse or promote products derived from this software
-* without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-* POSSIBILITY OF SUCH DAMAGE.
-*/
+/*
+ * Copyright (c) 2014, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
#ifndef SRC_COMPONENTS_POLICY_INCLUDE_CACHE_MANAGER_H_
#define SRC_COMPONENTS_POLICY_INCLUDE_CACHE_MANAGER_H_
@@ -38,15 +38,19 @@
#include "utils/shared_ptr.h"
#include "policy/pt_representation.h"
#include "policy/pt_ext_representation.h"
-#include "utils/lock.h"
#include "usage_statistics/statistics_manager.h"
#include "policy/cache_manager_interface.h"
+#include "utils/lock.h"
+#include "utils/timer_thread.h"
+#include "utils/conditional_variable.h"
+
namespace policy {
class CacheManager : public CacheManagerInterface {
public:
CacheManager();
+ ~CacheManager();
/**
* @brief Check if specified RPC for specified application
@@ -145,11 +149,19 @@ class CacheManager : public CacheManagerInterface {
const std::vector<std::string>& msg_codes, const std::string& language);
/**
- * @brief Get list of URL to send PTS to
+ * @brief Get list of URLs related to particular service
* @param service_type If URLs for specific service are preset,
* return them otherwise default URLs.
*/
- virtual EndpointUrls GetUpdateUrls(int service_type);
+ virtual void GetServiceUrls(const std::string& service_type,
+ EndpointUrls& end_points);
+
+ /**
+ * @brief GetLockScreenIcon allows to obtain lock screen icon url;
+ *
+ * @return url which point to the resourse where lock screen icon could be obtained.
+ */
+ virtual std::string GetLockScreenIconUrl() const;
/**
* @brief Get allowed number of notifications
@@ -189,6 +201,12 @@ class CacheManager : public CacheManagerInterface {
bool ApplyUpdate(const policy_table::Table& update_pt);
/**
+ * @brief Gets list of appHMIType associated with mobile appID
+ * @param container of appHMIType
+ */
+ virtual void GetHMIAppTypeAfterUpdate(std::map<std::string, StringArray>& app_hmi_types);
+
+ /**
* Gets flag updateRequired
* @return true if update is required
*/
@@ -219,7 +237,7 @@ class CacheManager : public CacheManagerInterface {
* @param app_id application id
* @return true if application is revoked
*/
- bool IsApplicationRevoked(const std::string& app_id);
+ bool IsApplicationRevoked(const std::string& app_id) const;
/**
* @brief Get functional groupings from DB
@@ -245,10 +263,9 @@ class CacheManager : public CacheManagerInterface {
/**
* @brief SetIsDefault Sets is_default flag for application
* @param app_id app specific application
- * @param is_default true if default false otherwise.
* @return true in case opperation was done successfully.
*/
- bool SetIsDefault(const std::string& app_id, bool is_default);
+ bool SetIsDefault(const std::string& app_id);
/**
* Checks if the application has pre_data policy
@@ -425,12 +442,10 @@ class CacheManager : public CacheManagerInterface {
* groups for specific application.
* @param policy_app_id application id.
* @param device_id device id.
- * @param result the count of unconsented groups
- * @return true in case opperation has been done successfully.
+ * @return the count of unconsented groups
*/
- bool CountUnconsentedGroups(const std::string& policy_app_id,
- const std::string& device_id,
- int& result);
+ int CountUnconsentedGroups(const std::string& policy_app_id,
+ const std::string& device_id);
/**
* @brief Gets functional group names and user_consent_prompts, if any
@@ -489,32 +504,18 @@ class CacheManager : public CacheManagerInterface {
bool SetPredataPolicy(const std::string& app_id);
/**
- * @brief Updates application policy to either pre_DataConsented or not
- * @param app_id Policy Id of application to be checked
- * @param is_pre_data True of False to setting app policy to be pre_DataConsented
- * @return true, if succeeded, otherwise - false
- */
- bool SetIsPredata(const std::string& app_id, bool is_pre_data);
-
- /**
* @brief Removes unpaired devices
* @return true if success
*/
- bool CleanupUnpairedDevices(const DeviceIds& device_ids);
+ bool CleanupUnpairedDevices();
/**
* Sets flag of unpaired device
- * @param device_id
+ * @param device_id Unique device id
+ * @param unpaired True, if should be marked as unpaired, otherwise - false
* @return true if success
*/
- bool SetUnpairedDevice(const std::string& device_id);
-
- /**
- * Gets list of unpaired devices
- * @param device_ids output list
- * @return true if success
- */
- bool UnpairedDevicesList(DeviceIds& device_ids);
+ bool SetUnpairedDevice(const std::string& device_id, bool unpaired = true);
/**
* Resets Policy Table
@@ -541,6 +542,7 @@ class CacheManager : public CacheManagerInterface {
*/
void Backup();
+
/**
* Returns heart beat timeout
* @param app_id application id
@@ -557,6 +559,13 @@ class CacheManager : public CacheManagerInterface {
*/
static int32_t GenerateHash(const std::string& str_to_hash);
+ /**
+ * @brief Gets request types for application
+ * @param policy_app_id Unique application id
+ * @param request_types Request types of application
+ */
+ void GetAppRequestTypes(const std::string& policy_app_id,
+ std::vector<std::string>& request_types) const;
private:
std::string currentDateTime();
struct AppHMITypeToString {
@@ -568,9 +577,7 @@ private:
void GetGroupNameByHashID(const int32_t group_id, std::string& group_name);
void FillDeviceSpecificData();
- void FillAppSpecificData();
bool AppExists(const std::string& app_id) const;
- void CopyInternalParams(const std::string &from, const std::string& to);
long ConvertSecondsToMinute(int seconds);
/**
@@ -579,17 +586,67 @@ private:
*/
void CheckSnapshotInitialization();
+ void PersistData();
+
+ void ResetCalculatedPermissions();
+
+ void AddCalculatedPermissions(
+ const std::string& device_id,
+ const std::string& policy_app_id,
+ const policy::Permissions& permissions);
+
+ bool IsPermissionsCalculated(const std::string& device_id,
+ const std::string& policy_app_id,
+ policy::Permissions& permission);
+
+private:
+ /**
+ * @brief Checks, if input string is known service represented by number, than
+ * converts input string to service number
+ * @param input Input string
+ * @param output Output service
+ * @return true, if successfully converted, otherwise - false
+ */
+ bool IsNumberService(const std::string& input, std::string& output) const;
+
private:
utils::SharedPtr<policy_table::Table> pt_;
utils::SharedPtr<policy_table::Table> snapshot_;
utils::SharedPtr<PTRepresentation> backup_;
utils::SharedPtr<PTExtRepresentation> ex_backup_;
bool update_required;
- std::map<std::string, bool> is_predata_;
- std::map<std::string, bool> is_unpaired_;
+ typedef std::set<std::string> UnpairedDevices;
+ UnpairedDevices is_unpaired_;
sync_primitives::Lock cache_lock_;
+ sync_primitives::Lock unpaired_lock_;
+
+ typedef std::map<std::string, Permissions> AppCalculatedPermissions;
+ typedef std::map<std::string, AppCalculatedPermissions> CalculatedPermissions;
+ CalculatedPermissions calculated_permissions_;
+ sync_primitives::Lock calculated_permissions_lock_;
+
+ class BackgroundBackuper: public threads::ThreadDelegate {
+ friend class CacheManager;
+ public:
+ BackgroundBackuper(CacheManager* cache_manager);
+ ~BackgroundBackuper();
+ virtual void threadMain();
+ virtual void exitThreadMain();
+ void DoBackup();
+ private:
+ void InternalBackup();
+ CacheManager* cache_manager_;
+ sync_primitives::ConditionalVariable backup_notifier_;
+ volatile bool stop_flag_;
+ volatile bool new_data_available_;
+
+ sync_primitives::Lock need_backup_lock_;
+ DISALLOW_COPY_AND_ASSIGN(BackgroundBackuper);
+ };
+ threads::Thread* backup_thread_;
+ sync_primitives::Lock backuper_locker_;
+ BackgroundBackuper* backuper_;
};
-} // policy
-
+} // namespace policy
#endif // SRC_COMPONENTS_POLICY_INCLUDE_CACHE_MANAGER_H_