diff options
Diffstat (limited to 'src/components/application_manager/src/commands/hmi/on_device_state_changed_notification.cc')
-rw-r--r-- | src/components/application_manager/src/commands/hmi/on_device_state_changed_notification.cc | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/src/components/application_manager/src/commands/hmi/on_device_state_changed_notification.cc b/src/components/application_manager/src/commands/hmi/on_device_state_changed_notification.cc index 8af2571b5..fbb2bcfe9 100644 --- a/src/components/application_manager/src/commands/hmi/on_device_state_changed_notification.cc +++ b/src/components/application_manager/src/commands/hmi/on_device_state_changed_notification.cc @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2013, Ford Motor Company * All rights reserved. * @@ -30,10 +30,47 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include <algorithm> #include "application_manager/commands/hmi/on_device_state_changed_notification.h" #include "application_manager/policies/policy_handler.h" #include "application_manager/message_helper.h" #include "interfaces/HMI_API.h" +#include "encryption/hashing.h" + +namespace { + // TODO(AOleynik) : replace this !!! + void check_zero(const char& a, const char& b, std::string& bt_mac) { + if ('0' != a && '0' == b) { + bt_mac.push_back(a); + bt_mac.push_back(b); + } else if ('0' == a) { + bt_mac.push_back(b); + } else { + bt_mac.push_back(a); + bt_mac.push_back(b); + } + } + + std::string convert_to_bt_mac(std::string& deviceInternalId) { + std::transform(deviceInternalId.begin(), deviceInternalId.end(),deviceInternalId.begin(), ::tolower); + + std::string bt_mac; + check_zero(deviceInternalId[10], deviceInternalId[11], bt_mac); + bt_mac.push_back(':'); + check_zero(deviceInternalId[8], deviceInternalId[9], bt_mac); + bt_mac.push_back(':'); + check_zero(deviceInternalId[6], deviceInternalId[7], bt_mac); + bt_mac.push_back(':'); + check_zero(deviceInternalId[4], deviceInternalId[5], bt_mac); + bt_mac.push_back(':'); + check_zero(deviceInternalId[2], deviceInternalId[3], bt_mac); + bt_mac.push_back(':'); + check_zero(deviceInternalId[0], deviceInternalId[1], bt_mac); + + return bt_mac; + } + +} namespace application_manager { @@ -48,10 +85,12 @@ OnDeviceStateChangedNotification::~OnDeviceStateChangedNotification() { } void OnDeviceStateChangedNotification::Run() { - LOG4CXX_INFO(logger_, "OnDeviceStateChangedNotification::Run"); + LOG4CXX_AUTO_TRACE(logger_); if ((*message_)[strings::msg_params]["deviceState"] == hmi_apis::Common_DeviceState::UNPAIRED) { + // It is expected, that "deviceInternalId" is the device MAC address in + // form XXXXXXXXXX std::string device_id = (*message_)[strings::msg_params]["deviceInternalId"] .asString(); if (device_id.empty()) { @@ -59,6 +98,13 @@ void OnDeviceStateChangedNotification::Run() { device_id = MessageHelper::GetDeviceMacAddressForHandle( (*message_)[strings::msg_params]["deviceId"]["id"].asInt()); } + } else { + // Policy uses hashed MAC address as device_id + LOG4CXX_DEBUG(logger_,"Device_id from HMI: " << device_id); + std::string bt_mac = convert_to_bt_mac(device_id); + LOG4CXX_DEBUG(logger_,"Device_id as BT MAC: " << bt_mac); + device_id = encryption::MakeHash(bt_mac); + LOG4CXX_DEBUG(logger_,"Device_id hashed as BT MAC : " << device_id); } policy::PolicyHandler::instance()->RemoveDevice(device_id); } @@ -67,4 +113,3 @@ void OnDeviceStateChangedNotification::Run() { } // namespace commands } // namespace application_manager - |