From 812745b849aa956a5ced3f5e69e77041853e8a97 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Thu, 5 Nov 2015 07:39:05 +0100 Subject: [PATCH] Revert "[Bluetooth] Moved checking privileges to JS layer." This reverts commit 6e2fa04538acf45e71a1d03bc65406057e3af314. Commit moves also missing privilege checking. Commit also squashed with [Bluetooth] Fixes for checking privileges I498c7a9a0eae3236ea71deb119385ae575926bdc [Verification] Code compiles without errors. Change-Id: I00e8d529a07df2606f14b74b98820ed4d0587596 Signed-off-by: Piotr Kosko --- src/bluetooth/bluetooth.gyp | 2 + src/bluetooth/bluetooth_adapter.cc | 31 ++ src/bluetooth/bluetooth_api.js | 332 ++++++++---------- src/bluetooth/bluetooth_device.cc | 4 + src/bluetooth/bluetooth_gatt_service.cc | 5 + src/bluetooth/bluetooth_health_application.cc | 4 + src/bluetooth/bluetooth_health_channel.cc | 7 + .../bluetooth_health_profile_handler.cc | 7 + src/bluetooth/bluetooth_le_adapter.cc | 9 + src/bluetooth/bluetooth_le_device.cc | 7 + src/bluetooth/bluetooth_privilege.cc | 32 ++ src/bluetooth/bluetooth_privilege.h | 39 ++ src/bluetooth/bluetooth_service_handler.cc | 4 + src/bluetooth/bluetooth_socket.cc | 10 + 14 files changed, 314 insertions(+), 179 deletions(-) create mode 100644 src/bluetooth/bluetooth_privilege.cc create mode 100644 src/bluetooth/bluetooth_privilege.h diff --git a/src/bluetooth/bluetooth.gyp b/src/bluetooth/bluetooth.gyp index bc91dc49..72eb2068 100644 --- a/src/bluetooth/bluetooth.gyp +++ b/src/bluetooth/bluetooth.gyp @@ -27,6 +27,8 @@ 'bluetooth_health_profile_handler.h', 'bluetooth_instance.cc', 'bluetooth_instance.h', + 'bluetooth_privilege.cc', + 'bluetooth_privilege.h', 'bluetooth_le_adapter.cc', 'bluetooth_le_adapter.h', 'bluetooth_service_handler.cc', diff --git a/src/bluetooth/bluetooth_adapter.cc b/src/bluetooth/bluetooth_adapter.cc index 29bdaf60..6d0692d6 100755 --- a/src/bluetooth/bluetooth_adapter.cc +++ b/src/bluetooth/bluetooth_adapter.cc @@ -39,6 +39,7 @@ #include "bluetooth/bluetooth_class.h" #include "bluetooth/bluetooth_device.h" #include "bluetooth/bluetooth_instance.h" +#include "bluetooth/bluetooth_privilege.h" #include "bluetooth/bluetooth_socket.h" #include "bluetooth/bluetooth_util.h" @@ -456,6 +457,9 @@ bool BluetoothAdapter::is_initialized() const { void BluetoothAdapter::SetName(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); const auto name = FromJson(args, "name"); @@ -513,6 +517,9 @@ void BluetoothAdapter::SetName(const picojson::value& data, picojson::object& ou void BluetoothAdapter::SetPowered(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); const auto new_powered = FromJson(args, "powered"); @@ -629,6 +636,9 @@ void BluetoothAdapter::SetPowered(const picojson::value& data, picojson::object& void BluetoothAdapter::SetVisible(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothManager, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); const auto visible = FromJson(args, "visible"); @@ -771,6 +781,9 @@ void BluetoothAdapter::SetVisible(const picojson::value& data, picojson::object& void BluetoothAdapter::DiscoverDevices(const picojson::value& /* data */, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothGap, &out); + PlatformResult result = PlatformResult(ErrorCode::NO_ERROR); if (!is_initialized_) { @@ -803,6 +816,9 @@ void BluetoothAdapter::DiscoverDevices(const picojson::value& /* data */, picojs void BluetoothAdapter::StopDiscovery(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothGap, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); PlatformResult result = PlatformResult(ErrorCode::NO_ERROR); @@ -851,6 +867,9 @@ void BluetoothAdapter::StopDiscovery(const picojson::value& data, picojson::obje void BluetoothAdapter::GetKnownDevices(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothGap, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); auto get_known_devices = [this](const std::shared_ptr& response) -> void { @@ -903,6 +922,9 @@ void BluetoothAdapter::GetKnownDevices(const picojson::value& data, picojson::ob void BluetoothAdapter::GetDevice(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothGap, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); @@ -1005,6 +1027,9 @@ class BondingHandler { void BluetoothAdapter::CreateBonding(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothGap, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); @@ -1127,6 +1152,9 @@ void BluetoothAdapter::DestroyBonding(const picojson::value& data, picojson::obj { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothGap, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); @@ -1242,6 +1270,9 @@ void BluetoothAdapter::DestroyBonding(const picojson::value& data, picojson::obj void BluetoothAdapter::RegisterRFCOMMServiceByUUID(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothSpp, &out); + const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); diff --git a/src/bluetooth/bluetooth_api.js b/src/bluetooth/bluetooth_api.js index 36e8fbec..5628a8bb 100755 --- a/src/bluetooth/bluetooth_api.js +++ b/src/bluetooth/bluetooth_api.js @@ -18,7 +18,7 @@ var T = xwalk.utils.type; var Converter = xwalk.utils.converter; var AV = xwalk.utils.validator; var Privilege = xwalk.utils.privilege; - +var privUtils_ = xwalk.utils; var native = new xwalk.utils.NativeManager(extension); // class BluetoothClassDeviceMajor ///////////////////////////////////////// @@ -412,24 +412,28 @@ var BluetoothClass = function(data) { }); }; -BluetoothClass.prototype.hasService = function() { - console.log('Entered BluetoothClass.hasService()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); +var BluetoothClass_hasService = function() { + console.log('Entered BluetoothClass.hasService()'); + privUtils_.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ - { - name : 'service', - type : AV.Types.UNSIGNED_LONG - } - ]); + var args = AV.validateMethod(arguments, [ + { + name : 'service', + type : AV.Types.UNSIGNED_LONG + } + ]); - var size = this.services.length; - for (var i = 0; i < size; i++) { - if (this.services[i] === args.service) { - return true; - } - } - return false; + var size = this.services.length; + for (var i = 0; i < size; i++) { + if (this.services[i] === args.service) { + return true; + } + } + return false; +}; + +BluetoothClass.prototype.hasService = function() { + return BluetoothClass_hasService.apply(this, arguments); }; // class BluetoothSocket //////////////////////////////////////////////////// @@ -494,7 +498,6 @@ var BluetoothSocket = function(data) { BluetoothSocket.prototype.writeData = function() { console.log('Entered BluetoothSocket.writeData()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_SPP); var args = AV.validateMethod(arguments, [ { @@ -520,7 +523,6 @@ BluetoothSocket.prototype.writeData = function() { BluetoothSocket.prototype.readData = function() { console.log('Entered BluetoothSocket.readData()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_SPP); var callArgs = { id : this._id @@ -537,7 +539,6 @@ BluetoothSocket.prototype.readData = function() { BluetoothSocket.prototype.close = function() { console.log('Entered BluetoothSocket.close()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_SPP); if (_BLUETOOTH_SOCKET_STATE_CLOSED !== this.state) { var callArgs = { @@ -609,8 +610,6 @@ var BluetoothLEDevice = function(data) { BluetoothLEDevice.prototype.connect = function() { console.log('Entered BluetoothLEDevice.connect()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -634,13 +633,14 @@ BluetoothLEDevice.prototype.connect = function() { } }; // Errors are handled by error callback - native.call('BluetoothLEDevice_connect', {address : this.address}, callback); + var result = native.call('BluetoothLEDevice_connect', {address : this.address}, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothLEDevice.prototype.disconnect = function() { console.log('Entered BluetoothLEDevice.disconnect()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -671,9 +671,6 @@ BluetoothLEDevice.prototype.disconnect = function() { BluetoothLEDevice.prototype.getService = function() { console.log('Entered BluetoothLEDevice.getService()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [ { name: 'uuid', @@ -687,7 +684,6 @@ BluetoothLEDevice.prototype.getService = function() { }; var result = native.callSync('BluetoothLEDevice_getService', callArgs); - if (native.isFailure(result)) { throw native.getErrorObject(result); } else { @@ -697,7 +693,6 @@ BluetoothLEDevice.prototype.getService = function() { BluetoothLEDevice.prototype.addConnectStateChangeListener = function() { console.log('Entered BluetoothLEDevice.addConnectStateChangeListener()'); - var args = AV.validateMethod(arguments, [ { name: 'listener', @@ -798,7 +793,6 @@ var BluetoothDevice = function(data) { BluetoothDevice.prototype.connectToServiceByUUID = function() { console.log('Entered BluetoothDevice.connectToServiceByUUID()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_SPP); var args = AV.validateMethod(arguments, [ { @@ -829,9 +823,10 @@ BluetoothDevice.prototype.connectToServiceByUUID = function() { } }; - // The native function BluetoothDevice_connectToServiceByUUID always returns success - // Errors are handled by error callback - native.call('BluetoothDevice_connectToServiceByUUID', callArgs, callback); + var result = native.call('BluetoothDevice_connectToServiceByUUID', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; // class BluetoothServiceHandler //////////////////////////////////////////////////// @@ -900,8 +895,6 @@ var BluetoothServiceHandler = function(data) { BluetoothServiceHandler.prototype.unregister = function() { console.log('Entered BluetoothServiceHandler.unregister()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_SPP); - var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -929,9 +922,10 @@ BluetoothServiceHandler.prototype.unregister = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothServiceHandler_unregister', callArgs, callback); + var result = native.call('BluetoothServiceHandler_unregister', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } _bluetoothServiceListeners.removeListener(this.uuid); }; @@ -997,8 +991,6 @@ var BluetoothHealthApplication = function(data) { BluetoothHealthApplication.prototype.unregister = function() { console.log('Entered BluetoothHealthApplication.unregister()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); - var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -1024,9 +1016,10 @@ BluetoothHealthApplication.prototype.unregister = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothHealthApplication_unregister', callArgs, callback); + var result = native.call('BluetoothHealthApplication_unregister', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } _bluetoothHealthApplicationListeners.removeListener(this._id); }; @@ -1055,7 +1048,6 @@ BluetoothHealthProfileHandler.prototype.constructor = BluetoothProfileHandler; BluetoothHealthProfileHandler.prototype.registerSinkApplication = function() { console.log('Entered BluetoothHealthProfileHandler.registerSinkApplication()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); var args = AV.validateMethod(arguments, [ { @@ -1091,14 +1083,14 @@ BluetoothHealthProfileHandler.prototype.registerSinkApplication = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothHealthProfileHandler_registerSinkApp', callArgs, callback); + var result = native.call('BluetoothHealthProfileHandler_registerSinkApp', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothHealthProfileHandler.prototype.connectToSource = function() { console.log('Entered BluetoothHealthProfileHandler.connectToSource()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); var args = AV.validateMethod(arguments, [ { @@ -1139,9 +1131,10 @@ BluetoothHealthProfileHandler.prototype.connectToSource = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothHealthProfileHandler_connectToSource', callArgs, callback); + var result = native.call('BluetoothHealthProfileHandler_connectToSource', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; // class BluetoothHealthChannel //////////////////////////////////////////////////// @@ -1165,7 +1158,6 @@ var BluetoothHealthChannel = function(data) { BluetoothHealthChannel.prototype.close = function() { console.log('Entered BluetoothHealthChannel.close()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); if (this.isConnected) { var callArgs = { @@ -1185,8 +1177,6 @@ BluetoothHealthChannel.prototype.close = function() { BluetoothHealthChannel.prototype.sendData = function() { console.log('Entered BluetoothHealthChannel.sendData()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); - var args = AV.validateMethod(arguments, [ { name : 'data', @@ -1234,35 +1224,45 @@ function _BluetoothHealthChannelChangeCallback(event) { } } -BluetoothHealthChannel.prototype.setListener = function() { - console.log('Entered BluetoothHealthChannel.setListener()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); +var BluetoothHealthChannel_setListener = function() { + console.log('Entered BluetoothHealthChannel.setListener()'); + privUtils_.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); + var args = AV.validateMethod(arguments, [ + { + name : 'changeCallback', + type : AV.Types.LISTENER, + values : ['onmessage', 'onclose'] + } + ]); - var args = AV.validateMethod(arguments, [ - { - name : 'changeCallback', - type : AV.Types.LISTENER, - values : ['onmessage', 'onclose'] - } - ]); + if (T.isEmptyObject(_healthListeners)) { + native.addListener('BluetoothHealthChannelChangeCallback', + _BluetoothHealthChannelChangeCallback); + } + _healthListeners[this._id] = args.changeCallback; +}; - if (T.isEmptyObject(_healthListeners)) { - native.addListener('BluetoothHealthChannelChangeCallback', - _BluetoothHealthChannelChangeCallback); - } - _healthListeners[this._id] = args.changeCallback; + +BluetoothHealthChannel.prototype.setListener = function() { + BluetoothHealthChannel_setListener.apply(this, arguments); }; -BluetoothHealthChannel.prototype.unsetListener = function() { - console.log('Entered BluetoothHealthChannel.unsetListener ()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); +var BluetoothHealthChannel_unsetListener = function() { + console.log('Entered BluetoothHealthChannel.unsetListener ()'); + if (T.isEmptyObject(_healthListeners)) { + privUtils_.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_HEALTH); + } - delete _healthListeners[this._id]; + delete _healthListeners[this._id]; - if (T.isEmptyObject(_healthListeners)) { - native.removeListener('BluetoothHealthChannelChangeCallback', - _BluetoothHealthChannelChangeCallback); - } + if (T.isEmptyObject(_healthListeners)) { + native.removeListener('BluetoothHealthChannelChangeCallback', + _BluetoothHealthChannelChangeCallback); + } +}; + +BluetoothHealthChannel.prototype.unsetListener = function() { + BluetoothHealthChannel_unsetListener.apply(this, arguments); }; @@ -1375,9 +1375,6 @@ var BluetoothLEAdapter = function() { BluetoothLEAdapter.prototype.startScan = function() { console.log('Entered BluetoothLEAdapter.startScan()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [{ name: 'successCallback', type: AV.Types.FUNCTION @@ -1389,7 +1386,6 @@ BluetoothLEAdapter.prototype.startScan = function() { }]); var result = native.callSync('BluetoothLEAdapter_startScan', {}); - if (native.isFailure(result)) { throw native.getErrorObject(result); } @@ -1400,12 +1396,9 @@ BluetoothLEAdapter.prototype.startScan = function() { BluetoothLEAdapter.prototype.stopScan = function() { console.log('Entered BluetoothLEAdapter.stopScan()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - _bleScanListener.removeListener(); var result = native.callSync('BluetoothLEAdapter_stopScan', {}); - if (native.isFailure(result)) { throw native.getErrorObject(result); } @@ -1424,9 +1417,6 @@ var _BluetoothAdvertisingMode = { BluetoothLEAdapter.prototype.startAdvertise = function() { console.log('Entered BluetoothLEAdapter.startAdvertise()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [{ name: 'advertiseData', type: AV.Types.PLATFORM_OBJECT, @@ -1475,8 +1465,6 @@ BluetoothLEAdapter.prototype.startAdvertise = function() { BluetoothLEAdapter.prototype.stopAdvertise = function() { console.log('Entered BluetoothLEAdapter.stopAdvertise()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - _bleAdvertiseListener.removeListener(); var result = native.callSync('BluetoothLEAdapter_stopAdvertise', {}); @@ -1637,9 +1625,6 @@ var BluetoothGATTCharacteristic = function(data, address) { this.readValue = function() { console.log('Entered BluetoothGATTCharacteristic.readValue()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [{ name: 'successCallback', type: AV.Types.FUNCTION @@ -1670,9 +1655,6 @@ var BluetoothGATTCharacteristic = function(data, address) { this.writeValue = function() { console.log('Entered BluetoothGATTCharacteristic.writeValue()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [{ name: 'value', type: AV.Types.ARRAY, @@ -1706,39 +1688,41 @@ var BluetoothGATTCharacteristic = function(data, address) { } }; - this.addValueChangeListener = function() { - console.log('Entered BluetoothGATTCharacteristic.addValueChangeListener()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); + var addValueChangeListener = function() { + console.log('Entered BluetoothGATTCharacteristic.addValueChangeListener()'); + privUtils_.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); + var args = AV.validateMethod(arguments, [{ + name: 'callback', + type: AV.Types.FUNCTION + }]); - var args = AV.validateMethod(arguments, [{ - name: 'callback', - type: AV.Types.FUNCTION - }]); + var callArgs = { handle: handle_, address : address_ }; - var callArgs = { handle: handle_, address : address_ }; + var callback = function(event) { + if (event.handle === handle_) { + args.callback(toByteArray(native.getResultObject(event))); + } + }; - var callback = function(event) { - if (event.handle === handle_) { - args.callback(toByteArray(native.getResultObject(event))); - } + return _bluetoothGATTCharacteristicListener.addListener(callback, callArgs); }; - return _bluetoothGATTCharacteristicListener.addListener(callback, callArgs); - }; + this.addValueChangeListener = function() { + return addValueChangeListener.apply(this, arguments); + }; - this.removeValueChangeListener = function() { - console.log('Entered BluetoothGATTCharacteristic.removeValueChangeListener()'); + this.removeValueChangeListener = function() { + console.log('Entered BluetoothGATTCharacteristic.removeValueChangeListener()'); - var args = AV.validateMethod(arguments, [{ - name: 'watchID', - type: AV.Types.LONG - }]); + var args = AV.validateMethod(arguments, [{ + name: 'watchID', + type: AV.Types.LONG + }]); - var callArgs = { handle: handle_, address : address_ }; + var callArgs = { handle: handle_, address : address_ }; - return _bluetoothGATTCharacteristicListener.removeListener(args.watchID, callArgs); - }; + return _bluetoothGATTCharacteristicListener.removeListener(args.watchID, callArgs); + }; }; @@ -1855,9 +1839,6 @@ var BluetoothGATTDescriptor = function(data, address) { this.readValue = function() { console.log('Entered BluetoothGATTDescriptor.readValue()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [{ name: 'successCallback', type: AV.Types.FUNCTION @@ -1888,9 +1869,6 @@ var BluetoothGATTDescriptor = function(data, address) { this.writeValue = function() { console.log('Entered BluetoothGATTDescriptor.writeValue()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [{ name: 'value', type: AV.Types.ARRAY, @@ -1995,8 +1973,6 @@ var BluetoothAdapter = function() { BluetoothAdapter.prototype.setName = function() { console.log('Entered BluetoothAdapter.setName()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [ { name : 'name', @@ -2028,15 +2004,14 @@ BluetoothAdapter.prototype.setName = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_setName', callArgs, callback); + var result = native.call('BluetoothAdapter_setName', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.setPowered = function() { console.log('Entered BluetoothAdapter.setPowered()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - var args = AV.validateMethod(arguments, [ { name : 'powered', @@ -2068,17 +2043,16 @@ BluetoothAdapter.prototype.setPowered = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_setPowered', callArgs, callback); + var result = native.call('BluetoothAdapter_setPowered', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; // This method is deprecated since Tizen 2.3 and will be removed in Tizen 3.0. BluetoothAdapter.prototype.setVisible = function() { console.log('Entered BluetoothAdapter.setVisible()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTHMANAGER); - var args = AV.validateMethod(arguments, [ { name : 'visible', @@ -2124,9 +2098,10 @@ BluetoothAdapter.prototype.setVisible = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_setVisible', callArgs, callback); + var result = native.call('BluetoothAdapter_setVisible', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; var _listener; @@ -2236,8 +2211,6 @@ function _BluetoothDiscoverDevicesErrorCallback(event) { BluetoothAdapter.prototype.discoverDevices = function() { console.log('Entered BluetoothAdapter.discoverDevices()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -2272,8 +2245,6 @@ BluetoothAdapter.prototype.discoverDevices = function() { BluetoothAdapter.prototype.stopDiscovery = function() { console.log('Entered BluetoothAdapter.stopDiscovery()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -2297,15 +2268,14 @@ BluetoothAdapter.prototype.stopDiscovery = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_stopDiscovery', {}, callback); + var result = native.call('BluetoothAdapter_stopDiscovery', {}, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.getKnownDevices = function() { console.log('Entered BluetoothAdapter.getKnownDevices()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ { name : 'successCallback', @@ -2332,15 +2302,14 @@ BluetoothAdapter.prototype.getKnownDevices = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_getKnownDevices', {}, callback); + var result = native.call('BluetoothAdapter_getKnownDevices', {}, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.getDevice = function() { console.log('Entered BluetoothAdapter.getDevice()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ { name : 'address', @@ -2366,15 +2335,14 @@ BluetoothAdapter.prototype.getDevice = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_getDevice', {address : args.address}, callback); + var result = native.call('BluetoothAdapter_getDevice', {address : args.address}, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.createBonding = function() { console.log('Entered BluetoothAdapter.createBonding()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ { name : 'address', @@ -2406,15 +2374,14 @@ BluetoothAdapter.prototype.createBonding = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_createBonding', callArgs, callback); + var result = native.call('BluetoothAdapter_createBonding', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.destroyBonding = function() { console.log('Entered BluetoothAdapter.destroyBonding()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); - var args = AV.validateMethod(arguments, [ { name : 'address', @@ -2446,15 +2413,14 @@ BluetoothAdapter.prototype.destroyBonding = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_destroyBonding', callArgs, callback); + var result = native.call('BluetoothAdapter_destroyBonding', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.registerRFCOMMServiceByUUID = function() { console.log('Entered BluetoothAdapter.registerRFCOMMServiceByUUID()'); - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_SPP); - var args = AV.validateMethod(arguments, [ { name : 'uuid', @@ -2491,9 +2457,10 @@ BluetoothAdapter.prototype.registerRFCOMMServiceByUUID = function() { } }; - // native.call does not inform if call results in failure - // Errors are handled by error callback - native.call('BluetoothAdapter_registerRFCOMMServiceByUUID', callArgs, callback); + var result = native.call('BluetoothAdapter_registerRFCOMMServiceByUUID', callArgs, callback); + if (native.isFailure(result)) { + throw native.getErrorObject(result); + } }; BluetoothAdapter.prototype.getBluetoothProfileHandler = function() { @@ -2545,20 +2512,27 @@ var BluetoothManager = function() { }); }; +var BluetoothManager_getDefaultAdapter = function() { + privUtils_.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); + + return new BluetoothAdapter(); +}; + + BluetoothManager.prototype.getDefaultAdapter = function() { console.log('Entered BluetoothManager.getDefaultAdapter()'); + return BluetoothManager_getDefaultAdapter(); +}; - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_GAP); +var BluetoothManager_getLEAdapter = function() { + privUtils_.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - return new BluetoothAdapter(); + return new BluetoothLEAdapter(); }; BluetoothManager.prototype.getLEAdapter = function() { console.log('Entered BluetoothManager.getLEAdapter()'); - - xwalk.utils.checkPrivilegeAccess4Ver("2.4", Privilege.BLUETOOTH, Privilege.BLUETOOTH_ADMIN); - - return new BluetoothLEAdapter(); + return BluetoothManager_getLEAdapter(); }; // exports /////////////////////////////////////////////////////////////////// exports = new BluetoothManager(); diff --git a/src/bluetooth/bluetooth_device.cc b/src/bluetooth/bluetooth_device.cc index 0cf8c1b0..51834e29 100755 --- a/src/bluetooth/bluetooth_device.cc +++ b/src/bluetooth/bluetooth_device.cc @@ -23,6 +23,7 @@ #include "bluetooth_adapter.h" #include "bluetooth_class.h" +#include "bluetooth_privilege.h" #include "bluetooth_util.h" namespace extension { @@ -104,6 +105,9 @@ void BluetoothDevice::ToJson(bt_adapter_device_discovery_info_s *info, picojson: void BluetoothDevice::ConnectToServiceByUUID(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothSpp, &out); + const auto& args = util::GetArguments(data); adapter_.ConnectToServiceByUUID(FromJson(args, "address"), diff --git a/src/bluetooth/bluetooth_gatt_service.cc b/src/bluetooth/bluetooth_gatt_service.cc index a6c95b10..421d5aa0 100755 --- a/src/bluetooth/bluetooth_gatt_service.cc +++ b/src/bluetooth/bluetooth_gatt_service.cc @@ -26,6 +26,7 @@ #include "bluetooth/bluetooth_instance.h" #include "bluetooth/bluetooth_util.h" +#include "bluetooth/bluetooth_privilege.h" namespace extension { namespace bluetooth { @@ -333,6 +334,8 @@ PlatformResult BluetoothGATTService::GetCharacteristicsHelper(bt_gatt_h handle, void BluetoothGATTService::ReadValue(const picojson::value& args, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); const std::string& address = args.get("address").get(); if (!IsStillConnected(address)) { @@ -405,6 +408,8 @@ void BluetoothGATTService::ReadValue(const picojson::value& args, void BluetoothGATTService::WriteValue(const picojson::value& args, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); const std::string& address = args.get("address").get(); if (!IsStillConnected(address)) { diff --git a/src/bluetooth/bluetooth_health_application.cc b/src/bluetooth/bluetooth_health_application.cc index 457e5d58..dec2a6df 100755 --- a/src/bluetooth/bluetooth_health_application.cc +++ b/src/bluetooth/bluetooth_health_application.cc @@ -22,6 +22,7 @@ #include "common/tools.h" #include "bluetooth_health_profile_handler.h" +#include "bluetooth_privilege.h" #include "bluetooth_util.h" namespace extension { @@ -43,6 +44,9 @@ BluetoothHealthApplication::BluetoothHealthApplication( void BluetoothHealthApplication::Unregister(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothHealth, &out); + const auto& args = util::GetArguments(data); handler_.UnregisterSinkAppAsync(FromJson(args, "id"), diff --git a/src/bluetooth/bluetooth_health_channel.cc b/src/bluetooth/bluetooth_health_channel.cc index f6c7f65d..6ee27265 100755 --- a/src/bluetooth/bluetooth_health_channel.cc +++ b/src/bluetooth/bluetooth_health_channel.cc @@ -24,6 +24,7 @@ #include "common/tools.h" #include "bluetooth_device.h" +#include "bluetooth_privilege.h" #include "bluetooth_util.h" namespace extension { @@ -43,6 +44,9 @@ const std::string kId = "_id"; void BluetoothHealthChannel::Close(const picojson::value& data , picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothHealth, &out); + const auto& args = util::GetArguments(data); unsigned int channel = common::stol(FromJson(args, "channel")); @@ -62,6 +66,9 @@ void BluetoothHealthChannel::Close(const picojson::value& data , picojson::objec void BluetoothHealthChannel::SendData(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothHealth, &out); + const auto& args = util::GetArguments(data); unsigned int channel = common::stol(FromJson(args, "channel")); diff --git a/src/bluetooth/bluetooth_health_profile_handler.cc b/src/bluetooth/bluetooth_health_profile_handler.cc index eb2be4fb..ab0fe0b0 100755 --- a/src/bluetooth/bluetooth_health_profile_handler.cc +++ b/src/bluetooth/bluetooth_health_profile_handler.cc @@ -26,6 +26,7 @@ #include "bluetooth/bluetooth_instance.h" #include "bluetooth/bluetooth_health_application.h" #include "bluetooth/bluetooth_health_channel.h" +#include "bluetooth/bluetooth_privilege.h" #include "bluetooth/bluetooth_util.h" namespace extension { @@ -228,6 +229,9 @@ void BluetoothHealthProfileHandler::OnDataReceived(unsigned int channel, void BluetoothHealthProfileHandler::RegisterSinkApp(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothHealth, &out); + const auto& args = util::GetArguments(data); const auto data_type = static_cast(FromJson(args, "dataType")); const auto& name = FromJson(args, "name"); @@ -290,6 +294,9 @@ void BluetoothHealthProfileHandler::RegisterSinkApp(const picojson::value& data, void BluetoothHealthProfileHandler::ConnectToSource(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothHealth, &out); + const auto& args = util::GetArguments(data); const auto& address = FromJson(args, "address"); const auto& app_id = FromJson(args, "appId"); diff --git a/src/bluetooth/bluetooth_le_adapter.cc b/src/bluetooth/bluetooth_le_adapter.cc index 2691cf45..9fd02ad4 100755 --- a/src/bluetooth/bluetooth_le_adapter.cc +++ b/src/bluetooth/bluetooth_le_adapter.cc @@ -22,6 +22,7 @@ #include "bluetooth/bluetooth_instance.h" #include "bluetooth/bluetooth_le_device.h" #include "bluetooth/bluetooth_util.h" +#include "bluetooth/bluetooth_privilege.h" namespace extension { namespace bluetooth { @@ -422,6 +423,8 @@ BluetoothLEAdapter::~BluetoothLEAdapter() { void BluetoothLEAdapter::StartScan(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); int ret = bt_adapter_le_start_scan(OnScanResult, this); @@ -449,6 +452,8 @@ void BluetoothLEAdapter::StartScan(const picojson::value& data, picojson::object void BluetoothLEAdapter::StopScan(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); int ret = bt_adapter_le_stop_scan(); @@ -464,6 +469,8 @@ void BluetoothLEAdapter::StopScan(const picojson::value& data, picojson::object& void BluetoothLEAdapter::StartAdvertise(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); const auto& json_advertise_data = data.get("advertiseData"); const auto& json_packet_type = data.get("packetType"); @@ -674,6 +681,8 @@ void BluetoothLEAdapter::StartAdvertise(const picojson::value& data, picojson::o void BluetoothLEAdapter::StopAdvertise(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); if (nullptr != bt_advertiser_) { int ret = bt_adapter_le_stop_advertising(bt_advertiser_); diff --git a/src/bluetooth/bluetooth_le_device.cc b/src/bluetooth/bluetooth_le_device.cc index 6d44b0da..24037505 100755 --- a/src/bluetooth/bluetooth_le_device.cc +++ b/src/bluetooth/bluetooth_le_device.cc @@ -19,6 +19,7 @@ #include "bluetooth/bluetooth_instance.h" #include "bluetooth/bluetooth_util.h" +#include "bluetooth/bluetooth_privilege.h" #include "common/converter.h" #include "common/logger.h" @@ -302,6 +303,8 @@ PlatformResult BluetoothLEDevice::ToJson( void BluetoothLEDevice::Connect(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); @@ -342,6 +345,8 @@ void BluetoothLEDevice::Connect(const picojson::value& data, void BluetoothLEDevice::Disconnect(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); const auto callback_handle = util::GetAsyncCallbackHandle(data); const auto& args = util::GetArguments(data); @@ -386,6 +391,8 @@ void BluetoothLEDevice::Disconnect(const picojson::value& data, void BluetoothLEDevice::GetService(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothAdmin, &out); const auto& args = util::GetArguments(data); diff --git a/src/bluetooth/bluetooth_privilege.cc b/src/bluetooth/bluetooth_privilege.cc new file mode 100644 index 00000000..78a1f90d --- /dev/null +++ b/src/bluetooth/bluetooth_privilege.cc @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bluetooth_privilege.h" + +namespace extension { +namespace bluetooth { + +namespace Privilege { +const std::string kBluetoothAdmin = "http://tizen.org/privilege/bluetooth.admin"; +const std::string kBluetoothManager = "http://tizen.org/privilege/bluetoothmanager"; +const std::string kBluetoothGap = "http://tizen.org/privilege/bluetooth.gap"; +const std::string kBluetoothSpp = "http://tizen.org/privilege/bluetooth.spp"; +const std::string kBluetoothHealth = "http://tizen.org/privilege/bluetooth.health"; +const std::string kBluetooth = "http://tizen.org/privilege/bluetooth"; +} // namespace Privilege + +} // namespace bluetooth +} // namespace extension diff --git a/src/bluetooth/bluetooth_privilege.h b/src/bluetooth/bluetooth_privilege.h new file mode 100644 index 00000000..1c0ccff6 --- /dev/null +++ b/src/bluetooth/bluetooth_privilege.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BLUETOOTH_BLUETOOTH_PRIVILEGE_H_ +#define BLUETOOTH_BLUETOOTH_PRIVILEGE_H_ + +#include + +namespace extension { +namespace bluetooth { + +namespace Privilege { + +extern const std::string kBluetoothAdmin; +extern const std::string kBluetoothManager; +extern const std::string kBluetoothGap; +extern const std::string kBluetoothSpp; +extern const std::string kBluetoothHealth; +extern const std::string kBluetooth; + +} // namespace Privilege + +} // namespace bluetooth +} // namespace extension + +#endif // BLUETOOTH_BLUETOOTH_PRIVILEGE_H_ diff --git a/src/bluetooth/bluetooth_service_handler.cc b/src/bluetooth/bluetooth_service_handler.cc index d9b6e1eb..e79c66a3 100755 --- a/src/bluetooth/bluetooth_service_handler.cc +++ b/src/bluetooth/bluetooth_service_handler.cc @@ -22,6 +22,7 @@ #include "common/tools.h" #include "bluetooth_adapter.h" +#include "bluetooth_privilege.h" #include "bluetooth_util.h" namespace extension { @@ -36,6 +37,9 @@ BluetoothServiceHandler::BluetoothServiceHandler(BluetoothAdapter& adapter) void BluetoothServiceHandler::Unregister(const picojson::value& data, picojson::object& out) { LoggerD("Entered"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothSpp, &out); + const auto& args = util::GetArguments(data); adapter_.UnregisterUUID(FromJson(args, "uuid"), diff --git a/src/bluetooth/bluetooth_socket.cc b/src/bluetooth/bluetooth_socket.cc index 5647db7c..dad2a96b 100755 --- a/src/bluetooth/bluetooth_socket.cc +++ b/src/bluetooth/bluetooth_socket.cc @@ -25,6 +25,7 @@ #include "bluetooth_adapter.h" #include "bluetooth_device.h" +#include "bluetooth_privilege.h" #include "bluetooth_util.h" namespace extension { @@ -50,6 +51,9 @@ BluetoothSocket::BluetoothSocket(BluetoothAdapter& adapter) void BluetoothSocket::WriteData(const picojson::value& data, picojson::object& out) { LoggerD("Enter"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothSpp, &out); + const auto& args = util::GetArguments(data); int socket = common::stol(FromJson(args, "id")); @@ -75,6 +79,9 @@ void BluetoothSocket::WriteData(const picojson::value& data, picojson::object& o void BluetoothSocket::ReadData(const picojson::value& data, picojson::object& out) { LoggerD("Enter"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothSpp, &out); + const auto& args = util::GetArguments(data); int socket = common::stol(FromJson(args, "id")); @@ -95,6 +102,9 @@ void BluetoothSocket::ReadData(const picojson::value& data, picojson::object& ou void BluetoothSocket::Close(const picojson::value& data, picojson::object& out) { LoggerD("Enter"); + CHECK_BACKWARD_COMPABILITY_PRIVILEGE_ACCESS(Privilege::kBluetooth, + Privilege::kBluetoothSpp, &out); + const auto& args = util::GetArguments(data); int socket = common::stol(FromJson(args, "id")); -- 2.34.1