summaryrefslogtreecommitdiff
path: root/src/components/application_manager/include/application_manager/policies/policy_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/include/application_manager/policies/policy_handler.h')
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h98
1 files changed, 50 insertions, 48 deletions
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index dfc29fe00a..260f2da060 100644
--- a/src/components/application_manager/include/application_manager/policies/policy_handler.h
+++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h
@@ -39,10 +39,16 @@
#include <vector>
#include "policy/policy_manager.h"
#include "application_manager/policies/policy_event_observer.h"
-#include "application_manager/policies/pt_exchange_handler.h"
+#include "application_manager/policies/delegates/statistics_delegate.h"
#include "utils/logger.h"
#include "utils/singleton.h"
+#include "utils/threads/thread.h"
+#include "utils/threads/thread_delegate.h"
+#include "utils/conditional_variable.h"
+#include "utils/rwlock.h"
#include "usage_statistics/statistics_manager.h"
+#include "policy_handler_observer.h"
+#include "utils/threads/async_runner.h"
namespace Json {
class Value;
@@ -54,7 +60,8 @@ typedef std::vector<uint32_t> DeviceHandles;
class PolicyHandler :
public utils::Singleton<PolicyHandler, utils::deleters::Deleter<PolicyHandler> >,
- public PolicyListener {
+ public PolicyListener,
+ public threads::AsyncRunner {
public:
virtual ~PolicyHandler();
bool LoadPolicyLibrary();
@@ -62,15 +69,18 @@ class PolicyHandler :
bool InitPolicyTable();
bool ResetPolicyTable();
bool ClearUserConsent();
- bool SendMessageToSDK(const BinaryMessage& pt_string);
+ bool SendMessageToSDK(const BinaryMessage& pt_string, const std::string& url);
bool ReceiveMessageFromSDK(const std::string& file,
const BinaryMessage& pt_string);
bool UnloadPolicyLibrary();
- void OnPTExchangeNeeded();
void OnPermissionsUpdated(const std::string& policy_app_id,
const Permissions& permissions,
const HMILevel& default_hmi);
+ virtual void OnSnapshotCreated(const BinaryMessage& pt_string,
+ const std::vector<int>& retry_delay_seconds,
+ int timeout_exchange);
+
bool GetPriority(const std::string& policy_app_id, std::string* priority);
void CheckPermissions(const PTString& app_id,
const PTString& hmi_level,
@@ -85,13 +95,14 @@ class PolicyHandler :
bool GetInitialAppData(const std::string& application_id,
StringArray* nicknames = NULL,
StringArray* app_hmi_types = NULL);
- EndpointUrls GetUpdateUrls(int service_type);
+ void GetUpdateUrls(int service_type, EndpointUrls& end_points);
void ResetRetrySequence();
int NextRetryTimeout();
int TimeoutExchange();
void OnExceededTimeout();
- BinaryMessageSptr RequestPTUpdate();
- const std::vector<int> RetrySequenceDelaysSeconds();
+ void OnSystemReady();
+ void PTUpdatedAt(int kilometers, int days_after_epoch);
+ void set_listener(PolicyHandlerObserver* listener);
utils::SharedPtr<usage_statistics::StatisticsManager> GetStatisticManager();
@@ -147,11 +158,6 @@ class PolicyHandler :
void OnPendingPermissionChange(const std::string& policy_app_id);
/**
- * Initializes PT exchange at ignition if need
- */
- void PTExchangeAtRegistration(const std::string& app_id);
-
- /**
* Initializes PT exchange at user request
* @param correlation_id correlation id of request
*/
@@ -171,7 +177,7 @@ class PolicyHandler :
* @param permissions User-changed group permissions consent
*/
void OnAppPermissionConsent(const uint32_t connection_key,
- PermissionConsent& permissions);
+ const PermissionConsent &permissions);
/**
* @brief Get appropriate message parameters and send them with response
@@ -204,7 +210,7 @@ class PolicyHandler :
* @brief Send notification to HMI with changed policy update status
* @param status Current policy update state
*/
- void OnUpdateStatusChanged(policy::PolicyTableStatus status);
+ void OnUpdateStatusChanged(const std::string& status);
/**
* @brief Update currently used device id in policies manager for given
@@ -271,11 +277,15 @@ class PolicyHandler :
std::string GetAppName(const std::string& policy_app_id);
- virtual void OnUserRequestedUpdateCheckRequired();
+ virtual void OnUpdateHMIAppType(std::map<std::string, StringArray> app_hmi_types);
virtual void OnDeviceConsentChanged(const std::string& device_id,
bool is_allowed);
+ virtual void OnPTExchangeNeeded();
+
+ virtual void GetAvailableApps(std::queue<std::string>& apps);
+
/**
* @brief Allows to add new or update existed application during
* registration process
@@ -314,7 +324,6 @@ class PolicyHandler :
usage_statistics::AppStopwatchId type,
int32_t timespan_seconds);
-
protected:
/**
@@ -322,72 +331,62 @@ protected:
*/
void StartNextRetry();
- /**
- * Initializes PT exchange at odometer if need
- * @param kilometers value from odometer in kilometers
- */
- void PTExchangeAtOdometer(int kilometers);
-
- /**
- * Starts proccess updating policy table
- */
- void StartPTExchange(bool skip_device_selection = false);
-
private:
- /**
- * @brief Choose device according to app HMI status and user consent for
- * device
- * @param device_info Struct with selected device parameters
- * @return consent status for selected device
- */
- DeviceConsent GetDeviceForSending(DeviceParams& device_params);
/**
- * @brief Convert internal policy update status to appropriate status for HMI
- * @param status Internal policy update status
- * @return Converted status for sending to HMI
+ * @brief OnAppPermissionConsentInternal reacts on permission changing
+ *
+ * @param connection_key connection key
+ *
+ * @param permissions new permissions.
*/
- const std::string ConvertUpdateStatus(policy::PolicyTableStatus status);
-
+ void OnAppPermissionConsentInternal(const uint32_t connection_key,
+ PermissionConsent& permissions);
private:
-
class StatisticManagerImpl: public usage_statistics::StatisticsManager {
//TODO(AKutsan) REMOVE THIS UGLY HOTFIX
virtual void Increment(usage_statistics::GlobalCounterId type) {
- return PolicyHandler::instance()->Increment(type);
+
+ PolicyHandler::instance()->AsyncRun(new StatisticsDelegate(type));
}
virtual void Increment(const std::string& app_id,
usage_statistics::AppCounterId type) {
- return PolicyHandler::instance()->Increment(app_id, type);
+
+ PolicyHandler::instance()->AsyncRun(new StatisticsDelegate(app_id,
+ type));
}
virtual void Set(const std::string& app_id,
usage_statistics::AppInfoId type,
const std::string& value) {
- return PolicyHandler::instance()->Set(app_id, type, value);
+
+ PolicyHandler::instance()->AsyncRun(new StatisticsDelegate(app_id,
+ type,
+ value));
}
virtual void Add(const std::string& app_id,
usage_statistics::AppStopwatchId type,
int32_t timespan_seconds) {
- return PolicyHandler::instance()->Add(app_id, type, timespan_seconds);
+
+ PolicyHandler::instance()->AsyncRun(new StatisticsDelegate(
+ app_id, type, timespan_seconds));
}
};
//TODO(AKutsan) REMOVE THIS UGLY HOTFIX
PolicyHandler();
+ bool SaveSnapshot(const BinaryMessage& pt_string, std::string& snap_path);
static PolicyHandler* instance_;
static const std::string kLibrary;
+ mutable sync_primitives::RWLock policy_manager_lock_;
utils::SharedPtr<PolicyManager> policy_manager_;
void* dl_handle_;
AppIds last_used_app_ids_;
- utils::SharedPtr<PTExchangeHandler> exchange_handler_;
utils::SharedPtr<PolicyEventObserver> event_observer_;
- bool on_ignition_check_done_;
uint32_t last_activated_app_id_;
- bool registration_in_progress;
/**
* @brief Contains device handles, which were sent for user consent to HMI
@@ -396,7 +395,7 @@ private:
inline bool CreateManager();
- bool is_user_requested_policy_table_update_;
+ PolicyHandlerObserver* listener_;
/**
* @brief Application-to-device map is used for getting/setting user consents
@@ -404,9 +403,12 @@ private:
*/
std::map<std::string, std::string> app_to_device_link_;
+ // Lock for app to device list
+ sync_primitives::Lock app_to_device_link_lock_;
utils::SharedPtr<StatisticManagerImpl> statistic_manager_impl_;
+ friend class AppPermissionDelegate;
DISALLOW_COPY_AND_ASSIGN(PolicyHandler);
FRIEND_BASE_SINGLETON_CLASS_WITH_DELETER(PolicyHandler,