summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc17
-rw-r--r--src/components/application_manager/src/commands/mobile/send_haptic_data_request.cc17
-rw-r--r--src/components/application_manager/src/hmi_capabilities_impl.cc9
-rw-r--r--src/components/application_manager/src/mobile_message_handler.cc4
-rw-r--r--src/components/application_manager/test/CMakeLists.txt2
-rw-r--r--src/components/application_manager/test/commands/mobile/send_haptic_data_test.cc21
-rw-r--r--src/components/application_manager/test/commands/mobile/show_test.cc6
-rw-r--r--src/components/application_manager/test/hmi_capabilities_sc1.json9
-rw-r--r--src/components/application_manager/test/hmi_capabilities_sc2.json14
-rw-r--r--src/components/application_manager/test/hmi_capabilities_test.cc88
-rw-r--r--src/components/protocol_handler/include/protocol_handler/protocol_packet.h11
-rw-r--r--src/components/protocol_handler/src/protocol_handler_impl.cc5
-rw-r--r--src/components/protocol_handler/src/protocol_packet.cc2
13 files changed, 181 insertions, 24 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 708f92b9fb..411813cc83 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -2268,17 +2268,12 @@ bool ApplicationManagerImpl::ConvertSOtoMessage(
}
if (message.getElement(jhs::S_PARAMS).keyExists(strings::binary_data)) {
- application_manager::BinaryData* binaryData =
- new application_manager::BinaryData(
- message.getElement(jhs::S_PARAMS)
- .getElement(strings::binary_data)
- .asBinary());
-
- if (NULL == binaryData) {
- LOG4CXX_ERROR(logger_, "Null pointer");
- return false;
- }
- output.set_binary_data(binaryData);
+ application_manager::BinaryData binaryData(
+ message.getElement(jhs::S_PARAMS)
+ .getElement(strings::binary_data)
+ .asBinary());
+
+ output.set_binary_data(&binaryData);
}
LOG4CXX_DEBUG(logger_, "Successfully parsed smart object into message");
diff --git a/src/components/application_manager/src/commands/mobile/send_haptic_data_request.cc b/src/components/application_manager/src/commands/mobile/send_haptic_data_request.cc
index cabfef15f6..569eba6c02 100644
--- a/src/components/application_manager/src/commands/mobile/send_haptic_data_request.cc
+++ b/src/components/application_manager/src/commands/mobile/send_haptic_data_request.cc
@@ -49,7 +49,22 @@ void SendHapticDataRequest::Run() {
LOG4CXX_AUTO_TRACE(logger_);
smart_objects::SmartObject& msg_params = (*message_)[strings::msg_params];
- SendHMIRequest(hmi_apis::FunctionID::UI_SendHapticData, &msg_params, true);
+
+ ApplicationSharedPtr app = application_manager_.application(connection_key());
+
+ if (!app) {
+ LOG4CXX_ERROR(logger_, "Application is not registered");
+ SendResponse(false, mobile_apis::Result::APPLICATION_NOT_REGISTERED);
+ return;
+ }
+
+ if (app->is_navi() || app->mobile_projection_enabled()) {
+ SendHMIRequest(hmi_apis::FunctionID::UI_SendHapticData, &msg_params, true);
+ } else {
+ SendResponse(false,
+ mobile_apis::Result::DISALLOWED,
+ "Application is not of type Navigation or Mobile Projection");
+ }
}
void SendHapticDataRequest::on_event(const event_engine::Event& event) {
diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc
index 1c6e439ee8..28049f8e35 100644
--- a/src/components/application_manager/src/hmi_capabilities_impl.cc
+++ b/src/components/application_manager/src/hmi_capabilities_impl.cc
@@ -1076,6 +1076,9 @@ bool HMICapabilitiesImpl::load_capabilities_from_file() {
Formatters::CFormatterJsonBase::jsonValueToObj(
navigation_capability, navigation_capability_so);
set_navigation_capability(navigation_capability_so);
+ if (!navigation_capability_so.empty()) {
+ set_navigation_supported(true);
+ }
}
if (check_existing_json_member(system_capabilities,
"phoneCapability")) {
@@ -1085,6 +1088,9 @@ bool HMICapabilitiesImpl::load_capabilities_from_file() {
Formatters::CFormatterJsonBase::jsonValueToObj(phone_capability,
phone_capability_so);
set_phone_capability(phone_capability_so);
+ if (!phone_capability_so.empty()) {
+ set_phone_call_supported(true);
+ }
}
if (check_existing_json_member(system_capabilities,
"videoStreamingCapability")) {
@@ -1132,6 +1138,9 @@ bool HMICapabilitiesImpl::load_capabilities_from_file() {
vs_capability_so["supportedFormats"] = converted_array;
}
set_video_streaming_capability(vs_capability_so);
+ if (!vs_capability_so.empty()) {
+ set_video_streaming_supported(true);
+ }
}
if (check_existing_json_member(system_capabilities,
"remoteControlCapability")) {
diff --git a/src/components/application_manager/src/mobile_message_handler.cc b/src/components/application_manager/src/mobile_message_handler.cc
index f7beea670e..a3b5aa7dbd 100644
--- a/src/components/application_manager/src/mobile_message_handler.cc
+++ b/src/components/application_manager/src/mobile_message_handler.cc
@@ -196,8 +196,8 @@ MobileMessageHandler::HandleIncomingMessageProtocolV2(
outgoing_message->set_payload_size(message->payload_size());
if (!payload.data.empty()) {
- outgoing_message->set_binary_data(
- new application_manager::BinaryData(payload.data));
+ BinaryData binary_payload_data(payload.data);
+ outgoing_message->set_binary_data(&binary_payload_data);
}
return outgoing_message.release();
}
diff --git a/src/components/application_manager/test/CMakeLists.txt b/src/components/application_manager/test/CMakeLists.txt
index 089f8fd25e..0580998e84 100644
--- a/src/components/application_manager/test/CMakeLists.txt
+++ b/src/components/application_manager/test/CMakeLists.txt
@@ -143,6 +143,8 @@ set(ResumptionData_SOURCES
)
file(COPY hmi_capabilities.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(COPY hmi_capabilities_sc1.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(COPY hmi_capabilities_sc2.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resumption)
diff --git a/src/components/application_manager/test/commands/mobile/send_haptic_data_test.cc b/src/components/application_manager/test/commands/mobile/send_haptic_data_test.cc
index 49483209b6..2a3b5d922a 100644
--- a/src/components/application_manager/test/commands/mobile/send_haptic_data_test.cc
+++ b/src/components/application_manager/test/commands/mobile/send_haptic_data_test.cc
@@ -95,6 +95,11 @@ class SendHapticDataResponseTest
};
TEST_F(SendHapticDataRequestTest, Run_SUCCESS) {
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(mock_app_));
+
+ EXPECT_CALL(*mock_app_, is_navi()).WillOnce(Return(true));
+
EXPECT_CALL(app_mngr_,
ManageHMICommand(
HMIResultCodeIs(hmi_apis::FunctionID::UI_SendHapticData)))
@@ -106,6 +111,22 @@ TEST_F(SendHapticDataRequestTest, Run_SUCCESS) {
command->Run();
}
+TEST_F(SendHapticDataRequestTest, Run_DISALLOWED) {
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(mock_app_));
+
+ EXPECT_CALL(*mock_app_, is_navi()).WillOnce(Return(false));
+
+ EXPECT_CALL(*mock_app_, mobile_projection_enabled()).WillOnce(Return(false));
+
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).WillOnce(Return(true));
+
+ SendHapticDataRequestPtr command(CreateCommand<SendHapticDataRequest>(msg_));
+
+ command->Init();
+ command->Run();
+}
+
TEST_F(SendHapticDataRequestTest, OnEvent_SUCCESS) {
EXPECT_CALL(
app_mngr_,
diff --git a/src/components/application_manager/test/commands/mobile/show_test.cc b/src/components/application_manager/test/commands/mobile/show_test.cc
index 458d55ac20..d1e3c14181 100644
--- a/src/components/application_manager/test/commands/mobile/show_test.cc
+++ b/src/components/application_manager/test/commands/mobile/show_test.cc
@@ -746,8 +746,8 @@ TEST_F(ShowRequestTest, Run_MainField1_MetadataTagWithNoFieldData) {
event.set_smart_object(*ev_msg);
EXPECT_CALL(mock_message_helper_,
- HMIToMobileResult(hmi_apis::Common_Result::SUCCESS))
- .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ HMIToMobileResult(hmi_apis::Common_Result::SUCCESS))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
MessageSharedPtr ui_command_result;
EXPECT_CALL(
@@ -764,7 +764,7 @@ TEST_F(ShowRequestTest, Run_MainField1_MetadataTagWithNoFieldData) {
(*ui_command_result)[am::strings::msg_params][am::strings::result_code]
.asInt(),
static_cast<int32_t>(mobile_apis::Result::WARNINGS));
-
+
Mock::VerifyAndClearExpectations(&mock_message_helper_);
}
diff --git a/src/components/application_manager/test/hmi_capabilities_sc1.json b/src/components/application_manager/test/hmi_capabilities_sc1.json
new file mode 100644
index 0000000000..3731f8eb78
--- /dev/null
+++ b/src/components/application_manager/test/hmi_capabilities_sc1.json
@@ -0,0 +1,9 @@
+{
+ "UI": {
+ "systemCapabilities": {
+ "phoneCapability": {
+ "dialNumberEnabled": true
+ }
+ }
+ }
+}
diff --git a/src/components/application_manager/test/hmi_capabilities_sc2.json b/src/components/application_manager/test/hmi_capabilities_sc2.json
new file mode 100644
index 0000000000..a8578f04f5
--- /dev/null
+++ b/src/components/application_manager/test/hmi_capabilities_sc2.json
@@ -0,0 +1,14 @@
+{
+ "UI": {
+ "systemCapabilities": {
+ "navigationCapability": {
+ "sendLocationEnabled": true,
+ "getWayPointsEnabled": false
+ },
+ "phoneCapability": {
+ },
+ "videoStreamingCapability": {
+ }
+ }
+ }
+}
diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc
index 5c3830d5a5..2eb6956353 100644
--- a/src/components/application_manager/test/hmi_capabilities_test.cc
+++ b/src/components/application_manager/test/hmi_capabilities_test.cc
@@ -375,12 +375,17 @@ TEST_F(HMICapabilitiesTest, LoadCapabilitiesFromFile) {
EXPECT_TRUE(navigation_capability_so["sendLocationEnabled"].asBool());
EXPECT_TRUE(navigation_capability_so["getWayPointsEnabled"].asBool());
+ // since we have navigation capabilities, the feature should be supported
+ EXPECT_TRUE(hmi_capabilities_test->navigation_supported());
+
const smart_objects::SmartObject phone_capability_so =
*(hmi_capabilities_test->phone_capability());
EXPECT_TRUE(phone_capability_so.keyExists("dialNumberEnabled"));
EXPECT_TRUE(phone_capability_so["dialNumberEnabled"].asBool());
+ EXPECT_TRUE(hmi_capabilities_test->phone_call_supported());
+
const smart_objects::SmartObject vs_capability_so =
*(hmi_capabilities_test->video_streaming_capability());
@@ -428,6 +433,8 @@ TEST_F(HMICapabilitiesTest, LoadCapabilitiesFromFile) {
EXPECT_TRUE(
vs_capability_so[strings::haptic_spatial_data_supported].asBool());
+ EXPECT_TRUE(hmi_capabilities_test->video_streaming_supported());
+
// Check remote control capabilites
const smart_objects::SmartObject rc_capability_so =
*(hmi_capabilities_test->rc_capability());
@@ -469,6 +476,87 @@ TEST_F(HMICapabilitiesTest, LoadCapabilitiesFromFile) {
rc_capability_so["buttonCapabilities"][0]["upDownAvailable"].asBool());
}
+TEST_F(HMICapabilitiesTest,
+ LoadCapabilitiesFromFileAndVerifyUnsupportedSystemCapabilities) {
+ MockApplicationManager mock_app_mngr;
+ event_engine_test::MockEventDispatcher mock_dispatcher;
+ MockApplicationManagerSettings mock_application_manager_settings;
+
+ const std::string hmi_capabilities_file = "hmi_capabilities_sc1.json";
+
+ EXPECT_CALL(mock_app_mngr, event_dispatcher())
+ .WillOnce(ReturnRef(mock_dispatcher));
+ EXPECT_CALL(mock_app_mngr, get_settings())
+ .WillRepeatedly(ReturnRef(mock_application_manager_settings));
+ EXPECT_CALL(mock_application_manager_settings, hmi_capabilities_file_name())
+ .WillOnce(ReturnRef(hmi_capabilities_file));
+ EXPECT_CALL(mock_dispatcher, add_observer(_, _, _)).Times(1);
+ EXPECT_CALL(mock_dispatcher, remove_observer(_)).Times(1);
+ EXPECT_CALL(mock_application_manager_settings, launch_hmi())
+ .WillOnce(Return(false));
+
+ if (file_system::FileExists("./app_info_data")) {
+ EXPECT_TRUE(::file_system::DeleteFile("./app_info_data"));
+ }
+
+ utils::SharedPtr<HMICapabilitiesForTesting> hmi_capabilities =
+ utils::MakeShared<HMICapabilitiesForTesting>(mock_app_mngr);
+ hmi_capabilities->Init(&last_state_);
+
+ // Check system capabilities; only phone capability is available
+ EXPECT_FALSE(hmi_capabilities->navigation_supported());
+ EXPECT_TRUE(hmi_capabilities->phone_call_supported());
+ EXPECT_FALSE(hmi_capabilities->video_streaming_supported());
+
+ // verify phone capability
+ const smart_objects::SmartObject phone_capability_so =
+ *(hmi_capabilities->phone_capability());
+ EXPECT_TRUE(phone_capability_so.keyExists("dialNumberEnabled"));
+ EXPECT_TRUE(phone_capability_so["dialNumberEnabled"].asBool());
+}
+
+TEST_F(HMICapabilitiesTest,
+ LoadCapabilitiesFromFileAndVerifyEmptySystemCapabilities) {
+ MockApplicationManager mock_app_mngr;
+ event_engine_test::MockEventDispatcher mock_dispatcher;
+ MockApplicationManagerSettings mock_application_manager_settings;
+
+ const std::string hmi_capabilities_file = "hmi_capabilities_sc2.json";
+
+ EXPECT_CALL(mock_app_mngr, event_dispatcher())
+ .WillOnce(ReturnRef(mock_dispatcher));
+ EXPECT_CALL(mock_app_mngr, get_settings())
+ .WillRepeatedly(ReturnRef(mock_application_manager_settings));
+ EXPECT_CALL(mock_application_manager_settings, hmi_capabilities_file_name())
+ .WillOnce(ReturnRef(hmi_capabilities_file));
+ EXPECT_CALL(mock_dispatcher, add_observer(_, _, _)).Times(1);
+ EXPECT_CALL(mock_dispatcher, remove_observer(_)).Times(1);
+ EXPECT_CALL(mock_application_manager_settings, launch_hmi())
+ .WillOnce(Return(false));
+
+ if (file_system::FileExists("./app_info_data")) {
+ EXPECT_TRUE(::file_system::DeleteFile("./app_info_data"));
+ }
+
+ utils::SharedPtr<HMICapabilitiesForTesting> hmi_capabilities =
+ utils::MakeShared<HMICapabilitiesForTesting>(mock_app_mngr);
+ hmi_capabilities->Init(&last_state_);
+
+ // Check system capabilities; only navigation capability is valid, the other
+ // two are empty
+ EXPECT_TRUE(hmi_capabilities->navigation_supported());
+ EXPECT_FALSE(hmi_capabilities->phone_call_supported());
+ EXPECT_FALSE(hmi_capabilities->video_streaming_supported());
+
+ // verify navigation capabilities
+ smart_objects::SmartObject navigation_capability_so =
+ *(hmi_capabilities->navigation_capability());
+ EXPECT_TRUE(navigation_capability_so.keyExists("sendLocationEnabled"));
+ EXPECT_TRUE(navigation_capability_so.keyExists("getWayPointsEnabled"));
+ EXPECT_TRUE(navigation_capability_so["sendLocationEnabled"].asBool());
+ EXPECT_FALSE(navigation_capability_so["getWayPointsEnabled"].asBool());
+}
+
TEST_F(HMICapabilitiesTest, VerifyImageType) {
const int32_t image_type = 1;
smart_objects::SmartObject sm_obj;
diff --git a/src/components/protocol_handler/include/protocol_handler/protocol_packet.h b/src/components/protocol_handler/include/protocol_handler/protocol_packet.h
index 31b4c12ea6..1c427533e6 100644
--- a/src/components/protocol_handler/include/protocol_handler/protocol_packet.h
+++ b/src/components/protocol_handler/include/protocol_handler/protocol_packet.h
@@ -79,13 +79,16 @@ class ProtocolPacket {
uint8_t majorVersion;
uint8_t minorVersion;
uint8_t patchVersion;
- static inline uint8_t cmp(const ProtocolVersion& version1,
+ static inline int16_t cmp(const ProtocolVersion& version1,
const ProtocolVersion& version2) {
- uint8_t diff = version1.majorVersion - version2.majorVersion;
+ int16_t diff =
+ static_cast<int16_t>(version1.majorVersion - version2.majorVersion);
if (diff == 0) {
- diff = version1.minorVersion - version2.minorVersion;
+ diff =
+ static_cast<int16_t>(version1.minorVersion - version2.minorVersion);
if (diff == 0) {
- diff = version1.minorVersion - version2.minorVersion;
+ diff = static_cast<int16_t>(version1.patchVersion -
+ version2.patchVersion);
}
}
return diff;
diff --git a/src/components/protocol_handler/src/protocol_handler_impl.cc b/src/components/protocol_handler/src/protocol_handler_impl.cc
index ec4663764a..7f30017856 100644
--- a/src/components/protocol_handler/src/protocol_handler_impl.cc
+++ b/src/components/protocol_handler/src/protocol_handler_impl.cc
@@ -294,7 +294,7 @@ void ProtocolHandlerImpl::SendStartSessionAck(
? &defaultProtocolVersion
: ProtocolPacket::ProtocolVersion::min(full_version,
defaultProtocolVersion);
- char protocolVersionString[255];
+ char protocolVersionString[256];
strncpy(protocolVersionString, (*minVersion).to_string().c_str(), 255);
bson_object_put_string(
&params, strings::protocol_version, protocolVersionString);
@@ -1214,7 +1214,8 @@ class StartSessionHandler : public security_manager::SecurityManagerListener {
, hash_id_(hash_id)
, service_type_(service_type)
, force_protected_service_(force_protected_service)
- , full_version_() {}
+ , full_version_()
+ , payload_(NULL) {}
StartSessionHandler(uint32_t connection_key,
ProtocolHandlerImpl* protocol_handler,
SessionObserver& session_observer,
diff --git a/src/components/protocol_handler/src/protocol_packet.cc b/src/components/protocol_handler/src/protocol_packet.cc
index 39871d5bae..ae52849de6 100644
--- a/src/components/protocol_handler/src/protocol_packet.cc
+++ b/src/components/protocol_handler/src/protocol_packet.cc
@@ -84,7 +84,7 @@ ProtocolPacket::ProtocolVersion::ProtocolVersion(std::string versionString)
}
std::string ProtocolPacket::ProtocolVersion::to_string() {
- char versionString[255];
+ char versionString[256];
snprintf(versionString,
255,
"%u.%u.%u",