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.h189
1 files changed, 121 insertions, 68 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..39ab4205dd 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
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (c) 2013, Ford Motor Company
All rights reserved.
@@ -39,10 +39,17 @@
#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 "application_manager/policies/policy_handler_observer.h"
+#include "utils/threads/async_runner.h"
+#include "application_manager/application_manager_impl.h"
namespace Json {
class Value;
@@ -54,7 +61,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,14 +70,20 @@ 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 OnPermissionsUpdated(const std::string& policy_app_id,
+ const Permissions& permissions,
+ const HMILevel& default_hmi);
+
+ virtual void OnPermissionsUpdated(const std::string& policy_app_id,
+ const Permissions& permissions);
+
+ 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,
@@ -85,33 +99,31 @@ class PolicyHandler :
bool GetInitialAppData(const std::string& application_id,
StringArray* nicknames = NULL,
StringArray* app_hmi_types = NULL);
- EndpointUrls GetUpdateUrls(int service_type);
+ void GetServiceUrls(const std::string& service_type,
+ EndpointUrls& end_points);
+
+ std::string GetLockScreenIconUrl() const;
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 add_listener(PolicyHandlerObserver* listener);
+ void remove_listener(PolicyHandlerObserver* listener);
utils::SharedPtr<usage_statistics::StatisticsManager> GetStatisticManager();
/**
- * Checks system action of application for permission of keep context
- * @param system_action system action (see mobile api)
- * @param policy_app_id unique application id
- * @return false if system_action is KEEP_CONTEXT and it isn't allowed by policy
- * otherwise true
- */
- bool CheckKeepContext(int system_action, const std::string& policy_app_id);
-
- /**
- * Checks system action of application for permission of steal focus
- * @param system_action system action (see mobile api)
- * @param policy_app_id unique application id
- * @return false if system_action is STEAL_FOCUS and it isn't allowed by policy
- * otherwise true
+ * @brief CheckSystemAction allows to check whether certain system
+ * action is enabled.
+ *
+ * @param system_action system action to check.
+ *
+ * @return true if specified system action is enabled, false otherwise.
*/
- bool CheckStealFocus(int system_action, const std::string& policy_app_id);
+ bool CheckSystemAction(mobile_apis::SystemAction::eType system_action,
+ const std::string& policy_app_id);
/**
* Lets client to notify PolicyHandler that more kilometers expired
@@ -138,20 +150,9 @@ class PolicyHandler :
*/
void OnIgnitionCycleOver();
- /**
- * @brief Send notification to HMI concerning revocation of application
- * @param policy_app_id Unique identifier of application
- */
- void OnAppRevoked(const std::string& policy_app_id);
-
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 +172,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 +205,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 +272,19 @@ 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 OnCertificateUpdated(const std::string& certificate_data);
+
+ virtual bool CanUpdate();
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
@@ -303,6 +312,38 @@ class PolicyHandler :
*/
uint16_t HeartBeatTimeout(const std::string& app_id) const;
+ /**
+ * @brief Returns URL for querying list of remote apps
+ */
+ const std::string RemoteAppsUrl() const;
+
+ /**
+ * @brief Handler on applications search started
+ */
+ void OnAppsSearchStarted();
+
+ /**
+ * @brief Handler on applications search completed
+ */
+ void OnAppsSearchCompleted();
+
+ /**
+ * @brief Checks if certain request type is allowed for application
+ * @param policy_app_id Unique applicaion id
+ * @param type Request type
+ * @return true, if allowed, otherwise - false
+ */
+ bool IsRequestTypeAllowed(const std::string& policy_app_id,
+ mobile_apis::RequestType::eType type) const;
+
+ /**
+ * @brief Gets application request types
+ * @param policy_app_id Unique application id
+ * @return request types
+ */
+ const std::vector<std::string> GetAppRequestTypes(
+ const std::string& policy_app_id) const;
+
//TODO(AKutsan) REMOVE THIS UGLY HOTFIX
virtual void Increment(usage_statistics::GlobalCounterId type);
virtual void Increment(const std::string& app_id,
@@ -314,7 +355,6 @@ class PolicyHandler :
usage_statistics::AppStopwatchId type,
int32_t timespan_seconds);
-
protected:
/**
@@ -322,72 +362,80 @@ protected:
*/
void StartNextRetry();
- /**
- * Initializes PT exchange at odometer if need
- * @param kilometers value from odometer in kilometers
- */
- void PTExchangeAtOdometer(int kilometers);
+ private:
/**
- * Starts proccess updating policy table
+ * Checks system action of application for permission of keep context
+ * @param system_action system action (see mobile api)
+ * @param policy_app_id unique application id
+ * @return false if system_action is KEEP_CONTEXT and it isn't allowed by policy
+ * otherwise true
*/
- void StartPTExchange(bool skip_device_selection = false);
+ bool CheckKeepContext(const std::string& policy_app_id);
- 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
+ * Checks system action of application for permission of steal focus
+ * @param system_action system action (see mobile api)
+ * @param policy_app_id unique application id
+ * @return false if system_action is STEAL_FOCUS and it isn't allowed by policy
+ * otherwise true
*/
- DeviceConsent GetDeviceForSending(DeviceParams& device_params);
+ bool CheckStealFocus(const std::string& policy_app_id);
/**
- * @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 +444,9 @@ private:
inline bool CreateManager();
- bool is_user_requested_policy_table_update_;
+ typedef std::list <PolicyHandlerObserver*> HandlersCollection;
+ HandlersCollection listeners_;
+ sync_primitives::Lock listeners_lock_;
/**
* @brief Application-to-device map is used for getting/setting user consents
@@ -404,9 +454,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,