summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/application_manager/include/application_manager/message_helper.h8
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc2
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc80
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc3
-rw-r--r--src/components/policy/policy_external/include/policy/policy_table/enums.h367
-rw-r--r--src/components/policy/policy_external/include/policy/sql_pt_queries.h2
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc150
-rw-r--r--src/components/policy/policy_external/src/policy_table/enums.cc365
-rw-r--r--src/components/policy/policy_external/src/sql_pt_queries.cc8
-rw-r--r--src/components/policy/policy_external/src/sql_pt_representation.cc24
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc12
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_test_base.cc12
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_table/enums.h367
-rw-r--r--src/components/policy/policy_regular/include/policy/sql_pt_queries.h2
-rw-r--r--src/components/policy/policy_regular/src/policy_manager_impl.cc144
-rw-r--r--src/components/policy/policy_regular/src/policy_table/enums.cc663
-rw-r--r--src/components/policy/policy_regular/src/sql_pt_queries.cc8
-rw-r--r--src/components/policy/policy_regular/src/sql_pt_representation.cc24
-rw-r--r--src/components/policy/policy_regular/test/policy_manager_impl_test.cc24
-rw-r--r--src/components/protocol_handler/src/protocol_handler_impl.cc40
-rw-r--r--src/components/protocol_handler/test/protocol_handler_tm_test.cc284
-rw-r--r--src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h18
-rw-r--r--src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc10
23 files changed, 2440 insertions, 177 deletions
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 010816808c..609b240301 100644
--- a/src/components/application_manager/include/application_manager/message_helper.h
+++ b/src/components/application_manager/include/application_manager/message_helper.h
@@ -700,6 +700,14 @@ class MessageHelper {
ApplicationSharedPtr app,
int32_t function_id);
+ /**
+ * @brief Prints SmartObject contents to log file
+ * @param object - SmartObject to print
+ * @return always True as this function is used for internal debug purposes
+ * only
+ * @note Function prints SmartObject only in DEBUG build mode. There will not
+ * be any print in RELEASE build mode
+ */
static bool PrintSmartObject(const smart_objects::SmartObject& object);
template <typename From, typename To>
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index abab63aa7e..98d0309253 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -1305,9 +1305,7 @@ bool ApplicationManagerImpl::StartNaviService(
return false;
} else if (!converted_params.empty()) {
LOG4CXX_INFO(logger_, "Sending video configuration params");
-#ifdef DEBUG
MessageHelper::PrintSmartObject(converted_params);
-#endif
bool request_sent =
application(app_id)->SetVideoConfig(service_type, converted_params);
if (request_sent) {
diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc
index 5bda17ecbd..a52cb52fbe 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -65,6 +65,8 @@
#include "formatters/formatter_json_rpc.h"
#include "formatters/CFormatterJsonSDLRPCv2.h"
#include "formatters/CFormatterJsonSDLRPCv1.h"
+#include "json/json.h"
+#include "formatters/CFormatterJsonBase.h"
CREATE_LOGGERPTR_GLOBAL(logger_, "ApplicationManager")
@@ -2219,11 +2221,7 @@ void MessageHelper::SendSystemRequestNotification(
commands::CommandImpl::protocol_version_;
content[strings::params][strings::connection_key] = connection_key;
-
-#ifdef DEBUG
PrintSmartObject(content);
-#endif
-
DCHECK(app_mngr.GetRPCService().ManageMobileCommand(
std::make_shared<smart_objects::SmartObject>(content),
commands::Command::SOURCE_SDL));
@@ -2873,76 +2871,12 @@ void MessageHelper::SubscribeApplicationToSoftButton(
app->SubscribeToSoftButtons(function_id, softbuttons_id);
}
-// TODO(AK): change printf to logger
bool MessageHelper::PrintSmartObject(const smart_objects::SmartObject& object) {
- return true;
-#ifdef ENABLE_LOG
- static uint32_t tab = 0;
- std::string tab_buffer;
-
- if (tab == 0) {
- printf("\n-------------------------------------------------------------");
- }
-
- for (uint32_t i = 0; i < tab; ++i) {
- tab_buffer += "\t";
- }
-
- switch (object.getType()) {
- case ns_smart_device_link::ns_smart_objects::SmartType_Array: {
- for (size_t i = 0; i < object.length(); i++) {
- ++tab;
-
- printf("\n%s%zu: ", tab_buffer.c_str(), i);
- if (!PrintSmartObject(object.getElement(i))) {
- printf("\n");
- return false;
- }
- }
- break;
- }
- case ns_smart_device_link::ns_smart_objects::SmartType_Map: {
- std::set<std::string> keys = object.enumerate();
-
- for (std::set<std::string>::const_iterator key = keys.begin();
- key != keys.end();
- key++) {
- ++tab;
-
- printf("\n%s%s: ", tab_buffer.c_str(), (*key).c_str());
- if (!PrintSmartObject(object[(*key).c_str()])) {
- printf("\n");
- return false;
- }
- }
- break;
- }
- case ns_smart_device_link::ns_smart_objects::SmartType_Boolean:
- object.asBool() ? printf("true\n") : printf("false\n");
- break;
- case ns_smart_device_link::ns_smart_objects::SmartType_Double: {
- printf("%f", object.asDouble());
- break;
- }
- case ns_smart_device_link::ns_smart_objects::SmartType_Integer:
- printf("%lld", static_cast<long long int>(object.asInt()));
- break;
- case ns_smart_device_link::ns_smart_objects::SmartType_String:
- printf("%s", object.asString().c_str());
- break;
- case ns_smart_device_link::ns_smart_objects::SmartType_Character:
- printf("%c", object.asChar());
- break;
- default:
- printf("PrintSmartObject - default case\n");
- break;
- }
-
- if (0 != tab) {
- --tab;
- } else {
- printf("\n-------------------------------------------------------------\n");
- }
+#ifdef DEBUG
+ Json::Value tmp;
+ namespace Formatters = ns_smart_device_link::ns_json_handler::formatters;
+ Formatters::CFormatterJsonBase::objToJsonValue(object, tmp);
+ LOG4CXX_DEBUG(logger_, "SMART OBJECT: " << tmp.toStyledString());
#endif
return true;
}
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index 217af091b5..7a68ae5779 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -71,9 +71,8 @@ bool RPCServiceImpl::ManageMobileCommand(
LOG4CXX_WARN(logger_, "Low Voltage is active");
return false;
}
-#ifdef DEBUG
+
MessageHelper::PrintSmartObject(*message);
-#endif
const uint32_t connection_key = static_cast<uint32_t>(
(*message)[strings::params][strings::connection_key].asUInt());
diff --git a/src/components/policy/policy_external/include/policy/policy_table/enums.h b/src/components/policy/policy_external/include/policy/policy_table/enums.h
index a31e955d99..34864c5602 100644
--- a/src/components/policy/policy_external/include/policy/policy_table/enums.h
+++ b/src/components/policy/policy_external/include/policy/policy_table/enums.h
@@ -44,6 +44,7 @@ enum Priority {
P_VOICECOM,
P_COMMUNICATION,
P_NORMAL,
+ P_PROJECTION,
P_NONE,
};
@@ -180,6 +181,372 @@ bool IsValidEnum(ModuleType val);
const char* EnumToJsonString(ModuleType val);
bool EnumFromJsonString(const std::string& literal, ModuleType* result);
+/**
+ * @brief Enumeration FunctionID.
+ *
+ * Enumeration linking function names with function IDs in AppLink protocol.
+ * Assumes enumeration starts at value 0.
+ */
+enum FunctionID {
+ /**
+ * @brief RESERVED.
+ */
+ RESERVED = 0,
+
+ /**
+ * @brief RegisterAppInterfaceID.
+ */
+ RegisterAppInterfaceID = 1,
+
+ /**
+ * @brief UnregisterAppInterfaceID.
+ */
+ UnregisterAppInterfaceID = 2,
+
+ /**
+ * @brief SetGlobalPropertiesID.
+ */
+ SetGlobalPropertiesID = 3,
+
+ /**
+ * @brief ResetGlobalPropertiesID.
+ */
+ ResetGlobalPropertiesID = 4,
+
+ /**
+ * @brief AddCommandID.
+ */
+ AddCommandID = 5,
+
+ /**
+ * @brief DeleteCommandID.
+ */
+ DeleteCommandID = 6,
+
+ /**
+ * @brief AddSubMenuID.
+ */
+ AddSubMenuID = 7,
+
+ /**
+ * @brief DeleteSubMenuID.
+ */
+ DeleteSubMenuID = 8,
+
+ /**
+ * @brief CreateInteractionChoiceSetID.
+ */
+ CreateInteractionChoiceSetID = 9,
+
+ /**
+ * @brief PerformInteractionID.
+ */
+ PerformInteractionID = 10,
+
+ /**
+ * @brief DeleteInteractionChoiceSetID.
+ */
+ DeleteInteractionChoiceSetID = 11,
+
+ /**
+ * @brief AlertID.
+ */
+ AlertID = 12,
+
+ /**
+ * @brief ShowID.
+ */
+ ShowID = 13,
+
+ /**
+ * @brief SpeakID.
+ */
+ SpeakID = 14,
+
+ /**
+ * @brief SetMediaClockTimerID.
+ */
+ SetMediaClockTimerID = 15,
+
+ /**
+ * @brief PerformAudioPassThruID.
+ */
+ PerformAudioPassThruID = 16,
+
+ /**
+ * @brief EndAudioPassThruID.
+ */
+ EndAudioPassThruID = 17,
+
+ /**
+ * @brief SubscribeButtonID.
+ */
+ SubscribeButtonID = 18,
+
+ /**
+ * @brief UnsubscribeButtonID.
+ */
+ UnsubscribeButtonID = 19,
+
+ /**
+ * @brief SubscribeVehicleDataID.
+ */
+ SubscribeVehicleDataID = 20,
+
+ /**
+ * @brief UnsubscribeVehicleDataID.
+ */
+ UnsubscribeVehicleDataID = 21,
+
+ /**
+ * @brief GetVehicleDataID.
+ */
+ GetVehicleDataID = 22,
+
+ /**
+ * @brief ReadDIDID.
+ */
+ ReadDIDID = 23,
+
+ /**
+ * @brief GetDTCsID.
+ */
+ GetDTCsID = 24,
+
+ /**
+ * @brief ScrollableMessageID.
+ */
+ ScrollableMessageID = 25,
+
+ /**
+ * @brief SliderID.
+ */
+ SliderID = 26,
+
+ /**
+ * @brief ShowConstantTBTID.
+ */
+ ShowConstantTBTID = 27,
+
+ /**
+ * @brief AlertManeuverID.
+ */
+ AlertManeuverID = 28,
+
+ /**
+ * @brief UpdateTurnListID.
+ */
+ UpdateTurnListID = 29,
+
+ /**
+ * @brief ChangeRegistrationID.
+ */
+ ChangeRegistrationID = 30,
+
+ /**
+ * @brief GenericResponseID.
+ */
+ GenericResponseID = 31,
+
+ /**
+ * @brief PutFileID.
+ */
+ PutFileID = 32,
+
+ /**
+ * @brief DeleteFileID.
+ */
+ DeleteFileID = 33,
+
+ /**
+ * @brief ListFilesID.
+ */
+ ListFilesID = 34,
+
+ /**
+ * @brief SetAppIconID.
+ */
+ SetAppIconID = 35,
+
+ /**
+ * @brief SetDisplayLayoutID.
+ */
+ SetDisplayLayoutID = 36,
+
+ /**
+ * @brief DiagnosticMessageID.
+ */
+ DiagnosticMessageID = 37,
+
+ /**
+ * @brief SystemRequestID.
+ */
+ SystemRequestID = 38,
+
+ /**
+ * @brief SendLocationID.
+ */
+ SendLocationID = 39,
+
+ /**
+ * @brief DialNumberID.
+ */
+ DialNumberID = 40,
+
+ /**
+ * @brief ButtonPressID.
+ */
+ ButtonPressID = 41,
+
+ /**
+ * @brief GetInteriorVehicleDataID.
+ */
+ GetInteriorVehicleDataID = 43,
+
+ /**
+ * @brief SetInteriorVehicleDataID.
+ */
+ SetInteriorVehicleDataID = 44,
+
+ /**
+ * @brief GetWayPointsID.
+ */
+ GetWayPointsID = 45,
+
+ /**
+ * @brief SubscribeWayPointsID.
+ */
+ SubscribeWayPointsID = 46,
+
+ /**
+ * @brief UnsubscribeWayPointsID.
+ */
+ UnsubscribeWayPointsID = 47,
+
+ /**
+ * @brief GetSystemCapabilityID.
+ */
+ GetSystemCapabilityID = 48,
+
+ /**
+ * @brief SendHapticDataID.
+ */
+ SendHapticDataID = 49,
+
+ /**
+ * @brief OnHMIStatusID.
+ */
+ OnHMIStatusID = 32768,
+
+ /**
+ * @brief OnAppInterfaceUnregisteredID.
+ */
+ OnAppInterfaceUnregisteredID = 32769,
+
+ /**
+ * @brief OnButtonEventID.
+ */
+ OnButtonEventID = 32770,
+
+ /**
+ * @brief OnButtonPressID.
+ */
+ OnButtonPressID = 32771,
+
+ /**
+ * @brief OnVehicleDataID.
+ */
+ OnVehicleDataID = 32772,
+
+ /**
+ * @brief OnCommandID.
+ */
+ OnCommandID = 32773,
+
+ /**
+ * @brief OnTBTClientStateID.
+ */
+ OnTBTClientStateID = 32774,
+
+ /**
+ * @brief OnDriverDistractionID.
+ */
+ OnDriverDistractionID = 32775,
+
+ /**
+ * @brief OnPermissionsChangeID.
+ */
+ OnPermissionsChangeID = 32776,
+
+ /**
+ * @brief OnAudioPassThruID.
+ */
+ OnAudioPassThruID = 32777,
+
+ /**
+ * @brief OnLanguageChangeID.
+ */
+ OnLanguageChangeID = 32778,
+
+ /**
+ * @brief OnKeyboardInputID.
+ */
+ OnKeyboardInputID = 32779,
+
+ /**
+ * @brief OnTouchEventID.
+ */
+ OnTouchEventID = 32780,
+
+ /**
+ * @brief OnSystemRequestID.
+ */
+ OnSystemRequestID = 32781,
+
+ /**
+ * @brief OnHashChangeID.
+ */
+ OnHashChangeID = 32782,
+
+ /**
+ * @brief OnInteriorVehicleDataID.
+ */
+ OnInteriorVehicleDataID = 32783,
+
+ /**
+ * @brief OnWayPointChangeID.
+ */
+ OnWayPointChangeID = 32784,
+
+ /**
+ * @brief OnRCStatusID.
+ */
+ OnRCStatusID = 32785,
+
+ /**
+ * @brief EncodedSyncPDataID.
+ */
+ EncodedSyncPDataID = 65536,
+
+ /**
+ * @brief SyncPDataID.
+ */
+ SyncPDataID = 65537,
+
+ /**
+ * @brief OnEncodedSyncPDataID.
+ */
+ OnEncodedSyncPDataID = 98304,
+
+ /**
+ * @brief OnSyncPDataID.
+ */
+ OnSyncPDataID = 98305
+};
+bool IsValidEnum(FunctionID val);
+const char* EnumToJsonString(FunctionID val);
+bool EnumFromJsonString(const std::string& literal, FunctionID* result);
+
extern const std::string kDefaultApp;
extern const std::string kPreDataConsentApp;
extern const std::string kDeviceApp;
diff --git a/src/components/policy/policy_external/include/policy/sql_pt_queries.h b/src/components/policy/policy_external/include/policy/sql_pt_queries.h
index 646cc7663b..dd9e0204e7 100644
--- a/src/components/policy/policy_external/include/policy/sql_pt_queries.h
+++ b/src/components/policy/policy_external/include/policy/sql_pt_queries.h
@@ -79,8 +79,6 @@ extern const std::string kInsertAppGroup;
extern const std::string kInsertNickname;
extern const std::string kInsertAppType;
extern const std::string kInsertRequestType;
-extern const std::string kInsertOmittedRequestType;
-extern const std::string kInsertOmittedRequestSubType;
extern const std::string kInsertRequestSubType;
extern const std::string kInsertMessageType;
extern const std::string kInsertLanguage;
diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc
index e2b0d6524f..e93eea3969 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -271,6 +271,154 @@ std::string PolicyManagerImpl::GetLockScreenIconUrl() const {
return cache_->GetLockScreenIconUrl();
}
+/**
+ * @brief FilterInvalidFunctions filter functions that are absent in schema
+ * @param rpcs list of functions to filter
+ */
+void FilterInvalidFunctions(policy_table::Rpc& rpcs) {
+ policy_table::Rpc valid_rpcs;
+ for (const auto& rpc : rpcs) {
+ const std::string& rpc_name = rpc.first;
+ policy_table::FunctionID function_id;
+ if (policy_table::EnumFromJsonString(rpc_name, &function_id)) {
+ valid_rpcs.insert(rpc);
+ }
+ }
+ rpcs.swap(valid_rpcs);
+}
+
+/**
+ * @brief FilterInvalidRPCParameters filter parameters that not present in
+ * schema
+ * @param rpc_parameters parameters to filter
+ */
+void FilterInvalidRPCParameters(policy_table::RpcParameters& rpc_parameters) {
+ policy_table::HmiLevels valid_hmi_levels;
+ for (const auto& hmi_level : rpc_parameters.hmi_levels) {
+ if (hmi_level.is_valid()) {
+ valid_hmi_levels.push_back(hmi_level);
+ }
+ }
+ rpc_parameters.hmi_levels.swap(valid_hmi_levels);
+
+ policy_table::Parameters valid_params;
+ const policy_table::Parameters& params = *(rpc_parameters.parameters);
+ for (const auto& param : params) {
+ if (param.is_valid()) {
+ valid_params.push_back(param);
+ }
+ }
+ rpc_parameters.parameters->swap(valid_params);
+}
+
+/**
+ * @brief FilterInvalidPriorityValues filter notification priorities that are
+ * not present in schema
+ * @param notifications priorities to filter
+ */
+void FilterInvalidPriorityValues(
+ policy_table::NumberOfNotificationsPerMinute& notifications) {
+ policy_table::NumberOfNotificationsPerMinute valid_notifications;
+ for (const auto& notification : notifications) {
+ policy_table::Priority priority;
+ if (policy_table::EnumFromJsonString(notification.first, &priority)) {
+ valid_notifications.insert(notification);
+ }
+ }
+ notifications.swap(valid_notifications);
+}
+
+/**
+ * @brief FilterInvalidApplicationParameters filter app params that are not
+ * present in schema
+ * @param app_params object of app policy params to filter
+ */
+void FilterInvalidApplicationParameters(
+ policy_table::ApplicationParams& app_params) {
+ // Filter AppHMIType array
+ policy_table::AppHMITypes valid_app_hmi_types;
+ const policy_table::AppHMITypes& app_hmi_types = *(app_params.AppHMIType);
+ for (const auto& app_hmi_type : app_hmi_types) {
+ if (app_hmi_type.is_valid()) {
+ valid_app_hmi_types.push_back(app_hmi_type);
+ }
+ }
+ app_params.AppHMIType->swap(valid_app_hmi_types);
+
+ // Filter RquestTypes array
+ policy_table::RequestTypes valid_request_types;
+ const policy_table::RequestTypes& request_types = *(app_params.RequestType);
+ for (const auto& request_type : request_types) {
+ if (request_type.is_valid()) {
+ valid_request_types.push_back(request_type);
+ }
+ }
+ if (valid_request_types.empty() && !request_types.empty()) {
+ // An empty RequestType array will allow all request types. No valid
+ // parameters are in the filtered array, so assign an uninitialized value to
+ // for array to be "omitted"
+ *(app_params.RequestType) = policy_table::RequestTypes();
+ } else {
+ app_params.RequestType->swap(valid_request_types);
+ }
+
+ // Filter moduleType array
+ policy_table::ModuleTypes valid_module_types;
+ const policy_table::ModuleTypes& module_types = *(app_params.moduleType);
+ for (const auto& module_type : module_types) {
+ if (module_type.is_valid()) {
+ valid_module_types.push_back(module_type);
+ }
+ }
+ if (valid_module_types.empty() && !module_types.empty()) {
+ // An empty moduleType array will allow all request types. No valid
+ // parameters are in the filtered array, so assign an uninitialized value to
+ // for array to be "omitted"
+ *(app_params.moduleType) = policy_table::ModuleTypes();
+ } else {
+ app_params.moduleType->swap(valid_module_types);
+ }
+
+ // Filter default_hmi
+ if (!app_params.default_hmi.is_valid()) {
+ app_params.default_hmi = policy_table::HmiLevel();
+ }
+
+ // Filter priority
+ if (!app_params.priority.is_valid()) {
+ app_params.priority = policy_table::Priority();
+ }
+}
+
+/**
+ * @brief FilterPolicyTable filter values that not present in schema
+ * @param pt policy table to filter
+ */
+void FilterPolicyTable(policy_table::PolicyTable& pt) {
+ policy_table::ModuleConfig& module_config = pt.module_config;
+ if (module_config.is_initialized() &&
+ module_config.notifications_per_minute_by_priority.is_initialized()) {
+ FilterInvalidPriorityValues(
+ module_config.notifications_per_minute_by_priority);
+ }
+
+ if (pt.app_policies_section.is_initialized()) {
+ policy_table::ApplicationPolicies& apps = pt.app_policies_section.apps;
+ for (auto& app_policy : apps) {
+ FilterInvalidApplicationParameters(app_policy.second);
+ }
+ }
+
+ for (auto& group : pt.functional_groupings) {
+ policy_table::Rpc& rpcs = group.second.rpcs;
+ FilterInvalidFunctions(rpcs);
+
+ for (auto& func : rpcs) {
+ FilterInvalidRPCParameters(func.second);
+ }
+ }
+}
+
bool PolicyManagerImpl::LoadPT(const std::string& file,
const BinaryMessage& pt_content) {
LOG4CXX_INFO(logger_, "LoadPT of size " << pt_content.size());
@@ -287,7 +435,7 @@ bool PolicyManagerImpl::LoadPT(const std::string& file,
}
file_system::DeleteFile(file);
-
+ FilterPolicyTable(pt_update->policy_table);
if (!IsPTValid(pt_update, policy_table::PT_UPDATE)) {
wrong_ptu_update_received_ = true;
update_status_manager_.OnWrongUpdateReceived();
diff --git a/src/components/policy/policy_external/src/policy_table/enums.cc b/src/components/policy/policy_external/src/policy_table/enums.cc
index 31a6fc86e6..6410cb79de 100644
--- a/src/components/policy/policy_external/src/policy_table/enums.cc
+++ b/src/components/policy/policy_external/src/policy_table/enums.cc
@@ -14,6 +14,8 @@ bool IsValidEnum(Priority val) {
return true;
case P_NORMAL:
return true;
+ case P_PROJECTION:
+ return true;
case P_NONE:
return true;
default:
@@ -32,6 +34,8 @@ const char* EnumToJsonString(Priority val) {
return "COMMUNICATION";
case P_NORMAL:
return "NORMAL";
+ case P_PROJECTION:
+ return "PROJECTION";
case P_NONE:
return "NONE";
default:
@@ -54,6 +58,9 @@ bool EnumFromJsonString(const std::string& literal, Priority* result) {
} else if ("NORMAL" == literal) {
*result = P_NORMAL;
return true;
+ } else if ("PROJECTION" == literal) {
+ *result = P_PROJECTION;
+ return true;
} else if ("NONE" == literal) {
*result = P_NONE;
return true;
@@ -833,6 +840,364 @@ bool EnumFromJsonString(const std::string& literal, ModuleType* result) {
}
}
+bool EnumFromJsonString(const std::string& literal, FunctionID* result) {
+ if ("RESERVE" == literal) {
+ *result = RESERVED;
+ return true;
+ }
+
+ if ("RegisterAppInterface" == literal) {
+ *result = RegisterAppInterfaceID;
+ return true;
+ }
+
+ if ("UnregisterAppInterface" == literal) {
+ *result = UnregisterAppInterfaceID;
+ return true;
+ }
+
+ if ("SetGlobalProperties" == literal) {
+ *result = SetGlobalPropertiesID;
+ return true;
+ }
+
+ if ("ResetGlobalProperties" == literal) {
+ *result = ResetGlobalPropertiesID;
+ return true;
+ }
+
+ if ("AddCommand" == literal) {
+ *result = AddCommandID;
+ return true;
+ }
+
+ if ("DeleteCommand" == literal) {
+ *result = DeleteCommandID;
+ return true;
+ }
+
+ if ("AddSubMenu" == literal) {
+ *result = AddSubMenuID;
+ return true;
+ }
+
+ if ("DeleteSubMenu" == literal) {
+ *result = DeleteSubMenuID;
+ return true;
+ }
+
+ if ("CreateInteractionChoiceSet" == literal) {
+ *result = CreateInteractionChoiceSetID;
+ return true;
+ }
+
+ if ("PerformInteraction" == literal) {
+ *result = PerformInteractionID;
+ return true;
+ }
+
+ if ("DeleteInteractionChoiceSet" == literal) {
+ *result = DeleteInteractionChoiceSetID;
+ return true;
+ }
+
+ if ("Alert" == literal) {
+ *result = AlertID;
+ return true;
+ }
+
+ if ("Show" == literal) {
+ *result = ShowID;
+ return true;
+ }
+
+ if ("Speak" == literal) {
+ *result = SpeakID;
+ return true;
+ }
+
+ if ("SetMediaClockTimer" == literal) {
+ *result = SetMediaClockTimerID;
+ return true;
+ }
+
+ if ("PerformAudioPassThru" == literal) {
+ *result = PerformAudioPassThruID;
+ return true;
+ }
+
+ if ("EndAudioPassThru" == literal) {
+ *result = EndAudioPassThruID;
+ return true;
+ }
+
+ if ("SubscribeButton" == literal) {
+ *result = SubscribeButtonID;
+ return true;
+ }
+
+ if ("UnsubscribeButton" == literal) {
+ *result = UnsubscribeButtonID;
+ return true;
+ }
+
+ if ("SubscribeVehicleData" == literal) {
+ *result = SubscribeVehicleDataID;
+ return true;
+ }
+
+ if ("UnsubscribeVehicleData" == literal) {
+ *result = UnsubscribeVehicleDataID;
+ return true;
+ }
+
+ if ("GetVehicleData" == literal) {
+ *result = GetVehicleDataID;
+ return true;
+ }
+
+ if ("ReadD" == literal) {
+ *result = ReadDIDID;
+ return true;
+ }
+
+ if ("GetDTCs" == literal) {
+ *result = GetDTCsID;
+ return true;
+ }
+
+ if ("ScrollableMessage" == literal) {
+ *result = ScrollableMessageID;
+ return true;
+ }
+
+ if ("Slider" == literal) {
+ *result = SliderID;
+ return true;
+ }
+
+ if ("ShowConstantTBT" == literal) {
+ *result = ShowConstantTBTID;
+ return true;
+ }
+
+ if ("AlertManeuver" == literal) {
+ *result = AlertManeuverID;
+ return true;
+ }
+
+ if ("UpdateTurnList" == literal) {
+ *result = UpdateTurnListID;
+ return true;
+ }
+
+ if ("ChangeRegistration" == literal) {
+ *result = ChangeRegistrationID;
+ return true;
+ }
+
+ if ("GenericResponse" == literal) {
+ *result = GenericResponseID;
+ return true;
+ }
+
+ if ("PutFile" == literal) {
+ *result = PutFileID;
+ return true;
+ }
+
+ if ("DeleteFile" == literal) {
+ *result = DeleteFileID;
+ return true;
+ }
+
+ if ("ListFiles" == literal) {
+ *result = ListFilesID;
+ return true;
+ }
+
+ if ("SetAppIcon" == literal) {
+ *result = SetAppIconID;
+ return true;
+ }
+
+ if ("SetDisplayLayout" == literal) {
+ *result = SetDisplayLayoutID;
+ return true;
+ }
+
+ if ("DiagnosticMessage" == literal) {
+ *result = DiagnosticMessageID;
+ return true;
+ }
+
+ if ("SystemRequest" == literal) {
+ *result = SystemRequestID;
+ return true;
+ }
+
+ if ("SendLocation" == literal) {
+ *result = SendLocationID;
+ return true;
+ }
+
+ if ("DialNumber" == literal) {
+ *result = DialNumberID;
+ return true;
+ }
+
+ if ("ButtonPress" == literal) {
+ *result = ButtonPressID;
+ return true;
+ }
+
+ if ("GetInteriorVehicleData" == literal) {
+ *result = GetInteriorVehicleDataID;
+ return true;
+ }
+
+ if ("SetInteriorVehicleData" == literal) {
+ *result = SetInteriorVehicleDataID;
+ return true;
+ }
+
+ if ("GetWayPoints" == literal) {
+ *result = GetWayPointsID;
+ return true;
+ }
+
+ if ("SubscribeWayPoints" == literal) {
+ *result = SubscribeWayPointsID;
+ return true;
+ }
+
+ if ("UnsubscribeWayPoints" == literal) {
+ *result = UnsubscribeWayPointsID;
+ return true;
+ }
+
+ if ("GetSystemCapability" == literal) {
+ *result = GetSystemCapabilityID;
+ return true;
+ }
+
+ if ("SendHapticData" == literal) {
+ *result = SendHapticDataID;
+ return true;
+ }
+
+ if ("OnHMIStatus" == literal) {
+ *result = OnHMIStatusID;
+ return true;
+ }
+
+ if ("OnAppInterfaceUnregistered" == literal) {
+ *result = OnAppInterfaceUnregisteredID;
+ return true;
+ }
+
+ if ("OnButtonEvent" == literal) {
+ *result = OnButtonEventID;
+ return true;
+ }
+
+ if ("OnButtonPress" == literal) {
+ *result = OnButtonPressID;
+ return true;
+ }
+
+ if ("OnVehicleData" == literal) {
+ *result = OnVehicleDataID;
+ return true;
+ }
+
+ if ("OnCommand" == literal) {
+ *result = OnCommandID;
+ return true;
+ }
+
+ if ("OnTBTClientState" == literal) {
+ *result = OnTBTClientStateID;
+ return true;
+ }
+
+ if ("OnDriverDistraction" == literal) {
+ *result = OnDriverDistractionID;
+ return true;
+ }
+
+ if ("OnPermissionsChange" == literal) {
+ *result = OnPermissionsChangeID;
+ return true;
+ }
+
+ if ("OnAudioPassThru" == literal) {
+ *result = OnAudioPassThruID;
+ return true;
+ }
+
+ if ("OnLanguageChange" == literal) {
+ *result = OnLanguageChangeID;
+ return true;
+ }
+
+ if ("OnKeyboardInput" == literal) {
+ *result = OnKeyboardInputID;
+ return true;
+ }
+
+ if ("OnTouchEvent" == literal) {
+ *result = OnTouchEventID;
+ return true;
+ }
+
+ if ("OnSystemRequest" == literal) {
+ *result = OnSystemRequestID;
+ return true;
+ }
+
+ if ("OnHashChange" == literal) {
+ *result = OnHashChangeID;
+ return true;
+ }
+
+ if ("OnInteriorVehicleData" == literal) {
+ *result = OnInteriorVehicleDataID;
+ return true;
+ }
+
+ if ("OnWayPointChange" == literal) {
+ *result = OnWayPointChangeID;
+ return true;
+ }
+
+ if ("OnRCStatus" == literal) {
+ *result = OnRCStatusID;
+ return true;
+ }
+
+ if ("EncodedSyncPData" == literal) {
+ *result = EncodedSyncPDataID;
+ return true;
+ }
+
+ if ("SyncPData" == literal) {
+ *result = SyncPDataID;
+ return true;
+ }
+
+ if ("OnEncodedSyncPData" == literal) {
+ *result = OnEncodedSyncPDataID;
+ return true;
+ }
+
+ if ("OnSyncPData" == literal) {
+ *result = OnSyncPDataID;
+ return true;
+ }
+ return false;
+};
+
const std::string kDefaultApp = "default";
const std::string kPreDataConsentApp = "pre_DataConsent";
const std::string kDeviceApp = "device";
diff --git a/src/components/policy/policy_external/src/sql_pt_queries.cc b/src/components/policy/policy_external/src/sql_pt_queries.cc
index ee53eb1487..97d75731ea 100644
--- a/src/components/policy/policy_external/src/sql_pt_queries.cc
+++ b/src/components/policy/policy_external/src/sql_pt_queries.cc
@@ -645,19 +645,11 @@ const std::string kInsertRequestType =
"INSERT OR IGNORE INTO `request_type` (`application_id`, `request_type`) "
"VALUES (?, ?)";
-const std::string kInsertOmittedRequestType =
- "INSERT INTO `request_type` (`application_id`) "
- "VALUES (?)";
-
const std::string kInsertRequestSubType =
"INSERT INTO `request_subtype` (`application_id`, "
"`request_subtype`) "
"VALUES (?, ?)";
-const std::string kInsertOmittedRequestSubType =
- "INSERT INTO `request_subtype` (`application_id`) "
- "VALUES (?)";
-
const std::string kUpdateVersion = "UPDATE `version` SET `number`= ?";
const std::string kInsertMessageType =
diff --git a/src/components/policy/policy_external/src/sql_pt_representation.cc b/src/components/policy/policy_external/src/sql_pt_representation.cc
index 34c5b90903..31c69e3725 100644
--- a/src/components/policy/policy_external/src/sql_pt_representation.cc
+++ b/src/components/policy/policy_external/src/sql_pt_representation.cc
@@ -1193,18 +1193,6 @@ bool SQLPTRepresentation::SaveRequestType(
LOG4CXX_WARN(logger_, "Incorrect insert into request types.");
return false;
}
- } else {
- utils::dbms::SQLQuery query_omitted(db());
- if (!query_omitted.Prepare(sql_pt::kInsertOmittedRequestType)) {
- LOG4CXX_WARN(logger_, "Incorrect insert statement for request types.");
- return false;
- }
- LOG4CXX_WARN(logger_, "Request types omitted.");
- query_omitted.Bind(0, app_id);
- if (!query_omitted.Exec() || !query_omitted.Reset()) {
- LOG4CXX_WARN(logger_, "Incorrect insert into request types.");
- return false;
- }
}
return true;
}
@@ -1237,18 +1225,6 @@ bool SQLPTRepresentation::SaveRequestSubType(
LOG4CXX_WARN(logger_, "Incorrect insert into request subtypes.");
return false;
}
- } else {
- utils::dbms::SQLQuery query_omitted(db());
- if (!query_omitted.Prepare(sql_pt::kInsertOmittedRequestSubType)) {
- LOG4CXX_WARN(logger_, "Incorrect insert statement for request subtypes.");
- return false;
- }
- LOG4CXX_WARN(logger_, "Request subtypes omitted.");
- query_omitted.Bind(0, app_id);
- if (!query_omitted.Exec() || !query_omitted.Reset()) {
- LOG4CXX_WARN(logger_, "Incorrect insert into request subtypes.");
- return false;
- }
}
return true;
}
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc
index dd9b43d53c..93d4e19751 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc
@@ -113,27 +113,27 @@ TEST_F(PolicyManagerImplTest2, GetNotificationsNumberAfterPTUpdate) {
EXPECT_TRUE(policy_manager_->LoadPT(kFilePtUpdateJson, msg));
EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded());
- std::string priority = "emergency";
+ std::string priority = "EMERGENCY";
uint32_t notif_number = policy_manager_->GetNotificationsNumber(priority);
EXPECT_EQ(1u, notif_number);
- priority = "navigation";
+ priority = "NAVIGATION";
notif_number = policy_manager_->GetNotificationsNumber(priority);
EXPECT_EQ(2u, notif_number);
- priority = "emergency";
+ priority = "EMERGENCY";
notif_number = policy_manager_->GetNotificationsNumber(priority);
EXPECT_EQ(1u, notif_number);
- priority = "VOICECOMM";
+ priority = "VOICECOM";
notif_number = policy_manager_->GetNotificationsNumber(priority);
EXPECT_EQ(3u, notif_number);
- priority = "normal";
+ priority = "NORMAL";
notif_number = policy_manager_->GetNotificationsNumber(priority);
EXPECT_EQ(5u, notif_number);
- priority = "none";
+ priority = "NONE";
notif_number = policy_manager_->GetNotificationsNumber(priority);
EXPECT_EQ(6u, notif_number);
}
diff --git a/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc b/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc
index 86b7cdc9ef..13efa39805 100644
--- a/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc
+++ b/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc
@@ -105,12 +105,12 @@ Json::Value createPTforLoad() {
"}"
"},"
"\"notifications_per_minute_by_priority\": {"
- "\"emergency\": 1,"
- "\"navigation\": 2,"
- "\"VOICECOMM\": 3,"
- "\"communication\": 4,"
- "\"normal\": 5,"
- "\"none\": 6"
+ "\"EMERGENCY\": 1,"
+ "\"NAVIGATION\": 2,"
+ "\"VOICECOM\": 3,"
+ "\"COMMUNICATION\": 4,"
+ "\"NORMAL\": 5,"
+ "\"NONE\": 6"
"},"
"\"vehicle_make\" : \"MakeT\","
"\"vehicle_model\" : \"ModelT\","
diff --git a/src/components/policy/policy_regular/include/policy/policy_table/enums.h b/src/components/policy/policy_regular/include/policy/policy_table/enums.h
index b2acf77ec1..1f10db9f6f 100644
--- a/src/components/policy/policy_regular/include/policy/policy_table/enums.h
+++ b/src/components/policy/policy_regular/include/policy/policy_table/enums.h
@@ -44,6 +44,7 @@ enum Priority {
P_VOICECOM,
P_COMMUNICATION,
P_NORMAL,
+ P_PROJECTION,
P_NONE,
};
@@ -166,6 +167,372 @@ bool IsValidEnum(ModuleType val);
const char* EnumToJsonString(ModuleType val);
bool EnumFromJsonString(const std::string& literal, ModuleType* result);
+/**
+ * @brief Enumeration FunctionID.
+ *
+ * Enumeration linking function names with function IDs in AppLink protocol.
+ * Assumes enumeration starts at value 0.
+ */
+enum FunctionID {
+ /**
+ * @brief RESERVED.
+ */
+ RESERVED = 0,
+
+ /**
+ * @brief RegisterAppInterfaceID.
+ */
+ RegisterAppInterfaceID = 1,
+
+ /**
+ * @brief UnregisterAppInterfaceID.
+ */
+ UnregisterAppInterfaceID = 2,
+
+ /**
+ * @brief SetGlobalPropertiesID.
+ */
+ SetGlobalPropertiesID = 3,
+
+ /**
+ * @brief ResetGlobalPropertiesID.
+ */
+ ResetGlobalPropertiesID = 4,
+
+ /**
+ * @brief AddCommandID.
+ */
+ AddCommandID = 5,
+
+ /**
+ * @brief DeleteCommandID.
+ */
+ DeleteCommandID = 6,
+
+ /**
+ * @brief AddSubMenuID.
+ */
+ AddSubMenuID = 7,
+
+ /**
+ * @brief DeleteSubMenuID.
+ */
+ DeleteSubMenuID = 8,
+
+ /**
+ * @brief CreateInteractionChoiceSetID.
+ */
+ CreateInteractionChoiceSetID = 9,
+
+ /**
+ * @brief PerformInteractionID.
+ */
+ PerformInteractionID = 10,
+
+ /**
+ * @brief DeleteInteractionChoiceSetID.
+ */
+ DeleteInteractionChoiceSetID = 11,
+
+ /**
+ * @brief AlertID.
+ */
+ AlertID = 12,
+
+ /**
+ * @brief ShowID.
+ */
+ ShowID = 13,
+
+ /**
+ * @brief SpeakID.
+ */
+ SpeakID = 14,
+
+ /**
+ * @brief SetMediaClockTimerID.
+ */
+ SetMediaClockTimerID = 15,
+
+ /**
+ * @brief PerformAudioPassThruID.
+ */
+ PerformAudioPassThruID = 16,
+
+ /**
+ * @brief EndAudioPassThruID.
+ */
+ EndAudioPassThruID = 17,
+
+ /**
+ * @brief SubscribeButtonID.
+ */
+ SubscribeButtonID = 18,
+
+ /**
+ * @brief UnsubscribeButtonID.
+ */
+ UnsubscribeButtonID = 19,
+
+ /**
+ * @brief SubscribeVehicleDataID.
+ */
+ SubscribeVehicleDataID = 20,
+
+ /**
+ * @brief UnsubscribeVehicleDataID.
+ */
+ UnsubscribeVehicleDataID = 21,
+
+ /**
+ * @brief GetVehicleDataID.
+ */
+ GetVehicleDataID = 22,
+
+ /**
+ * @brief ReadDIDID.
+ */
+ ReadDIDID = 23,
+
+ /**
+ * @brief GetDTCsID.
+ */
+ GetDTCsID = 24,
+
+ /**
+ * @brief ScrollableMessageID.
+ */
+ ScrollableMessageID = 25,
+
+ /**
+ * @brief SliderID.
+ */
+ SliderID = 26,
+
+ /**
+ * @brief ShowConstantTBTID.
+ */
+ ShowConstantTBTID = 27,
+
+ /**
+ * @brief AlertManeuverID.
+ */
+ AlertManeuverID = 28,
+
+ /**
+ * @brief UpdateTurnListID.
+ */
+ UpdateTurnListID = 29,
+
+ /**
+ * @brief ChangeRegistrationID.
+ */
+ ChangeRegistrationID = 30,
+
+ /**
+ * @brief GenericResponseID.
+ */
+ GenericResponseID = 31,
+
+ /**
+ * @brief PutFileID.
+ */
+ PutFileID = 32,
+
+ /**
+ * @brief DeleteFileID.
+ */
+ DeleteFileID = 33,
+
+ /**
+ * @brief ListFilesID.
+ */
+ ListFilesID = 34,
+
+ /**
+ * @brief SetAppIconID.
+ */
+ SetAppIconID = 35,
+
+ /**
+ * @brief SetDisplayLayoutID.
+ */
+ SetDisplayLayoutID = 36,
+
+ /**
+ * @brief DiagnosticMessageID.
+ */
+ DiagnosticMessageID = 37,
+
+ /**
+ * @brief SystemRequestID.
+ */
+ SystemRequestID = 38,
+
+ /**
+ * @brief SendLocationID.
+ */
+ SendLocationID = 39,
+
+ /**
+ * @brief DialNumberID.
+ */
+ DialNumberID = 40,
+
+ /**
+ * @brief ButtonPressID.
+ */
+ ButtonPressID = 41,
+
+ /**
+ * @brief GetInteriorVehicleDataID.
+ */
+ GetInteriorVehicleDataID = 43,
+
+ /**
+ * @brief SetInteriorVehicleDataID.
+ */
+ SetInteriorVehicleDataID = 44,
+
+ /**
+ * @brief GetWayPointsID.
+ */
+ GetWayPointsID = 45,
+
+ /**
+ * @brief SubscribeWayPointsID.
+ */
+ SubscribeWayPointsID = 46,
+
+ /**
+ * @brief UnsubscribeWayPointsID.
+ */
+ UnsubscribeWayPointsID = 47,
+
+ /**
+ * @brief GetSystemCapabilityID.
+ */
+ GetSystemCapabilityID = 48,
+
+ /**
+ * @brief SendHapticDataID.
+ */
+ SendHapticDataID = 49,
+
+ /**
+ * @brief OnHMIStatusID.
+ */
+ OnHMIStatusID = 32768,
+
+ /**
+ * @brief OnAppInterfaceUnregisteredID.
+ */
+ OnAppInterfaceUnregisteredID = 32769,
+
+ /**
+ * @brief OnButtonEventID.
+ */
+ OnButtonEventID = 32770,
+
+ /**
+ * @brief OnButtonPressID.
+ */
+ OnButtonPressID = 32771,
+
+ /**
+ * @brief OnVehicleDataID.
+ */
+ OnVehicleDataID = 32772,
+
+ /**
+ * @brief OnCommandID.
+ */
+ OnCommandID = 32773,
+
+ /**
+ * @brief OnTBTClientStateID.
+ */
+ OnTBTClientStateID = 32774,
+
+ /**
+ * @brief OnDriverDistractionID.
+ */
+ OnDriverDistractionID = 32775,
+
+ /**
+ * @brief OnPermissionsChangeID.
+ */
+ OnPermissionsChangeID = 32776,
+
+ /**
+ * @brief OnAudioPassThruID.
+ */
+ OnAudioPassThruID = 32777,
+
+ /**
+ * @brief OnLanguageChangeID.
+ */
+ OnLanguageChangeID = 32778,
+
+ /**
+ * @brief OnKeyboardInputID.
+ */
+ OnKeyboardInputID = 32779,
+
+ /**
+ * @brief OnTouchEventID.
+ */
+ OnTouchEventID = 32780,
+
+ /**
+ * @brief OnSystemRequestID.
+ */
+ OnSystemRequestID = 32781,
+
+ /**
+ * @brief OnHashChangeID.
+ */
+ OnHashChangeID = 32782,
+
+ /**
+ * @brief OnInteriorVehicleDataID.
+ */
+ OnInteriorVehicleDataID = 32783,
+
+ /**
+ * @brief OnWayPointChangeID.
+ */
+ OnWayPointChangeID = 32784,
+
+ /**
+ * @brief OnRCStatusID.
+ */
+ OnRCStatusID = 32785,
+
+ /**
+ * @brief EncodedSyncPDataID.
+ */
+ EncodedSyncPDataID = 65536,
+
+ /**
+ * @brief SyncPDataID.
+ */
+ SyncPDataID = 65537,
+
+ /**
+ * @brief OnEncodedSyncPDataID.
+ */
+ OnEncodedSyncPDataID = 98304,
+
+ /**
+ * @brief OnSyncPDataID.
+ */
+ OnSyncPDataID = 98305
+};
+bool IsValidEnum(FunctionID val);
+const char* EnumToJsonString(FunctionID val);
+bool EnumFromJsonString(const std::string& literal, FunctionID* result);
+
extern const std::string kDefaultApp;
extern const std::string kPreDataConsentApp;
extern const std::string kDeviceApp;
diff --git a/src/components/policy/policy_regular/include/policy/sql_pt_queries.h b/src/components/policy/policy_regular/include/policy/sql_pt_queries.h
index 5259ffa7e9..191873efe0 100644
--- a/src/components/policy/policy_regular/include/policy/sql_pt_queries.h
+++ b/src/components/policy/policy_regular/include/policy/sql_pt_queries.h
@@ -79,8 +79,6 @@ extern const std::string kInsertAppGroup;
extern const std::string kInsertNickname;
extern const std::string kInsertAppType;
extern const std::string kInsertRequestType;
-extern const std::string kInsertOmittedRequestType;
-extern const std::string kInsertOmittedRequestSubType;
extern const std::string kInsertRequestSubType;
extern const std::string kInsertMessageType;
extern const std::string kInsertLanguage;
diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc
index f4b6f0ae03..084ddd2701 100644
--- a/src/components/policy/policy_regular/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc
@@ -143,6 +143,149 @@ void PolicyManagerImpl::CheckTriggers() {
}
}
+/**
+ * @brief FilterInvalidFunctions filter functions that are absent in schema
+ * @param rpcs list of functions to filter
+ */
+void FilterInvalidFunctions(policy_table::Rpc& rpcs) {
+ policy_table::Rpc valid_rpcs;
+ for (const auto& rpc : rpcs) {
+ const std::string& rpc_name = rpc.first;
+ policy_table::FunctionID function_id;
+ if (policy_table::EnumFromJsonString(rpc_name, &function_id)) {
+ valid_rpcs.insert(rpc);
+ }
+ }
+ rpcs.swap(valid_rpcs);
+}
+
+/**
+ * @brief FilterInvalidRPCParameters filter parameters that not present in
+ * schema
+ * @param rpc_parameters parameters to filter
+ */
+void FilterInvalidRPCParameters(policy_table::RpcParameters& rpc_parameters) {
+ policy_table::HmiLevels valid_hmi_levels;
+ for (const auto& hmi_level : rpc_parameters.hmi_levels) {
+ if (hmi_level.is_valid()) {
+ valid_hmi_levels.push_back(hmi_level);
+ }
+ }
+ rpc_parameters.hmi_levels.swap(valid_hmi_levels);
+
+ policy_table::Parameters valid_params;
+ const policy_table::Parameters& params = *(rpc_parameters.parameters);
+ for (const auto& param : params) {
+ if (param.is_valid()) {
+ valid_params.push_back(param);
+ }
+ }
+ rpc_parameters.parameters->swap(valid_params);
+}
+
+/**
+ * @brief FilterInvalidPriorityValues filter notification priorities that are
+ * not present in schema
+ * @param notifications priorities to filter
+ */
+void FilterInvalidPriorityValues(
+ policy_table::NumberOfNotificationsPerMinute& notifications) {
+ policy_table::NumberOfNotificationsPerMinute valid_notifications;
+ for (const auto& notification : notifications) {
+ policy_table::Priority priority;
+ if (policy_table::EnumFromJsonString(notification.first, &priority)) {
+ valid_notifications.insert(notification);
+ }
+ }
+ notifications.swap(valid_notifications);
+}
+
+/**
+ * @brief FilterInvalidApplicationParameters filter app params that are not
+ * present in schema
+ * @param app_params object of app policy params to filter
+ */
+void FilterInvalidApplicationParameters(
+ policy_table::ApplicationParams& app_params) {
+ // Filter AppHMIType array
+ policy_table::AppHMITypes valid_app_hmi_types;
+ const policy_table::AppHMITypes& app_hmi_types = *(app_params.AppHMIType);
+ for (const auto& app_hmi_type : app_hmi_types) {
+ if (app_hmi_type.is_valid()) {
+ valid_app_hmi_types.push_back(app_hmi_type);
+ }
+ }
+ app_params.AppHMIType->swap(valid_app_hmi_types);
+
+ // Filter RquestTypes array
+ policy_table::RequestTypes valid_request_types;
+ const policy_table::RequestTypes& request_types = *(app_params.RequestType);
+ for (const auto& request_type : request_types) {
+ if (request_type.is_valid()) {
+ valid_request_types.push_back(request_type);
+ }
+ }
+ if (valid_request_types.empty() && !request_types.empty()) {
+ // An empty RequestType array will allow all request types. No valid
+ // parameters are in the filtered array, so assign an uninitialized value to
+ // for array to be "omitted"
+ *(app_params.RequestType) = policy_table::RequestTypes();
+ } else {
+ app_params.RequestType->swap(valid_request_types);
+ }
+
+ // Filter moduleType array
+ policy_table::ModuleTypes valid_module_types;
+ const policy_table::ModuleTypes& module_types = *(app_params.moduleType);
+ for (const auto& module_type : module_types) {
+ if (module_type.is_valid()) {
+ valid_module_types.push_back(module_type);
+ }
+ }
+ if (valid_module_types.empty() && !module_types.empty()) {
+ // An empty moduleType array will allow all request types. No valid
+ // parameters are in the filtered array, so assign an uninitialized value to
+ // for array to be "omitted"
+ *(app_params.moduleType) = policy_table::ModuleTypes();
+ } else {
+ app_params.moduleType->swap(valid_module_types);
+ }
+
+ // Filter priority
+ if (!app_params.priority.is_valid()) {
+ app_params.priority = policy_table::Priority();
+ }
+}
+
+/**
+ * @brief FilterPolicyTable filter values that not present in schema
+ * @param pt policy table to filter
+ */
+void FilterPolicyTable(policy_table::PolicyTable& pt) {
+ policy_table::ModuleConfig& module_config = pt.module_config;
+ if (module_config.is_initialized() &&
+ module_config.notifications_per_minute_by_priority.is_initialized()) {
+ FilterInvalidPriorityValues(
+ module_config.notifications_per_minute_by_priority);
+ }
+
+ if (pt.app_policies_section.is_initialized()) {
+ policy_table::ApplicationPolicies& apps = pt.app_policies_section.apps;
+ for (auto& app_policy : apps) {
+ FilterInvalidApplicationParameters(app_policy.second);
+ }
+ }
+
+ for (auto& group : pt.functional_groupings) {
+ policy_table::Rpc& rpcs = group.second.rpcs;
+ FilterInvalidFunctions(rpcs);
+
+ for (auto& func : rpcs) {
+ FilterInvalidRPCParameters(func.second);
+ }
+ }
+}
+
bool PolicyManagerImpl::LoadPT(const std::string& file,
const BinaryMessage& pt_content) {
LOG4CXX_INFO(logger_, "LoadPT of size " << pt_content.size());
@@ -168,6 +311,7 @@ bool PolicyManagerImpl::LoadPT(const std::string& file,
file_system::DeleteFile(file);
+ FilterPolicyTable(pt_update->policy_table);
if (!IsPTValid(pt_update, policy_table::PT_UPDATE)) {
wrong_ptu_update_received_ = true;
update_status_manager_.OnWrongUpdateReceived();
diff --git a/src/components/policy/policy_regular/src/policy_table/enums.cc b/src/components/policy/policy_regular/src/policy_table/enums.cc
index 138d866174..ec92d064da 100644
--- a/src/components/policy/policy_regular/src/policy_table/enums.cc
+++ b/src/components/policy/policy_regular/src/policy_table/enums.cc
@@ -15,6 +15,8 @@ bool IsValidEnum(Priority val) {
return true;
case P_NORMAL:
return true;
+ case P_PROJECTION:
+ return true;
case P_NONE:
return true;
default:
@@ -33,6 +35,8 @@ const char* EnumToJsonString(Priority val) {
return "COMMUNICATION";
case P_NORMAL:
return "NORMAL";
+ case P_PROJECTION:
+ return "PROJECTION";
case P_NONE:
return "NONE";
default:
@@ -55,6 +59,9 @@ bool EnumFromJsonString(const std::string& literal, Priority* result) {
} else if ("NORMAL" == literal) {
*result = P_NORMAL;
return true;
+ } else if ("PROJECTION" == literal) {
+ *result = P_PROJECTION;
+ return true;
} else if ("NONE" == literal) {
*result = P_NONE;
return true;
@@ -702,6 +709,662 @@ bool EnumFromJsonString(const std::string& literal, ModuleType* result) {
return false;
}
+bool IsValidEnum(FunctionID val) {
+ switch (val) {
+ case RESERVED:
+ return true;
+ case RegisterAppInterfaceID:
+ return true;
+ case UnregisterAppInterfaceID:
+ return true;
+ case SetGlobalPropertiesID:
+ return true;
+ case ResetGlobalPropertiesID:
+ return true;
+ case AddCommandID:
+ return true;
+ case DeleteCommandID:
+ return true;
+ case AddSubMenuID:
+ return true;
+ case DeleteSubMenuID:
+ return true;
+ case CreateInteractionChoiceSetID:
+ return true;
+ case PerformInteractionID:
+ return true;
+ case DeleteInteractionChoiceSetID:
+ return true;
+ case AlertID:
+ return true;
+ case ShowID:
+ return true;
+ case SpeakID:
+ return true;
+ case SetMediaClockTimerID:
+ return true;
+ case PerformAudioPassThruID:
+ return true;
+ case EndAudioPassThruID:
+ return true;
+ case SubscribeButtonID:
+ return true;
+ case UnsubscribeButtonID:
+ return true;
+ case SubscribeVehicleDataID:
+ return true;
+ case UnsubscribeVehicleDataID:
+ return true;
+ case GetVehicleDataID:
+ return true;
+ case ReadDIDID:
+ return true;
+ case GetDTCsID:
+ return true;
+ case ScrollableMessageID:
+ return true;
+ case SliderID:
+ return true;
+ case ShowConstantTBTID:
+ return true;
+ case AlertManeuverID:
+ return true;
+ case UpdateTurnListID:
+ return true;
+ case ChangeRegistrationID:
+ return true;
+ case GenericResponseID:
+ return true;
+ case PutFileID:
+ return true;
+ case DeleteFileID:
+ return true;
+ case ListFilesID:
+ return true;
+ case SetAppIconID:
+ return true;
+ case SetDisplayLayoutID:
+ return true;
+ case DiagnosticMessageID:
+ return true;
+ case SystemRequestID:
+ return true;
+ case SendLocationID:
+ return true;
+ case DialNumberID:
+ return true;
+ case ButtonPressID:
+ return true;
+ case GetInteriorVehicleDataID:
+ return true;
+ case SetInteriorVehicleDataID:
+ return true;
+ case GetWayPointsID:
+ return true;
+ case SubscribeWayPointsID:
+ return true;
+ case UnsubscribeWayPointsID:
+ return true;
+ case GetSystemCapabilityID:
+ return true;
+ case SendHapticDataID:
+ return true;
+ case OnHMIStatusID:
+ return true;
+ case OnAppInterfaceUnregisteredID:
+ return true;
+ case OnButtonEventID:
+ return true;
+ case OnButtonPressID:
+ return true;
+ case OnVehicleDataID:
+ return true;
+ case OnCommandID:
+ return true;
+ case OnTBTClientStateID:
+ return true;
+ case OnDriverDistractionID:
+ return true;
+ case OnPermissionsChangeID:
+ return true;
+ case OnAudioPassThruID:
+ return true;
+ case OnLanguageChangeID:
+ return true;
+ case OnKeyboardInputID:
+ return true;
+ case OnTouchEventID:
+ return true;
+ case OnSystemRequestID:
+ return true;
+ case OnHashChangeID:
+ return true;
+ case OnInteriorVehicleDataID:
+ return true;
+ case OnWayPointChangeID:
+ return true;
+ case OnRCStatusID:
+ return true;
+ case EncodedSyncPDataID:
+ return true;
+ case SyncPDataID:
+ return true;
+ case OnEncodedSyncPDataID:
+ return true;
+ case OnSyncPDataID:
+ return true;
+ default:
+ return false;
+ }
+};
+
+const char* EnumToJsonString(FunctionID val) {
+ switch (val) {
+ case RESERVED:
+ return "RESERVE";
+ case RegisterAppInterfaceID:
+ return "RegisterAppInterface";
+ case UnregisterAppInterfaceID:
+ return "UnregisterAppInterface";
+ case SetGlobalPropertiesID:
+ return "SetGlobalProperties";
+ case ResetGlobalPropertiesID:
+ return "ResetGlobalProperties";
+ case AddCommandID:
+ return "AddCommand";
+ case DeleteCommandID:
+ return "DeleteCommand";
+ case AddSubMenuID:
+ return "AddSubMenu";
+ case DeleteSubMenuID:
+ return "DeleteSubMenu";
+ case CreateInteractionChoiceSetID:
+ return "CreateInteractionChoiceSet";
+ case PerformInteractionID:
+ return "PerformInteraction";
+ case DeleteInteractionChoiceSetID:
+ return "DeleteInteractionChoiceSet";
+ case AlertID:
+ return "Alert";
+ case ShowID:
+ return "Show";
+ case SpeakID:
+ return "Speak";
+ case SetMediaClockTimerID:
+ return "SetMediaClockTimer";
+ case PerformAudioPassThruID:
+ return "PerformAudioPassThru";
+ case EndAudioPassThruID:
+ return "EndAudioPassThru";
+ case SubscribeButtonID:
+ return "SubscribeButton";
+ case UnsubscribeButtonID:
+ return "UnsubscribeButton";
+ case SubscribeVehicleDataID:
+ return "SubscribeVehicleData";
+ case UnsubscribeVehicleDataID:
+ return "UnsubscribeVehicleData";
+ case GetVehicleDataID:
+ return "GetVehicleData";
+ case ReadDIDID:
+ return "ReadD";
+ case GetDTCsID:
+ return "GetDTCs";
+ case ScrollableMessageID:
+ return "ScrollableMessage";
+ case SliderID:
+ return "Slider";
+ case ShowConstantTBTID:
+ return "ShowConstantTBT";
+ case AlertManeuverID:
+ return "AlertManeuver";
+ case UpdateTurnListID:
+ return "UpdateTurnList";
+ case ChangeRegistrationID:
+ return "ChangeRegistration";
+ case GenericResponseID:
+ return "GenericResponse";
+ case PutFileID:
+ return "PutFile";
+ case DeleteFileID:
+ return "DeleteFile";
+ case ListFilesID:
+ return "ListFiles";
+ case SetAppIconID:
+ return "SetAppIcon";
+ case SetDisplayLayoutID:
+ return "SetDisplayLayout";
+ case DiagnosticMessageID:
+ return "DiagnosticMessage";
+ case SystemRequestID:
+ return "SystemRequest";
+ case SendLocationID:
+ return "SendLocation";
+ case DialNumberID:
+ return "DialNumber";
+ case ButtonPressID:
+ return "ButtonPress";
+ case GetInteriorVehicleDataID:
+ return "GetInteriorVehicleData";
+ case SetInteriorVehicleDataID:
+ return "SetInteriorVehicleData";
+ case GetWayPointsID:
+ return "GetWayPoints";
+ case SubscribeWayPointsID:
+ return "SubscribeWayPoints";
+ case UnsubscribeWayPointsID:
+ return "UnsubscribeWayPoints";
+ case GetSystemCapabilityID:
+ return "GetSystemCapability";
+ case SendHapticDataID:
+ return "SendHapticData";
+ case OnHMIStatusID:
+ return "OnHMIStatus";
+ case OnAppInterfaceUnregisteredID:
+ return "OnAppInterfaceUnregistered";
+ case OnButtonEventID:
+ return "OnButtonEvent";
+ case OnButtonPressID:
+ return "OnButtonPress";
+ case OnVehicleDataID:
+ return "OnVehicleData";
+ case OnCommandID:
+ return "OnCommand";
+ case OnTBTClientStateID:
+ return "OnTBTClientState";
+ case OnDriverDistractionID:
+ return "OnDriverDistraction";
+ case OnPermissionsChangeID:
+ return "OnPermissionsChange";
+ case OnAudioPassThruID:
+ return "OnAudioPassThru";
+ case OnLanguageChangeID:
+ return "OnLanguageChange";
+ case OnKeyboardInputID:
+ return "OnKeyboardInput";
+ case OnTouchEventID:
+ return "OnTouchEvent";
+ case OnSystemRequestID:
+ return "OnSystemRequest";
+ case OnHashChangeID:
+ return "OnHashChange";
+ case OnInteriorVehicleDataID:
+ return "OnInteriorVehicleData";
+ case OnWayPointChangeID:
+ return "OnWayPointChange";
+ case OnRCStatusID:
+ return "OnRCStatus";
+ case EncodedSyncPDataID:
+ return "EncodedSyncPData";
+ case SyncPDataID:
+ return "SyncPData";
+ case OnEncodedSyncPDataID:
+ return "OnEncodedSyncPData";
+ case OnSyncPDataID:
+ return "OnSyncPData";
+ default:
+ return "";
+ }
+};
+
+bool EnumFromJsonString(const std::string& literal, FunctionID* result) {
+ if ("RESERVE" == literal) {
+ *result = RESERVED;
+ return true;
+ }
+
+ if ("RegisterAppInterface" == literal) {
+ *result = RegisterAppInterfaceID;
+ return true;
+ }
+
+ if ("UnregisterAppInterface" == literal) {
+ *result = UnregisterAppInterfaceID;
+ return true;
+ }
+
+ if ("SetGlobalProperties" == literal) {
+ *result = SetGlobalPropertiesID;
+ return true;
+ }
+
+ if ("ResetGlobalProperties" == literal) {
+ *result = ResetGlobalPropertiesID;
+ return true;
+ }
+
+ if ("AddCommand" == literal) {
+ *result = AddCommandID;
+ return true;
+ }
+
+ if ("DeleteCommand" == literal) {
+ *result = DeleteCommandID;
+ return true;
+ }
+
+ if ("AddSubMenu" == literal) {
+ *result = AddSubMenuID;
+ return true;
+ }
+
+ if ("DeleteSubMenu" == literal) {
+ *result = DeleteSubMenuID;
+ return true;
+ }
+
+ if ("CreateInteractionChoiceSet" == literal) {
+ *result = CreateInteractionChoiceSetID;
+ return true;
+ }
+
+ if ("PerformInteraction" == literal) {
+ *result = PerformInteractionID;
+ return true;
+ }
+
+ if ("DeleteInteractionChoiceSet" == literal) {
+ *result = DeleteInteractionChoiceSetID;
+ return true;
+ }
+
+ if ("Alert" == literal) {
+ *result = AlertID;
+ return true;
+ }
+
+ if ("Show" == literal) {
+ *result = ShowID;
+ return true;
+ }
+
+ if ("Speak" == literal) {
+ *result = SpeakID;
+ return true;
+ }
+
+ if ("SetMediaClockTimer" == literal) {
+ *result = SetMediaClockTimerID;
+ return true;
+ }
+
+ if ("PerformAudioPassThru" == literal) {
+ *result = PerformAudioPassThruID;
+ return true;
+ }
+
+ if ("EndAudioPassThru" == literal) {
+ *result = EndAudioPassThruID;
+ return true;
+ }
+
+ if ("SubscribeButton" == literal) {
+ *result = SubscribeButtonID;
+ return true;
+ }
+
+ if ("UnsubscribeButton" == literal) {
+ *result = UnsubscribeButtonID;
+ return true;
+ }
+
+ if ("SubscribeVehicleData" == literal) {
+ *result = SubscribeVehicleDataID;
+ return true;
+ }
+
+ if ("UnsubscribeVehicleData" == literal) {
+ *result = UnsubscribeVehicleDataID;
+ return true;
+ }
+
+ if ("GetVehicleData" == literal) {
+ *result = GetVehicleDataID;
+ return true;
+ }
+
+ if ("ReadD" == literal) {
+ *result = ReadDIDID;
+ return true;
+ }
+
+ if ("GetDTCs" == literal) {
+ *result = GetDTCsID;
+ return true;
+ }
+
+ if ("ScrollableMessage" == literal) {
+ *result = ScrollableMessageID;
+ return true;
+ }
+
+ if ("Slider" == literal) {
+ *result = SliderID;
+ return true;
+ }
+
+ if ("ShowConstantTBT" == literal) {
+ *result = ShowConstantTBTID;
+ return true;
+ }
+
+ if ("AlertManeuver" == literal) {
+ *result = AlertManeuverID;
+ return true;
+ }
+
+ if ("UpdateTurnList" == literal) {
+ *result = UpdateTurnListID;
+ return true;
+ }
+
+ if ("ChangeRegistration" == literal) {
+ *result = ChangeRegistrationID;
+ return true;
+ }
+
+ if ("GenericResponse" == literal) {
+ *result = GenericResponseID;
+ return true;
+ }
+
+ if ("PutFile" == literal) {
+ *result = PutFileID;
+ return true;
+ }
+
+ if ("DeleteFile" == literal) {
+ *result = DeleteFileID;
+ return true;
+ }
+
+ if ("ListFiles" == literal) {
+ *result = ListFilesID;
+ return true;
+ }
+
+ if ("SetAppIcon" == literal) {
+ *result = SetAppIconID;
+ return true;
+ }
+
+ if ("SetDisplayLayout" == literal) {
+ *result = SetDisplayLayoutID;
+ return true;
+ }
+
+ if ("DiagnosticMessage" == literal) {
+ *result = DiagnosticMessageID;
+ return true;
+ }
+
+ if ("SystemRequest" == literal) {
+ *result = SystemRequestID;
+ return true;
+ }
+
+ if ("SendLocation" == literal) {
+ *result = SendLocationID;
+ return true;
+ }
+
+ if ("DialNumber" == literal) {
+ *result = DialNumberID;
+ return true;
+ }
+
+ if ("ButtonPress" == literal) {
+ *result = ButtonPressID;
+ return true;
+ }
+
+ if ("GetInteriorVehicleData" == literal) {
+ *result = GetInteriorVehicleDataID;
+ return true;
+ }
+
+ if ("SetInteriorVehicleData" == literal) {
+ *result = SetInteriorVehicleDataID;
+ return true;
+ }
+
+ if ("GetWayPoints" == literal) {
+ *result = GetWayPointsID;
+ return true;
+ }
+
+ if ("SubscribeWayPoints" == literal) {
+ *result = SubscribeWayPointsID;
+ return true;
+ }
+
+ if ("UnsubscribeWayPoints" == literal) {
+ *result = UnsubscribeWayPointsID;
+ return true;
+ }
+
+ if ("GetSystemCapability" == literal) {
+ *result = GetSystemCapabilityID;
+ return true;
+ }
+
+ if ("SendHapticData" == literal) {
+ *result = SendHapticDataID;
+ return true;
+ }
+
+ if ("OnHMIStatus" == literal) {
+ *result = OnHMIStatusID;
+ return true;
+ }
+
+ if ("OnAppInterfaceUnregistered" == literal) {
+ *result = OnAppInterfaceUnregisteredID;
+ return true;
+ }
+
+ if ("OnButtonEvent" == literal) {
+ *result = OnButtonEventID;
+ return true;
+ }
+
+ if ("OnButtonPress" == literal) {
+ *result = OnButtonPressID;
+ return true;
+ }
+
+ if ("OnVehicleData" == literal) {
+ *result = OnVehicleDataID;
+ return true;
+ }
+
+ if ("OnCommand" == literal) {
+ *result = OnCommandID;
+ return true;
+ }
+
+ if ("OnTBTClientState" == literal) {
+ *result = OnTBTClientStateID;
+ return true;
+ }
+
+ if ("OnDriverDistraction" == literal) {
+ *result = OnDriverDistractionID;
+ return true;
+ }
+
+ if ("OnPermissionsChange" == literal) {
+ *result = OnPermissionsChangeID;
+ return true;
+ }
+
+ if ("OnAudioPassThru" == literal) {
+ *result = OnAudioPassThruID;
+ return true;
+ }
+
+ if ("OnLanguageChange" == literal) {
+ *result = OnLanguageChangeID;
+ return true;
+ }
+
+ if ("OnKeyboardInput" == literal) {
+ *result = OnKeyboardInputID;
+ return true;
+ }
+
+ if ("OnTouchEvent" == literal) {
+ *result = OnTouchEventID;
+ return true;
+ }
+
+ if ("OnSystemRequest" == literal) {
+ *result = OnSystemRequestID;
+ return true;
+ }
+
+ if ("OnHashChange" == literal) {
+ *result = OnHashChangeID;
+ return true;
+ }
+
+ if ("OnInteriorVehicleData" == literal) {
+ *result = OnInteriorVehicleDataID;
+ return true;
+ }
+
+ if ("OnWayPointChange" == literal) {
+ *result = OnWayPointChangeID;
+ return true;
+ }
+
+ if ("OnRCStatus" == literal) {
+ *result = OnRCStatusID;
+ return true;
+ }
+
+ if ("EncodedSyncPData" == literal) {
+ *result = EncodedSyncPDataID;
+ return true;
+ }
+
+ if ("SyncPData" == literal) {
+ *result = SyncPDataID;
+ return true;
+ }
+
+ if ("OnEncodedSyncPData" == literal) {
+ *result = OnEncodedSyncPDataID;
+ return true;
+ }
+
+ if ("OnSyncPData" == literal) {
+ *result = OnSyncPDataID;
+ return true;
+ }
+ return false;
+};
+
const std::string kDefaultApp = "default";
const std::string kPreDataConsentApp = "pre_DataConsent";
const std::string kDeviceApp = "device";
diff --git a/src/components/policy/policy_regular/src/sql_pt_queries.cc b/src/components/policy/policy_regular/src/sql_pt_queries.cc
index 91a5573a04..f5ccffce3b 100644
--- a/src/components/policy/policy_regular/src/sql_pt_queries.cc
+++ b/src/components/policy/policy_regular/src/sql_pt_queries.cc
@@ -595,19 +595,11 @@ const std::string kInsertRequestType =
"INSERT INTO `request_type` (`application_id`, `request_type`) "
"VALUES (?, ?)";
-const std::string kInsertOmittedRequestType =
- "INSERT INTO `request_type` (`application_id`) "
- "VALUES (?)";
-
const std::string kInsertRequestSubType =
"INSERT INTO `request_subtype` (`application_id`, "
"`request_subtype`) "
"VALUES (?, ?)";
-const std::string kInsertOmittedRequestSubType =
- "INSERT INTO `request_subtype` (`application_id`) "
- "VALUES (?)";
-
const std::string kUpdateVersion = "UPDATE `version` SET `number`= ?";
const std::string kInsertMessageType =
diff --git a/src/components/policy/policy_regular/src/sql_pt_representation.cc b/src/components/policy/policy_regular/src/sql_pt_representation.cc
index d32ee7133d..4f5dbc4c3b 100644
--- a/src/components/policy/policy_regular/src/sql_pt_representation.cc
+++ b/src/components/policy/policy_regular/src/sql_pt_representation.cc
@@ -1137,18 +1137,6 @@ bool SQLPTRepresentation::SaveRequestType(
LOG4CXX_WARN(logger_, "Incorrect insert into request types.");
return false;
}
- } else {
- utils::dbms::SQLQuery query_omitted(db());
- if (!query_omitted.Prepare(sql_pt::kInsertOmittedRequestType)) {
- LOG4CXX_WARN(logger_, "Incorrect insert statement for request types.");
- return false;
- }
- LOG4CXX_WARN(logger_, "Request types omitted.");
- query_omitted.Bind(0, app_id);
- if (!query_omitted.Exec() || !query_omitted.Reset()) {
- LOG4CXX_WARN(logger_, "Incorrect insert into request types.");
- return false;
- }
}
return true;
}
@@ -1181,18 +1169,6 @@ bool SQLPTRepresentation::SaveRequestSubType(
LOG4CXX_WARN(logger_, "Incorrect insert into request subtypes.");
return false;
}
- } else {
- utils::dbms::SQLQuery query_omitted(db());
- if (!query_omitted.Prepare(sql_pt::kInsertOmittedRequestSubType)) {
- LOG4CXX_WARN(logger_, "Incorrect insert statement for request subtypes.");
- return false;
- }
- LOG4CXX_WARN(logger_, "Request subtypes omitted.");
- query_omitted.Bind(0, app_id);
- if (!query_omitted.Exec() || !query_omitted.Reset()) {
- LOG4CXX_WARN(logger_, "Incorrect insert into request subtypes.");
- return false;
- }
}
return true;
}
diff --git a/src/components/policy/policy_regular/test/policy_manager_impl_test.cc b/src/components/policy/policy_regular/test/policy_manager_impl_test.cc
index 9f73f60d28..ff054b3cc4 100644
--- a/src/components/policy/policy_regular/test/policy_manager_impl_test.cc
+++ b/src/components/policy/policy_regular/test/policy_manager_impl_test.cc
@@ -383,12 +383,12 @@ Json::Value CreatePTforLoad() {
"}"
"},"
"\"notifications_per_minute_by_priority\": {"
- "\"emergency\": 1,"
- "\"navigation\": 2,"
- "\"VOICECOMM\": 3,"
- "\"communication\": 4,"
- "\"normal\": 5,"
- "\"none\": 6"
+ "\"EMERGENCY\": 1,"
+ "\"NAVIGATION\": 2,"
+ "\"VOICECOM\": 3,"
+ "\"COMMUNICATION\": 4,"
+ "\"NORMAL\": 5,"
+ "\"NONE\": 6"
"},"
"\"vehicle_make\" : \"MakeT\","
"\"vehicle_model\" : \"ModelT\","
@@ -481,27 +481,27 @@ TEST_F(PolicyManagerImplTest2, GetNotificationsNumberAfterPTUpdate) {
EXPECT_CALL(listener, OnUpdateStatusChanged(_));
EXPECT_TRUE(manager->LoadPT("file_pt_update.json", msg));
- std::string priority = "emergency";
+ std::string priority = "EMERGENCY";
uint32_t notif_number = manager->GetNotificationsNumber(priority);
EXPECT_EQ(1u, notif_number);
- priority = "navigation";
+ priority = "NAVIGATION";
notif_number = manager->GetNotificationsNumber(priority);
EXPECT_EQ(2u, notif_number);
- priority = "emergency";
+ priority = "EMERGENCY";
notif_number = manager->GetNotificationsNumber(priority);
EXPECT_EQ(1u, notif_number);
- priority = "VOICECOMM";
+ priority = "VOICECOM";
notif_number = manager->GetNotificationsNumber(priority);
EXPECT_EQ(3u, notif_number);
- priority = "normal";
+ priority = "NORMAL";
notif_number = manager->GetNotificationsNumber(priority);
EXPECT_EQ(5u, notif_number);
- priority = "none";
+ priority = "NONE";
notif_number = manager->GetNotificationsNumber(priority);
EXPECT_EQ(6u, notif_number);
}
diff --git a/src/components/protocol_handler/src/protocol_handler_impl.cc b/src/components/protocol_handler/src/protocol_handler_impl.cc
index 28773e75d5..d03030b747 100644
--- a/src/components/protocol_handler/src/protocol_handler_impl.cc
+++ b/src/components/protocol_handler/src/protocol_handler_impl.cc
@@ -1556,15 +1556,9 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
logger_,
"Protocol version:" << static_cast<int>(packet->protocol_version()));
const ServiceType service_type = ServiceTypeFromByte(packet->service_type());
- BsonObject bson_obj;
- if (packet->data() != NULL) {
- bson_obj = bson_object_from_bytes(packet->data());
- } else {
- bson_object_initialize_default(&bson_obj);
- }
-#ifdef ENABLE_SECURITY
const uint8_t protocol_version = packet->protocol_version();
+#ifdef ENABLE_SECURITY
const bool protection =
// Protocol version 1 does not support protection
(protocol_version > PROTOCOL_VERSION_1) ? packet->protection_flag()
@@ -1575,6 +1569,31 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
const ConnectionID connection_id = packet->connection_id();
const uint8_t session_id = packet->session_id();
+ const std::string& transport =
+ session_observer_.TransportTypeProfileStringFromConnHandle(connection_id);
+
+ const auto video_transports = settings_.video_service_transports();
+ const bool is_video_allowed =
+ video_transports.empty() ||
+ std::find(video_transports.begin(), video_transports.end(), transport) !=
+ video_transports.end();
+
+ const auto audio_transports = settings_.audio_service_transports();
+ const bool is_audio_allowed =
+ audio_transports.empty() ||
+ std::find(audio_transports.begin(), audio_transports.end(), transport) !=
+ audio_transports.end();
+
+ if ((ServiceType::kMobileNav == service_type && !is_video_allowed) ||
+ (ServiceType::kAudio == service_type && !is_audio_allowed)) {
+ LOG4CXX_DEBUG(logger_,
+ "Rejecting StartService for service:"
+ << service_type << ", over transport: " << transport
+ << ", disallowed by settings.");
+ SendStartSessionNAck(
+ connection_id, session_id, protocol_version, service_type);
+ return RESULT_OK;
+ }
LOG4CXX_INFO(logger_,
"StartSession ID " << static_cast<int>(session_id)
@@ -1587,6 +1606,13 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
packet;
}
+ BsonObject bson_obj;
+ if (packet->data() != NULL) {
+ bson_obj = bson_object_from_bytes(packet->data());
+ } else {
+ bson_object_initialize_default(&bson_obj);
+ }
+
session_observer_.OnSessionStartedCallback(
connection_id, packet->session_id(), service_type, protection, &bson_obj);
bson_object_deinitialize(&bson_obj);
diff --git a/src/components/protocol_handler/test/protocol_handler_tm_test.cc b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
index 615900c7fa..51284dfcda 100644
--- a/src/components/protocol_handler/test/protocol_handler_tm_test.cc
+++ b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
@@ -269,6 +269,21 @@ class ProtocolHandlerImplTest : public ::testing::Test {
HASH_ID_WRONG,
callback_protection_flag);
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -452,6 +467,24 @@ TEST_F(ProtocolHandlerImplTest,
TestAsyncWaiter waiter;
uint32_t times = 0;
ServiceType service_type;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .Times(call_times)
+ .WillRepeatedly(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .Times(call_times)
+ .WillRepeatedly(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .Times(call_times)
+ .WillRepeatedly(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(
session_observer_mock,
@@ -520,6 +553,24 @@ TEST_F(ProtocolHandlerImplTest, StartSession_Protected_SessionObserverReject) {
TestAsyncWaiter waiter;
uint32_t times = 0;
ServiceType service_type;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .Times(call_times)
+ .WillRepeatedly(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .Times(call_times)
+ .WillRepeatedly(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .Times(call_times)
+ .WillRepeatedly(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(
session_observer_mock,
@@ -578,6 +629,21 @@ TEST_F(ProtocolHandlerImplTest,
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -694,6 +760,26 @@ TEST_F(ProtocolHandlerImplTest,
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id1))
+ .WillOnce(Return("TCP_WIFI"));
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id2))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .Times(2)
+ .WillRepeatedly(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .Times(2)
+ .WillRepeatedly(ReturnRef(video_service_transports));
+
BsonObject bson_params1;
bson_object_initialize_default(&bson_params1);
bson_object_put_string(&bson_params1,
@@ -830,6 +916,84 @@ TEST_F(ProtocolHandlerImplTest,
bson_object_deinitialize(&bson_params2);
}
+/*
+ * ProtocolHandler shall send NAck on session_observer rejection
+ * Check protection flag OFF for all services from kControl to kBulk
+ */
+TEST_F(ProtocolHandlerImplTest, StartSession_Audio_RejectByTransportType) {
+ using namespace protocol_handler;
+ AddConnection();
+ const ServiceType start_service = kAudio;
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("AOA_USB");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
+ // Expect send Ack
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_NACK,
+ PROTECTION_OFF)))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ SendControlMessage(
+ PROTECTION_OFF, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+/*
+ * ProtocolHandler shall send NAck on session_observer rejection
+ * Check protection flag OFF for all services from kControl to kBulk
+ */
+TEST_F(ProtocolHandlerImplTest, StartSession_Video_RejectByTransportType) {
+ using namespace protocol_handler;
+ AddConnection();
+ const ServiceType start_service = kMobileNav;
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("AOA_USB");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
+ // Expect send Ack
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_NACK,
+ PROTECTION_OFF)))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ SendControlMessage(
+ PROTECTION_OFF, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
// TODO(EZamakhov): add test for get_hash_id/set_hash_id from
// protocol_handler_impl.cc
/*
@@ -910,6 +1074,21 @@ TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionProtocoloV1) {
// Add security manager
AddSecurityManager();
const ServiceType start_service = kRpc;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -966,6 +1145,21 @@ TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionUnprotected) {
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -1021,6 +1215,21 @@ TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionProtected_Fail) {
PROTECTION_ON);
context.is_new_service_ = true;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -1074,6 +1283,21 @@ TEST_F(ProtocolHandlerImplTest,
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -1150,6 +1374,21 @@ TEST_F(ProtocolHandlerImplTest,
PROTECTION_ON);
context.is_new_service_ = true;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -1231,6 +1470,21 @@ TEST_F(ProtocolHandlerImplTest,
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -1329,6 +1583,21 @@ TEST_F(
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
@@ -1425,6 +1694,21 @@ TEST_F(ProtocolHandlerImplTest,
TestAsyncWaiter waiter;
uint32_t times = 0;
+ // Expect verification of allowed transport
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillOnce(Return("TCP_WIFI"));
+
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(video_service_transports));
+
// Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
OnSessionStartedCallback(connection_id,
diff --git a/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h b/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h
index 36a2b374dd..e53a472bcb 100644
--- a/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h
@@ -74,6 +74,15 @@ class IAP2BluetoothEmulationTransportAdapter : public TcpTransportAdapter {
*/
void DeviceSwitched(const DeviceUID& device_handle) OVERRIDE;
+ /**
+ * @brief Notification that transport's configuration is updated. This
+ * override is needed so that a OnTransportConfigUpdated is not sent to the
+ * mobile device for the emulated transport.
+ *
+ * @param new_config The new configuration of the transport
+ */
+ void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE;
+
protected:
/**
* @brief GetDeviceType Provides SDL device type for transport adapter
@@ -110,6 +119,15 @@ class IAP2USBEmulationTransportAdapter : public TcpTransportAdapter {
*/
void DeviceSwitched(const DeviceUID& device_handle) OVERRIDE;
+ /**
+ * @brief Notification that transport's configuration is updated. This
+ * override is needed so that a OnTransportConfigUpdated is not sent to the
+ * mobile device for the emulated transport.
+ *
+ * @param new_config The new configuration of the transport
+ */
+ void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE;
+
protected:
/**
* @brief GetDeviceType Provides SDL device type for transport adapter
diff --git a/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc b/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc
index e2e5b98190..31e997f3ba 100644
--- a/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc
+++ b/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc
@@ -69,6 +69,11 @@ DeviceType IAP2BluetoothEmulationTransportAdapter::GetDeviceType() const {
return IOS_BT;
}
+void IAP2BluetoothEmulationTransportAdapter::TransportConfigUpdated(
+ const TransportConfig& new_config) {
+ return;
+}
+
IAP2USBEmulationTransportAdapter::IAP2USBEmulationTransportAdapter(
const uint16_t port,
resumption::LastState& last_state,
@@ -120,6 +125,11 @@ DeviceType IAP2USBEmulationTransportAdapter::GetDeviceType() const {
return IOS_USB;
}
+void IAP2USBEmulationTransportAdapter::TransportConfigUpdated(
+ const TransportConfig& new_config) {
+ return;
+}
+
IAP2USBEmulationTransportAdapter::IAPSignalHandlerDelegate::
IAPSignalHandlerDelegate(IAP2USBEmulationTransportAdapter& adapter)
: adapter_(adapter), run_flag_(true), in_(0) {