From 5644c4801ca447ebf6b1248d66a357110acfe4b1 Mon Sep 17 00:00:00 2001 From: Tomasz Marciniak Date: Tue, 24 Feb 2015 08:23:06 +0100 Subject: [PATCH] [Bluetooth] Removed try/catch - part 2. [Verification] Code compiles without errors. Change-Id: I9f0b616f81259943fa67e99af3b0f29ef698e428 Signed-off-by: Tomasz Marciniak --- src/bluetooth/bluetooth_adapter.cc | 439 +++++++++++++++-------------- 1 file changed, 222 insertions(+), 217 deletions(-) diff --git a/src/bluetooth/bluetooth_adapter.cc b/src/bluetooth/bluetooth_adapter.cc index 9469a02f..127ff08f 100644 --- a/src/bluetooth/bluetooth_adapter.cc +++ b/src/bluetooth/bluetooth_adapter.cc @@ -700,31 +700,33 @@ void BluetoothAdapter::GetKnownDevices(const picojson::value& data, picojson::ob const auto callback_handle = util::GetAsyncCallbackHandle(data); auto get_known_devices = [this](const std::shared_ptr& response) -> void { - try { - if (!this->is_initialized()) { - throw UnknownException("Bluetooth service is not initialized."); - } - if (this->get_powered()) { - picojson::object& response_obj = response->get(); - picojson::value result = picojson::value(picojson::object()); - picojson::object& result_obj = result.get(); - picojson::array& array = result_obj.insert( - std::make_pair("devices", picojson::value( - picojson::array()))).first->second.get(); + PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR); - array = discovered_devices_; + if (!this->is_initialized()) { + ret = PlatformResult(ErrorCode::UNKNOWN_ERR, "Bluetooth service is not initialized."); + } - if (BT_ERROR_NONE == bt_adapter_foreach_bonded_device( - ForeachBondedDevicesCB, &array)) { - util::ReportSuccess(result, response_obj); - } else { - throw UnknownException("Unknown exception"); - } + if (ret.IsSuccess() && this->get_powered()) { + picojson::object& response_obj = response->get(); + picojson::value result = picojson::value(picojson::object()); + picojson::object& result_obj = result.get(); + picojson::array& array = result_obj.insert(std::make_pair("devices", picojson::value( + picojson::array()))).first->second.get(); + + array = discovered_devices_; + + if (BT_ERROR_NONE == bt_adapter_foreach_bonded_device(ForeachBondedDevicesCB, &array)) { + ReportSuccess(result, response_obj); } else { - throw ServiceNotAvailableException("Bluetooth device is turned off"); + ret = PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown exception"); } - } catch (const PlatformException& err) { - util::ReportError(err, response->get()); + } else if (ret.IsSuccess()) { + ret = PlatformResult( + ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "Bluetooth device is turned off"); + } + + if (ret.IsError()) { + ReportError(ret, &response->get()); } }; auto get_known_devices_response = [callback_handle]( @@ -737,7 +739,7 @@ void BluetoothAdapter::GetKnownDevices(const picojson::value& data, picojson::ob get_known_devices_response, std::shared_ptr(new picojson::value(picojson::object()))); - util::ReportSuccess(out); + ReportSuccess(out); } void BluetoothAdapter::GetDevice(const picojson::value& data, picojson::object& out) { @@ -751,47 +753,50 @@ void BluetoothAdapter::GetDevice(const picojson::value& data, picojson::object& const auto& address = FromJson(args, "address"); auto get_device = [this, address](const std::shared_ptr& response) -> void { - try { - if (!IsValidAddress(address)) { - throw NotFoundException("Wrong address"); - } + PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR); + if (!IsValidAddress(address)) { + ret = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Wrong address"); + } - if (!this->is_initialized()) { - throw UnknownException("Bluetooth service is not initialized."); - } - if (this->get_powered()) { - picojson::object& response_obj = response->get(); - bt_device_info_s *info = nullptr; + if (ret.IsSuccess() && !this->is_initialized()) { + ret = PlatformResult(ErrorCode::UNKNOWN_ERR, "Bluetooth service is not initialized."); + } + if (ret.IsSuccess() && this->get_powered()) { + picojson::object& response_obj = response->get(); + bt_device_info_s *info = nullptr; - if (bt_adapter_get_bonded_device_info(address.c_str(), &info) == BT_ERROR_NONE && - info != nullptr) { - picojson::value result = picojson::value(picojson::object()); - picojson::object& result_obj = result.get(); + if (bt_adapter_get_bonded_device_info(address.c_str(), &info) == BT_ERROR_NONE && + info != nullptr) { + picojson::value result = picojson::value(picojson::object()); + picojson::object& result_obj = result.get(); - BluetoothDevice::ToJson(info, &result_obj); - util::ReportSuccess(result, response_obj); - bt_adapter_free_device_info(info); - return; - } + BluetoothDevice::ToJson(info, &result_obj); + ReportSuccess(result, response_obj); + bt_adapter_free_device_info(info); + return; + } - auto is_address = discovered_addresses_.find(address); - if (is_address != discovered_addresses_.end()) { - for (auto iter = discovered_devices_.begin(); - iter != discovered_devices_.end(); iter++) { - if (!strcmp(address.c_str(), ((*iter).get()) - .find(kDeviceAddress)->second.get().c_str())) { - util::ReportSuccess(*iter, response_obj); - return; - } + auto is_address = discovered_addresses_.find(address); + if (is_address != discovered_addresses_.end()) { + for (auto iter = discovered_devices_.begin(); + iter != discovered_devices_.end(); iter++) { + if (!strcmp(address.c_str(), ((*iter).get()) + .find(kDeviceAddress)->second.get().c_str())) { + ReportSuccess(*iter, response_obj); + return; } - } else { - throw NotFoundException("There is no device with the given address"); } } else { - throw ServiceNotAvailableException("Bluetooth device is turned off"); + ret = PlatformResult( + ErrorCode::NOT_FOUND_ERR, "There is no device with the given address"); } - } catch (const PlatformException& err) { - util::ReportError(err, response->get()); + } else if (ret.IsSuccess()) { + ret = PlatformResult( + ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "Bluetooth device is turned off"); + } + + if (ret.IsError()) { + ReportError(ret, &response->get()); } }; @@ -805,7 +810,7 @@ void BluetoothAdapter::GetDevice(const picojson::value& data, picojson::object& get_device_response, std::shared_ptr(new picojson::value(picojson::object()))); - util::ReportSuccess(out); + ReportSuccess(out); } class BondingHandler { @@ -821,8 +826,15 @@ public: return address_; } - void Invoke(const std::shared_ptr& response) { + void Invoke(const PlatformResult& result, const std::shared_ptr& response) { LoggerD("Entered"); + + if (result.IsError()) { + ReportError(result, &response->get()); + } else { + ReportSuccess(response->get()); + } + util::AsyncResponse(callback_handle_, response); } @@ -843,101 +855,99 @@ void BluetoothAdapter::CreateBonding(const picojson::value& data, picojson::obje const auto& address = FromJson(args, "address"); auto create_bonding = [address, callback_handle, this]() -> void { - try { - if(!IsValidAddress(address)) { - throw InvalidValuesException("Wrong address"); - } - if (!this->is_initialized()) { - throw UnknownException("Bluetooth service is not initialized."); - } - - if (this->get_powered()) { + PlatformResult result = PlatformResult(ErrorCode::NO_ERROR); + if(!IsValidAddress(address)) { + result = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Wrong address"); + } - auto bond_create_callback = [](int callback_result, - bt_device_info_s *device_info, - void *user_data) { - LoggerD("bond_create_callback"); + if (result.IsSuccess() && !this->is_initialized()) { + result = PlatformResult( + ErrorCode::UNKNOWN_ERR, "Bluetooth service is not initialized."); + } - BondingHandler* handler = static_cast(user_data); - if (!handler) { - LoggerW("user_data is nullptr"); - return; - } - if (!device_info) { - LoggerW("device_info is nullptr"); - return; - } + if (result.IsSuccess() && this->get_powered()) { - if (!strcmp(handler->address().c_str(), device_info->remote_address)) { // requested event - try { - if (BT_ERROR_NONE == callback_result && nullptr != device_info ) { - std::shared_ptr response = - std::shared_ptr(new picojson::value(picojson::object())); - picojson::object& response_obj = response->get(); - picojson::value result = picojson::value(picojson::object()); - picojson::object& result_obj = result.get(); - - BluetoothDevice::ToJson(device_info, &result_obj); - util::ReportSuccess(result, response_obj); - handler->Invoke(response); - } else if (BT_ERROR_REMOTE_DEVICE_NOT_FOUND == callback_result) { - LoggerE("Not found"); - throw ServiceNotAvailableException("Not found"); - } else { - LoggerE("Unknown exception"); - throw UnknownException("Unknown exception"); - } - } catch (const PlatformException& err) { - std::shared_ptr response = - std::shared_ptr(new picojson::value(picojson::object())); - util::ReportError(err, response->get()); - handler->Invoke(response); - } - delete handler; - bt_device_unset_bond_created_cb(); - } else { // unexpected event - LoggerD("An unexpected bonding detected"); - } - }; + auto bond_create_callback = [](int callback_result, + bt_device_info_s *device_info, + void *user_data) { + LoggerD("bond_create_callback"); - BondingHandler* handler = new BondingHandler(callback_handle, address); - bt_device_set_bond_created_cb(bond_create_callback, handler); - int ret = bt_device_create_bond(address.c_str()); + BondingHandler* handler = static_cast(user_data); + if (!handler) { + LoggerW("user_data is nullptr"); + return; + } + if (!device_info) { + LoggerW("device_info is nullptr"); + return; + } - switch(ret) { - case BT_ERROR_NONE: - { - LoggerD("bt_device_create_bond() succeeded"); - break; - } - case BT_ERROR_INVALID_PARAMETER: - { + PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR); + std::shared_ptr response = + std::shared_ptr(new picojson::value(picojson::object())); + if (!strcmp(handler->address().c_str(), device_info->remote_address)) { // requested event + if (BT_ERROR_NONE == callback_result && nullptr != device_info ) { + picojson::object& response_obj = response->get(); + picojson::value result = picojson::value(picojson::object()); + picojson::object& result_obj = result.get(); + + BluetoothDevice::ToJson(device_info, &result_obj); + ReportSuccess(result, response_obj); + } else if (BT_ERROR_REMOTE_DEVICE_NOT_FOUND == callback_result) { LoggerE("Not found"); - bt_device_unset_bond_created_cb(); - delete handler; - throw InvalidValuesException("Invalid value"); - } - default: - { + ret = PlatformResult(ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "Not found"); + + } else { LoggerE("Unknown exception"); - bt_device_unset_bond_created_cb(); - delete handler; - throw UnknownException("Unknown exception"); + ret = PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown exception"); } + + handler->Invoke(ret, response); + delete handler; + bt_device_unset_bond_created_cb(); + } else { // unexpected event + LoggerD("An unexpected bonding detected"); + } + }; + + BondingHandler* handler = new BondingHandler(callback_handle, address); + bt_device_set_bond_created_cb(bond_create_callback, handler); + int ret = bt_device_create_bond(address.c_str()); + + switch(ret) { + case BT_ERROR_NONE: + { + LoggerD("bt_device_create_bond() succeeded"); + break; + } + case BT_ERROR_INVALID_PARAMETER: + { + LoggerE("Not found"); + bt_device_unset_bond_created_cb(); + delete handler; + result = PlatformResult(ErrorCode::INVALID_VALUES_ERR, "Invalid value"); + break; + } + default: + { + LoggerE("Unknown exception"); + bt_device_unset_bond_created_cb(); + delete handler; + result = PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown exception"); } - } else { // Not powered - LoggerE("Bluetooth device is turned off"); - throw ServiceNotAvailableException("Bluetooth device is turned off"); } - } catch (const PlatformException& err) { - std::shared_ptr response = - std::shared_ptr(new picojson::value(picojson::object())); - util::ReportError(err, response->get()); - util::AsyncResponse(callback_handle, response); + } else if (result.IsSuccess()) { + LoggerE("Bluetooth device is turned off"); + result = PlatformResult( + ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "Bluetooth device is turned off"); + } + + if (result.IsError()) { + util::AsyncResponse(callback_handle, result); } }; TaskQueue::GetInstance().Queue(create_bonding); - util::ReportSuccess(out); + ReportSuccess(out); } void BluetoothAdapter::DestroyBonding(const picojson::value& data, picojson::object& out) @@ -952,99 +962,94 @@ void BluetoothAdapter::DestroyBonding(const picojson::value& data, picojson::obj const auto& address = FromJson(args, "address"); auto destroy_bonding = [address, callback_handle, this]() -> void { - try { - if(!IsValidAddress(address)) { - throw InvalidValuesException("Wrong address"); - } - if (!this->is_initialized()) { - throw UnknownException("Bluetooth service is not initialized."); - } + PlatformResult result = PlatformResult(ErrorCode::NO_ERROR); + if(!IsValidAddress(address)) { + result = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Wrong address"); + } + if (result.IsSuccess() && !this->is_initialized()) { + result = PlatformResult( + ErrorCode::UNKNOWN_ERR, "Bluetooth service is not initialized."); + } - if (this->get_powered()) { - bt_device_info_s *device_info = nullptr; - int ret = bt_adapter_get_bonded_device_info(address.c_str(), &device_info); + if (result.IsSuccess() && this->get_powered()) { + bt_device_info_s *device_info = nullptr; + int ret = bt_adapter_get_bonded_device_info(address.c_str(), &device_info); - if (BT_ERROR_NONE != ret || nullptr == device_info) { - LoggerD("There is no bonding"); - throw NotFoundException("Not found"); - } else { - bt_adapter_free_device_info(device_info); + if (BT_ERROR_NONE != ret || nullptr == device_info) { + LoggerD("There is no bonding"); + result = PlatformResult(ErrorCode::NOT_FOUND_ERR, "Not found"); + } else { + bt_adapter_free_device_info(device_info); - auto bond_destroy_callback = [](int callback_result, - char *remote_address, - void *user_data) { - LoggerD("bond_destroy_callback"); + auto bond_destroy_callback = [](int callback_result, + char *remote_address, + void *user_data) { + LoggerD("bond_destroy_callback"); - BondingHandler* handler = static_cast(user_data); - if (!handler) { - LoggerW("user_data is nullptr"); - return; - } + BondingHandler* handler = static_cast(user_data); + if (!handler) { + LoggerW("user_data is nullptr"); + return; + } - if (!strcmp(handler->address().c_str(), remote_address)) { // requested event - try { - if (BT_ERROR_NONE == callback_result) { - std::shared_ptr response = - std::shared_ptr(new picojson::value(picojson::object())); - util::ReportSuccess(response->get()); - handler->Invoke(response); - } else { - LoggerE("Unknown exception"); - throw UnknownException("Unknown exception"); - } - } catch (const PlatformException& err) { - std::shared_ptr response = - std::shared_ptr(new picojson::value(picojson::object())); - util::ReportError(err, response->get()); - handler->Invoke(response); - } - delete handler; - bt_device_unset_bond_destroyed_cb(); - } else { // unexpected event - LoggerD("An unexpected bonding detected"); + PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR); + std::shared_ptr response = + std::shared_ptr(new picojson::value(picojson::object())); + + if (!strcmp(handler->address().c_str(), remote_address)) { // requested event + if (BT_ERROR_NONE != callback_result) { + LoggerE("Unknown exception"); + ret = PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown exception"); } - }; - BondingHandler* handler = new BondingHandler(callback_handle, address); - bt_device_set_bond_destroyed_cb(bond_destroy_callback, handler); + handler->Invoke(ret, response); + delete handler; + bt_device_unset_bond_destroyed_cb(); + } else { // unexpected event + LoggerD("An unexpected bonding detected"); + } + }; - int ret = bt_device_destroy_bond(address.c_str()); + BondingHandler* handler = new BondingHandler(callback_handle, address); + bt_device_set_bond_destroyed_cb(bond_destroy_callback, handler); - switch(ret) { - case BT_ERROR_NONE: - { - LoggerD("bt_device_destroy_bond() succeeded"); - break; - } - case BT_ERROR_INVALID_PARAMETER: - { - LoggerE("Not found"); - bt_device_unset_bond_destroyed_cb(); - delete handler; - throw InvalidValuesException("Invalid value"); - } - default: - { - LoggerE("Unknown exception"); - bt_device_unset_bond_destroyed_cb(); - delete handler; - throw UnknownException("Unknown exception"); - } + int ret = bt_device_destroy_bond(address.c_str()); + + switch(ret) { + case BT_ERROR_NONE: + { + LoggerD("bt_device_destroy_bond() succeeded"); + break; + } + case BT_ERROR_INVALID_PARAMETER: + { + LoggerE("Not found"); + bt_device_unset_bond_destroyed_cb(); + delete handler; + result = PlatformResult(ErrorCode::INVALID_VALUES_ERR, "Invalid value"); + break; + } + default: + { + LoggerE("Unknown exception"); + bt_device_unset_bond_destroyed_cb(); + delete handler; + result = PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown exception"); } } - } else { // Not powered - LoggerE("Bluetooth device is turned off"); - throw ServiceNotAvailableException("Bluetooth device is turned off"); } - } catch (const PlatformException& err) { - std::shared_ptr response = - std::shared_ptr(new picojson::value(picojson::object())); - util::ReportError(err, response->get()); - util::AsyncResponse(callback_handle, response); + } else if (result.IsSuccess()) { + LoggerE("Bluetooth device is turned off"); + result = PlatformResult( + ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "Bluetooth device is turned off"); + } + + if (result.IsError()) { + util::AsyncResponse(callback_handle, result); } }; TaskQueue::GetInstance().Queue(destroy_bonding); - util::ReportSuccess(out); + ReportSuccess(out); } void BluetoothAdapter::RegisterRFCOMMServiceByUUID(const picojson::value& data, picojson::object& out) { -- 2.34.1