diff options
Diffstat (limited to 'src/components/application_manager/include/application_manager')
69 files changed, 1854 insertions, 526 deletions
diff --git a/src/components/application_manager/include/application_manager/app_extension.h b/src/components/application_manager/include/application_manager/app_extension.h index e3231de347..5167aa88c0 100644 --- a/src/components/application_manager/include/application_manager/app_extension.h +++ b/src/components/application_manager/include/application_manager/app_extension.h @@ -33,11 +33,13 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_EXTENSION_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_EXTENSION_H_ +#include <memory> + namespace ns_smart_device_link { namespace ns_smart_objects { class SmartObject; } -} +} // namespace ns_smart_device_link namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h index a10963ad82..2dd64a2941 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h @@ -32,8 +32,8 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_CTRL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_CTRL_H_ -#include <string> #include <memory> +#include <string> namespace application_manager { class Application; @@ -49,22 +49,22 @@ namespace app_launch { class AppLaunchCtrl { public: /** - * @brief OnAppRegistered should be called when application registered - * Save application parameters to database - * @param app application to save - */ + * @brief OnAppRegistered should be called when application registered + * Save application parameters to database + * @param app application to save + */ virtual void OnAppRegistered(const application_manager::Application& app) = 0; /** - * @brief OnDeviceConnected shoudl be called on device connected event - * Start launching saaved applications on ios device - * @param device_mac - */ + * @brief OnDeviceConnected shoudl be called on device connected event + * Start launching saaved applications on ios device + * @param device_mac + */ virtual void OnDeviceConnected(const std::string& device_mac) = 0; /** - * @brief OnMasterReset clear database of saved applications - */ + * @brief OnMasterReset clear database of saved applications + */ virtual void OnMasterReset() = 0; virtual ~AppLaunchCtrl() {} }; diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h index 61f3480f77..986f4ad4ff 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h @@ -41,11 +41,11 @@ namespace connection_handler { class ConnectionHandler; -} // connection_handler +} // namespace connection_handler namespace resumption { class ResumeCtrl; -} // resumption +} // namespace resumption namespace app_launch { // TODO(AK) Use unique pointer diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_data.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_data.h index 73e9623b62..c1ad8d4003 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_data.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_data.h @@ -34,9 +34,9 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_DATA_H_ #include <stdint.h> -#include <vector> -#include <string> #include <memory> +#include <string> +#include <vector> namespace app_launch { diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h index ccbf4c7c01..b232d1874c 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h @@ -104,8 +104,8 @@ class AppLaunchDataDB : public AppLaunchDataImpl { bool IsAppDataAlreadyExisted(const ApplicationData& app_data) const OVERRIDE; /** - * @brief returns pointer to data base - */ + * @brief returns pointer to data base + */ utils::dbms::SQLDatabase* db() const; enum ApplicationDataDBIndexes { @@ -151,13 +151,13 @@ class AppLaunchDataDB : public AppLaunchDataImpl { bool WriteDb(); /** - * @brief returns pointer to data base - */ + * @brief returns pointer to data base + */ std::unique_ptr<utils::dbms::SQLDatabase> db_; /** - * @brief indicate initializing status of DB - */ + * @brief indicate initializing status of DB + */ bool init_successeful_; DISALLOW_COPY_AND_ASSIGN(AppLaunchDataDB); diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_impl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_impl.h index a2b8630bcc..b28c7fdd3d 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_impl.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_impl.h @@ -33,10 +33,10 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_DATA_IMPL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_DATA_IMPL_H_ +#include <memory> #include "application_manager/app_launch/app_launch_data.h" #include "application_manager/app_launch_settings.h" #include "utils/macro.h" -#include <memory> namespace app_launch { diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h index a292b84fc0..9463a349d9 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h @@ -33,12 +33,12 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_DATA_JSON_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APP_LAUNCH_DATA_JSON_H_ +#include <memory> #include "application_manager/app_launch/app_launch_data_impl.h" -#include "smart_objects/smart_object.h" #include "resumption/last_state.h" +#include "smart_objects/smart_object.h" #include "utils/lock.h" #include "utils/macro.h" -#include <memory> namespace app_launch { diff --git a/src/components/application_manager/include/application_manager/app_launch/apps_launcher.h b/src/components/application_manager/include/application_manager/app_launch/apps_launcher.h index 6285514be9..7e360aa460 100644 --- a/src/components/application_manager/include/application_manager/app_launch/apps_launcher.h +++ b/src/components/application_manager/include/application_manager/app_launch/apps_launcher.h @@ -1,9 +1,9 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APPS_LAUNCHER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_APPS_LAUNCHER_H_ +#include <memory> #include "application_manager/app_launch/app_launch_data.h" #include "connection_handler/connection_handler.h" #include "utils/timer.h" -#include <memory> namespace app_launch { class AppLaunchCtrlImpl; diff --git a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h index f156654215..f27e4569fc 100644 --- a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h +++ b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h @@ -1,12 +1,12 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_DEVICE_APPS_LAUNCHER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_LAUNCH_DEVICE_APPS_LAUNCHER_H_ #include <stdint.h> -#include <vector> -#include <string> #include <memory> +#include <string> +#include <vector> #include "application_manager/app_launch/app_launch_data.h" -#include "application_manager/application_manager.h" #include "application_manager/app_launch_settings.h" +#include "application_manager/application_manager.h" namespace app_launch { class AppLaunchCtrlImpl; diff --git a/src/components/application_manager/include/application_manager/app_service_manager.h b/src/components/application_manager/include/application_manager/app_service_manager.h new file mode 100644 index 0000000000..5080748f17 --- /dev/null +++ b/src/components/application_manager/include/application_manager/app_service_manager.h @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2018, 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_SERVICE_MANAGER_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_SERVICE_MANAGER_H_ + +#include "application_manager/application.h" +#include "application_manager/rpc_passing_handler.h" +#include "interfaces/MOBILE_API.h" +#include "smart_objects/smart_object.h" + +namespace resumption { +class LastState; +} + +namespace application_manager { + +struct AppService { + uint32_t connection_key; + bool mobile_service; + bool default_service = false; + smart_objects::SmartObject record; +}; + +class RPCPassingHandler; +class ApplicationManager; +/** + * @brief The AppServiceManager is TODO. + */ +class AppServiceManager { + public: + const std::string kEmbeddedService = "EMBEDDED_SERVICE"; + + /** + * @brief Class constructor + * @param app_manager + */ + AppServiceManager(ApplicationManager& app_manager, + resumption::LastState& last_state); + + /** + * @brief Class destructor + */ + virtual ~AppServiceManager(); + + /** + * @brief Publish an app service. This service will be activated if it is the + * default service for its type, or if it is the first service to register of + * its type. + * @param manifest - The app service manifest of the service to be published + * @param mobile_service - True, if the service is being published by a mobile + * app. False, if published by the embedded system. + * @param connection_key - If mobile_service is true, the connection key of + * the app publishing this service. + * @return The app service record of the published app service on success, a + * Null SmartObject value on failure + */ + virtual smart_objects::SmartObject PublishAppService( + const smart_objects::SmartObject& manifest, + const bool mobile_service, + const uint32_t connection_key = 0u); + + /** + * @brief Unpublish an existing app service + * @param service_id - The ID of the app service to be deleted. + * @return True on success, false otherwise + */ + virtual bool UnpublishAppService(const std::string service_id); + + /** + * @brief Callback for when an application is activated. Will activate all + * services which were published by this app. + * @param app - The application that was activated. + */ + virtual void OnAppActivated(ApplicationConstSharedPtr app); + + /** + * @brief Unpublish any published services for a given mobile application + * @param connection_key - The connection key of the application from which + * all published services should be deleted. + */ + virtual void UnpublishServices(const uint32_t connection_key); + + /** + * @brief Sets a service to the default service for its type + * @param service_id - The ID of the service to become the default + * @return True on success, false otherwise + */ + virtual bool SetDefaultService(const std::string service_id); + + /** + * @brief Removes a service from the list of default services. + * @param service_id - The ID of the existing default service. + * @return True on success, false otherwise + */ + virtual bool RemoveDefaultService(const std::string service_id); + + /** + * @brief Activate an existing service + * @param service_id - The ID of the service to be activated. + * @return True if the service is active, false otherwise + */ + virtual bool ActivateAppService(const std::string service_id); + + /** + * @brief Deactivate an existing active service + * @param service_id - The ID of the service to be deactivated. + * @return True if the service was deactivated, false otherwise + */ + virtual bool DeactivateAppService(const std::string service_id); + + /** + * @brief Get a list of all published service records. + * @return A list of all all published service records. + */ + virtual std::vector<smart_objects::SmartObject> GetAllServiceRecords(); + + /** + * @brief Get a list of all active app services. + * @return A list of all all active app services. + */ + virtual std::vector<AppService> GetActiveServices(); + + /** + * @brief Retrieve the active service provider for a given service type + * @param service_type - The service type of the provider to be retrieved + * @param mobile_consumer - True, if the consumer trying to communicate with + * the provider is a mobile application + * @param app - Output parameter that will be filled with the application + * providing the requested service on success, unchanged on failure + * @param hmi_service - Output parameter set to true if the service + * provider is the HMI, unchanged on failure + */ + virtual void GetProviderByType(const std::string& service_type, + const bool mobile_consumer, + ApplicationSharedPtr& app, + bool& hmi_service); + + /** + * @brief Retrieve the service provider with a given service ID + * @param service_type - The service type of the provider to be retrieved + * @param mobile_consumer - True, if the consumer trying to communicate with + * the provider is a mobile application + * @param app - Output parameter that will be filled with the application + * providing the requested service on success, unchanged on failure + * @param hmi_service - Output parameter set to true if the service + * provider is the HMI, unchanged on failure + */ + virtual void GetProviderByID(const std::string& service_id, + const bool mobile_consumer, + ApplicationSharedPtr& app, + bool& hmi_service); + + /** + * @brief Get the active service for a given service type. + * @param service_type - The service type + * @return A pointer to the active service for the given service type on + * success, NULL on failure + */ + virtual AppService* ActiveServiceForType(const std::string service_type); + + /** + * @brief Get the embedded service for a given service type. + * @param service_type - The service type + * @return A pointer to the embedded service for the given service type on + * success, NULL on failure + */ + virtual AppService* EmbeddedServiceForType(const std::string service_type); + + /** + * @brief Get the service with a given service ID. + * @param service_id - The service ID + * @return A pointer to requested service on success, NULL on failure + */ + virtual AppService* FindServiceByID(const std::string service_id); + + /** + * @brief Update a navigation system capability struct with the capabilities + * of the active navigation service. + * @param out_params - The struct to be modified + * @return True on success, false otherwise (if there was no active NAVIGATION + * service) + */ + virtual bool UpdateNavigationCapabilities( + smart_objects::SmartObject& out_params); + + /** + * @brief Get the RPCPassingHandler tied to this object + * @return The RPCPassingHandler tied to this object + */ + virtual RPCPassingHandler& GetRPCPassingHandler(); + + private: + ApplicationManager& app_manager_; + resumption::LastState& last_state_; + + sync_primitives::RecursiveLock published_services_lock_; + std::map<std::string, AppService> published_services_; + RPCPassingHandler rpc_passing_handler_; + + void SetServicePublished(const std::string service_id, + bool service_published); + void AppServiceUpdated( + const smart_objects::SmartObject& service_record, + const mobile_apis::ServiceUpdateReason::eType update_reason, + smart_objects::SmartObject& msg_params); + void GetProviderFromService(const AppService& service, + const bool mobile_consumer, + ApplicationSharedPtr& app, + bool& hmi_service); + + /** + * @brief Get the policy app ID of the default service provider for a given + * service type. + * @param service_type - The service type + * @return The policy app ID of the default service provider for the given + * service type on success, "" on failure + */ + std::string DefaultServiceByType(const std::string service_type); + AppService* FindServiceByPolicyAppID(const std::string policy_app_id, + const std::string type); + + /** + * @brief Get the service of a given type published by a given provider. + * @param connection_key - The connection key of the service provider + * @param service_type - The service type + * @return A pointer to requested service on success, NULL on failure + */ + AppService* FindServiceByProvider(const uint32_t connection_key, + const std::string service_type); + AppService* FindServiceByName(std::string name); + std::string GetPolicyAppID(AppService service); +}; + +} // namespace application_manager + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APP_SERVICE_MANAGER_H_ diff --git a/src/components/application_manager/include/application_manager/application.h b/src/components/application_manager/include/application_manager/application.h index ad7570955e..72122ff3ec 100644 --- a/src/components/application_manager/include/application_manager/application.h +++ b/src/components/application_manager/include/application_manager/application.h @@ -33,23 +33,23 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_H_ -#include <string> +#include <list> #include <map> +#include <memory> #include <set> -#include <list> +#include <string> #include <vector> -#include <memory> -#include "utils/data_accessor.h" -#include "interfaces/MOBILE_API.h" -#include "connection_handler/device.h" #include "application_manager/app_extension.h" -#include "application_manager/message.h" -#include "application_manager/hmi_state.h" #include "application_manager/application_state.h" #include "application_manager/help_prompt_manager.h" +#include "application_manager/hmi_state.h" +#include "application_manager/message.h" +#include "connection_handler/device.h" +#include "interfaces/MOBILE_API.h" #include "protocol_handler/protocol_handler.h" #include "smart_objects/smart_object.h" +#include "utils/data_accessor.h" #include "utils/macro.h" #include "utils/semantic_version.h" @@ -236,8 +236,8 @@ class DynamicApplicationData { virtual bool is_audio() const = 0; /* - * @brief Adds a command to the in application menu - */ + * @brief Adds a command to the in application menu + */ virtual void AddCommand(uint32_t cmd_id, const smart_objects::SmartObject& command) = 0; @@ -353,10 +353,10 @@ class DynamicApplicationData { virtual uint32_t is_perform_interaction_active() const = 0; /* - * @brief Set perform interaction layout - * - * @param Current Interaction layout of the perform interaction - */ + * @brief Set perform interaction layout + * + * @param Current Interaction layout of the perform interaction + */ virtual void set_perform_interaction_layout( mobile_api::LayoutMode::eType layout) = 0; @@ -366,10 +366,10 @@ class DynamicApplicationData { virtual mobile_api::LayoutMode::eType perform_interaction_layout() const = 0; /* - * @brief Sets the mode for perform interaction: UI/VR/BOTH - * - * @param mode Mode that was selected (MENU; VR; BOTH) - */ + * @brief Sets the mode for perform interaction: UI/VR/BOTH + * + * @param mode Mode that was selected (MENU; VR; BOTH) + */ virtual void set_perform_interaction_mode(int32_t mode) = 0; /* @@ -706,11 +706,11 @@ class Application : public virtual InitialApplicationData, virtual void SetRegularState(HmiStatePtr state) = 0; /** - * @brief SetPostponedState sets postponed state to application. - * This state could be set as regular later - * - * @param state state to setup - */ + * @brief SetPostponedState sets postponed state to application. + * This state could be set as regular later + * + * @param state state to setup + */ virtual void SetPostponedState(HmiStatePtr state) = 0; virtual void RemovePostponedState() = 0; @@ -946,6 +946,73 @@ class Application : public virtual InitialApplicationData, */ virtual const std::list<AppExtensionPtr>& Extensions() const = 0; + /** + * @brief Get cloud app endpoint for websocket connection + * @return cloud app endpoint + */ + virtual const std::string& cloud_app_endpoint() const = 0; + + /** + * @brief Get cloud app auth token to be used in connection handshake after + * websocket open. + * @return cloud app auth token + */ + virtual const std::string& auth_token() const = 0; + + /** + * @brief Get cloud app transport type. Defines the type of websocket + * connection used. + * @return cloud app transport type + */ + virtual const std::string& cloud_app_transport_type() const = 0; + + /** + * @brief Get hybrid app preference. Defines behaviour for when a similar + * mobile and cloud app are connected simultaneously. + * @return hybrid app preference + */ + virtual const mobile_apis::HybridAppPreference::eType& hybrid_app_preference() + const = 0; + + /** + * @brief Get cloud app certificate. Used for secured websocket connections. + * @return cloud app certificate. + */ + virtual const std::string& cloud_app_certificate() const = 0; + + /** + * @brief Check whether the given application is a cloud app. + * @return true if the application is a cloud application, false otherwise. + */ + virtual bool is_cloud_app() const = 0; + + /** + * @brief Set cloud app endpoint + */ + virtual void set_cloud_app_endpoint(const std::string& endpoint) = 0; + + /** + * @brief Set cloud app auth token + */ + virtual void set_auth_token(const std::string& auth_token) = 0; + + /** + * @brief Set cloud app transport type + */ + virtual void set_cloud_app_transport_type( + const std::string& transport_type) = 0; + + /** + * @brief Set hybrid app preference + */ + virtual void set_hybrid_app_preference( + const mobile_apis::HybridAppPreference::eType& hybrid_app_preference) = 0; + + /** + * @brief Set cloud app certificate + */ + virtual void set_cloud_app_certificate(const std::string& certificate) = 0; + protected: mutable sync_primitives::Lock hmi_states_lock_; diff --git a/src/components/application_manager/include/application_manager/application_data_impl.h b/src/components/application_manager/include/application_manager/application_data_impl.h index 8f24f124f9..7852d6805b 100644 --- a/src/components/application_manager/include/application_manager/application_data_impl.h +++ b/src/components/application_manager/include/application_manager/application_data_impl.h @@ -34,11 +34,11 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_DATA_IMPL_H_ #include <string> -#include "utils/lock.h" -#include "utils/semantic_version.h" -#include "smart_objects/smart_object.h" #include "application_manager/application.h" #include "interfaces/MOBILE_API.h" +#include "smart_objects/smart_object.h" +#include "utils/lock.h" +#include "utils/semantic_version.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h index 8dc3b2da20..fd9b77eb0f 100644 --- a/src/components/application_manager/include/application_manager/application_impl.h +++ b/src/components/application_manager/include/application_manager/application_impl.h @@ -33,28 +33,28 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_IMPL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_IMPL_H_ +#include <stdint.h> +#include <forward_list> +#include <list> #include <map> #include <set> -#include <vector> #include <utility> -#include <list> -#include <forward_list> -#include <stdint.h> +#include <vector> #include "application_manager/application.h" #include "application_manager/application_data_impl.h" -#include "application_manager/usage_statistics.h" #include "application_manager/help_prompt_manager_impl.h" #include "application_manager/hmi_state.h" +#include "application_manager/usage_statistics.h" #include "protocol_handler/protocol_handler.h" -#include "connection_handler/device.h" -#include "utils/lock.h" #include <atomic> +#include "connection_handler/device.h" #include "utils/custom_string.h" -#include "utils/timer.h" -#include "utils/macro.h" #include "utils/date_time.h" +#include "utils/lock.h" +#include "utils/macro.h" +#include "utils/timer.h" namespace usage_statistics { @@ -304,18 +304,18 @@ class ApplicationImpl : public virtual Application, void SetInitialState(HmiStatePtr state) FINAL; /** - * @brief SetRegularState set permanent state of application - * - * @param state state to setup - */ + * @brief SetRegularState set permanent state of application + * + * @param state state to setup + */ virtual void SetRegularState(HmiStatePtr state); /** - * @brief SetPostponedState sets postponed state to application. - * This state could be set as regular later - * - * @param state state to setup - */ + * @brief SetPostponedState sets postponed state to application. + * This state could be set as regular later + * + * @param state state to setup + */ virtual void SetPostponedState(HmiStatePtr state); virtual void RemovePostponedState(); @@ -409,6 +409,72 @@ class ApplicationImpl : public virtual Application, void SwapMobileMessageQueue(MobileMessageQueue& mobile_messages) OVERRIDE; + /** + * @brief Get cloud app endpoint for websocket connection + * @return cloud app endpoint + */ + const std::string& cloud_app_endpoint() const OVERRIDE; + + /** + * @brief Get cloud app auth token to be used in connection handshake after + * websocket open. + * @return cloud app auth token + */ + const std::string& auth_token() const OVERRIDE; + + /** + * @brief Get cloud app transport type. Defines the type of websocket + * connection used. + * @return cloud app transport type + */ + const std::string& cloud_app_transport_type() const OVERRIDE; + + /** + * @brief Get hybrid app preference. Defines behaviour for when a similar + * mobile and cloud app are connected simultaneously. + * @return hybrid app preference + */ + const mobile_apis::HybridAppPreference::eType& hybrid_app_preference() + const OVERRIDE; + + /** + * @brief Get cloud app certificate. Used for secured websocket connections. + * @return cloud app certificate. + */ + const std::string& cloud_app_certificate() const OVERRIDE; + + /** + * @brief Check whether the given application is a cloud app. + * @return true if the application is a cloud application, false otherwise. + */ + bool is_cloud_app() const OVERRIDE; + + /** + * @brief Set cloud app endpoint + */ + void set_cloud_app_endpoint(const std::string& endpoint) OVERRIDE; + + /** + * @brief Set cloud app auth token + */ + void set_auth_token(const std::string& auth_token) OVERRIDE; + + /** + * @brief Set cloud app transport type + */ + void set_cloud_app_transport_type(const std::string& transport_type) OVERRIDE; + + /** + * @brief Set hybrid app preference + */ + void set_hybrid_app_preference(const mobile_apis::HybridAppPreference::eType& + hybrid_app_preference) OVERRIDE; + + /** + * @brief Set cloud app certificate + */ + void set_cloud_app_certificate(const std::string& certificate) OVERRIDE; + protected: /** * @brief Clean up application folder. Persistent files will stay @@ -513,6 +579,13 @@ class ApplicationImpl : public virtual Application, std::list<AppExtensionPtr> extensions_; + // Cloud app properties + std::string endpoint_; + std::string auth_token_; + std::string cloud_transport_type_; + mobile_apis::HybridAppPreference::eType hybrid_app_preference_; + std::string certificate_; + /** * @brief Defines number per time in seconds limits */ diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h index 6c111dbbb3..c34affbf13 100644 --- a/src/components/application_manager/include/application_manager/application_manager_impl.h +++ b/src/components/application_manager/include/application_manager/application_manager_impl.h @@ -34,40 +34,41 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_MANAGER_IMPL_H_ #include <stdint.h> -#include <vector> -#include <map> -#include <set> -#include <deque> #include <algorithm> +#include <deque> +#include <map> #include <memory> +#include <set> +#include <vector> +#include "application_manager/app_launch/app_launch_data.h" +#include "application_manager/app_service_manager.h" #include "application_manager/application_manager.h" +#include "application_manager/application_manager_settings.h" +#include "application_manager/command_factory.h" +#include "application_manager/command_holder.h" +#include "application_manager/event_engine/event_dispatcher_impl.h" #include "application_manager/hmi_capabilities.h" +#include "application_manager/hmi_interfaces_impl.h" #include "application_manager/message.h" #include "application_manager/message_helper.h" #include "application_manager/request_controller.h" #include "application_manager/resumption/resume_ctrl.h" -#include "application_manager/state_controller_impl.h" -#include "application_manager/app_launch/app_launch_data.h" -#include "application_manager/application_manager_settings.h" -#include "application_manager/event_engine/event_dispatcher_impl.h" -#include "application_manager/hmi_interfaces_impl.h" -#include "application_manager/command_holder.h" -#include "application_manager/command_factory.h" -#include "application_manager/rpc_service.h" #include "application_manager/rpc_handler.h" +#include "application_manager/rpc_service.h" +#include "application_manager/state_controller_impl.h" -#include "protocol_handler/protocol_observer.h" -#include "protocol_handler/protocol_handler.h" -#include "hmi_message_handler/hmi_message_observer.h" -#include "hmi_message_handler/hmi_message_sender.h" #include "application_manager/policies/policy_handler_interface.h" #include "application_manager/policies/policy_handler_observer.h" #include "connection_handler/connection_handler.h" #include "connection_handler/connection_handler_observer.h" #include "connection_handler/device.h" #include "formatters/CSmartFactory.h" +#include "hmi_message_handler/hmi_message_observer.h" +#include "hmi_message_handler/hmi_message_sender.h" #include "policies/policy_handler.h" +#include "protocol_handler/protocol_handler.h" +#include "protocol_handler/protocol_observer.h" #include "interfaces/HMI_API.h" #include "interfaces/HMI_API_schema.h" @@ -87,14 +88,14 @@ #include "utils/macro.h" +#include "smart_objects/smart_object.h" +#include "utils/data_accessor.h" +#include "utils/lock.h" #include "utils/message_queue.h" #include "utils/prioritized_queue.h" -#include "utils/threads/thread.h" #include "utils/threads/message_loop_thread.h" -#include "utils/lock.h" -#include "utils/data_accessor.h" +#include "utils/threads/thread.h" #include "utils/timer.h" -#include "smart_objects/smart_object.h" struct BsonObject; @@ -117,6 +118,14 @@ struct CommandParametersPermissions; typedef std::map<std::string, hmi_apis::Common_TransportType::eType> DeviceTypes; +struct AppIconInfo { + std::string endpoint; + bool pending_request; + AppIconInfo(); + AppIconInfo(std::string ws_endpoint, bool pending) + : endpoint(ws_endpoint), pending_request(pending) {} +}; + CREATE_LOGGERPTR_GLOBAL(logger_, "ApplicationManager") typedef std::shared_ptr<timer::Timer> TimerSPtr; @@ -125,14 +134,14 @@ class ApplicationManagerImpl public connection_handler::ConnectionHandlerObserver, public policy::PolicyHandlerObserver #ifdef ENABLE_SECURITY - , + , public security_manager::SecurityManagerListener #endif // ENABLE_SECURITY #ifdef TELEMETRY_MONITOR - , + , public telemetry_monitor::TelemetryObservable<AMTelemetryObserver> #endif // TELEMETRY_MONITOR - { +{ friend class ResumeCtrl; friend class CommandImpl; @@ -156,6 +165,7 @@ class ApplicationManagerImpl bool Stop() OVERRIDE; DataAccessor<ApplicationSet> applications() const OVERRIDE; + DataAccessor<AppsWaitRegistrationSet> pending_applications() const OVERRIDE; ApplicationSharedPtr application(uint32_t app_id) const OVERRIDE; ApplicationSharedPtr active_application() const OVERRIDE; @@ -164,6 +174,10 @@ class ApplicationManagerImpl uint32_t hmi_app_id) const OVERRIDE; ApplicationSharedPtr application_by_policy_id( const std::string& policy_app_id) const OVERRIDE; + ApplicationSharedPtr application_by_name( + const std::string& app_name) const OVERRIDE; + ApplicationSharedPtr pending_application_by_policy_id( + const std::string& policy_app_id) const OVERRIDE; std::vector<ApplicationSharedPtr> applications_by_button( uint32_t button) OVERRIDE; @@ -194,6 +208,9 @@ class ApplicationManagerImpl void SendDriverDistractionState(ApplicationSharedPtr application); + void SendGetIconUrlNotifications(const uint32_t connection_key, + ApplicationSharedPtr application); + ApplicationSharedPtr application( const std::string& device_id, const std::string& policy_app_id) const OVERRIDE; @@ -213,6 +230,11 @@ class ApplicationManagerImpl return *plugin_manager_; } + virtual AppServiceManager& GetAppServiceManager() OVERRIDE { + DCHECK(app_service_manager_); + return *app_service_manager_; + } + std::vector<std::string> devices( const std::string& policy_app_id) const OVERRIDE; @@ -302,8 +324,9 @@ class ApplicationManagerImpl void SetTelemetryObserver(AMTelemetryObserver* observer) OVERRIDE; #endif // TELEMETRY_MONITOR - ApplicationSharedPtr RegisterApplication(const std::shared_ptr< - smart_objects::SmartObject>& request_for_registration) OVERRIDE; + ApplicationSharedPtr RegisterApplication( + const std::shared_ptr<smart_objects::SmartObject>& + request_for_registration) OVERRIDE; /* * @brief Closes application by id * @@ -320,9 +343,9 @@ class ApplicationManagerImpl bool is_unexpected_disconnect = false) OVERRIDE; /** - * @brief Handle sequence for unauthorized application - * @param app_id Application id - */ + * @brief Handle sequence for unauthorized application + * @param app_id Application id + */ void OnAppUnauthorized(const uint32_t& app_id) OVERRIDE; /* @@ -360,6 +383,44 @@ class ApplicationManagerImpl void ConnectToDevice(const std::string& device_mac) OVERRIDE; void OnHMIStartedCooperation() OVERRIDE; + void DisconnectCloudApp(ApplicationSharedPtr app) OVERRIDE; + + void RefreshCloudAppInformation() OVERRIDE; + + void CreatePendingApplication( + const transport_manager::ConnectionUID connection_id, + const transport_manager::DeviceInfo& device_info, + connection_handler::DeviceHandle device_id); + + void SetPendingApplicationState( + const transport_manager::ConnectionUID connection_id, + const transport_manager::DeviceInfo& device_info); + + std::string PolicyIDByIconUrl(const std::string url) OVERRIDE; + + void SetIconFileFromSystemRequest(const std::string policy_id) OVERRIDE; + + /** + * @brief Notifies the applicaiton manager that a cloud connection status has + * updated and should trigger an UpdateAppList RPC to the HMI + */ + void OnConnectionStatusUpdated(); + + /** + * @brief Retrieve the current connection status of a cloud app + * @param app A cloud application + * @return The current CloudConnectionStatus of app + */ + hmi_apis::Common_CloudConnectionStatus::eType GetCloudAppConnectionStatus( + ApplicationConstSharedPtr app) const; + + /* + * @brief Returns unique correlation ID for to mobile request + * + * @return Unique correlation ID + */ + uint32_t GetNextMobileCorrelationID() OVERRIDE; + /* * @brief Returns unique correlation ID for HMI request * @@ -476,18 +537,12 @@ class ApplicationManagerImpl // typedef for Applications list typedef std::set<ApplicationSharedPtr, ApplicationsAppIdSorter> ApplictionSet; - typedef std::set<ApplicationSharedPtr, ApplicationsPolicyAppIdSorter> - AppsWaitRegistrationSet; - // typedef for Applications list iterator typedef ApplictionSet::iterator ApplictionSetIt; // typedef for Applications list const iterator typedef ApplictionSet::const_iterator ApplictionSetConstIt; - DataAccessor<AppsWaitRegistrationSet> apps_waiting_for_registration() const; - ApplicationConstSharedPtr waiting_app(const uint32_t hmi_id) const; - /** * @brief Notification from PolicyHandler about PTU. * Compares AppHMIType between saved in app and received from PTU. If they are @@ -678,6 +733,15 @@ class ApplicationManagerImpl uint32_t new_timeout_value) OVERRIDE; /** + * @brief TODO + * + * @param connection_key Connection key of application + * @param mobile_correlation_id Correlation ID of the mobile request + */ + void IncreaseForwardedRequestTimeout(uint32_t connection_key, + uint32_t mobile_correlation_id) OVERRIDE; + + /** * @brief AddPolicyObserver allows to subscribe needed component to events * from policy. * @@ -764,9 +828,9 @@ class ApplicationManagerImpl ApplicationConstSharedPtr application) const; /** - * Getter for resume_controller - * @return Resume Controller - */ + * Getter for resume_controller + * @return Resume Controller + */ resumption::ResumeCtrl& resume_controller() OVERRIDE { return *resume_ctrl_.get(); } @@ -935,8 +999,7 @@ class ApplicationManagerImpl AppV4DevicePredicate(const connection_handler::DeviceHandle handle) : handle_(handle) {} bool operator()(const ApplicationSharedPtr app) const { - return app - ? handle_ == app->device() && + return app ? handle_ == app->device() && Message::is_sufficient_version( protocol_handler::MajorProtocolVersion:: PROTOCOL_VERSION_4, @@ -962,6 +1025,14 @@ class ApplicationManagerImpl } }; + struct AppNamePredicate { + std::string app_name_; + AppNamePredicate(const std::string& app_name) : app_name_(app_name) {} + bool operator()(const ApplicationSharedPtr app) const { + return app ? app->name() == app_name_ : false; + } + }; + /** * @brief Sends UpdateAppList notification to HMI */ @@ -1004,14 +1075,14 @@ class ApplicationManagerImpl } /** - * @brief ProcessReconnection handles reconnection flow for application on - * transport switch - * @param application Pointer to switched application, must be validated - * before passing - * @param connection_key Connection key from registration request of - * switched - * application - */ + * @brief ProcessReconnection handles reconnection flow for application on + * transport switch + * @param application Pointer to switched application, must be validated + * before passing + * @param connection_key Connection key from registration request of + * switched + * application + */ void ProcessReconnection(ApplicationSharedPtr application, const uint32_t connection_key) FINAL; @@ -1078,7 +1149,8 @@ class ApplicationManagerImpl mobile_apis::MOBILE_API& mobile_so_factory(); bool ConvertSOtoMessage(const smart_objects::SmartObject& message, - Message& output); + Message& output, + const bool allow_unknown_parameters = false); template <typename ApplicationList> void PrepareApplicationListSO(ApplicationList app_list, @@ -1382,6 +1454,7 @@ class ApplicationManagerImpl protocol_handler::ProtocolHandler* protocol_handler_; request_controller::RequestController request_ctrl_; std::unique_ptr<plugin_manager::RPCPluginManager> plugin_manager_; + std::unique_ptr<application_manager::AppServiceManager> app_service_manager_; /** * @brief Map contains apps with HMI state before incoming call @@ -1404,6 +1477,7 @@ class ApplicationManagerImpl hmi_apis::HMI_API* hmi_so_factory_; mobile_apis::MOBILE_API* mobile_so_factory_; + static uint32_t mobile_corelation_id_; static uint32_t corelation_id_; static const uint32_t max_corelation_id_; @@ -1449,6 +1523,13 @@ class ApplicationManagerImpl DeviceMap secondary_transport_devices_cache_; + mutable std::shared_ptr<sync_primitives::RecursiveLock> + pending_device_map_lock_ptr_; + std::map<std::string, std::string> pending_device_map_; + + sync_primitives::Lock app_icon_map_lock_ptr_; + std::map<std::string, AppIconInfo> app_icon_map_; + #ifdef TELEMETRY_MONITOR AMTelemetryObserver* metric_observer_; #endif // TELEMETRY_MONITOR @@ -1478,18 +1559,47 @@ class ApplicationManagerImpl void AddMockApplication(ApplicationSharedPtr mock_app); /** + * @brief Add a mock application to the pending application list without going + * through the formal registration process. Only for unit testing. + * @param mock_app the mock app to be added to the pending application list + */ + void AddMockPendingApplication(ApplicationSharedPtr mock_app); + + /** * @brief set a mock media manager without running Init(). Only for unit * testing. - * @param mock_app the mock app to be registered + * @param mock_media_manager the mock media manager to be assigned */ void SetMockMediaManager(media_manager::MediaManager* mock_media_manager); + /** + * @brief set a mock rpc service directly. Only for unit + * testing. + * @param mock_app the mock rpc service to be assigned + */ + void SetMockRPCService(rpc_service::RPCService* rpc_service) { + rpc_service_.reset(rpc_service); + } + + /** + * @brief set a mock rpc service directly. Only for unit + * testing. + * @param mock_app the mock rpc service to be assigned + */ + void SetMockPolicyHandler(policy::PolicyHandlerInterface* policy_handler) { + policy_handler_.reset(policy_handler); + } + virtual void SetPluginManager( std::unique_ptr<plugin_manager::RPCPluginManager>& plugin_manager) OVERRIDE { plugin_manager_.reset(plugin_manager.release()); } + virtual void SetAppServiceManager(AppServiceManager* app_service_manager) { + app_service_manager_.reset(app_service_manager); + } + private: #endif diff --git a/src/components/application_manager/include/application_manager/application_state.h b/src/components/application_manager/include/application_manager/application_state.h index bf894eaf94..d708a6188d 100644 --- a/src/components/application_manager/include/application_manager/application_state.h +++ b/src/components/application_manager/include/application_manager/application_state.h @@ -33,9 +33,9 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_STATE_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_STATE_H_ #include <vector> +#include "application_manager/hmi_state.h" #include "utils/lock.h" #include "utils/macro.h" -#include "application_manager/hmi_state.h" namespace application_manager { @@ -119,11 +119,11 @@ class ApplicationState { void SetRegularState(HmiStatePtr state); /** - * @brief Sets postponed state of application. - * This state could be set as regular later on - * - * @param state state to setup - */ + * @brief Sets postponed state of application. + * This state could be set as regular later on + * + * @param state state to setup + */ void SetPostponedState(HmiStatePtr state); /** @@ -154,6 +154,6 @@ class ApplicationState { DISALLOW_COPY_AND_ASSIGN(ApplicationState); }; -} +} // namespace application_manager #endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_APPLICATION_STATE_H_ diff --git a/src/components/application_manager/include/application_manager/command_factory.h b/src/components/application_manager/include/application_manager/command_factory.h index 7dc8a0cfc1..f479ee7f37 100644 --- a/src/components/application_manager/include/application_manager/command_factory.h +++ b/src/components/application_manager/include/application_manager/command_factory.h @@ -33,10 +33,11 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMAND_FACTORY_H #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMAND_FACTORY_H -#include "application_manager/commands/command.h" #include "application_manager/application_manager.h" -#include "application_manager/rpc_service.h" +#include "application_manager/commands/command.h" +#include "application_manager/hmi_capabilities.h" #include "application_manager/policies/policy_handler_interface.h" +#include "application_manager/rpc_service.h" #include "utils/macro.h" namespace application_manager { @@ -63,10 +64,10 @@ class CommandFactory { const commands::MessageSharedPtr& message, commands::Command::CommandSource source) = 0; /** - * @param int32_t command id - * @param CommandSource source - * @return return true if command can be create, else return false - **/ + * @param int32_t command id + * @param CommandSource source + * @return return true if command can be create, else return false + **/ virtual bool IsAbleToProcess( const int32_t, const application_manager::commands::Command::CommandSource source) diff --git a/src/components/application_manager/include/application_manager/command_holder_impl.h b/src/components/application_manager/include/application_manager/command_holder_impl.h index 18a1de7526..8867336b3e 100644 --- a/src/components/application_manager/include/application_manager/command_holder_impl.h +++ b/src/components/application_manager/include/application_manager/command_holder_impl.h @@ -35,9 +35,9 @@ #include "application_manager/command_holder.h" +#include <map> #include <string> #include <vector> -#include <map> #include "application_manager/application.h" #include "application_manager/rpc_service.h" #include "smart_objects/smart_object.h" diff --git a/src/components/application_manager/include/application_manager/commands/command.h b/src/components/application_manager/include/application_manager/commands/command.h index f8ea7db24d..0693f9868d 100644 --- a/src/components/application_manager/include/application_manager/commands/command.h +++ b/src/components/application_manager/include/application_manager/commands/command.h @@ -100,19 +100,24 @@ class Command { virtual void onTimeOut() = 0; /** - * @brief AllowedToTerminate tells if request controller is allowed - * to terminate this command - * @return - */ + * @brief AllowedToTerminate tells if request controller is allowed + * to terminate this command + * @return + */ virtual bool AllowedToTerminate() = 0; /** - * @brief SetAllowedToTerminate set up allowed to terminate flag. - * If true, request controller will terminate request on response - */ + * @brief SetAllowedToTerminate set up allowed to terminate flag. + * If true, request controller will terminate request on response + */ virtual void SetAllowedToTerminate(const bool allowed) = 0; - enum CommandSource { SOURCE_SDL, SOURCE_MOBILE, SOURCE_HMI }; + enum CommandSource { + SOURCE_SDL, + SOURCE_MOBILE, + SOURCE_HMI, + SOURCE_SDL_TO_HMI + }; }; typedef smart_objects::SmartObjectSPtr MessageSharedPtr; diff --git a/src/components/application_manager/include/application_manager/commands/command_impl.h b/src/components/application_manager/include/application_manager/commands/command_impl.h index 4859f73a55..4e52ac23ce 100644 --- a/src/components/application_manager/include/application_manager/commands/command_impl.h +++ b/src/components/application_manager/include/application_manager/commands/command_impl.h @@ -33,10 +33,11 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_IMPL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_IMPL_H_ +#include "application_manager/application_manager.h" #include "application_manager/commands/command.h" #include "application_manager/event_engine/event_observer.h" -#include "application_manager/application_manager.h" #include "application_manager/smart_object_keys.h" +#include "policy/policy_types.h" #include "utils/logger.h" namespace application_manager { @@ -124,18 +125,19 @@ class CommandImpl : public Command { void onTimeOut() OVERRIDE; /** - * @brief AllowedToTerminate tells request Controller if it can terminate this - * request by response. - * By default, RequestCtrl should terminate all requests by their responses. - * If request need to terminate itself, it should override this function false - * @return allowed_to_terminate_ value - */ + * @brief AllowedToTerminate tells request Controller if it can terminate this + * request by response. + * By default, RequestCtrl should terminate all requests by their responses. + * If request need to terminate itself, it should override this function + * false + * @return allowed_to_terminate_ value + */ bool AllowedToTerminate() OVERRIDE; /** - * @brief SetAllowedToTerminate set up allowed to terminate flag. - * If true, request controller will terminate request on response - */ + * @brief SetAllowedToTerminate set up allowed to terminate flag. + * If true, request controller will terminate request on response + */ void SetAllowedToTerminate(const bool allowed) OVERRIDE; // members diff --git a/src/components/application_manager/include/application_manager/commands/command_notification_from_mobile_impl.h b/src/components/application_manager/include/application_manager/commands/command_notification_from_mobile_impl.h index 8741dae540..e8485a3abc 100644 --- a/src/components/application_manager/include/application_manager/commands/command_notification_from_mobile_impl.h +++ b/src/components/application_manager/include/application_manager/commands/command_notification_from_mobile_impl.h @@ -53,6 +53,11 @@ class CommandNotificationFromMobileImpl : public CommandImpl { virtual bool CleanUp(); virtual void Run(); void SendNotification(); + void SendNotificationToMobile(); + void SendNotificationToHMI( + const hmi_apis::FunctionID::eType& hmi_function_id); + void SendNotificationToConsumers( + const hmi_apis::FunctionID::eType& hmi_function_id); private: DISALLOW_COPY_AND_ASSIGN(CommandNotificationFromMobileImpl); diff --git a/src/components/application_manager/include/application_manager/commands/command_request_impl.h b/src/components/application_manager/include/application_manager/commands/command_request_impl.h index 27aa93d1d8..b5a330d907 100644 --- a/src/components/application_manager/include/application_manager/commands/command_request_impl.h +++ b/src/components/application_manager/include/application_manager/commands/command_request_impl.h @@ -34,10 +34,10 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_REQUEST_IMPL_H_ #include "application_manager/commands/command_impl.h" -#include "interfaces/MOBILE_API.h" #include "interfaces/HMI_API.h" -#include "utils/lock.h" +#include "interfaces/MOBILE_API.h" #include "smart_objects/smart_object.h" +#include "utils/lock.h" namespace application_manager { namespace commands { @@ -149,6 +149,8 @@ class CommandRequestImpl : public CommandImpl, */ virtual void on_event(const event_engine::Event& event); + virtual void on_event(const event_engine::MobileEvent& event); + /* * @brief Creates Mobile response * @@ -157,10 +159,12 @@ class CommandRequestImpl : public CommandImpl, * @param info Provides additional human readable info regarding the result * @param response_params Additional params in response */ - void SendResponse(const bool success, - const mobile_apis::Result::eType& result_code, - const char* info = NULL, - const smart_objects::SmartObject* response_params = NULL); + void SendResponse( + const bool success, + const mobile_apis::Result::eType& result_code, + const char* info = NULL, + const smart_objects::SmartObject* response_params = NULL, + const std::vector<uint8_t> binary_data = std::vector<uint8_t>()); /** * @brief Check syntax of string from mobile @@ -170,6 +174,16 @@ class CommandRequestImpl : public CommandImpl, */ bool CheckSyntax(const std::string& str, bool allow_empty_line = false); + void SendProviderRequest( + const mobile_apis::FunctionID::eType& mobile_function_id, + const hmi_apis::FunctionID::eType& hmi_function_id, + const smart_objects::SmartObject* msg, + bool use_events = false); + + void SendMobileRequest(const mobile_apis::FunctionID::eType& function_id, + smart_objects::SmartObjectSPtr msg, + bool use_events = false); + /* * @brief Sends HMI request * @@ -235,6 +249,14 @@ class CommandRequestImpl : public CommandImpl, bool HasDisallowedParams() const; /** + * @brief Checks result code from Mobile for single RPC + * @param result_code contains result code from Mobile response + * @return true if result code complies successful result codes, + * false otherwise. + */ + bool IsMobileResultSuccess(mobile_apis::Result::eType result_code) const; + + /** * @brief Checks result code from HMI for single RPC * and returns parameter for sending to mobile app. * @param result_code contains result code from HMI response @@ -313,7 +335,7 @@ class CommandRequestImpl : public CommandImpl, * @param interface_id interface which SDL awaits for response in given time * @return true if SDL awaits for response from given interface in * interface_id - */ + */ bool IsInterfaceAwaited(const HmiInterfaces::InterfaceID& interface_id) const; /** @@ -324,7 +346,7 @@ class CommandRequestImpl : public CommandImpl, void EndAwaitForInterface(const HmiInterfaces::InterfaceID& interface_id); /** - * @brief This set stores all the interfaces which are awaited by SDL to + * @brief This set stores all the interfaces which are awaited by SDL to * return a response on some request */ std::set<HmiInterfaces::InterfaceID> awaiting_response_interfaces_; @@ -365,10 +387,10 @@ class CommandRequestImpl : public CommandImpl, const hmi_apis::FunctionID::eType& function_id); /** - * @brief UpdateHash updates hash field for application and sends - * OnHashChanged notification to mobile side in case of approriate hash mode - * is set - */ + * @brief UpdateHash updates hash field for application and sends + * OnHashChanged notification to mobile side in case of approriate hash mode + * is set + */ void UpdateHash(); /** diff --git a/src/components/application_manager/include/application_manager/commands/command_request_to_mobile.h b/src/components/application_manager/include/application_manager/commands/command_request_to_mobile.h new file mode 100644 index 0000000000..430e549523 --- /dev/null +++ b/src/components/application_manager/include/application_manager/commands/command_request_to_mobile.h @@ -0,0 +1,73 @@ +/* + Copyright (c) 2018, 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_REQUEST_TO_MOBILE_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_REQUEST_TO_MOBILE_H_ + +#include "application_manager/application_manager.h" +#include "application_manager/commands/command_impl.h" +#include "interfaces/MOBILE_API.h" +#include "smart_objects/smart_object.h" + +namespace application_manager { + +namespace commands { + +class CommandRequestToMobile : public CommandImpl { + public: + CommandRequestToMobile(const MessageSharedPtr& message, + ApplicationManager& application_manager, + rpc_service::RPCService& rpc_service, + HMICapabilities& hmi_capabilities, + policy::PolicyHandlerInterface& policy_handler); + ~CommandRequestToMobile(); + bool Init() OVERRIDE; + bool CleanUp() OVERRIDE; + void Run() OVERRIDE; + void SendRequest(); + + /* + * @brief Retrieves application ID + */ + inline uint32_t application_id() const { + return (*message_)[strings::msg_params][strings::app_id].asUInt(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(CommandRequestToMobile); +}; + +} // namespace commands + +} // namespace application_manager + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_REQUEST_TO_MOBILE_H_ diff --git a/src/components/application_manager/include/application_manager/commands/command_response_from_mobile.h b/src/components/application_manager/include/application_manager/commands/command_response_from_mobile.h new file mode 100644 index 0000000000..1401888890 --- /dev/null +++ b/src/components/application_manager/include/application_manager/commands/command_response_from_mobile.h @@ -0,0 +1,73 @@ +/* + Copyright (c) 2018, 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_RESPONSE_TO_MOBILE_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_RESPONSE_TO_MOBILE_H_ + +#include "application_manager/application_manager.h" +#include "application_manager/commands/command_impl.h" +#include "interfaces/MOBILE_API.h" +#include "smart_objects/smart_object.h" + +namespace application_manager { + +namespace commands { + +class CommandResponseFromMobile : public CommandImpl { + public: + CommandResponseFromMobile(const MessageSharedPtr& message, + ApplicationManager& application_manager, + rpc_service::RPCService& rpc_service, + HMICapabilities& hmi_capabilities, + policy::PolicyHandlerInterface& policy_handler); + ~CommandResponseFromMobile(); + bool Init() OVERRIDE; + bool CleanUp() OVERRIDE; + void Run() OVERRIDE; + void SendResponse(); + + /* + * @brief Retrieves application ID + */ + inline uint32_t application_id() const { + return (*message_)[strings::msg_params][strings::app_id].asUInt(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(CommandResponseFromMobile); +}; + +} // namespace commands + +} // namespace application_manager + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_COMMAND_RESPONSE_TO_MOBILE_H_ diff --git a/src/components/application_manager/include/application_manager/commands/notification_from_hmi.h b/src/components/application_manager/include/application_manager/commands/notification_from_hmi.h index 8bbbd0e3de..25cfd7b207 100644 --- a/src/components/application_manager/include/application_manager/commands/notification_from_hmi.h +++ b/src/components/application_manager/include/application_manager/commands/notification_from_hmi.h @@ -53,8 +53,14 @@ class NotificationFromHMI : public CommandImpl { virtual bool CleanUp(); virtual void Run(); void SendNotificationToMobile(const MessageSharedPtr& message); + void SendNotificationToMobile( + const MessageSharedPtr& message, + const mobile_apis::FunctionID::eType& mobile_function_id); + void SendNotificationToHMI(MessageSharedPtr& message); void CreateHMIRequest(const hmi_apis::FunctionID::eType& function_id, const smart_objects::SmartObject& msg_params) const; + void SendNotificationToConsumers( + const mobile_apis::FunctionID::eType& mobile_function_id); private: DISALLOW_COPY_AND_ASSIGN(NotificationFromHMI); diff --git a/src/components/application_manager/include/application_manager/commands/pending.h b/src/components/application_manager/include/application_manager/commands/pending.h index bbfc246659..9083d81d73 100644 --- a/src/components/application_manager/include/application_manager/commands/pending.h +++ b/src/components/application_manager/include/application_manager/commands/pending.h @@ -35,9 +35,9 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_PENDING_H_ #include <set> -#include "utils/macro.h" -#include "utils/lock.h" #include "interfaces/HMI_API.h" +#include "utils/lock.h" +#include "utils/macro.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/commands/request_from_hmi.h b/src/components/application_manager/include/application_manager/commands/request_from_hmi.h index 927a45c6a6..4464056175 100644 --- a/src/components/application_manager/include/application_manager/commands/request_from_hmi.h +++ b/src/components/application_manager/include/application_manager/commands/request_from_hmi.h @@ -55,16 +55,22 @@ class RequestFromHMI : public CommandImpl, public event_engine::EventObserver { virtual bool CleanUp(); virtual void Run(); virtual void on_event(const event_engine::Event& event); + void on_event(const event_engine::MobileEvent& event) OVERRIDE; /** * @brief SendResponse allows to send response to hmi * @param correlation_id the correlation id for the rfesponse. * @param function_id the function id for which response will be sent * @param result_code the result code. + * @param response_params extra response params. + * @param source command source. */ - void SendResponse(const bool success, - const uint32_t correlation_id, - const hmi_apis::FunctionID::eType function_id, - const hmi_apis::Common_Result::eType result_code); + void SendResponse( + const bool success, + const uint32_t correlation_id, + const hmi_apis::FunctionID::eType function_id, + const hmi_apis::Common_Result::eType result_code, + const smart_objects::SmartObject* response_params = NULL, + commands::Command::CommandSource source = commands::Command::SOURCE_HMI); /** * @brief SendResponse allows to send error response to hmi @@ -72,11 +78,39 @@ class RequestFromHMI : public CommandImpl, public event_engine::EventObserver { * @param function_id the function id for which response will be sent * @param result_code the result code. * @param error_message info message for error. + * @param source command source. */ - void SendErrorResponse(const uint32_t correlation_id, - const hmi_apis::FunctionID::eType function_id, - const hmi_apis::Common_Result::eType result_code, - const std::string error_message); + void SendErrorResponse( + const uint32_t correlation_id, + const hmi_apis::FunctionID::eType function_id, + const hmi_apis::Common_Result::eType result_code, + const std::string error_message, + commands::Command::CommandSource source = commands::Command::SOURCE_HMI); + + void SendProviderRequest( + const mobile_apis::FunctionID::eType& mobile_function_id, + const hmi_apis::FunctionID::eType& hmi_function_id, + const smart_objects::SmartObject* msg, + bool use_events = false); + + void SendMobileRequest(const mobile_apis::FunctionID::eType& function_id, + const ApplicationSharedPtr app, + const smart_objects::SmartObject* msg_params, + bool use_events); + + void SendHMIRequest(const hmi_apis::FunctionID::eType& function_id, + const smart_objects::SmartObject* msg_params, + bool use_events); + + bool ProcessHMIInterfacesAvailability( + const uint32_t hmi_correlation_id, + const hmi_apis::FunctionID::eType& function_id); + + protected: + bool IsMobileResultSuccess(mobile_apis::Result::eType result_code) const; + + bool IsHMIResultSuccess(hmi_apis::Common_Result::eType result_code, + HmiInterfaces::InterfaceID interface) const; private: /** diff --git a/src/components/application_manager/include/application_manager/commands/request_to_hmi.h b/src/components/application_manager/include/application_manager/commands/request_to_hmi.h index 91586a74ce..e8850fbe8d 100644 --- a/src/components/application_manager/include/application_manager/commands/request_to_hmi.h +++ b/src/components/application_manager/include/application_manager/commands/request_to_hmi.h @@ -33,8 +33,8 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_REQUEST_TO_HMI_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_REQUEST_TO_HMI_H_ -#include "application_manager/commands/command_impl.h" #include "application_manager/application_manager.h" +#include "application_manager/commands/command_impl.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/commands/response_from_hmi.h b/src/components/application_manager/include/application_manager/commands/response_from_hmi.h index 605d04067e..6c00957d3f 100644 --- a/src/components/application_manager/include/application_manager/commands/response_from_hmi.h +++ b/src/components/application_manager/include/application_manager/commands/response_from_hmi.h @@ -1,40 +1,40 @@ /* -* Copyright (c) 2018, 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) 2018, 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_RESPONSE_FROM_HMI_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_RESPONSE_FROM_HMI_H_ -#include "application_manager/commands/command_impl.h" #include "application_manager/application_manager.h" +#include "application_manager/commands/command_impl.h" #include "interfaces/HMI_API.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/event_engine/event.h b/src/components/application_manager/include/application_manager/event_engine/event.h index 68ee508a9b..e7382e01a4 100644 --- a/src/components/application_manager/include/application_manager/event_engine/event.h +++ b/src/components/application_manager/include/application_manager/event_engine/event.h @@ -34,9 +34,10 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_EVENT_ENGINE_EVENT_H_ #include <interfaces/HMI_API.h> +#include <interfaces/MOBILE_API.h> -#include "smart_objects/smart_object.h" #include "application_manager/smart_object_keys.h" +#include "smart_objects/smart_object.h" namespace application_manager { namespace event_engine { @@ -130,9 +131,9 @@ int32_t Event::smart_object_function_id() const { } int32_t Event::smart_object_correlation_id() const { - return response_so_.getElement(strings::params) - .getElement(strings::correlation_id) - .asInt(); + return static_cast<int32_t>(response_so_.getElement(strings::params) + .getElement(strings::correlation_id) + .asInt()); } int32_t Event::smart_object_type() const { @@ -141,6 +142,104 @@ int32_t Event::smart_object_type() const { .asInt(); } +class MobileEvent { + public: + // Typedef for possible Event ID's from mobile_apis functionID enum + typedef mobile_apis::FunctionID::eType MobileEventID; + + /* + * @brief Constructor with parameters + * + * @param id Event ID. Please see mobile_apis::FunctionID for possible ID's + */ + explicit MobileEvent(const MobileEventID& id); + + /* + * @brief Destructor + */ + virtual ~MobileEvent(); + + /* + * @brief Sends synchronously event to all subscribers. + * + */ + void raise(EventDispatcher& event_dispatcher); + + /* + * @brief Provides event ID + */ + inline const MobileEventID& id() const; + + /* + * @brief Sets event smart object + * + * @param so The smart_object received in Mobile response + */ + void set_smart_object(const smart_objects::SmartObject& so); + + /* + * @brief Retrieves event smart object + * + * @return The smart_object received in Mobile response + */ + inline const smart_objects::SmartObject& smart_object() const; + + /* + * @brief Retrieves smart object request ID + */ + inline int32_t smart_object_function_id() const; + + /* + * @brief Retrieves smart object correlation ID + */ + inline int32_t smart_object_correlation_id() const; + + /* + * @brief Retrieves smart_object response type + */ + inline int32_t smart_object_type() const; + + protected: + private: + MobileEventID id_; + smart_objects::SmartObject response_so_; + + /* + * @brief Default constructor + * + * Unimplemented to avoid misusing + */ + MobileEvent(); + + DISALLOW_COPY_AND_ASSIGN(MobileEvent); +}; + +const MobileEvent::MobileEventID& MobileEvent::id() const { + return id_; +} + +const smart_objects::SmartObject& MobileEvent::smart_object() const { + return response_so_; +} + +int32_t MobileEvent::smart_object_function_id() const { + return static_cast<int32_t>(response_so_.getElement(strings::params) + .getElement(strings::function_id) + .asInt()); +} + +int32_t MobileEvent::smart_object_correlation_id() const { + return static_cast<int32_t>(response_so_.getElement(strings::params) + .getElement(strings::correlation_id) + .asInt()); +} + +int32_t MobileEvent::smart_object_type() const { + return static_cast<int32_t>(response_so_.getElement(strings::params) + .getElement(strings::message_type) + .asInt()); +} + } // namespace event_engine } // namespace application_manager diff --git a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h index 813dda0295..0656372f47 100644 --- a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h +++ b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h @@ -77,6 +77,42 @@ class EventDispatcher { */ virtual void remove_observer(EventObserver& observer) = 0; + // Mobile Events + + /* + * @brief Delivers the event to all subscribers + * + * @param event Received event + */ + virtual void raise_mobile_event(const MobileEvent& event) = 0; + + /* + * @brief Subscribe the observer to event + * + * @param event_id The event ID to subscribe for + * @param hmi_correlation_id The event HMI correlation ID + * @param observer The observer to subscribe for event + */ + virtual void add_mobile_observer(const MobileEvent::MobileEventID& event_id, + int32_t mobile_correlation_id, + EventObserver& observer) = 0; + + /* + * @brief Unsubscribes the observer from specific event + * + * @param event_id The event ID to unsubscribe from + * @param observer The observer to be unsubscribed + */ + virtual void remove_mobile_observer( + const MobileEvent::MobileEventID& event_id, EventObserver& observer) = 0; + + /* + * @brief Unsubscribes the observer from all events + * + * @param observer The observer to be unsubscribed + */ + virtual void remove_mobile_observer(EventObserver& observer) = 0; + /* * @brief Destructor */ diff --git a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h index ed923369ac..3644299499 100644 --- a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h +++ b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h @@ -33,8 +33,8 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_EVENT_ENGINE_EVENT_DISPATCHER_IMPL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_EVENT_ENGINE_EVENT_DISPATCHER_IMPL_H_ -#include <vector> #include <map> +#include <vector> #include "utils/lock.h" @@ -52,6 +52,8 @@ class EventDispatcherImpl : public EventDispatcher { typedef std::vector<EventObserver*> ObserverVector; typedef std::map<int32_t, ObserverVector> ObserversMap; typedef std::map<Event::EventID, ObserversMap> EventObserverMap; + typedef std::map<MobileEvent::MobileEventID, ObserversMap> + MobileEventObserverMap; /* * @brief Destructor */ @@ -66,6 +68,9 @@ class EventDispatcherImpl : public EventDispatcher { EventObserverMap get_observers() const { return observers_event_; } + MobileEventObserverMap get_mobile_observers() const { + return mobile_observers_event_; + } ObserverVector get_observers_list() const { return observers_; } @@ -105,6 +110,41 @@ class EventDispatcherImpl : public EventDispatcher { */ void remove_observer(EventObserver& observer) OVERRIDE; + // Mobile requests + /* + * @brief Delivers the event to all subscribers + * + * @param event Received event + */ + void raise_mobile_event(const MobileEvent& event) OVERRIDE; + + /* + * @brief Subscribe the observer to event + * + * @param event_id The event ID to subscribe for + * @param hmi_correlation_id The event HMI correlation ID + * @param observer The observer to subscribe for event + */ + void add_mobile_observer(const MobileEvent::MobileEventID& event_id, + int32_t mobile_correlation_id, + EventObserver& observer) OVERRIDE; + + /* + * @brief Unsubscribes the observer from specific event + * + * @param event_id The event ID to unsubscribe from + * @param observer The observer to be unsubscribed + */ + void remove_mobile_observer(const MobileEvent::MobileEventID& event_id, + EventObserver& observer) OVERRIDE; + + /* + * @brief Unsubscribes the observer from all events + * + * @param observer The observer to be unsubscribed + */ + void remove_mobile_observer(EventObserver& observer) OVERRIDE; + private: /* * @brief removes observer @@ -113,14 +153,25 @@ class EventDispatcherImpl : public EventDispatcher { */ void remove_observer_from_vector(EventObserver& observer); + /* + * @brief removes observer + * when occurs unsubscribe from event + * @param observer to be removed + */ + void remove_mobile_observer_from_vector(EventObserver& observer); + DISALLOW_COPY_AND_ASSIGN(EventDispatcherImpl); private: // Members section sync_primitives::Lock state_lock_; + sync_primitives::Lock mobile_state_lock_; sync_primitives::RecursiveLock observer_lock_; + sync_primitives::RecursiveLock mobile_observer_lock_; EventObserverMap observers_event_; + MobileEventObserverMap mobile_observers_event_; ObserverVector observers_; + ObserverVector mobile_observers_; }; } // namespace event_engine diff --git a/src/components/application_manager/include/application_manager/event_engine/event_observer.h b/src/components/application_manager/include/application_manager/event_engine/event_observer.h index 593f1df657..7a7fe7c2ec 100644 --- a/src/components/application_manager/include/application_manager/event_engine/event_observer.h +++ b/src/components/application_manager/include/application_manager/event_engine/event_observer.h @@ -72,6 +72,8 @@ class EventObserver { */ virtual void on_event(const Event& event) = 0; + virtual void on_event(const MobileEvent& event); + protected: /* * @brief Subscribe to an event @@ -94,7 +96,38 @@ class EventObserver { * @brief Unsubscribes the observer from all events * */ - void unsubscribe_from_all_events(); + DEPRECATED void unsubscribe_from_all_events(); + + /* + * @brief Unsubscribes the observer from all events + * + */ + void unsubscribe_from_all_hmi_events(); + + // Mobile Events + + /* + * @brief Subscribe to an event + * + * @param event_id The event ID to subscribe for + * @param mobile_correlation_id The event mobile correlation ID. + * If param is omitted, it means subscription for mobile notification + */ + void subscribe_on_event(const MobileEvent::MobileEventID& event_id, + int32_t mobile_correlation_id = 0); + + /* + * @brief Unsubscribes the observer from specific event + * + * @param event_id The event ID to unsubscribe from + */ + void unsubscribe_from_event(const MobileEvent::MobileEventID& event_id); + + /* + * @brief Unsubscribes the observer from all events + * + */ + void unsubscribe_from_all_mobile_events(); private: ObserverID id_; diff --git a/src/components/application_manager/include/application_manager/help_prompt_manager.h b/src/components/application_manager/include/application_manager/help_prompt_manager.h index a0c34e77d7..eb45705d9f 100644 --- a/src/components/application_manager/include/application_manager/help_prompt_manager.h +++ b/src/components/application_manager/include/application_manager/help_prompt_manager.h @@ -28,7 +28,7 @@ * 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HELP_PROMPT_MANAGER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HELP_PROMPT_MANAGER_H_ diff --git a/src/components/application_manager/include/application_manager/help_prompt_manager_impl.h b/src/components/application_manager/include/application_manager/help_prompt_manager_impl.h index 81754a60b0..3cd22a6afc 100644 --- a/src/components/application_manager/include/application_manager/help_prompt_manager_impl.h +++ b/src/components/application_manager/include/application_manager/help_prompt_manager_impl.h @@ -28,7 +28,7 @@ * 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HELP_PROMPT_MANAGER_IMPL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HELP_PROMPT_MANAGER_IMPL_H_ @@ -56,7 +56,7 @@ class HelpPromptManagerImpl : public HelpPromptManager { public: /** * @brief Container for buffering VR help commands - */ + */ typedef std::pair<uint32_t, smart_objects::SmartObjectSPtr> VRCommandPair; typedef std::vector<VRCommandPair> VRCommandPairs; @@ -94,12 +94,12 @@ class HelpPromptManagerImpl : public HelpPromptManager { const bool is_resumption) OVERRIDE; /** - * @brief Stop constructing vrHelp and/or helpPrompt if they are present in - * message - * @param msg containing GlobalProperties - * @param is_response determines is the request or response for the for - * the SetGlobalPropertiesRequest - */ + * @brief Stop constructing vrHelp and/or helpPrompt if they are present in + * message + * @param msg containing GlobalProperties + * @param is_response determines is the request or response for the for + * the SetGlobalPropertiesRequest + */ void OnSetGlobalPropertiesReceived(const smart_objects::SmartObject& msg, const bool is_response) OVERRIDE; diff --git a/src/components/application_manager/include/application_manager/helpers/application_helper.h b/src/components/application_manager/include/application_manager/helpers/application_helper.h index 145bef659e..18267c9e7f 100644 --- a/src/components/application_manager/include/application_manager/helpers/application_helper.h +++ b/src/components/application_manager/include/application_manager/helpers/application_helper.h @@ -57,6 +57,18 @@ ApplicationSharedPtr FindApp(DataAccessor<ApplicationSet> accessor, return app; } +template <class UnaryPredicate> +ApplicationSharedPtr FindPendingApp( + DataAccessor<AppsWaitRegistrationSet> accessor, UnaryPredicate finder) { + AppsWaitRegistrationSet::iterator it = std::find_if( + accessor.GetData().begin(), accessor.GetData().end(), finder); + if (accessor.GetData().end() == it) { + return ApplicationSharedPtr(); + } + ApplicationSharedPtr app = *it; + return app; +} + /** * Helper function for lookup through applications list and returning all * applications satisfying predicate logic diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h index 9380fb41ac..94fc293c3e 100644 --- a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h +++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h @@ -28,18 +28,18 @@ * 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_IMPL_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_IMPL_H_ #include "application_manager/hmi_capabilities.h" +#include "application_manager/hmi_language_handler.h" #include "interfaces/HMI_API.h" #include "interfaces/MOBILE_API.h" #include "json/json.h" -#include "utils/macro.h" -#include "application_manager/hmi_language_handler.h" #include "smart_objects/smart_object.h" +#include "utils/macro.h" namespace resumption { class LastState; diff --git a/src/components/application_manager/include/application_manager/hmi_interfaces.h b/src/components/application_manager/include/application_manager/hmi_interfaces.h index 59ec32694a..5f172b415d 100644 --- a/src/components/application_manager/include/application_manager/hmi_interfaces.h +++ b/src/components/application_manager/include/application_manager/hmi_interfaces.h @@ -60,7 +60,8 @@ class HmiInterfaces { HMI_INTERFACE_Navigation, HMI_INTERFACE_VehicleInfo, HMI_INTERFACE_SDL, - HMI_INTERFACE_RC + HMI_INTERFACE_RC, + HMI_INTERFACE_AppService }; /** diff --git a/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h b/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h index 2b2d1e1361..3202d44e1e 100644 --- a/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h +++ b/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h @@ -34,8 +34,8 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_INTERFACES_IMPL_H_ #include <map> #include "application_manager/hmi_interfaces.h" -#include "utils/macro.h" #include "utils/lock.h" +#include "utils/macro.h" /** * @brief The HmiInterfacesImpl class handles * hmi interfaces states diff --git a/src/components/application_manager/include/application_manager/hmi_language_handler.h b/src/components/application_manager/include/application_manager/hmi_language_handler.h index 6158cb4585..edf0759114 100644 --- a/src/components/application_manager/include/application_manager/hmi_language_handler.h +++ b/src/components/application_manager/include/application_manager/hmi_language_handler.h @@ -28,15 +28,15 @@ * 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_LANGUAGE_HANDLER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_LANGUAGE_HANDLER_H_ #include "application_manager/event_engine/event_observer.h" -#include "utils/lock.h" #include "interfaces/HMI_API.h" #include "smart_objects/smart_object.h" +#include "utils/lock.h" namespace resumption { class LastState; @@ -56,8 +56,8 @@ class HMILanguageHandler : public event_engine::EventObserver { typedef std::map<uint32_t, bool> Apps; /** - * @brief System interfaces - */ + * @brief System interfaces + */ enum Interface { INTERFACE_UI, INTERFACE_VR, INTERFACE_TTS }; /** diff --git a/src/components/application_manager/include/application_manager/hmi_state.h b/src/components/application_manager/include/application_manager/hmi_state.h index 07d9c8dc23..b6a4c180e6 100644 --- a/src/components/application_manager/include/application_manager/hmi_state.h +++ b/src/components/application_manager/include/application_manager/hmi_state.h @@ -48,11 +48,11 @@ class Application; typedef std::shared_ptr<HmiState> HmiStatePtr; /** -* @brief The HmiState class -* Handle Hmi state of application (hmi level, -* audio streaming state, system context) -* -*/ + * @brief The HmiState class + * Handle Hmi state of application (hmi level, + * audio streaming state, system context) + * + */ class HmiState { friend std::ostream& operator<<(std::ostream& os, const HmiState& src); @@ -207,7 +207,7 @@ class HmiState { } protected: - std::shared_ptr<Application> app_; + uint32_t hmi_app_id_; StateID state_id_; const ApplicationManager& app_mngr_; HmiStatePtr parent_; diff --git a/src/components/application_manager/include/application_manager/message.h b/src/components/application_manager/include/application_manager/message.h index 1c319cf204..7525ff1aa3 100644 --- a/src/components/application_manager/include/application_manager/message.h +++ b/src/components/application_manager/include/application_manager/message.h @@ -36,9 +36,9 @@ #include <string> #include <vector> +#include "protocol/common.h" #include "protocol/message_priority.h" #include "protocol/rpc_type.h" -#include "protocol/common.h" #include "smart_objects/smart_object.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/message_helper.h b/src/components/application_manager/include/application_manager/message_helper.h index 609b240301..2671278442 100644 --- a/src/components/application_manager/include/application_manager/message_helper.h +++ b/src/components/application_manager/include/application_manager/message_helper.h @@ -37,20 +37,20 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_MESSAGE_HELPER_H_ #include <map> -#include <vector> #include <string> +#include <vector> -#include "interfaces/MOBILE_API.h" -#include "interfaces/HMI_API.h" -#include "utils/macro.h" -#include "connection_handler/device.h" +#include <application_manager/smart_object_keys.h> #include "application_manager/application.h" +#include "application_manager/policies/policy_handler_interface.h" +#include "connection_handler/device.h" +#include "interfaces/HMI_API.h" +#include "interfaces/MOBILE_API.h" #include "policy/policy_types.h" #include "protocol_handler/session_observer.h" -#include "application_manager/policies/policy_handler_interface.h" #include "smart_objects/smart_object.h" #include "transport_manager/common.h" -#include <application_manager/smart_object_keys.h> +#include "utils/macro.h" namespace policy { class PolicyHandlerInterface; @@ -73,18 +73,18 @@ typedef std::map<std::string, mobile_apis::VehicleDataType::eType> VehicleData; class MessageHelper { public: /** - * @brief CreateNotification creates basic mobile notification smart object - * @param function_id Notification function ID - * @param app_id application to send notification - * @return basic mobile notification smart object - */ + * @brief CreateNotification creates basic mobile notification smart object + * @param function_id Notification function ID + * @param app_id application to send notification + * @return basic mobile notification smart object + */ static smart_objects::SmartObjectSPtr CreateNotification( mobile_apis::FunctionID::eType function_id, uint32_t app_id); /** - * @brief CreateHMINotification creates basic hmi notification smart object - * @param function_id Notification function ID - * @return basic hmi notification smart object - */ + * @brief CreateHMINotification creates basic hmi notification smart object + * @param function_id Notification function ID + * @return basic hmi notification smart object + */ static smart_objects::SmartObjectSPtr CreateHMINotification( hmi_apis::FunctionID::eType function_id); @@ -118,18 +118,18 @@ class MessageHelper { static void SendOnLanguageChangeToMobile(uint32_t connection_key); /** - * @brief Sends DecryptCertificate request to HMI - * @param file_name path to file containing encrypted certificate - */ + * @brief Sends DecryptCertificate request to HMI + * @param file_name path to file containing encrypted certificate + */ static void SendDecryptCertificateToHMI(const std::string& file_name, ApplicationManager& app_mngr); /** - * @brief SendGetSystemTimeRequest sends mentioned request to HMI. - * @param correlation_id the message correlation id, required for proper - * response processing. - * @param app_mngr - */ + * @brief SendGetSystemTimeRequest sends mentioned request to HMI. + * @param correlation_id the message correlation id, required for proper + * response processing. + * @param app_mngr + */ static void SendGetSystemTimeRequest(const uint32_t correlation_id, ApplicationManager& app_mngr); @@ -205,17 +205,17 @@ class MessageHelper { const std::string& hmi_level); /* - * @brief Used to obtain string representation of app's - * HMI Level. - * @param hmi_level Desired HMI Level - */ + * @brief Used to obtain string representation of app's + * HMI Level. + * @param hmi_level Desired HMI Level + */ static std::string StringifiedHMILevel( const mobile_apis::HMILevel::eType hmi_level); /* - * @brief Used to obtain function name by its id - * @param function_id Function ID - */ + * @brief Used to obtain function name by its id + * @param function_id Function ID + */ static std::string StringifiedFunctionID( mobile_apis::FunctionID::eType function_id); @@ -348,40 +348,41 @@ class MessageHelper { bool is_unexpected_disconnect, ApplicationManager& app_mngr); - static ns_smart_device_link::ns_smart_objects::SmartObjectSPtr - GetBCActivateAppRequestToHMI( + static smart_objects::SmartObjectSPtr GetBCActivateAppRequestToHMI( ApplicationConstSharedPtr app, - const protocol_handler::SessionObserver& session_observer, const policy::PolicyHandlerInterface& policy_handler, hmi_apis::Common_HMILevel::eType level, bool send_policy_priority, ApplicationManager& app_mngr); + static smart_objects::SmartObjectSPtr GetBCCloseApplicationRequestToHMI( + ApplicationConstSharedPtr app, ApplicationManager& app_mngr); + static void SendOnResumeAudioSourceToHMI(const uint32_t app_id, ApplicationManager& app_mngr); /** - * @brief Send SDL_ActivateApp response to HMI - * @param permissions response parameters - */ + * @brief Send SDL_ActivateApp response to HMI + * @param permissions response parameters + */ static void SendSDLActivateAppResponse(policy::AppPermissions& permissions, uint32_t correlation_id, ApplicationManager& app_mngr); /** - * @brief Send OnSDLConsentNeeded to HMI for device data consent by user - * @param device_info Device info, e.g. mac, handle, name - */ + * @brief Send OnSDLConsentNeeded to HMI for device data consent by user + * @param device_info Device info, e.g. mac, handle, name + */ static void SendOnSDLConsentNeeded(const policy::DeviceParams& device_info, ApplicationManager& app_man); /** - * @brief Send request to SyncP process to read file and send - * Policy Table Snapshot using Retry Strategy - * @param file_path Path to file with PTS - * @param timeout Timeout to wait for PTU in seconds - * @param retries Seconds between retries - */ + * @brief Send request to SyncP process to read file and send + * Policy Table Snapshot using Retry Strategy + * @param file_path Path to file with PTS + * @param timeout Timeout to wait for PTU in seconds + * @param retries Seconds between retries + */ static void SendPolicyUpdate(const std::string& file_path, const uint32_t timeout, const std::vector<int>& retries, @@ -445,13 +446,13 @@ class MessageHelper { static void SendNaviStopStream(int32_t app_id, ApplicationManager& app_mngr); /* - * @brief Send notification for Update of Policy Table - * with PT Snapshot. - * @param connection_key Id of application to send message to - * @param policy_data PT Snapshot - * @param url If empty string, no URL is provided - * @param timeout If -1 no timeout is provdied - */ + * @brief Send notification for Update of Policy Table + * with PT Snapshot. + * @param connection_key Id of application to send message to + * @param policy_data PT Snapshot + * @param url If empty string, no URL is provided + * @param timeout If -1 no timeout is provdied + */ static void SendPolicySnapshotNotification( uint32_t connection_key, const std::vector<uint8_t>& policy_data, @@ -485,20 +486,20 @@ class MessageHelper { ApplicationManager& app_man); /* - * @brief Send notification to mobile on application permissions update - * @param connection_key Id of application to send message to - * @param permissions updated permissions for application - */ + * @brief Send notification to mobile on application permissions update + * @param connection_key Id of application to send message to + * @param permissions updated permissions for application + */ static void SendOnPermissionsChangeNotification( uint32_t connection_key, const policy::Permissions& permissions, ApplicationManager& app_mngr); /* - * @brief Send notification to HMI on application permissions update - * @param connection_key Id of application to send message to - * @param permissions updated permissions for application - */ + * @brief Send notification to HMI on application permissions update + * @param connection_key Id of application to send message to + * @param permissions updated permissions for application + */ static void SendOnAppPermissionsChangedNotification( uint32_t connection_key, const policy::AppPermissions& permissions, @@ -610,12 +611,12 @@ class MessageHelper { ApplicationManager& app_mngr); /** - * @brief Verify image and add image file full path - * and add path, although the image doesn't exist - * @param SmartObject with image - * @param app current application - * @return verification result - */ + * @brief Verify image and add image file full path + * and add path, although the image doesn't exist + * @param SmartObject with image + * @param app current application + * @return verification result + */ static void ApplyImagePath(smart_objects::SmartObject& image, ApplicationConstSharedPtr app, ApplicationManager& app_mngr); @@ -636,10 +637,10 @@ class MessageHelper { ApplicationManager& app_mngr); /** - * @brief Stores whether each choice in a set has the vrCommands parameter - * MIXED means some choices have vrCommands and others don't - * ALL means all do, NONE means none do - */ + * @brief Stores whether each choice in a set has the vrCommands parameter + * MIXED means some choices have vrCommands and others don't + * ALL means all do, NONE means none do + */ enum ChoiceSetVRCommandsStatus { MIXED, ALL, NONE }; /** @@ -786,6 +787,14 @@ class MessageHelper { static hmi_apis::Common_Language::eType CommonLanguageFromString( const std::string& language); + /** + * @brief CommonLightNameFromString convert string to LightName enum value + * @param lightName string to convert + * @return value LightName enum value + */ + static hmi_apis::Common_LightName::eType CommonLightNameFromString( + const std::string& lightName); + static smart_objects::SmartObjectSPtr GetOnAppInterfaceUnregisteredNotificationToMobile( int32_t connection_key, @@ -878,6 +887,12 @@ class MessageHelper { static smart_objects::SmartObjectSPtr CreateMessageForHMI( hmi_apis::messageType::eType message_type, const uint32_t correlation_id); + static smart_objects::SmartObject CreateAppServiceCapabilities( + std::vector<smart_objects::SmartObject>& all_services); + + static void BroadcastCapabilityUpdate(smart_objects::SmartObject& msg_params, + ApplicationManager& app_mngr); + private: /** * @brief Allows to fill SO according to the current permissions. diff --git a/src/components/application_manager/include/application_manager/mobile_message_handler.h b/src/components/application_manager/include/application_manager/mobile_message_handler.h index b2ad963f46..3b02424e1f 100644 --- a/src/components/application_manager/include/application_manager/mobile_message_handler.h +++ b/src/components/application_manager/include/application_manager/mobile_message_handler.h @@ -33,9 +33,9 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_MOBILE_MESSAGE_HANDLER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_MOBILE_MESSAGE_HANDLER_H_ -#include "utils/macro.h" -#include "protocol/common.h" #include "application_manager/message.h" +#include "protocol/common.h" +#include "utils/macro.h" namespace application_manager { typedef std::shared_ptr<application_manager::Message> MobileMessage; diff --git a/src/components/application_manager/include/application_manager/plugin_manager/plugin_keys.h b/src/components/application_manager/include/application_manager/plugin_manager/plugin_keys.h new file mode 100644 index 0000000000..96a7f27064 --- /dev/null +++ b/src/components/application_manager/include/application_manager/plugin_manager/plugin_keys.h @@ -0,0 +1,48 @@ +/* + Copyright (c) 2019, Ford Motor Company, Livio + 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 the copyright holders nor the names of their + 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_PLUGIN_KEYS_H +#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_PLUGIN_KEYS_H + +namespace application_manager { +namespace plugin_manager { + +namespace plugin_names { +extern const char* vehicle_info_rpc_plugin; +extern const char* app_service_rpc_plugin; +extern const char* rc_rpc_plugin; +extern const char* sdl_rpc_plugin; +} // namespace plugin_names + +} // namespace plugin_manager +} // namespace application_manager +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_PLUGIN_KEYS_H diff --git a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h index 09a412b2ac..aea0361f19 100644 --- a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h +++ b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h @@ -33,12 +33,12 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_RPC_PLUGIN_H #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_RPC_PLUGIN_H #include <memory> -#include "utils/macro.h" -#include "application_manager/commands/command.h" #include "application_manager/application.h" -#include "application_manager/rpc_service.h" +#include "application_manager/commands/command.h" #include "application_manager/hmi_capabilities.h" #include "application_manager/policies/policy_handler_interface.h" +#include "application_manager/rpc_service.h" +#include "utils/macro.h" namespace application_manager { class CommandFactory; @@ -68,13 +68,13 @@ class RPCPlugin { virtual ~RPCPlugin() {} /** - * @brief Command initialization function - * @param app_manager ApplicationManager - * @param rpc_service RPCService - * @param hmi_capabilities HMICapabilities - * @param policy_handler PolicyHandlerInterface - * @return true in case initialization was succesful, false otherwise. - **/ + * @brief Command initialization function + * @param app_manager ApplicationManager + * @param rpc_service RPCService + * @param hmi_capabilities HMICapabilities + * @param policy_handler PolicyHandlerInterface + * @return true in case initialization was succesful, false otherwise. + **/ virtual bool Init(ApplicationManager& app_manager, rpc_service::RPCService& rpc_service, HMICapabilities& hmi_capabilities, diff --git a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager.h b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager.h index 692d296607..b658e40b1c 100644 --- a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager.h +++ b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager.h @@ -33,10 +33,10 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_RPC_PLUGIN_MANAGER_H #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_RPC_PLUGIN_MANAGER_H #include <cstdint> -#include <string> +#include <functional> #include <memory> +#include <string> #include <vector> -#include <functional> #include "application_manager/plugin_manager/rpc_plugin.h" #include "utils/optional.h" diff --git a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h index 5f85d45b6e..885181e9c4 100644 --- a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h +++ b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h @@ -32,11 +32,11 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_RPC_PLUGIN_MANAGER_IMPL_H #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_PLUGIN_MANAGER_RPC_PLUGIN_MANAGER_IMPL_H -#include "application_manager/plugin_manager/rpc_plugin_manager.h" #include "application_manager/application_manager.h" -#include "application_manager/rpc_service.h" #include "application_manager/hmi_capabilities.h" +#include "application_manager/plugin_manager/rpc_plugin_manager.h" #include "application_manager/policies/policy_handler_interface.h" +#include "application_manager/rpc_service.h" #include "utils/optional.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h b/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h index f501598e0f..114b4e2d77 100644 --- a/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h +++ b/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h @@ -33,19 +33,19 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICIES_DELEGATES_APP_PERMISSION_DELEGATE_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICIES_DELEGATES_APP_PERMISSION_DELEGATE_H_ +#include "utils/conditional_variable.h" #include "utils/threads/thread.h" #include "utils/threads/thread_delegate.h" -#include "utils/conditional_variable.h" -#include "policy/policy_types.h" #include "application_manager/policies/policy_handler_interface.h" +#include "policy/policy_types.h" namespace policy { class PolicyHandler; /** -*@brief The AppPermissionDelegate class allows to call OnAppPermissionConsent -*in async way. -*/ + *@brief The AppPermissionDelegate class allows to call OnAppPermissionConsent + *in async way. + */ class AppPermissionDelegate : public threads::ThreadDelegate { public: /** diff --git a/src/components/application_manager/include/application_manager/policies/external/delegates/statistics_delegate.h b/src/components/application_manager/include/application_manager/policies/external/delegates/statistics_delegate.h index 2fe4265f54..38a60b29c4 100644 --- a/src/components/application_manager/include/application_manager/policies/external/delegates/statistics_delegate.h +++ b/src/components/application_manager/include/application_manager/policies/external/delegates/statistics_delegate.h @@ -35,10 +35,10 @@ #include <string> +#include "application_manager/usage_statistics.h" +#include "utils/conditional_variable.h" #include "utils/threads/thread.h" #include "utils/threads/thread_delegate.h" -#include "utils/conditional_variable.h" -#include "application_manager/usage_statistics.h" namespace policy { diff --git a/src/components/application_manager/include/application_manager/policies/external/policy_event_observer.h b/src/components/application_manager/include/application_manager/policies/external/policy_event_observer.h index 8c904bf513..7d71611a3c 100644 --- a/src/components/application_manager/include/application_manager/policies/external/policy_event_observer.h +++ b/src/components/application_manager/include/application_manager/policies/external/policy_event_observer.h @@ -33,8 +33,8 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICIES_POLICY_EVENT_OBSERVER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICIES_POLICY_EVENT_OBSERVER_H_ -#include "smart_objects/smart_object.h" #include "application_manager/event_engine/event_observer.h" +#include "smart_objects/smart_object.h" #include "utils/lock.h" namespace policy { @@ -48,6 +48,7 @@ class PolicyEventObserver application_manager::event_engine::EventDispatcher& event_dispatcher); void set_policy_handler(policy::PolicyHandlerInterface* const policy_handler); void on_event(const application_manager::event_engine::Event& event); + void on_event(const application_manager::event_engine::MobileEvent& event); void subscribe_on_event( const application_manager::event_engine::Event::EventID& event_id, int32_t hmi_correlation_id = 0); 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 c8f3bcf888..abffd3eebb 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 @@ -33,28 +33,28 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICIES_POLICY_HANDLER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICIES_POLICY_HANDLER_H_ -#include <string> +#include <stdint.h> +#include <list> #include <map> #include <set> +#include <string> #include <vector> -#include <list> -#include <stdint.h> -#include "policy/policy_manager.h" #include "application_manager/application.h" -#include "application_manager/policies/policy_handler_interface.h" -#include "application_manager/policies/policy_event_observer.h" #include "application_manager/policies/delegates/statistics_delegate.h" +#include "application_manager/policies/policy_event_observer.h" +#include "application_manager/policies/policy_handler_interface.h" #include "application_manager/policies/policy_handler_observer.h" -#include "utils/logger.h" -#include "utils/threads/thread.h" -#include "utils/threads/thread_delegate.h" +#include "policy/policy_manager.h" +#include "policy/policy_settings.h" +#include "policy/usage_statistics/statistics_manager.h" #include "utils/conditional_variable.h" -#include "utils/rwlock.h" #include "utils/custom_string.h" -#include "policy/usage_statistics/statistics_manager.h" +#include "utils/logger.h" +#include "utils/rwlock.h" #include "utils/threads/async_runner.h" -#include "policy/policy_settings.h" +#include "utils/threads/thread.h" +#include "utils/threads/thread_delegate.h" namespace Json { class Value; @@ -187,6 +187,8 @@ class PolicyHandler : public PolicyHandlerInterface, void GetUpdateUrls(const uint32_t service_type, EndpointUrls& out_end_points) OVERRIDE; virtual std::string GetLockScreenIconUrl() const OVERRIDE; + virtual std::string GetIconUrl( + const std::string& policy_app_id) const OVERRIDE; uint32_t NextRetryTimeout() OVERRIDE; /** @@ -398,6 +400,88 @@ class PolicyHandler : public PolicyHandlerInterface, custom_str::CustomString GetAppName( const std::string& policy_app_id) OVERRIDE; + /** + * @brief Get a list of enabled cloud applications + * @param enabled_apps List filled with the policy app id of each enabled + * cloud application + */ + void GetEnabledCloudApps( + std::vector<std::string>& enabled_apps) const OVERRIDE; + + /** + * @brief Checks if a given application is an enabled cloud application + * @param policy_app_id Unique application id + * @return true, if the application is an enabled cloud application, + * otherwise - false + */ + const bool CheckCloudAppEnabled( + const std::string& policy_app_id) const OVERRIDE; + + /** + * @brief Get cloud app policy information, all fields that aren't set for a + * given app will be filled with empty strings + * @param policy_app_id Unique application id + * @param enabled Whether or not the app is enabled + * @param endpoint Filled with the endpoint used to connect to the cloud + * application + * @param certificate Filled with the certificate used to for creating a + * secure connection to the cloud application + * @param auth_token Filled with the token used for authentication when + * reconnecting to the cloud app + * @param cloud_transport_type Filled with the transport type used by the + * cloud application (ex. "WSS") + * @param hybrid_app_preference Filled with the hybrid app preference for the + * cloud application set by the user + */ + bool GetCloudAppParameters(const std::string& policy_app_id, + bool& enabled, + std::string& endpoint, + std::string& certificate, + std::string& auth_token, + std::string& cloud_transport_type, + std::string& hybrid_app_preference) const OVERRIDE; + + /** + * @brief Callback for when a SetCloudAppProperties message is received from a + * mobile app + * @param message The SetCloudAppProperties message + */ + void OnSetCloudAppProperties( + const smart_objects::SmartObject& message) OVERRIDE; + + /** + * @brief Get app service parameters from the policy table + * @param policy_app_id Unique application id + * @param app_service_parameters Pointer to struct containing all app service + * information + */ + void GetAppServiceParameters(const std::string& policy_app_id, + policy_table::AppServiceParameters* + app_service_parameters) const OVERRIDE; + /** + * @brief Check app service parameters from an app against policies + * @param policy_app_id Unique application id + * @param requested_service_name Service name published by app service + * provider + * @param requested_service_type Service type published by app service + * provider + * @param requested_handled_rpcs Vector of requested function ids an app + * service wants to handle from consumers + */ + bool CheckAppServiceParameters( + const std::string& policy_app_id, + const std::string& requested_service_name, + const std::string& requested_service_type, + smart_objects::SmartArray* requested_handled_rpcs) const OVERRIDE; + + /** + * @brief Check if an app can send unknown rpc requests to an app service + * provider + * @param policy_app_id Unique application id + */ + bool UnknownRPCPassthroughAllowed( + const std::string& policy_app_id) const OVERRIDE; + virtual void OnUpdateHMIAppType( std::map<std::string, StringArray> app_hmi_types) OVERRIDE; @@ -406,6 +490,9 @@ class PolicyHandler : public PolicyHandlerInterface, #ifdef EXTERNAL_PROPRIETARY_MODE void OnCertificateDecrypted(bool is_succeeded) OVERRIDE; #endif // EXTERNAL_PROPRIETARY_MODE + void OnAuthTokenUpdated(const std::string& policy_app_id, + const std::string& auth_token); + virtual bool CanUpdate() OVERRIDE; virtual void OnDeviceConsentChanged(const std::string& device_id, @@ -724,10 +811,10 @@ class PolicyHandler : public PolicyHandlerInterface, static const std::string kLibrary; /** - * @brief Collects currently registered applications ids linked to their - * device id - * @param out_links Collection of device_id-to-app_id links - */ + * @brief Collects currently registered applications ids linked to their + * device id + * @param out_links Collection of device_id-to-app_id links + */ void GetRegisteredLinks(std::map<std::string, std::string>& out_links) const; private: diff --git a/src/components/application_manager/include/application_manager/policies/regular/delegates/app_permission_delegate.h b/src/components/application_manager/include/application_manager/policies/regular/delegates/app_permission_delegate.h index 6913f5038e..7e83aefe81 100644 --- a/src/components/application_manager/include/application_manager/policies/regular/delegates/app_permission_delegate.h +++ b/src/components/application_manager/include/application_manager/policies/regular/delegates/app_permission_delegate.h @@ -33,18 +33,18 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_DELEGATES_APP_PERMISSION_DELEGATE_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_DELEGATES_APP_PERMISSION_DELEGATE_H_ +#include "utils/conditional_variable.h" #include "utils/threads/thread.h" #include "utils/threads/thread_delegate.h" -#include "utils/conditional_variable.h" -#include "policy/policy_types.h" #include "application_manager/policies/policy_handler_interface.h" +#include "policy/policy_types.h" namespace policy { /** -*@brief The AppPermissionDelegate class allows to call OnAppPermissionConsent -*in async way. -*/ + *@brief The AppPermissionDelegate class allows to call OnAppPermissionConsent + *in async way. + */ class AppPermissionDelegate : public threads::ThreadDelegate { public: /** diff --git a/src/components/application_manager/include/application_manager/policies/regular/delegates/statistics_delegate.h b/src/components/application_manager/include/application_manager/policies/regular/delegates/statistics_delegate.h index 3dc9ad925c..74d88fac69 100644 --- a/src/components/application_manager/include/application_manager/policies/regular/delegates/statistics_delegate.h +++ b/src/components/application_manager/include/application_manager/policies/regular/delegates/statistics_delegate.h @@ -35,10 +35,10 @@ #include <string> +#include "application_manager/usage_statistics.h" +#include "utils/conditional_variable.h" #include "utils/threads/thread.h" #include "utils/threads/thread_delegate.h" -#include "utils/conditional_variable.h" -#include "application_manager/usage_statistics.h" namespace policy { diff --git a/src/components/application_manager/include/application_manager/policies/regular/policy_event_observer.h b/src/components/application_manager/include/application_manager/policies/regular/policy_event_observer.h index f4924111b3..4a104812a4 100644 --- a/src/components/application_manager/include/application_manager/policies/regular/policy_event_observer.h +++ b/src/components/application_manager/include/application_manager/policies/regular/policy_event_observer.h @@ -48,6 +48,7 @@ class PolicyEventObserver application_manager::event_engine::EventDispatcher& event_dispatcher); void set_policy_handler(policy::PolicyHandlerInterface* const policy_handler); void on_event(const application_manager::event_engine::Event& event); + void on_event(const application_manager::event_engine::MobileEvent& event); void subscribe_on_event( const application_manager::event_engine::Event::EventID& event_id, int32_t hmi_correlation_id = 0); diff --git a/src/components/application_manager/include/application_manager/policies/regular/policy_handler_observer.h b/src/components/application_manager/include/application_manager/policies/regular/policy_handler_observer.h index 07d234f036..3c4dce2fbc 100644 --- a/src/components/application_manager/include/application_manager/policies/regular/policy_handler_observer.h +++ b/src/components/application_manager/include/application_manager/policies/regular/policy_handler_observer.h @@ -33,9 +33,9 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICY_HANDLER_OBSERVER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POLICY_HANDLER_OBSERVER_H_ -#include <vector> -#include <string> #include <map> +#include <string> +#include <vector> namespace policy { @@ -48,6 +48,9 @@ class PolicyHandlerObserver { return false; } + virtual void OnAuthTokenUpdated(const std::string& policy_app_id, + const std::string& auth_token) {} + virtual void OnPTUFinished(const bool ptu_result) {} virtual ~PolicyHandlerObserver() {} diff --git a/src/components/application_manager/include/application_manager/request_controller.h b/src/components/application_manager/include/application_manager/request_controller.h index ea8d95a92a..8a3c90061e 100644 --- a/src/components/application_manager/include/application_manager/request_controller.h +++ b/src/components/application_manager/include/application_manager/request_controller.h @@ -34,21 +34,21 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_REQUEST_CONTROLLER_H_ #include <climits> -#include <vector> #include <list> +#include <vector> #include "utils/lock.h" -#include "utils/threads/thread.h" #include "utils/conditional_variable.h" +#include "utils/threads/thread.h" #include "utils/threads/thread_delegate.h" #include "utils/timer.h" -#include "interfaces/MOBILE_API.h" #include "interfaces/HMI_API.h" +#include "interfaces/MOBILE_API.h" -#include "application_manager/request_info.h" #include "application_manager/request_controller_settings.h" +#include "application_manager/request_info.h" #include "application_manager/request_tracker.h" namespace application_manager { @@ -56,14 +56,14 @@ namespace application_manager { namespace request_controller { /** -* @brief RequestController class is used to control currently active mobile -* requests. -*/ + * @brief RequestController class is used to control currently active mobile + * requests. + */ class RequestController { public: /** - * @brief Result code for addRequest - */ + * @brief Result code for addRequest + */ enum TResult { SUCCESS = 0, TOO_MANY_REQUESTS, @@ -73,8 +73,8 @@ class RequestController { }; /** - * @brief Thread pool state - */ + * @brief Thread pool state + */ enum TPoolState { UNDEFINED = 0, STARTED, @@ -84,121 +84,121 @@ class RequestController { // Methods /** - * @brief Class constructor - * - */ + * @brief Class constructor + * + */ RequestController(const RequestControlerSettings& settings); /** - * @brief Class destructor - * - */ + * @brief Class destructor + * + */ virtual ~RequestController(); /** - * @brief Initialize thread pool - * - */ + * @brief Initialize thread pool + * + */ void InitializeThreadpool(); /** - * @brief Destroy thread pool - * - */ + * @brief Destroy thread pool + * + */ void DestroyThreadpool(); /** - * @brief Check if max request amount wasn't exceed and adds request to queue. - * - * @param request Active mobile request - * @param hmi_level Current application hmi_level - * - * @return Result code - * - */ + * @brief Check if max request amount wasn't exceed and adds request to queue. + * + * @param request Active mobile request + * @param hmi_level Current application hmi_level + * + * @return Result code + * + */ TResult addMobileRequest(const RequestPtr request, const mobile_apis::HMILevel::eType& hmi_level); /** - * @brief Store HMI request until response or timeout won't remove it - * - * @param request Active hmi request - * @return Result code - * - */ + * @brief Store HMI request until response or timeout won't remove it + * + * @param request Active hmi request + * @return Result code + * + */ TResult addHMIRequest(const RequestPtr request); /** - * @ Add notification to collection - * - * @param ptr Reference to shared pointer that point on hmi notification - */ + * @ Add notification to collection + * + * @param ptr Reference to shared pointer that point on hmi notification + */ void addNotification(const RequestPtr ptr); /** - * @brief Removes request from queue - * - * @param correlation_id Active request correlation ID, - * @param connection_key Active request connection key (0 for HMI requersts) - * @param function_id Active request function id - * @param force_terminate if true, request controller will terminate - * even if not allowed by request - */ + * @brief Removes request from queue + * + * @param correlation_id Active request correlation ID, + * @param connection_key Active request connection key (0 for HMI requersts) + * @param function_id Active request function id + * @param force_terminate if true, request controller will terminate + * even if not allowed by request + */ void TerminateRequest(const uint32_t correlation_id, const uint32_t connection_key, const int32_t function_id, bool force_terminate = false); /** - * @brief Removes request from queue - * - * @param mobile_correlation_id Active mobile request correlation ID - * - */ + * @brief Removes request from queue + * + * @param mobile_correlation_id Active mobile request correlation ID + * + */ void OnMobileResponse(const uint32_t mobile_correlation_id, const uint32_t connection_key, const int32_t function_id); /** - * @brief Removes request from queue - * - * @param mobile_correlation_id Active mobile request correlation ID - * - */ + * @brief Removes request from queue + * + * @param mobile_correlation_id Active mobile request correlation ID + * + */ void OnHMIResponse(const uint32_t correlation_id, const int32_t function_id); /** - * @ Add notification to collection - * - * @param ptr Reference to shared pointer that point on hmi notification - */ + * @ Add notification to collection + * + * @param ptr Reference to shared pointer that point on hmi notification + */ void removeNotification(const commands::Command* notification); /** - * @brief Removes all requests from queue for specified application - * - * @param app_id Mobile application ID (app_id) - * - */ + * @brief Removes all requests from queue for specified application + * + * @param app_id Mobile application ID (app_id) + * + */ void terminateAppRequests(const uint32_t& app_id); /** - * @brief Terminates all requests from HMI - */ + * @brief Terminates all requests from HMI + */ void terminateAllHMIRequests(); /** - * @brief Terminates all requests from Mobile - */ + * @brief Terminates all requests from Mobile + */ void terminateAllMobileRequests(); /** - * @brief Updates request timeout - * - * @param app_id Connection key of application - * @param mobile_correlation_id Correlation ID of the mobile request - * @param new_timeout_value New timeout to be set in milliseconds - */ + * @brief Updates request timeout + * + * @param app_id Connection key of application + * @param mobile_correlation_id Correlation ID of the mobile request + * @param new_timeout_value New timeout to be set in milliseconds + */ void updateRequestTimeout(const uint32_t& app_id, const uint32_t& mobile_correlation_id, const uint32_t& new_timeout); @@ -217,13 +217,13 @@ class RequestController { protected: /** - * @brief Timer callback which handles all request timeouts - */ + * @brief Timer callback which handles all request timeouts + */ void TimeoutThread(); /** - * @brief Signal timer condition variable - */ + * @brief Signal timer condition variable + */ void NotifyTimer(); void terminateWaitingForExecutionAppRequests(const uint32_t& app_id); @@ -285,8 +285,8 @@ class RequestController { RequestTracker request_tracker_; /** - * @brief Set of HMI notifications with timeout. - */ + * @brief Set of HMI notifications with timeout. + */ std::list<RequestPtr> notification_list_; /** diff --git a/src/components/application_manager/include/application_manager/request_info.h b/src/components/application_manager/include/application_manager/request_info.h index be28bad63c..1b140e2108 100644 --- a/src/components/application_manager/include/application_manager/request_info.h +++ b/src/components/application_manager/include/application_manager/request_info.h @@ -29,9 +29,9 @@ * 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. -*/ + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_REQUEST_INFO_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_REQUEST_INFO_H_ @@ -268,9 +268,9 @@ class RequestInfoSet { }; /** -* @brief Structure used in std algorithms to determine amount of request -* during time scale -*/ + * @brief Structure used in std algorithms to determine amount of request + * during time scale + */ struct TimeScale { TimeScale(const date_time::TimeDuration& start, const date_time::TimeDuration& end, diff --git a/src/components/application_manager/include/application_manager/request_tracker.h b/src/components/application_manager/include/application_manager/request_tracker.h index b351e716a7..72d04abf4a 100644 --- a/src/components/application_manager/include/application_manager/request_tracker.h +++ b/src/components/application_manager/include/application_manager/request_tracker.h @@ -1,39 +1,39 @@ /* - * Copyright (c) 2017, 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) + * Copyright (c) 2017, 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_REQUEST_TRACKER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_REQUEST_TRACKER_H_ -#include <string> #include <map> +#include <string> #include <vector> #include "application_manager/request_controller_settings.h" #include "interfaces/MOBILE_API.h" diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h index f9a60c862b..0b744eec7f 100644 --- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h +++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h @@ -42,7 +42,7 @@ class ApplicationManager; class Application; typedef std::shared_ptr<Application> ApplicationSharedPtr; typedef std::shared_ptr<const Application> ApplicationConstSharedPtr; -} +} // namespace application_manager namespace app_mngr = application_manager; namespace resumption { diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h index e749118140..a70e2453de 100644 --- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h +++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h @@ -36,18 +36,18 @@ #include "application_manager/resumption/resume_ctrl.h" #include <stdint.h> -#include <vector> +#include <list> #include <map> #include <set> -#include <list> +#include <vector> +#include "application_manager/application.h" +#include "application_manager/event_engine/event_observer.h" +#include "application_manager/resumption/resumption_data.h" #include "interfaces/HMI_API.h" #include "interfaces/HMI_API_schema.h" #include "interfaces/MOBILE_API_schema.h" -#include "application_manager/event_engine/event_observer.h" #include "smart_objects/smart_object.h" -#include "application_manager/application.h" -#include "application_manager/resumption/resumption_data.h" #include "utils/timer.h" namespace resumption { @@ -322,10 +322,10 @@ class ResumeCtrlImpl : public ResumeCtrl, #endif // BUILD_TESTS private: /** - * @brief Returns Low Voltage signal timestamp - * @return Low Voltage event timestamp if event LOW VOLTAGE event occures - * otherwise 0 - */ + * @brief Returns Low Voltage signal timestamp + * @return Low Voltage event timestamp if event LOW VOLTAGE event occures + * otherwise 0 + */ time_t LowVoltageTime() const; /** diff --git a/src/components/application_manager/include/application_manager/resumption/resumption_data.h b/src/components/application_manager/include/application_manager/resumption/resumption_data.h index c2634173a5..7db7a09cb4 100644 --- a/src/components/application_manager/include/application_manager/resumption/resumption_data.h +++ b/src/components/application_manager/include/application_manager/resumption/resumption_data.h @@ -33,9 +33,9 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_RESUMPTION_RESUMPTION_DATA_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_RESUMPTION_RESUMPTION_DATA_H_ -#include "smart_objects/smart_object.h" #include "application_manager/application.h" #include "application_manager/application_manager.h" +#include "smart_objects/smart_object.h" #include "utils/macro.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/rpc_handler_impl.h b/src/components/application_manager/include/application_manager/rpc_handler_impl.h index cc93e4213c..2909a38cf7 100644 --- a/src/components/application_manager/include/application_manager/rpc_handler_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_handler_impl.h @@ -35,18 +35,18 @@ #include "application_manager/application_manager.h" #include "application_manager/message_helper.h" -#include "application_manager/rpc_handler.h" -#include "application_manager/rpc_service.h" #include "application_manager/mobile_message_handler.h" #include "application_manager/policies/policy_handler_observer.h" +#include "application_manager/rpc_handler.h" +#include "application_manager/rpc_service.h" -#include "protocol_handler/protocol_observer.h" #include "hmi_message_handler/hmi_message_observer.h" #include "hmi_message_handler/hmi_message_sender.h" +#include "protocol_handler/protocol_observer.h" -#include "formatters/formatter_json_rpc.h" -#include "formatters/CFormatterJsonSDLRPCv2.h" #include "formatters/CFormatterJsonSDLRPCv1.h" +#include "formatters/CFormatterJsonSDLRPCv2.h" +#include "formatters/formatter_json_rpc.h" #include "interfaces/HMI_API_schema.h" #include "interfaces/MOBILE_API_schema.h" #ifdef TELEMETRY_MONITOR @@ -56,8 +56,8 @@ #include "interfaces/v4_protocol_v1_2_no_extra.h" #include "interfaces/v4_protocol_v1_2_no_extra_schema.h" -#include "utils/threads/message_loop_thread.h" #include "utils/semantic_version.h" +#include "utils/threads/message_loop_thread.h" namespace application_manager { namespace rpc_handler { @@ -87,7 +87,7 @@ typedef threads::MessageLoopThread<utils::PrioritizedQueue<MessageFromMobile> > FromMobileQueue; typedef threads::MessageLoopThread<utils::PrioritizedQueue<MessageFromHmi> > FromHmiQueue; -} +} // namespace impl class RPCHandlerImpl : public RPCHandler, public impl::FromMobileQueue::Handler, @@ -154,11 +154,18 @@ class RPCHandlerImpl : public RPCHandler, ns_smart_device_link::ns_smart_objects::SmartObject& output, utils::SemanticVersion& message_version); + bool ValidateRpcSO(smart_objects::SmartObject& message, + utils::SemanticVersion& msg_version, + rpc::ValidationReport& report_out, + bool allow_unknown_parameters) OVERRIDE; + private: void ProcessMessageFromMobile(const std::shared_ptr<Message> message); void ProcessMessageFromHMI(const std::shared_ptr<Message> message); bool ConvertMessageToSO(const Message& message, - smart_objects::SmartObject& output); + smart_objects::SmartObject& output, + const bool allow_unknown_parameters = false, + const bool validate_params = true); std::shared_ptr<Message> ConvertRawMsgToMessage( const ::protocol_handler::RawMessagePtr message); hmi_apis::HMI_API& hmi_so_factory(); diff --git a/src/components/application_manager/include/application_manager/rpc_passing_handler.h b/src/components/application_manager/include/application_manager/rpc_passing_handler.h new file mode 100644 index 0000000000..45fe4cad2f --- /dev/null +++ b/src/components/application_manager/include/application_manager/rpc_passing_handler.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2018, 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_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_RPC_PASSING_HANDLER_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_RPC_PASSING_HANDLER_H_ + +#include <deque> +#include "application_manager/application.h" +#include "application_manager/commands/command.h" +#include "interfaces/MOBILE_API.h" +#include "smart_objects/smart_object.h" +#include "utils/timer.h" + +namespace application_manager { + +struct ServiceInfo { + std::string service_id; + uint32_t connection_key; +}; + +typedef std::shared_ptr<timer::Timer> TimerSPtr; + +class AppServiceManager; + +class RPCPassingHandler { + public: + RPCPassingHandler(AppServiceManager& asm_ref, ApplicationManager& am_ref); + + /** + * @brief Class destructor + */ + ~RPCPassingHandler(); + + /** + * @brief Check if function id is in the handled_rpcs list of an active app + * service + * @param function_id RPC function id + * @return true if function id exists in handled_rpcs list of an active app + * service + */ + bool CanHandleFunctionID(int32_t function_id); + + /** + * @brief Check if app services or core is being used to handle the RPC + * @param correlation_id correlation id of RPC response + * @return true if an app service was used to handle the RPC + */ + bool IsPassThroughMessage(uint32_t correlation_id, + commands::Command::CommandSource source, + int32_t message_type); + /** + * @brief Check if passthrough is allowed by policies for a given message + * @param rpc_message RPC message SmartObject + * @return true if the request is allowed to be passed through, false + * otherwise + */ + bool IsPassthroughAllowed(smart_objects::SmartObject rpc_message); + + /** + * @brief Function to handle sending and receiving RPC Passing + * requests/responses + * @param rpc_message RPC message SmartObject + * @return true if the request was handled, false otherwise + */ + bool RPCPassThrough(smart_objects::SmartObject rpc_message); + + private: + bool PerformNextRequest(uint32_t correlation_id); + void OnPassThroughRequestTimeout(); + void AddRequestTimer(uint32_t correlation_id); + void RemoveRequestTimer(uint32_t correlation_id); + void ClearCompletedTimers(); + void ForwardRequestToMobile(uint32_t correlation_id); + void ForwardRequestToCore(uint32_t correlation_id); + void ForwardResponseToMobile(uint32_t correlation_id, + smart_objects::SmartObject response_message); + void PopulateRPCRequestQueue(smart_objects::SmartObject request_message); + bool ExtractRPCParams(const smart_objects::SmartObject& s_map, + const ApplicationSharedPtr app, + const std::string& function_id_str); + + AppServiceManager& app_service_manager_; + ApplicationManager& app_manager_; + sync_primitives::RecursiveLock rpc_request_queue_lock_; + std::map<uint32_t, + std::pair<smart_objects::SmartObject, std::deque<ServiceInfo> > > + rpc_request_queue; + sync_primitives::RecursiveLock timeout_queue_lock_; + std::vector<std::pair<TimerSPtr, uint32_t> > timeout_queue_; +}; + +} // namespace application_manager + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_RPC_PASSING_HANDLER_H_ diff --git a/src/components/application_manager/include/application_manager/rpc_service_impl.h b/src/components/application_manager/include/application_manager/rpc_service_impl.h index 1eaeb46255..ab71729b3f 100644 --- a/src/components/application_manager/include/application_manager/rpc_service_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_service_impl.h @@ -34,24 +34,24 @@ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_RPC_SERVICE_IMPL_H #include "application_manager/application_manager.h" -#include "application_manager/rpc_service.h" -#include "application_manager/request_controller.h" +#include "application_manager/command_holder_impl.h" #include "application_manager/message_helper.h" -#include "application_manager/usage_statistics.h" #include "application_manager/mobile_message_handler.h" -#include "application_manager/command_holder_impl.h" +#include "application_manager/request_controller.h" +#include "application_manager/rpc_service.h" +#include "application_manager/usage_statistics.h" -#include "formatters/formatter_json_rpc.h" -#include "formatters/CFormatterJsonSDLRPCv2.h" #include "formatters/CFormatterJsonSDLRPCv1.h" +#include "formatters/CFormatterJsonSDLRPCv2.h" +#include "formatters/formatter_json_rpc.h" #include "interfaces/HMI_API_schema.h" #include "interfaces/MOBILE_API_schema.h" #include "interfaces/v4_protocol_v1_2_no_extra.h" #include "interfaces/v4_protocol_v1_2_no_extra_schema.h" -#include "utils/threads/message_loop_thread.h" #include "utils/logger.h" +#include "utils/threads/message_loop_thread.h" namespace application_manager { namespace rpc_service { @@ -85,7 +85,7 @@ typedef threads::MessageLoopThread<utils::PrioritizedQueue<MessageToMobile> > ToMobileQueue; typedef threads::MessageLoopThread<utils::PrioritizedQueue<MessageToHmi> > ToHmiQueue; -} +} // namespace impl class RPCServiceImpl : public RPCService, public impl::ToMobileQueue::Handler, @@ -108,7 +108,9 @@ class RPCServiceImpl : public RPCService, bool ManageMobileCommand(const commands::MessageSharedPtr message, commands::Command::CommandSource source) OVERRIDE; - bool ManageHMICommand(const commands::MessageSharedPtr message) OVERRIDE; + bool ManageHMICommand(const commands::MessageSharedPtr message, + commands::Command::CommandSource source = + commands::Command::SOURCE_HMI) OVERRIDE; // CALLED ON messages_to_hmi_ thread! void Handle(const impl::MessageToHmi message) OVERRIDE; @@ -119,6 +121,9 @@ class RPCServiceImpl : public RPCService, bool final_message = false) OVERRIDE; void SendMessageToHMI(const commands::MessageSharedPtr message) OVERRIDE; + bool IsAppServiceRPC(int32_t function_id, + commands::Command::CommandSource source); + void set_protocol_handler( protocol_handler::ProtocolHandler* handler) OVERRIDE; void set_hmi_message_handler( @@ -126,9 +131,13 @@ class RPCServiceImpl : public RPCService, private: bool ConvertSOtoMessage(const smart_objects::SmartObject& message, - Message& output); + Message& output, + const bool allow_unknown_parameters = false); hmi_apis::HMI_API& hmi_so_factory(); mobile_apis::MOBILE_API& mobile_so_factory(); + void CheckSourceForUnsupportedRequest( + const commands::MessageSharedPtr message, + commands::Command::CommandSource source); ApplicationManager& app_manager_; request_controller::RequestController& request_ctrl_; diff --git a/src/components/application_manager/include/application_manager/smart_object_keys.h b/src/components/application_manager/include/application_manager/smart_object_keys.h index 6e32853a3d..328d7f5e81 100644 --- a/src/components/application_manager/include/application_manager/smart_object_keys.h +++ b/src/components/application_manager/include/application_manager/smart_object_keys.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, Ford Motor Company + Copyright (c) 2019, Ford Motor Company All rights reserved. Redistribution and use in source and binary forms, with or without @@ -60,6 +60,7 @@ extern const char* app_launch_last_session; extern const char* policy_app_id; extern const char* hmi_app_id; extern const char* device_id; +extern const char* subscribe; extern const char* subscribed_for_way_points; extern const char* url; extern const char* urlScheme; @@ -76,7 +77,7 @@ extern const char* ngn_media_screen_app_name; extern const char* vr_synonyms; extern const char* uses_vehicle_data; extern const char* is_media_application; -extern const char* greyOut; +extern const char* grey_out; extern const char* language_desired; extern const char* auto_activated_id; extern const char* app_type; @@ -178,6 +179,7 @@ extern const char* navigation_capability; extern const char* phone_capability; extern const char* video_streaming_capability; extern const char* rc_capability; +extern const char* app_services_capabilities; extern const char* day_color_scheme; extern const char* night_color_scheme; extern const char* primary_color; @@ -188,10 +190,19 @@ extern const char* green; extern const char* blue; extern const char* display_layout; extern const char* icon_resumed; +extern const char* nicknames; +extern const char* enabled; +extern const char* auth_token; +extern const char* cloud_transport_type; +extern const char* hybrid_app_preference; +extern const char* is_cloud_application; +extern const char* cloud_connection_status; +extern const char* endpoint; // PutFile extern const char* sync_file_name; extern const char* file_name; +extern const char* file_path; extern const char* file_type; extern const char* file_size; extern const char* crc32_check_sum; @@ -205,6 +216,7 @@ extern const char* is_template; extern const char* image; extern const char* type; extern const char* system_file; +extern const char* is_system_file; extern const char* offset; extern const char* length; extern const char* secondary_image; @@ -253,6 +265,7 @@ extern const char* fuel_level; extern const char* fuel_level_state; extern const char* instant_fuel_consumption; extern const char* fuel_range; +extern const char* cloud_app_vehicle_id; extern const char* external_temp; extern const char* turn_signal; extern const char* vin; @@ -293,6 +306,49 @@ extern const char* system_software_version; extern const char* priority; extern const char* engine_oil_life; +// app services +extern const char* app_service_manifest; +extern const char* service_name; +extern const char* service_type; +extern const char* service_icon; +extern const char* allow_app_consumers; +extern const char* rpc_spec_version; +extern const char* handled_rpcs; +extern const char* media_service_manifest; +extern const char* app_service_record; +extern const char* service_id; +extern const char* service_manifest; +extern const char* service_published; +extern const char* service_active; +extern const char* app_service_id; +extern const char* service_data; +extern const char* media_service_data; +extern const char* media_image; +extern const char* weather_service_data; +extern const char* location; +extern const char* current_forecast; +extern const char* minute_forecast; +extern const char* hourly_forecast; +extern const char* multiday_forecast; +extern const char* weather_icon; +extern const char* navigation_service_data; +extern const char* origin; +extern const char* destination; +extern const char* instructions; +extern const char* location_details; +extern const char* request_service_active; +extern const char* app_services; +extern const char* update_reason; +extern const char* updated_app_service_record; +extern const char* service_records; +extern const char* activate; +extern const char* set_as_default; +extern const char* origin_app; + +// sis data +extern const char* station_short_name; +extern const char* station_location; + // resuming extern const char* application_commands; extern const char* application_submenus; @@ -316,8 +372,11 @@ extern const char* global_ign_on_counter; extern const char* connection_info; extern const char* is_download_complete; +extern const char* shifted; +extern const char* altitude; extern const char* longitude_degrees; extern const char* latitude_degrees; + extern const char* address; extern const char* country_name; extern const char* country_code; @@ -359,6 +418,8 @@ extern const char* const keyboard_layout_supported; extern const char* const keypress_mode_supported; extern const char* const limited_characters_list_supported; extern const char* const auto_complete_text_supported; +extern const char* const send_location_enabled; +extern const char* const get_way_points_enabled; extern const char* const entity_type; extern const char* const entity_id; extern const char* const status; @@ -413,7 +474,7 @@ extern const char* instance_follow_redirect; extern const char* charset; extern const char* content_lenght; extern const char* GET; -} // http_request +} // namespace http_request namespace mobile_notification { extern const char* state; diff --git a/src/components/application_manager/include/application_manager/state_controller_impl.h b/src/components/application_manager/include/application_manager/state_controller_impl.h index 99113d6d00..77da28cc91 100644 --- a/src/components/application_manager/include/application_manager/state_controller_impl.h +++ b/src/components/application_manager/include/application_manager/state_controller_impl.h @@ -35,15 +35,15 @@ #include <list> #include <map> -#include "application_manager/hmi_state.h" #include "application_manager/application.h" #include "application_manager/application_manager.h" -#include "event_engine/event_observer.h" -#include "application_manager/state_controller.h" +#include "application_manager/hmi_state.h" #include "application_manager/message_helper.h" +#include "application_manager/state_controller.h" +#include "event_engine/event_observer.h" #include "interfaces/MOBILE_API.h" -#include "utils/lock.h" #include "utils/helpers.h" +#include "utils/lock.h" namespace application_manager { @@ -144,6 +144,7 @@ class StateControllerImpl : public event_engine::EventObserver, // EventObserver interface void on_event(const event_engine::Event& event); + void on_event(const event_engine::MobileEvent& event); /** * @brief Sets default application state and apply currently active HMI states @@ -185,9 +186,9 @@ class StateControllerImpl : public event_engine::EventObserver, virtual bool IsStateActive(HmiState::StateID state_id) const; private: - int64_t SendBCActivateApp(ApplicationConstSharedPtr app, - hmi_apis::Common_HMILevel::eType level, - bool send_policy_priority); + int64_t RequestHMIStateChange(ApplicationConstSharedPtr app, + hmi_apis::Common_HMILevel::eType level, + bool send_policy_priority); /** * @brief The HmiLevelConflictResolver struct * Move other application to HmiStates if applied moved to FULL or LIMITED @@ -377,10 +378,11 @@ class StateControllerImpl : public event_engine::EventObserver, const mobile_apis::VideoStreamingState::eType video_state); /** - * @brief OnActivateAppResponse calback for activate app response + * @brief OnHMIResponse callback for activate app or close application + * response * @param message Smart Object */ - void OnActivateAppResponse(const smart_objects::SmartObject& message); + void OnHMIResponse(const smart_objects::SmartObject& message); /** * @brief OnAppDeactivated callback for OnAppDeactivated notification @@ -448,9 +450,9 @@ class StateControllerImpl : public event_engine::EventObserver, typedef std::list<HmiState::StateID> StateIDList; StateIDList active_states_; mutable sync_primitives::Lock active_states_lock_; - std::map<uint32_t, HmiStatePtr> waiting_for_activate_; + std::map<uint32_t, HmiStatePtr> waiting_for_response_; ApplicationManager& app_mngr_; }; -} +} // namespace application_manager #endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_STATE_CONTROLLER_IMPL_H_ diff --git a/src/components/application_manager/include/application_manager/system_time/system_time_handler_impl.h b/src/components/application_manager/include/application_manager/system_time/system_time_handler_impl.h index add440ad80..46aa98e6c1 100644 --- a/src/components/application_manager/include/application_manager/system_time/system_time_handler_impl.h +++ b/src/components/application_manager/include/application_manager/system_time/system_time_handler_impl.h @@ -36,11 +36,11 @@ #include <time.h> #include <vector> +#include "application_manager/application_manager.h" +#include "application_manager/event_engine/event_observer.h" #include "utils/lock.h" #include "utils/macro.h" #include "utils/system_time_handler.h" -#include "application_manager/application_manager_impl.h" -#include "application_manager/event_engine/event_observer.h" namespace application_manager { diff --git a/src/components/application_manager/include/application_manager/telemetry_observer.h b/src/components/application_manager/include/application_manager/telemetry_observer.h index 49f15165db..afd5397db9 100644 --- a/src/components/application_manager/include/application_manager/telemetry_observer.h +++ b/src/components/application_manager/include/application_manager/telemetry_observer.h @@ -33,9 +33,9 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_TELEMETRY_OBSERVER_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_TELEMETRY_OBSERVER_H_ -#include "smart_objects/smart_object.h" #include "application_manager/smart_object_keys.h" #include "json/json.h" +#include "smart_objects/smart_object.h" #include "utils/date_time.h" @@ -53,5 +53,5 @@ class AMTelemetryObserver { virtual void OnMessage(MessageMetricSharedPtr) = 0; virtual ~AMTelemetryObserver() {} }; -} // application_manager +} // namespace application_manager #endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_TELEMETRY_OBSERVER_H_ diff --git a/src/components/application_manager/include/application_manager/usage_statistics.h b/src/components/application_manager/include/application_manager/usage_statistics.h index 6d0b5cd6bd..ebd8e4729b 100644 --- a/src/components/application_manager/include/application_manager/usage_statistics.h +++ b/src/components/application_manager/include/application_manager/usage_statistics.h @@ -33,10 +33,10 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_USAGE_STATISTICS_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_USAGE_STATISTICS_H_ -#include <string> #include <memory> -#include "policy/usage_statistics/counter.h" +#include <string> #include "policy/usage_statistics/app_stopwatch.h" +#include "policy/usage_statistics/counter.h" #include "utils/macro.h" #include "interfaces/MOBILE_API.h" |