From 259cb58ebee3a4c77c338a0614907ac365a80046 Mon Sep 17 00:00:00 2001 From: shenpeixing Date: Mon, 17 Feb 2025 09:24:00 +0800 Subject: [PATCH] =?UTF-8?q?sensor=E6=9C=8D=E5=8A=A1idl=E5=8C=96=E6=95=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: shenpeixing --- frameworks/native/BUILD.gn | 35 +- ...pc_interface_code.h => ISensorService.idl} | 43 +- frameworks/native/include/i_sensor_service.h | 55 --- .../native/include/sensor_service_proxy.h | 53 --- frameworks/native/src/native_sensor.cpp | 2 +- .../native/src/sensor_service_client.cpp | 9 +- .../native/src/sensor_service_proxy.cpp | 383 ------------------ services/BUILD.gn | 4 +- services/include/sensor_service.h | 16 +- services/include/sensor_service_proxy.h | 2 +- services/include/sensor_service_stub.h | 55 --- services/src/sensor_service.cpp | 161 +++++++- services/src/sensor_service_stub.cpp | 362 ----------------- .../createdatachannelstub_fuzzer/BUILD.gn | 1 + .../createdatachannelstub_fuzzer.cpp | 8 +- .../disableactiveinfocbstub_fuzzer/BUILD.gn | 1 + .../disableactiveinfocbstub_fuzzer.cpp | 2 +- .../enableactiveinfocbstub_fuzzer/BUILD.gn | 1 + .../enableactiveinfocbstub_fuzzer.cpp | 2 +- .../getactiveinfoliststub_fuzzer/BUILD.gn | 1 + .../getactiveinfoliststub_fuzzer.cpp | 2 +- .../getallsensorsstub_fuzzer/BUILD.gn | 1 + .../getallsensorsstub_fuzzer.cpp | 2 +- .../services/resetsensorsstub_fuzzer/BUILD.gn | 1 + .../resetsensorsstub_fuzzer.cpp | 2 +- .../resumesensorsstub_fuzzer/BUILD.gn | 1 + .../resumesensorsstub_fuzzer.cpp | 2 +- .../sensordisablestub_fuzzer/BUILD.gn | 1 + .../sensordisablestub_fuzzer.cpp | 2 +- .../services/sensorenablestub_fuzzer/BUILD.gn | 1 + .../sensorenablestub_fuzzer.cpp | 2 +- .../sensoronremoterequest_fuzzer/BUILD.gn | 1 + .../createsocketchannel_fuzzer/BUILD.gn | 1 + .../service/getactiveinfolist_fuzzer/BUILD.gn | 1 + .../BUILD.gn | 1 + .../registerpermcallback_fuzzer/BUILD.gn | 1 + .../service/reportactiveinfo_fuzzer/BUILD.gn | 1 + .../reportonchangedata_fuzzer/BUILD.gn | 1 + .../reportsensorsysevent_fuzzer/BUILD.gn | 1 + .../suspendsensorsstub_fuzzer/BUILD.gn | 1 + .../suspendsensorsstub_fuzzer.cpp | 2 +- utils/common/include/active_info.h | 2 +- utils/common/include/sensor.h | 2 +- .../include/sensor_basic_data_channel.h | 1 + utils/common/include/sensor_errors.h | 2 +- utils/common/src/active_info.cpp | 11 +- utils/common/src/sensor.cpp | 8 +- .../common/src/sensor_basic_data_channel.cpp | 17 + 48 files changed, 281 insertions(+), 986 deletions(-) rename frameworks/native/{include/sensors_ipc_interface_code.h => ISensorService.idl} (36%) delete mode 100755 frameworks/native/include/i_sensor_service.h delete mode 100755 frameworks/native/include/sensor_service_proxy.h delete mode 100644 frameworks/native/src/sensor_service_proxy.cpp delete mode 100644 services/include/sensor_service_stub.h delete mode 100644 services/src/sensor_service_stub.cpp diff --git a/frameworks/native/BUILD.gn b/frameworks/native/BUILD.gn index 6ee82e32..097d94fd 100644 --- a/frameworks/native/BUILD.gn +++ b/frameworks/native/BUILD.gn @@ -11,10 +11,40 @@ # See the License for the specific language governing permissions and # limitations under the License. +import("//build/config/components/idl_tool/idl.gni") import("//build/ohos.gni") import("./../../sensor.gni") +idl_gen_interface("sensor_service_interface") { + sources = [ "ISensorService.idl" ] + log_domainid = "0xD002700" + log_tag = "ISensorServiceIdl" + part_name = "sensor" + subsystem_name = "sensors" +} + +ohos_source_set("sensor_service_stub") { + public_configs = [ ":sensor_private_config" ] + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + output_values = get_target_outputs(":sensor_service_interface") + sources = filter_include(output_values, [ "*_stub.cpp" ]) + deps = [ ":sensor_service_interface" ] + external_deps = [ + "c_utils:utils", + "hilog:libhilog", + "ipc:ipc_single", + "samgr:samgr_proxy", + ] + part_name = "sensor" + subsystem_name = "sensors" +} + ohos_shared_library("libsensor_client") { + output_values = get_target_outputs(":sensor_service_interface") sources = [ "src/fd_listener.cpp", "src/sensor_agent_proxy.cpp", @@ -23,10 +53,11 @@ ohos_shared_library("libsensor_client") { "src/sensor_event_handler.cpp", "src/sensor_file_descriptor_listener.cpp", "src/sensor_service_client.cpp", - "src/sensor_service_proxy.cpp", ] + sources += filter_include(output_values, [ "*_proxy.cpp" ]) include_dirs = [ + "${target_gen_dir}", "$SUBSYSTEM_DIR/frameworks/native/include", "$SUBSYSTEM_DIR/interfaces/inner_api", "$SUBSYSTEM_DIR/utils/common/include", @@ -43,6 +74,7 @@ ohos_shared_library("libsensor_client") { defines = sensor_default_defines deps = [ + ":sensor_service_interface", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", ] @@ -80,6 +112,7 @@ ohos_ndk_library("libsensor_ndk") { config("sensor_private_config") { include_dirs = [ + "${target_gen_dir}", "$SUBSYSTEM_DIR/frameworks/native/include", "$SUBSYSTEM_DIR/interfaces/inner_api", "$SUBSYSTEM_DIR/utils/common/include", diff --git a/frameworks/native/include/sensors_ipc_interface_code.h b/frameworks/native/ISensorService.idl similarity index 36% rename from frameworks/native/include/sensors_ipc_interface_code.h rename to frameworks/native/ISensorService.idl index 2fd9df9a..cdbddd44 100644 --- a/frameworks/native/include/sensors_ipc_interface_code.h +++ b/frameworks/native/ISensorService.idl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * 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 @@ -13,27 +13,22 @@ * limitations under the License. */ -#ifndef SENSORS_IPC_INTERFACE_CODE_H -#define SENSORS_IPC_INTERFACE_CODE_H +sequenceable active_info..OHOS.Sensors.ActiveInfo; +sequenceable OHOS.IRemoteObject; +sequenceable sensor..OHOS.Sensors.Sensor; -/* SAID:3601 */ -namespace OHOS { -namespace Sensors { -enum class SensorInterfaceCode { - ENABLE_SENSOR = 0, - DISABLE_SENSOR, - GET_SENSOR_LIST, - TRANSFER_DATA_CHANNEL, - DESTROY_SENSOR_CHANNEL, - SUSPEND_SENSORS, - RESUME_SENSORS, - GET_ACTIVE_INFO_LIST, - CREATE_SOCKET_CHANNEL, - DESTROY_SOCKET_CHANNEL, - ENABLE_ACTIVE_INFO_CB, - DISABLE_ACTIVE_INFO_CB, - RESET_SENSORS, -}; -} // namespace Sensors -} // namespace OHOS -#endif // SENSORS_IPC_INTERFACE_CODE_H +interface OHOS.Sensors.ISensorService { + void EnableSensor([in] int sensorId, [in] long samplingPeriodNs, [in] long maxReportDelayNs); + void DisableSensor([in] int sensorId); + void GetSensorList([out] Sensor[] sensorList); + void TransferDataChannel([in] FileDescriptor sendFd, [in] IRemoteObject sensorClient); + void DestroySensorChannel([in] IRemoteObject sensorClient); + void SuspendSensors([in] int pid); + void ResumeSensors([in] int pid); + void GetActiveInfoList([in] int pid, [out] ActiveInfo[] activeInfoList); + void CreateSocketChannel([in] IRemoteObject sensorClient, [out] FileDescriptor clientFd); + void DestroySocketChannel([in] IRemoteObject sensorClient); + void EnableActiveInfoCB(); + void DisableActiveInfoCB(); + void ResetSensors(); + } \ No newline at end of file diff --git a/frameworks/native/include/i_sensor_service.h b/frameworks/native/include/i_sensor_service.h deleted file mode 100755 index 6df89586..00000000 --- a/frameworks/native/include/i_sensor_service.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. - * 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 I_SENSOR_SERVICE_H -#define I_SENSOR_SERVICE_H - -#include - -#include "errors.h" -#include "iremote_broker.h" - -#include "active_info.h" -#include "i_sensor_client.h" -#include "sensor_basic_data_channel.h" -#include "sensor.h" -#include "sensors_ipc_interface_code.h" - -namespace OHOS { -namespace Sensors { -class ISensorService : public IRemoteBroker { -public: - ISensorService() = default; - virtual ~ISensorService() = default; - DECLARE_INTERFACE_DESCRIPTOR(u"ISensorService"); - virtual ErrCode EnableSensor(int32_t sensorId, int64_t samplingPeriodNs, - int64_t maxReportDelayNs) = 0; - virtual ErrCode DisableSensor(int32_t sensorId) = 0; - virtual std::vector GetSensorList() = 0; - virtual ErrCode TransferDataChannel(const sptr &sensorBasicDataChannel, - const sptr &sensorClient) = 0; - virtual ErrCode DestroySensorChannel(sptr sensorClient) = 0; - virtual ErrCode SuspendSensors(int32_t pid) = 0; - virtual ErrCode ResumeSensors(int32_t pid) = 0; - virtual ErrCode GetActiveInfoList(int32_t pid, std::vector &activeInfoList) = 0; - virtual ErrCode CreateSocketChannel(sptr sensorClient, int32_t &clientFd) = 0; - virtual ErrCode DestroySocketChannel(sptr sensorClient) = 0; - virtual ErrCode EnableActiveInfoCB() = 0; - virtual ErrCode DisableActiveInfoCB() = 0; - virtual ErrCode ResetSensors() = 0; -}; -} // namespace Sensors -} // namespace OHOS -#endif // I_SENSOR_SERVICE_H diff --git a/frameworks/native/include/sensor_service_proxy.h b/frameworks/native/include/sensor_service_proxy.h deleted file mode 100755 index be7fbea8..00000000 --- a/frameworks/native/include/sensor_service_proxy.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. - * 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 SENSOR_SERVICE_PROXY_H -#define SENSOR_SERVICE_PROXY_H - -#include "errors.h" -#include "iremote_proxy.h" -#include "nocopyable.h" - -#include "sensor_agent_type.h" -#include "i_sensor_service.h" - -namespace OHOS { -namespace Sensors { -class SensorServiceProxy : public IRemoteProxy { -public: - explicit SensorServiceProxy(const sptr &impl); - virtual ~SensorServiceProxy() = default; - ErrCode EnableSensor(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs) override; - ErrCode DisableSensor(int32_t sensorId) override; - std::vector GetSensorList() override; - ErrCode TransferDataChannel(const sptr &sensorBasicDataChannel, - const sptr &sensorClient) override; - ErrCode DestroySensorChannel(sptr sensorClient) override; - ErrCode SuspendSensors(int32_t pid) override; - ErrCode ResumeSensors(int32_t pid) override; - ErrCode GetActiveInfoList(int32_t pid, std::vector &activeInfoList) override; - ErrCode CreateSocketChannel(sptr sensorClient, int32_t &clientFd) override; - ErrCode DestroySocketChannel(sptr sensorClient) override; - ErrCode EnableActiveInfoCB() override; - ErrCode DisableActiveInfoCB() override; - ErrCode ResetSensors() override; - -private: - DISALLOW_COPY_AND_MOVE(SensorServiceProxy); - static inline BrokerDelegator delegator_; -}; -} // namespace Sensors -} // namespace OHOS -#endif // SENSOR_SERVICE_PROXY_H diff --git a/frameworks/native/src/native_sensor.cpp b/frameworks/native/src/native_sensor.cpp index bd27c5f4..b44273c0 100644 --- a/frameworks/native/src/native_sensor.cpp +++ b/frameworks/native/src/native_sensor.cpp @@ -15,7 +15,7 @@ #include "oh_sensor.h" -#include "i_sensor_service.h" +#include "isensor_service.h" #include "native_sensor_impl.h" #include "securec.h" #include "sensor_agent.h" diff --git a/frameworks/native/src/sensor_service_client.cpp b/frameworks/native/src/sensor_service_client.cpp index b52e2897..0397d053 100644 --- a/frameworks/native/src/sensor_service_client.cpp +++ b/frameworks/native/src/sensor_service_client.cpp @@ -74,7 +74,7 @@ int32_t SensorServiceClient::InitServiceClient() if (sensorServer_ != nullptr) { SEN_HILOGD("Already init"); if (sensorList_.empty()) { - sensorList_ = sensorServer_->GetSensorList(); + sensorServer_->GetSensorList(sensorList_); SEN_HILOGW("sensorList is %{public}s", sensorList_.empty() ? "empty" : "not empty"); } return ERR_OK; @@ -94,7 +94,8 @@ int32_t SensorServiceClient::InitServiceClient() auto remoteObject = sensorServer_->AsObject(); CHKPR(remoteObject, SENSOR_NATIVE_GET_SERVICE_ERR); remoteObject->AddDeathRecipient(serviceDeathObserver_); - sensorList_ = sensorServer_->GetSensorList(); + sensorList_.clear(); + sensorServer_->GetSensorList(sensorList_); if (sensorList_.empty()) { SEN_HILOGW("sensorList_ is empty when connecting to the service for the first time"); } @@ -210,7 +211,7 @@ int32_t SensorServiceClient::TransferDataChannel(sptr sensorD CHKPR(sensorClientStub_, INVALID_POINTER); auto remoteObject = sensorClientStub_->AsObject(); CHKPR(remoteObject, INVALID_POINTER); - ret = sensorServer_->TransferDataChannel(sensorDataChannel, remoteObject); + ret = sensorServer_->TransferDataChannel(sensorDataChannel->GetSendDataFd(), remoteObject); #ifdef HIVIEWDFX_HITRACE_ENABLE FinishTrace(HITRACE_TAG_SENSORS); #endif // HIVIEWDFX_HITRACE_ENABLE @@ -295,7 +296,7 @@ void SensorServiceClient::ProcessDeathObserver(const wptr &object if (sensorServer_ != nullptr && sensorClientStub_ != nullptr) { auto remoteObject = sensorClientStub_->AsObject(); if (remoteObject != nullptr) { - sensorServer_->TransferDataChannel(dataChannel_, remoteObject); + sensorServer_->TransferDataChannel(dataChannel_->GetSendDataFd(), remoteObject); } } } diff --git a/frameworks/native/src/sensor_service_proxy.cpp b/frameworks/native/src/sensor_service_proxy.cpp deleted file mode 100644 index b9b2b3d9..00000000 --- a/frameworks/native/src/sensor_service_proxy.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. - * 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 "sensor_service_proxy.h" - -#include - -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE -#include "hisysevent.h" -#endif // HIVIEWDFX_HISYSEVENT_ENABLE -#include "message_parcel.h" -#include "sensor_client_proxy.h" -#include "sensor_errors.h" -#include "sensor_parcel.h" - -#undef LOG_TAG -#define LOG_TAG "SensorServiceProxy" - -namespace OHOS { -namespace Sensors { -using namespace OHOS::HiviewDFX; - -SensorServiceProxy::SensorServiceProxy(const sptr &impl) : IRemoteProxy(impl) -{} - -ErrCode SensorServiceProxy::EnableSensor(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEINT32(data, sensorId, WRITE_PARCEL_ERR); - WRITEINT64(data, samplingPeriodNs, WRITE_PARCEL_ERR); - WRITEINT64(data, maxReportDelayNs, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::ENABLE_SENSOR), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "EnableSensor", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::DisableSensor(int32_t sensorId) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEINT32(data, sensorId, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::DISABLE_SENSOR), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "DisableSensor", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -std::vector SensorServiceProxy::GetSensorList() -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - std::vector sensors; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Write descriptor failed"); - return sensors; - } - sptr remote = Remote(); - if (remote == nullptr) { - SEN_HILOGE("remote is null"); - return sensors; - } - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::GET_SENSOR_LIST), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "GetSensorList", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - return sensors; - } - uint32_t sensorCount; - if (!reply.ReadUint32(sensorCount)) { - SEN_HILOGE("Parcel read failed"); - return sensors; - } - SEN_HILOGD("SensorCount:%{public}u", sensorCount); - if (sensorCount > MAX_SENSOR_COUNT) { - sensorCount = MAX_SENSOR_COUNT; - } - Sensor sensor; - for (uint32_t i = 0; i < sensorCount; ++i) { - auto tmpSensor = sensor.Unmarshalling(reply); - CHKPC(tmpSensor); - sensors.push_back(*tmpSensor); - } - return sensors; -} - -ErrCode SensorServiceProxy::TransferDataChannel(const sptr &sensorBasicDataChannel, - const sptr &sensorClient) -{ - CHKPR(sensorBasicDataChannel, OBJECT_NULL); - CHKPR(sensorClient, OBJECT_NULL); - MessageParcel data; - MessageParcel reply; - MessageOption option; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Write descriptor failed"); - return WRITE_PARCEL_ERR; - } - sensorBasicDataChannel->SendToBinder(data); - WRITEREMOTEOBJECT(data, sensorClient, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::TRANSFER_DATA_CHANNEL), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "TransferDataChannel", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - sensorBasicDataChannel->CloseSendFd(); - return static_cast(ret); -} - -ErrCode SensorServiceProxy::DestroySensorChannel(sptr sensorClient) -{ - CHKPR(sensorClient, OBJECT_NULL); - MessageParcel data; - MessageParcel reply; - MessageOption option; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEREMOTEOBJECT(data, sensorClient, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::DESTROY_SENSOR_CHANNEL), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "DestroySensorChannel", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::SuspendSensors(int32_t pid) -{ - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEINT32(data, pid, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::SUSPEND_SENSORS), - data, reply, option); - if (ret != NO_ERROR) { - SEN_HILOGD("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::ResumeSensors(int32_t pid) -{ - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEINT32(data, pid, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::RESUME_SENSORS), - data, reply, option); - if (ret != NO_ERROR) { - SEN_HILOGD("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::GetActiveInfoList(int32_t pid, std::vector &activeInfoList) -{ - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEINT32(data, pid, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::GET_ACTIVE_INFO_LIST), - data, reply, option); - if (ret != NO_ERROR) { - SEN_HILOGE("Failed, ret:%{public}d", ret); - return static_cast(ret); - } - uint32_t activeInfoCount; - READUINT32(reply, activeInfoCount, READ_PARCEL_ERR); - SEN_HILOGD("activeInfoCount:%{public}u", activeInfoCount); - if (activeInfoCount > MAX_SENSOR_COUNT) { - activeInfoCount = MAX_SENSOR_COUNT; - } - ActiveInfo activeInfo; - for (uint32_t i = 0; i < activeInfoCount; ++i) { - auto tmpActiveInfo = activeInfo.Unmarshalling(reply); - CHKPC(tmpActiveInfo); - activeInfoList.push_back(*tmpActiveInfo); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::CreateSocketChannel(sptr sensorClient, int32_t &clientFd) -{ - CHKPR(sensorClient, INVALID_POINTER); - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEREMOTEOBJECT(data, sensorClient, WRITE_PARCEL_ERR); - MessageParcel reply; - MessageOption option; - sptr remote = Remote(); - CHKPR(remote, ERROR); - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::CREATE_SOCKET_CHANNEL), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "CreateSocketChannel", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - return ERROR; - } - clientFd = reply.ReadFileDescriptor(); - if (clientFd < 0) { - SEN_HILOGE("Invalid fd, clientFd:%{public}d", clientFd); - return ERROR; - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::DestroySocketChannel(sptr sensorClient) -{ - CHKPR(sensorClient, INVALID_POINTER); - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - WRITEREMOTEOBJECT(data, sensorClient, WRITE_PARCEL_ERR); - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::DESTROY_SOCKET_CHANNEL), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "DestroySocketChannel", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::EnableActiveInfoCB() -{ - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::ENABLE_ACTIVE_INFO_CB), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "EnableActiveInfoCB", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::DisableActiveInfoCB() -{ - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::DISABLE_ACTIVE_INFO_CB), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "DisableActiveInfoCB", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} - -ErrCode SensorServiceProxy::ResetSensors() -{ - MessageParcel data; - if (!data.WriteInterfaceToken(SensorServiceProxy::GetDescriptor())) { - SEN_HILOGE("Parcel write descriptor failed"); - return WRITE_PARCEL_ERR; - } - sptr remote = Remote(); - CHKPR(remote, ERROR); - MessageParcel reply; - MessageOption option; - int32_t ret = remote->SendRequest(static_cast(SensorInterfaceCode::RESET_SENSORS), - data, reply, option); - if (ret != NO_ERROR) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "SERVICE_IPC_EXCEPTION", - HiSysEvent::EventType::FAULT, "PKG_NAME", "ResetSensors", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("Failed, ret:%{public}d", ret); - } - return static_cast(ret); -} -} // namespace Sensors -} // namespace OHOS diff --git a/services/BUILD.gn b/services/BUILD.gn index db5914a2..20606c53 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -23,7 +23,6 @@ ohos_shared_library("libsensor_service") { "src/sensor_manager.cpp", "src/sensor_power_policy.cpp", "src/sensor_service.cpp", - "src/sensor_service_stub.cpp", "src/stream_server.cpp", ] @@ -59,6 +58,7 @@ ohos_shared_library("libsensor_service") { defines = sensor_default_defines deps = [ + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", ] @@ -136,7 +136,6 @@ ohos_static_library("libsensor_service_static") { "src/sensor_manager.cpp", "src/sensor_power_policy.cpp", "src/sensor_service.cpp", - "src/sensor_service_stub.cpp", "src/stream_server.cpp", ] @@ -172,6 +171,7 @@ ohos_static_library("libsensor_service_static") { defines = sensor_default_defines deps = [ + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", ] diff --git a/services/include/sensor_service.h b/services/include/sensor_service.h index 8d6e509b..8260e14b 100644 --- a/services/include/sensor_service.h +++ b/services/include/sensor_service.h @@ -53,25 +53,25 @@ public: int Dump(int fd, const std::vector &args) override; ErrCode EnableSensor(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs) override; ErrCode DisableSensor(int32_t sensorId) override; - std::vector GetSensorList() override; - ErrCode TransferDataChannel(const sptr &sensorBasicDataChannel, - const sptr &sensorClient) override; - ErrCode DestroySensorChannel(sptr sensorClient) override; + ErrCode GetSensorList(std::vector &sensorList) override; + ErrCode TransferDataChannel(int32_t sendFd, const sptr &sensorClient) override; + ErrCode DestroySensorChannel(const sptr &sensorClient) override; void ProcessDeathObserver(const wptr &object); ErrCode SuspendSensors(int32_t pid) override; ErrCode ResumeSensors(int32_t pid) override; ErrCode GetActiveInfoList(int32_t pid, std::vector &activeInfoList) override; - ErrCode CreateSocketChannel(sptr sensorClient, int32_t &clientFd) override; - ErrCode DestroySocketChannel(sptr sensorClient) override; + ErrCode CreateSocketChannel(const sptr &sensorClient, int32_t &clientFd) override; + ErrCode DestroySocketChannel(const sptr &sensorClient) override; ErrCode EnableActiveInfoCB() override; ErrCode DisableActiveInfoCB() override; ErrCode ResetSensors() override; private: DISALLOW_COPY_AND_MOVE(SensorService); + std::vector GetSensorList(); void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; - bool CheckParameter(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs); + ErrCode CheckAuthAndParameter(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs); class PermStateChangeCb : public Security::AccessToken::PermStateChangeCallbackCustomize { public: @@ -94,6 +94,8 @@ private: void UnregisterPermCallback(); void ReportActiveInfo(int32_t sensorId, int32_t pid); bool CheckSensorId(int32_t sensorId); + bool IsSystemServiceCalling(); + bool IsSystemCalling(); SensorServiceState state_; std::mutex serviceLock_; std::mutex sensorsMutex_; diff --git a/services/include/sensor_service_proxy.h b/services/include/sensor_service_proxy.h index 77116901..9f2c4fae 100644 --- a/services/include/sensor_service_proxy.h +++ b/services/include/sensor_service_proxy.h @@ -20,7 +20,7 @@ #include "iremote_proxy.h" #include "nocopyable.h" -#include "i_sensor_service.h" +#include "isensor_service.h" #include "sensor_agent_type.h" namespace OHOS { diff --git a/services/include/sensor_service_stub.h b/services/include/sensor_service_stub.h deleted file mode 100644 index c799965d..00000000 --- a/services/include/sensor_service_stub.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. - * 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 SENSOR_SERVICE_STUB_H -#define SENSOR_SERVICE_STUB_H - -#include "iremote_stub.h" -#include "message_parcel.h" -#include "nocopyable.h" - -#include "i_sensor_service.h" - -namespace OHOS { -namespace Sensors { -class SensorServiceStub : public IRemoteStub { -public: - SensorServiceStub(); - virtual ~SensorServiceStub(); - virtual int32_t OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, - MessageOption &option) override; - -private: - DISALLOW_COPY_AND_MOVE(SensorServiceStub); - ErrCode SensorEnableInner(MessageParcel &data, MessageParcel &reply); - ErrCode SensorDisableInner(MessageParcel &data, MessageParcel &reply); - ErrCode GetAllSensorsInner(MessageParcel &data, MessageParcel &reply); - ErrCode CreateDataChannelInner(MessageParcel &data, MessageParcel &reply); - ErrCode DestroyDataChannelInner(MessageParcel &data, MessageParcel &reply); - ErrCode SuspendSensorsInner(MessageParcel &data, MessageParcel &reply); - ErrCode ResumeSensorsInner(MessageParcel &data, MessageParcel &reply); - ErrCode GetActiveInfoListInner(MessageParcel &data, MessageParcel &reply); - ErrCode CreateSocketChannelInner(MessageParcel &data, MessageParcel &reply); - ErrCode DestroySocketChannelInner(MessageParcel &data, MessageParcel &reply); - ErrCode EnableActiveInfoCBInner(MessageParcel &data, MessageParcel &reply); - ErrCode DisableActiveInfoCBInner(MessageParcel &data, MessageParcel &reply); - ErrCode ResetSensorsInner(MessageParcel &data, MessageParcel &reply); - bool IsSystemServiceCalling(); - int32_t ProcessRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option); - bool IsSystemCalling(); -}; -} // namespace Sensors -} // namespace OHOS -#endif // SENSOR_SERVICE_STUB_H diff --git a/services/src/sensor_service.cpp b/services/src/sensor_service.cpp index 2f86564c..d529ce19 100644 --- a/services/src/sensor_service.cpp +++ b/services/src/sensor_service.cpp @@ -18,8 +18,10 @@ #include #include #include +#include #include +#include "accesstoken_kit.h" #ifdef HIVIEWDFX_HISYSEVENT_ENABLE #include "hisysevent.h" #endif // HIVIEWDFX_HISYSEVENT_ENABLE @@ -27,6 +29,7 @@ #ifdef MEMMGR_ENABLE #include "mem_mgr_client.h" #endif // MEMMGR_ENABLE +#include "ipc_skeleton.h" #include "permission_util.h" #include "print_sensor_data.h" @@ -289,22 +292,58 @@ bool SensorService::CheckSensorId(int32_t sensorId) return true; } -bool SensorService::CheckParameter(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs) +bool SensorService::IsSystemServiceCalling() { - if ((!CheckSensorId(sensorId)) || - ((samplingPeriodNs != 0L) && ((maxReportDelayNs / samplingPeriodNs) > MAX_EVENT_COUNT))) { + const auto tokenId = IPCSkeleton::GetCallingTokenID(); + const auto flag = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId); + if (flag == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE || + flag == Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL) { + SEN_HILOGD("system service calling, flag: %{public}u", flag); + return true; + } + return false; +} + +bool SensorService::IsSystemCalling() +{ + if (IsSystemServiceCalling()) { + return true; + } + return Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(IPCSkeleton::GetCallingFullTokenID()); +} + +ErrCode SensorService::CheckAuthAndParameter(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs) +{ + if ((sensorId == SENSOR_TYPE_ID_COLOR || sensorId == SENSOR_TYPE_ID_SAR || + sensorId > GL_SENSOR_TYPE_PRIVATE_MIN_VALUE) && + !IsSystemCalling()) { + SEN_HILOGE("Permission check failed. A non-system application uses the system API"); + return NON_SYSTEM_API; + } + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + int32_t ret = permissionUtil.CheckSensorPermission(GetCallingTokenID(), sensorId); + if (ret != PERMISSION_GRANTED) { +#ifdef HIVIEWDFX_HISYSEVENT_ENABLE + HiSysEventWrite(HiSysEvent::Domain::SENSOR, "VERIFY_ACCESS_TOKEN_FAIL", HiSysEvent::EventType::SECURITY, + "PKG_NAME", "SensorEnableInner", "ERROR_CODE", ret); +#endif // HIVIEWDFX_HISYSEVENT_ENABLE + SEN_HILOGE("sensorId:%{public}d grant failed, ret:%{public}d", sensorId, ret); + return PERMISSION_DENIED; + } + if ((!CheckSensorId(sensorId)) || (maxReportDelayNs != 0L && samplingPeriodNs != 0L && + ((maxReportDelayNs / samplingPeriodNs) > MAX_EVENT_COUNT))) { SEN_HILOGE("sensorId is invalid or maxReportDelayNs exceeded the maximum value"); - return false; + return ERR_NO_INIT; } - return true; + return ERR_OK; } ErrCode SensorService::EnableSensor(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs) { CALL_LOG_ENTER; - if (!CheckParameter(sensorId, samplingPeriodNs, maxReportDelayNs)) { - SEN_HILOGE("sensorId, samplingPeriodNs or maxReportDelayNs is invalid"); - return ERR_NO_INIT; + ErrCode checkResult = CheckAuthAndParameter(sensorId, samplingPeriodNs, maxReportDelayNs); + if (checkResult != ERR_OK) { + return checkResult; } int32_t pid = GetCallingPid(); std::lock_guard serviceLock(serviceLock_); @@ -384,9 +423,39 @@ ErrCode SensorService::DisableSensor(int32_t sensorId, int32_t pid) ErrCode SensorService::DisableSensor(int32_t sensorId) { CALL_LOG_ENTER; + if ((sensorId == SENSOR_TYPE_ID_COLOR || sensorId == SENSOR_TYPE_ID_SAR || + sensorId > GL_SENSOR_TYPE_PRIVATE_MIN_VALUE) && + !IsSystemCalling()) { + SEN_HILOGE("Permission check failed. A non-system application uses the system API"); + return NON_SYSTEM_API; + } + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + int32_t ret = permissionUtil.CheckSensorPermission(GetCallingTokenID(), sensorId); + if (ret != PERMISSION_GRANTED) { +#ifdef HIVIEWDFX_HISYSEVENT_ENABLE + HiSysEventWrite(HiSysEvent::Domain::SENSOR, "VERIFY_ACCESS_TOKEN_FAIL", HiSysEvent::EventType::SECURITY, + "PKG_NAME", "SensorDisableInner", "ERROR_CODE", ret); +#endif // HIVIEWDFX_HISYSEVENT_ENABLE + SEN_HILOGE("sensorId:%{public}d grant failed, ret:%{public}d", sensorId, ret); + return PERMISSION_DENIED; + } return DisableSensor(sensorId, GetCallingPid()); } +ErrCode SensorService::GetSensorList(std::vector &sensorList) +{ + std::vector sensors = GetSensorList(); + int32_t sensorCount = static_cast(sensors.size()); + if (sensorCount > MAX_SENSOR_COUNT) { + SEN_HILOGD("SensorCount:%{public}u", sensorCount); + sensorCount = MAX_SENSOR_COUNT; + } + for (int32_t i = 0; i < sensorCount; ++i) { + sensorList.push_back(sensors[i]); + } + return ERR_OK; +} + std::vector SensorService::GetSensorList() { std::lock_guard sensorLock(sensorsMutex_); @@ -404,10 +473,16 @@ std::vector SensorService::GetSensorList() return sensors_; } -ErrCode SensorService::TransferDataChannel(const sptr &sensorBasicDataChannel, - const sptr &sensorClient) +ErrCode SensorService::TransferDataChannel(int32_t sendFd, const sptr &sensorClient) { SEN_HILOGI("In"); + sptr sensorBasicDataChannel = new (std::nothrow) SensorBasicDataChannel(); + CHKPR(sensorBasicDataChannel, OBJECT_NULL); + auto ret = sensorBasicDataChannel->CreateSensorBasicChannelBySendFd(sendFd); + if (ret != ERR_OK) { + SEN_HILOGE("CreateSensorBasicChannelBySendFd ret:%{public}d", ret); + return OBJECT_NULL; + } CHKPR(sensorBasicDataChannel, ERR_NO_INIT); auto pid = GetCallingPid(); auto uid = GetCallingUid(); @@ -426,7 +501,7 @@ ErrCode SensorService::TransferDataChannel(const sptr &s return ERR_OK; } -ErrCode SensorService::DestroySensorChannel(sptr sensorClient) +ErrCode SensorService::DestroySensorChannel(const sptr &sensorClient) { CALL_LOG_ENTER; const int32_t clientPid = GetCallingPid(); @@ -527,6 +602,16 @@ int32_t SensorService::Dump(int32_t fd, const std::vector &args) ErrCode SensorService::SuspendSensors(int32_t pid) { CALL_LOG_ENTER; + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } + int32_t ret = permissionUtil.CheckManageSensorPermission(GetCallingTokenID()); + if (ret != PERMISSION_GRANTED) { + SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); + return PERMISSION_DENIED; + } if (pid < 0) { SEN_HILOGE("Pid is invalid"); return CLIENT_PID_INVALID_ERR; @@ -537,6 +622,16 @@ ErrCode SensorService::SuspendSensors(int32_t pid) ErrCode SensorService::ResumeSensors(int32_t pid) { CALL_LOG_ENTER; + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } + int32_t ret = permissionUtil.CheckManageSensorPermission(GetCallingTokenID()); + if (ret != PERMISSION_GRANTED) { + SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); + return PERMISSION_DENIED; + } if (pid < 0) { SEN_HILOGE("Pid is invalid"); return CLIENT_PID_INVALID_ERR; @@ -547,18 +642,33 @@ ErrCode SensorService::ResumeSensors(int32_t pid) ErrCode SensorService::GetActiveInfoList(int32_t pid, std::vector &activeInfoList) { CALL_LOG_ENTER; + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } if (pid < 0) { SEN_HILOGE("Pid is invalid"); return CLIENT_PID_INVALID_ERR; } activeInfoList = POWER_POLICY.GetActiveInfoList(pid); + uint32_t activeInfoCount = static_cast(activeInfoList.size()); + if (activeInfoCount > MAX_SENSOR_COUNT) { + SEN_HILOGD("ActiveInfoCount:%{public}u", activeInfoCount); + activeInfoList.erase(activeInfoList.begin() + MAX_SENSOR_COUNT, activeInfoList.begin() + activeInfoCount - 1); + } return ERR_OK; } -ErrCode SensorService::CreateSocketChannel(sptr sensorClient, int32_t &clientFd) +ErrCode SensorService::CreateSocketChannel(const sptr &sensorClient, int32_t &clientFd) { CALL_LOG_ENTER; CHKPR(sensorClient, INVALID_POINTER); + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } int32_t serverFd = -1; int32_t ret = AddSocketPairInfo(GetCallingUid(), GetCallingPid(), AccessTokenKit::GetTokenTypeFlag(GetCallingTokenID()), @@ -571,10 +681,15 @@ ErrCode SensorService::CreateSocketChannel(sptr sensorClient, int return ERR_OK; } -ErrCode SensorService::DestroySocketChannel(sptr sensorClient) +ErrCode SensorService::DestroySocketChannel(const sptr &sensorClient) { CALL_LOG_ENTER; CHKPR(sensorClient, INVALID_POINTER); + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } DelSession(GetCallingPid()); UnregisterClientDeathRecipient(sensorClient); return ERR_OK; @@ -583,6 +698,11 @@ ErrCode SensorService::DestroySocketChannel(sptr sensorClient) ErrCode SensorService::EnableActiveInfoCB() { CALL_LOG_ENTER; + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } isReportActiveInfo_ = true; return clientInfo_.AddActiveInfoCBPid(GetCallingPid()); } @@ -590,6 +710,11 @@ ErrCode SensorService::EnableActiveInfoCB() ErrCode SensorService::DisableActiveInfoCB() { CALL_LOG_ENTER; + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } isReportActiveInfo_ = false; return clientInfo_.DelActiveInfoCBPid(GetCallingPid()); } @@ -597,6 +722,16 @@ ErrCode SensorService::DisableActiveInfoCB() ErrCode SensorService::ResetSensors() { CALL_LOG_ENTER; + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { + SEN_HILOGE("TokenType is not TOKEN_NATIVE"); + return PERMISSION_DENIED; + } + int32_t ret = permissionUtil.CheckManageSensorPermission(GetCallingTokenID()); + if (ret != PERMISSION_GRANTED) { + SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); + return PERMISSION_DENIED; + } return POWER_POLICY.ResetSensors(); } diff --git a/services/src/sensor_service_stub.cpp b/services/src/sensor_service_stub.cpp deleted file mode 100644 index 36a679fb..00000000 --- a/services/src/sensor_service_stub.cpp +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. - * 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 "sensor_service_stub.h" - -#include -#include -#include -#include -#include - -#include "accesstoken_kit.h" -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE -#include "hisysevent.h" -#endif // HIVIEWDFX_HISYSEVENT_ENABLE -#include "ipc_skeleton.h" -#include "message_parcel.h" -#include "permission_util.h" -#include "sensor_client_proxy.h" -#include "sensor_errors.h" -#include "sensor_parcel.h" - -#undef LOG_TAG -#define LOG_TAG "SensorServiceStub" - -namespace OHOS { -namespace Sensors { -using namespace OHOS::HiviewDFX; - -SensorServiceStub::SensorServiceStub() {} - -SensorServiceStub::~SensorServiceStub() {} - -int32_t SensorServiceStub::ProcessRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, - MessageOption &option) -{ - switch (code) { - case static_cast(SensorInterfaceCode::ENABLE_SENSOR): { - return SensorEnableInner(data, reply); - } - case static_cast(SensorInterfaceCode::DISABLE_SENSOR): { - return SensorDisableInner(data, reply); - } - case static_cast(SensorInterfaceCode::GET_SENSOR_LIST): { - return GetAllSensorsInner(data, reply); - } - case static_cast(SensorInterfaceCode::TRANSFER_DATA_CHANNEL): { - return CreateDataChannelInner(data, reply); - } - case static_cast(SensorInterfaceCode::DESTROY_SENSOR_CHANNEL): { - return DestroyDataChannelInner(data, reply); - } - case static_cast(SensorInterfaceCode::SUSPEND_SENSORS): { - return SuspendSensorsInner(data, reply); - } - case static_cast(SensorInterfaceCode::RESUME_SENSORS): { - return ResumeSensorsInner(data, reply); - } - case static_cast(SensorInterfaceCode::GET_ACTIVE_INFO_LIST): { - return GetActiveInfoListInner(data, reply); - } - case static_cast(SensorInterfaceCode::CREATE_SOCKET_CHANNEL): { - return CreateSocketChannelInner(data, reply); - } - case static_cast(SensorInterfaceCode::DESTROY_SOCKET_CHANNEL): { - return DestroySocketChannelInner(data, reply); - } - case static_cast(SensorInterfaceCode::ENABLE_ACTIVE_INFO_CB): { - return EnableActiveInfoCBInner(data, reply); - } - case static_cast(SensorInterfaceCode::DISABLE_ACTIVE_INFO_CB): { - return DisableActiveInfoCBInner(data, reply); - } - case static_cast(SensorInterfaceCode::RESET_SENSORS): { - return ResetSensorsInner(data, reply); - } - default: { - SEN_HILOGD("No member func supporting, applying default process"); - return IPCObjectStub::OnRemoteRequest(code, data, reply, option); - } - } -} - -int32_t SensorServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, - MessageOption &option) -{ - SEN_HILOGD("Begin, cmd:%{public}u", code); - std::u16string descriptor = SensorServiceStub::GetDescriptor(); - std::u16string remoteDescriptor = data.ReadInterfaceToken(); - if (descriptor != remoteDescriptor) { - SEN_HILOGE("Client and service descriptors are inconsistent"); - return OBJECT_NULL; - } - return ProcessRemoteRequest(code, data, reply, option); -} - -bool SensorServiceStub::IsSystemServiceCalling() -{ - const auto tokenId = IPCSkeleton::GetCallingTokenID(); - const auto flag = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId); - if (flag == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE || - flag == Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL) { - SEN_HILOGD("system service calling, tokenId: %{public}u, flag: %{public}u", tokenId, flag); - return true; - } - return false; -} - -bool SensorServiceStub::IsSystemCalling() -{ - if (IsSystemServiceCalling()) { - return true; - } - return Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(IPCSkeleton::GetCallingFullTokenID()); -} - -ErrCode SensorServiceStub::SensorEnableInner(MessageParcel &data, MessageParcel &reply) -{ - (void)reply; - int32_t sensorId; - READINT32(data, sensorId, READ_PARCEL_ERR); - if ((sensorId == SENSOR_TYPE_ID_COLOR || sensorId == SENSOR_TYPE_ID_SAR || - sensorId > GL_SENSOR_TYPE_PRIVATE_MIN_VALUE) && !IsSystemCalling()) { - SEN_HILOGE("Permission check failed. A non-system application uses the system API"); - return NON_SYSTEM_API; - } - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - int32_t ret = permissionUtil.CheckSensorPermission(GetCallingTokenID(), sensorId); - if (ret != PERMISSION_GRANTED) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "VERIFY_ACCESS_TOKEN_FAIL", - HiSysEvent::EventType::SECURITY, "PKG_NAME", "SensorEnableInner", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("sensorId:%{public}d grant failed, result:%{public}d", sensorId, ret); - return PERMISSION_DENIED; - } - int64_t samplingPeriodNs; - int64_t maxReportDelayNs; - READINT64(data, samplingPeriodNs, READ_PARCEL_ERR); - READINT64(data, maxReportDelayNs, READ_PARCEL_ERR); - return EnableSensor(sensorId, samplingPeriodNs, maxReportDelayNs); -} - -ErrCode SensorServiceStub::SensorDisableInner(MessageParcel &data, MessageParcel &reply) -{ - (void)reply; - int32_t sensorId; - READINT32(data, sensorId, READ_PARCEL_ERR); - if ((sensorId == SENSOR_TYPE_ID_COLOR || sensorId == SENSOR_TYPE_ID_SAR || - sensorId > GL_SENSOR_TYPE_PRIVATE_MIN_VALUE) && !IsSystemCalling()) { - SEN_HILOGE("Permission check failed. A non-system application uses the system API"); - return NON_SYSTEM_API; - } - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - int32_t ret = permissionUtil.CheckSensorPermission(GetCallingTokenID(), sensorId); - if (ret != PERMISSION_GRANTED) { -#ifdef HIVIEWDFX_HISYSEVENT_ENABLE - HiSysEventWrite(HiSysEvent::Domain::SENSOR, "VERIFY_ACCESS_TOKEN_FAIL", - HiSysEvent::EventType::SECURITY, "PKG_NAME", "SensorDisableInner", "ERROR_CODE", ret); -#endif // HIVIEWDFX_HISYSEVENT_ENABLE - SEN_HILOGE("sensorId:%{public}d grant failed, result:%{public}d", sensorId, ret); - return PERMISSION_DENIED; - } - return DisableSensor(sensorId); -} - -ErrCode SensorServiceStub::GetAllSensorsInner(MessageParcel &data, MessageParcel &reply) -{ - (void)data; - std::vector sensors = GetSensorList(); - uint32_t sensorCount = static_cast(sensors.size()); - if (sensorCount > MAX_SENSOR_COUNT) { - SEN_HILOGD("SensorCount:%{public}u", sensorCount); - sensorCount = MAX_SENSOR_COUNT; - } - WRITEUINT32(reply, sensorCount, WRITE_PARCEL_ERR); - for (uint32_t i = 0; i < sensorCount; ++i) { - if (!sensors[i].Marshalling(reply)) { - SEN_HILOGE("Sensor %{public}u marshalling failed", i); - return GET_SENSOR_LIST_ERR; - } - } - return NO_ERROR; -} - -ErrCode SensorServiceStub::CreateDataChannelInner(MessageParcel &data, MessageParcel &reply) -{ - (void)reply; - sptr sensorChannel = new (std::nothrow) SensorBasicDataChannel(); - CHKPR(sensorChannel, OBJECT_NULL); - auto ret = sensorChannel->CreateSensorBasicChannel(data); - if (ret != ERR_OK) { - SEN_HILOGE("CreateSensorBasicChannel ret:%{public}d", ret); - return OBJECT_NULL; - } - sptr sensorClient = data.ReadRemoteObject(); - CHKPR(sensorClient, OBJECT_NULL); - return TransferDataChannel(sensorChannel, sensorClient); -} - -ErrCode SensorServiceStub::DestroyDataChannelInner(MessageParcel &data, MessageParcel &reply) -{ - sptr sensorClient = data.ReadRemoteObject(); - CHKPR(sensorClient, OBJECT_NULL); - return DestroySensorChannel(sensorClient); -} - -ErrCode SensorServiceStub::SuspendSensorsInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - int32_t ret = permissionUtil.CheckManageSensorPermission(GetCallingTokenID()); - if (ret != PERMISSION_GRANTED) { - SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); - return PERMISSION_DENIED; - } - (void)reply; - int32_t pid; - READINT32(data, pid, READ_PARCEL_ERR); - return SuspendSensors(pid); -} - -ErrCode SensorServiceStub::ResumeSensorsInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - int32_t ret = permissionUtil.CheckManageSensorPermission(GetCallingTokenID()); - if (ret != PERMISSION_GRANTED) { - SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); - return PERMISSION_DENIED; - } - (void)reply; - int32_t pid; - READINT32(data, pid, READ_PARCEL_ERR); - return ResumeSensors(pid); -} - -ErrCode SensorServiceStub::GetActiveInfoListInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - int32_t pid; - READINT32(data, pid, READ_PARCEL_ERR); - std::vector activeInfoList; - int32_t ret = GetActiveInfoList(pid, activeInfoList); - if (ret != ERR_OK) { - SEN_HILOGE("Get activeInfo list failed"); - return ret; - } - uint32_t activeInfoCount = static_cast(activeInfoList.size()); - if (activeInfoCount > MAX_SENSOR_COUNT) { - SEN_HILOGD("ActiveInfoCount:%{public}u", activeInfoCount); - activeInfoCount = MAX_SENSOR_COUNT; - } - WRITEUINT32(reply, activeInfoCount, WRITE_PARCEL_ERR); - for (uint32_t i = 0; i < activeInfoCount; ++i) { - if (!activeInfoList[i].Marshalling(reply)) { - SEN_HILOGE("ActiveInfo %{public}u marshalling failed", i); - return WRITE_PARCEL_ERR; - } - } - return ERR_OK; -} - -ErrCode SensorServiceStub::CreateSocketChannelInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - sptr sensorClient = data.ReadRemoteObject(); - CHKPR(sensorClient, INVALID_POINTER); - int32_t clientFd = -1; - int32_t ret = CreateSocketChannel(sensorClient, clientFd); - if (ret != ERR_OK) { - SEN_HILOGE("Create socket channel failed"); - return ret; - } - if (!reply.WriteFileDescriptor(clientFd)) { - SEN_HILOGE("Parcel write file descriptor failed"); - close(clientFd); - return WRITE_PARCEL_ERR; - } - close(clientFd); - return ERR_OK; -} - -ErrCode SensorServiceStub::DestroySocketChannelInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - sptr sensorClient = data.ReadRemoteObject(); - CHKPR(sensorClient, INVALID_POINTER); - int32_t ret = DestroySocketChannel(sensorClient); - if (ret != ERR_OK) { - SEN_HILOGE("Destroy socket channel failed"); - return ret; - } - return ERR_OK; -} - -ErrCode SensorServiceStub::EnableActiveInfoCBInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - return EnableActiveInfoCB(); -} - -ErrCode SensorServiceStub::DisableActiveInfoCBInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - return DisableActiveInfoCB(); -} - -ErrCode SensorServiceStub::ResetSensorsInner(MessageParcel &data, MessageParcel &reply) -{ - PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); - if (!permissionUtil.IsNativeToken(GetCallingTokenID())) { - SEN_HILOGE("TokenType is not TOKEN_NATIVE"); - return PERMISSION_DENIED; - } - int32_t ret = permissionUtil.CheckManageSensorPermission(GetCallingTokenID()); - if (ret != PERMISSION_GRANTED) { - SEN_HILOGE("Check manage sensor permission failed, ret:%{public}d", ret); - return PERMISSION_DENIED; - } - return ResetSensors(); -} -} // namespace Sensors -} // namespace OHOS diff --git a/test/fuzztest/services/createdatachannelstub_fuzzer/BUILD.gn b/test/fuzztest/services/createdatachannelstub_fuzzer/BUILD.gn index 68de4207..4a23ec60 100644 --- a/test/fuzztest/services/createdatachannelstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/createdatachannelstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("CreateDataChannelStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/createdatachannelstub_fuzzer/createdatachannelstub_fuzzer.cpp b/test/fuzztest/services/createdatachannelstub_fuzzer/createdatachannelstub_fuzzer.cpp index 8d1ffe48..a92cbe68 100644 --- a/test/fuzztest/services/createdatachannelstub_fuzzer/createdatachannelstub_fuzzer.cpp +++ b/test/fuzztest/services/createdatachannelstub_fuzzer/createdatachannelstub_fuzzer.cpp @@ -90,16 +90,16 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::TRANSFER_DATA_CHANNEL), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_TRANSFER_DATA_CHANNEL), datas, reply, option); datas.RewindRead(0); - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::DESTROY_SENSOR_CHANNEL), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_DESTROY_SENSOR_CHANNEL), datas, reply, option); datas.RewindRead(0); - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::CREATE_SOCKET_CHANNEL), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_CREATE_SOCKET_CHANNEL), datas, reply, option); datas.RewindRead(0); - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::DESTROY_SOCKET_CHANNEL), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_DESTROY_SOCKET_CHANNEL), datas, reply, option); return true; } diff --git a/test/fuzztest/services/disableactiveinfocbstub_fuzzer/BUILD.gn b/test/fuzztest/services/disableactiveinfocbstub_fuzzer/BUILD.gn index e23de747..39b8c4d4 100644 --- a/test/fuzztest/services/disableactiveinfocbstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/disableactiveinfocbstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("DisableActiveInfoCBStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/disableactiveinfocbstub_fuzzer/disableactiveinfocbstub_fuzzer.cpp b/test/fuzztest/services/disableactiveinfocbstub_fuzzer/disableactiveinfocbstub_fuzzer.cpp index 21dc7572..249064fa 100644 --- a/test/fuzztest/services/disableactiveinfocbstub_fuzzer/disableactiveinfocbstub_fuzzer.cpp +++ b/test/fuzztest/services/disableactiveinfocbstub_fuzzer/disableactiveinfocbstub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::DISABLE_ACTIVE_INFO_CB), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_DISABLE_ACTIVE_INFO_C_B), datas, reply, option); return true; } diff --git a/test/fuzztest/services/enableactiveinfocbstub_fuzzer/BUILD.gn b/test/fuzztest/services/enableactiveinfocbstub_fuzzer/BUILD.gn index 38106307..33c7bf25 100644 --- a/test/fuzztest/services/enableactiveinfocbstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/enableactiveinfocbstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("EnableActiveInfoCBStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/enableactiveinfocbstub_fuzzer/enableactiveinfocbstub_fuzzer.cpp b/test/fuzztest/services/enableactiveinfocbstub_fuzzer/enableactiveinfocbstub_fuzzer.cpp index a99b9e13..279510c5 100644 --- a/test/fuzztest/services/enableactiveinfocbstub_fuzzer/enableactiveinfocbstub_fuzzer.cpp +++ b/test/fuzztest/services/enableactiveinfocbstub_fuzzer/enableactiveinfocbstub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::ENABLE_ACTIVE_INFO_CB), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_ENABLE_ACTIVE_INFO_C_B), datas, reply, option); return true; } diff --git a/test/fuzztest/services/getactiveinfoliststub_fuzzer/BUILD.gn b/test/fuzztest/services/getactiveinfoliststub_fuzzer/BUILD.gn index d27736ae..fa587c6b 100644 --- a/test/fuzztest/services/getactiveinfoliststub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/getactiveinfoliststub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("GetActiveInfoListStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/getactiveinfoliststub_fuzzer/getactiveinfoliststub_fuzzer.cpp b/test/fuzztest/services/getactiveinfoliststub_fuzzer/getactiveinfoliststub_fuzzer.cpp index c31efbb1..2ad06c29 100644 --- a/test/fuzztest/services/getactiveinfoliststub_fuzzer/getactiveinfoliststub_fuzzer.cpp +++ b/test/fuzztest/services/getactiveinfoliststub_fuzzer/getactiveinfoliststub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::GET_ACTIVE_INFO_LIST), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_GET_ACTIVE_INFO_LIST), datas, reply, option); return true; } diff --git a/test/fuzztest/services/getallsensorsstub_fuzzer/BUILD.gn b/test/fuzztest/services/getallsensorsstub_fuzzer/BUILD.gn index 72f96fb0..c1fed453 100644 --- a/test/fuzztest/services/getallsensorsstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/getallsensorsstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("GetAllSensorsStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/getallsensorsstub_fuzzer/getallsensorsstub_fuzzer.cpp b/test/fuzztest/services/getallsensorsstub_fuzzer/getallsensorsstub_fuzzer.cpp index ef06d085..a8065681 100644 --- a/test/fuzztest/services/getallsensorsstub_fuzzer/getallsensorsstub_fuzzer.cpp +++ b/test/fuzztest/services/getallsensorsstub_fuzzer/getallsensorsstub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::GET_SENSOR_LIST), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_GET_SENSOR_LIST), datas, reply, option); return true; } diff --git a/test/fuzztest/services/resetsensorsstub_fuzzer/BUILD.gn b/test/fuzztest/services/resetsensorsstub_fuzzer/BUILD.gn index 56ebd8e5..b8312a6f 100644 --- a/test/fuzztest/services/resetsensorsstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/resetsensorsstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("ResetSensorsStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/resetsensorsstub_fuzzer/resetsensorsstub_fuzzer.cpp b/test/fuzztest/services/resetsensorsstub_fuzzer/resetsensorsstub_fuzzer.cpp index 41420633..71ce1199 100644 --- a/test/fuzztest/services/resetsensorsstub_fuzzer/resetsensorsstub_fuzzer.cpp +++ b/test/fuzztest/services/resetsensorsstub_fuzzer/resetsensorsstub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::RESET_SENSORS), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_RESET_SENSORS), datas, reply, option); return true; } diff --git a/test/fuzztest/services/resumesensorsstub_fuzzer/BUILD.gn b/test/fuzztest/services/resumesensorsstub_fuzzer/BUILD.gn index 5b6362ae..8f45be0d 100644 --- a/test/fuzztest/services/resumesensorsstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/resumesensorsstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("ResumeSensorsStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/resumesensorsstub_fuzzer/resumesensorsstub_fuzzer.cpp b/test/fuzztest/services/resumesensorsstub_fuzzer/resumesensorsstub_fuzzer.cpp index 91c67ddb..d5982641 100644 --- a/test/fuzztest/services/resumesensorsstub_fuzzer/resumesensorsstub_fuzzer.cpp +++ b/test/fuzztest/services/resumesensorsstub_fuzzer/resumesensorsstub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::RESUME_SENSORS), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_RESUME_SENSORS), datas, reply, option); return true; } diff --git a/test/fuzztest/services/sensordisablestub_fuzzer/BUILD.gn b/test/fuzztest/services/sensordisablestub_fuzzer/BUILD.gn index 9b11b7ed..9ae68bc3 100644 --- a/test/fuzztest/services/sensordisablestub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/sensordisablestub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("SensorDisableStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/sensordisablestub_fuzzer/sensordisablestub_fuzzer.cpp b/test/fuzztest/services/sensordisablestub_fuzzer/sensordisablestub_fuzzer.cpp index f5ca6e0d..be7aef29 100644 --- a/test/fuzztest/services/sensordisablestub_fuzzer/sensordisablestub_fuzzer.cpp +++ b/test/fuzztest/services/sensordisablestub_fuzzer/sensordisablestub_fuzzer.cpp @@ -86,7 +86,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::DISABLE_SENSOR), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_DISABLE_SENSOR), datas, reply, option); return true; } diff --git a/test/fuzztest/services/sensorenablestub_fuzzer/BUILD.gn b/test/fuzztest/services/sensorenablestub_fuzzer/BUILD.gn index 7b91576c..d24df39c 100644 --- a/test/fuzztest/services/sensorenablestub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/sensorenablestub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("SensorEnableStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/sensorenablestub_fuzzer/sensorenablestub_fuzzer.cpp b/test/fuzztest/services/sensorenablestub_fuzzer/sensorenablestub_fuzzer.cpp index 28b34adb..a714fd1d 100644 --- a/test/fuzztest/services/sensorenablestub_fuzzer/sensorenablestub_fuzzer.cpp +++ b/test/fuzztest/services/sensorenablestub_fuzzer/sensorenablestub_fuzzer.cpp @@ -93,7 +93,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::ENABLE_SENSOR), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_ENABLE_SENSOR), datas, reply, option); return true; } diff --git a/test/fuzztest/services/sensoronremoterequest_fuzzer/BUILD.gn b/test/fuzztest/services/sensoronremoterequest_fuzzer/BUILD.gn index 103c41ec..541a9f6c 100644 --- a/test/fuzztest/services/sensoronremoterequest_fuzzer/BUILD.gn +++ b/test/fuzztest/services/sensoronremoterequest_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("SensorOnRemoteRequestFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/createsocketchannel_fuzzer/BUILD.gn b/test/fuzztest/services/service/createsocketchannel_fuzzer/BUILD.gn index 26378f39..930036d3 100644 --- a/test/fuzztest/services/service/createsocketchannel_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/createsocketchannel_fuzzer/BUILD.gn @@ -49,6 +49,7 @@ ohos_fuzztest("CreateSocketChannelFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/getactiveinfolist_fuzzer/BUILD.gn b/test/fuzztest/services/service/getactiveinfolist_fuzzer/BUILD.gn index 46dfb718..10dd7462 100644 --- a/test/fuzztest/services/service/getactiveinfolist_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/getactiveinfolist_fuzzer/BUILD.gn @@ -49,6 +49,7 @@ ohos_fuzztest("GetActiveInfoListFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/registerclientdeathrecipient_fuzzer/BUILD.gn b/test/fuzztest/services/service/registerclientdeathrecipient_fuzzer/BUILD.gn index 556816d2..475f0a67 100644 --- a/test/fuzztest/services/service/registerclientdeathrecipient_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/registerclientdeathrecipient_fuzzer/BUILD.gn @@ -48,6 +48,7 @@ ohos_fuzztest("RegisterClientDeathRecipientFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/registerpermcallback_fuzzer/BUILD.gn b/test/fuzztest/services/service/registerpermcallback_fuzzer/BUILD.gn index ab0f298c..55ef3111 100644 --- a/test/fuzztest/services/service/registerpermcallback_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/registerpermcallback_fuzzer/BUILD.gn @@ -48,6 +48,7 @@ ohos_fuzztest("RegisterPermCallbackFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/reportactiveinfo_fuzzer/BUILD.gn b/test/fuzztest/services/service/reportactiveinfo_fuzzer/BUILD.gn index da2e315b..e9025cf1 100644 --- a/test/fuzztest/services/service/reportactiveinfo_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/reportactiveinfo_fuzzer/BUILD.gn @@ -49,6 +49,7 @@ ohos_fuzztest("ReportActiveInfoFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/reportonchangedata_fuzzer/BUILD.gn b/test/fuzztest/services/service/reportonchangedata_fuzzer/BUILD.gn index 2efd1e45..793ee5b1 100644 --- a/test/fuzztest/services/service/reportonchangedata_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/reportonchangedata_fuzzer/BUILD.gn @@ -49,6 +49,7 @@ ohos_fuzztest("ReportOnChangeDataFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/service/reportsensorsysevent_fuzzer/BUILD.gn b/test/fuzztest/services/service/reportsensorsysevent_fuzzer/BUILD.gn index 0a1803a6..68851482 100644 --- a/test/fuzztest/services/service/reportsensorsysevent_fuzzer/BUILD.gn +++ b/test/fuzztest/services/service/reportsensorsysevent_fuzzer/BUILD.gn @@ -48,6 +48,7 @@ ohos_fuzztest("ReportSensorSysEventFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/suspendsensorsstub_fuzzer/BUILD.gn b/test/fuzztest/services/suspendsensorsstub_fuzzer/BUILD.gn index a7794b1b..068c76f3 100644 --- a/test/fuzztest/services/suspendsensorsstub_fuzzer/BUILD.gn +++ b/test/fuzztest/services/suspendsensorsstub_fuzzer/BUILD.gn @@ -47,6 +47,7 @@ ohos_fuzztest("SuspendSensorsStubFuzzTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/native:sensor_interface_native", + "$SUBSYSTEM_DIR/frameworks/native:sensor_service_stub", "$SUBSYSTEM_DIR/services:libsensor_service_static", "$SUBSYSTEM_DIR/utils/common:libsensor_utils", "$SUBSYSTEM_DIR/utils/ipc:libsensor_ipc", diff --git a/test/fuzztest/services/suspendsensorsstub_fuzzer/suspendsensorsstub_fuzzer.cpp b/test/fuzztest/services/suspendsensorsstub_fuzzer/suspendsensorsstub_fuzzer.cpp index e72bab07..a59873dd 100644 --- a/test/fuzztest/services/suspendsensorsstub_fuzzer/suspendsensorsstub_fuzzer.cpp +++ b/test/fuzztest/services/suspendsensorsstub_fuzzer/suspendsensorsstub_fuzzer.cpp @@ -70,7 +70,7 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) datas.RewindRead(0); MessageParcel reply; MessageOption option; - g_service->OnRemoteRequest(static_cast(SensorInterfaceCode::SUSPEND_SENSORS), + g_service->OnRemoteRequest(static_cast(ISensorServiceIpcCode::COMMAND_SUSPEND_SENSORS), datas, reply, option); return true; } diff --git a/utils/common/include/active_info.h b/utils/common/include/active_info.h index 645fb532..9bc1b6f3 100644 --- a/utils/common/include/active_info.h +++ b/utils/common/include/active_info.h @@ -34,7 +34,7 @@ public: int64_t GetMaxReportDelayNs() const; void SetMaxReportDelayNs(int64_t maxReportDelayNs); bool Marshalling(Parcel &parcel) const; - std::unique_ptr Unmarshalling(Parcel &parcel); + static ActiveInfo* Unmarshalling(Parcel &parcel); private: int32_t pid_ { -1 }; diff --git a/utils/common/include/sensor.h b/utils/common/include/sensor.h index f51ed758..1782b13c 100644 --- a/utils/common/include/sensor.h +++ b/utils/common/include/sensor.h @@ -54,7 +54,7 @@ public: int64_t GetMaxSamplePeriodNs() const; void SetMaxSamplePeriodNs(int64_t maxSamplePeriodNs); bool ReadFromParcel(Parcel &parcel); - static std::unique_ptr Unmarshalling(Parcel &parcel); + static Sensor* Unmarshalling(Parcel &parcel); virtual bool Marshalling(Parcel &parcel) const override; private: diff --git a/utils/common/include/sensor_basic_data_channel.h b/utils/common/include/sensor_basic_data_channel.h index 4cfbe60a..a1293ea3 100644 --- a/utils/common/include/sensor_basic_data_channel.h +++ b/utils/common/include/sensor_basic_data_channel.h @@ -33,6 +33,7 @@ public: virtual ~SensorBasicDataChannel(); int32_t CreateSensorBasicChannel(); int32_t CreateSensorBasicChannel(MessageParcel &data); + int32_t CreateSensorBasicChannelBySendFd(int32_t sendFd); int32_t DestroySensorBasicChannel(); int32_t GetSendDataFd(); int32_t GetReceiveDataFd(); diff --git a/utils/common/include/sensor_errors.h b/utils/common/include/sensor_errors.h index 7a4acd2e..e2427752 100644 --- a/utils/common/include/sensor_errors.h +++ b/utils/common/include/sensor_errors.h @@ -23,7 +23,7 @@ namespace OHOS { namespace Sensors { -constexpr uint32_t MAX_SENSOR_COUNT = 200; +constexpr int32_t MAX_SENSOR_COUNT = 200; constexpr int32_t GL_SENSOR_TYPE_PRIVATE_MIN_VALUE = 512; // Error code for user enum ErrorCode : int32_t { diff --git a/utils/common/src/active_info.cpp b/utils/common/src/active_info.cpp index 2493615b..03e1bad5 100644 --- a/utils/common/src/active_info.cpp +++ b/utils/common/src/active_info.cpp @@ -89,18 +89,19 @@ bool ActiveInfo::Marshalling(Parcel &parcel) const return true; } -std::unique_ptr ActiveInfo::Unmarshalling(Parcel &parcel) +ActiveInfo* ActiveInfo::Unmarshalling(Parcel &parcel) { int32_t pid = -1; int32_t sensorId = -1; int64_t samplingPeriodNs = -1; int64_t maxReportDelayNs = -1; - if (!(parcel.ReadInt32(pid) && parcel.ReadInt32(sensorId) && - parcel.ReadInt64(samplingPeriodNs) && parcel.ReadInt64(maxReportDelayNs))) { + auto activeInfo = new (std::nothrow) ActiveInfo(); + if (activeInfo == nullptr || !(parcel.ReadInt32(pid) && parcel.ReadInt32(sensorId) && + parcel.ReadInt64(samplingPeriodNs) && parcel.ReadInt64(maxReportDelayNs))) { SEN_HILOGE("Read from parcel is failed"); - return nullptr; + activeInfo = nullptr; + return activeInfo; } - auto activeInfo = std::make_unique(); activeInfo->SetPid(pid); activeInfo->SetSensorId(sensorId); activeInfo->SetSamplingPeriodNs(samplingPeriodNs); diff --git a/utils/common/src/sensor.cpp b/utils/common/src/sensor.cpp index 4c13c51f..0a4885ec 100644 --- a/utils/common/src/sensor.cpp +++ b/utils/common/src/sensor.cpp @@ -227,12 +227,12 @@ bool Sensor::Marshalling(Parcel &parcel) const return true; } -std::unique_ptr Sensor::Unmarshalling(Parcel &parcel) +Sensor* Sensor::Unmarshalling(Parcel &parcel) { - auto sensor = std::make_unique(); - if (!sensor->ReadFromParcel(parcel)) { + auto sensor = new (std::nothrow) Sensor(); + if (sensor != nullptr && !sensor->ReadFromParcel(parcel)) { SEN_HILOGE("ReadFromParcel is failed"); - return nullptr; + sensor = nullptr; } return sensor; } diff --git a/utils/common/src/sensor_basic_data_channel.cpp b/utils/common/src/sensor_basic_data_channel.cpp index 7cd3109f..f7f3ff6a 100644 --- a/utils/common/src/sensor_basic_data_channel.cpp +++ b/utils/common/src/sensor_basic_data_channel.cpp @@ -118,6 +118,23 @@ int32_t SensorBasicDataChannel::CreateSensorBasicChannel(MessageParcel &data) return ERR_OK; } +int32_t SensorBasicDataChannel::CreateSensorBasicChannelBySendFd(int32_t sendFd) +{ + CALL_LOG_ENTER; + std::unique_lock lock(fdLock_); + if (sendFd_ != -1) { + SEN_HILOGD("Already create socketpair"); + return ERR_OK; + } + sendFd_ = sendFd; + if (sendFd_ < 0) { + SEN_HILOGE("ReadFileDescriptor is failed"); + sendFd_ = -1; + return SENSOR_CHANNEL_READ_DESCRIPTOR_ERR; + } + return ERR_OK; +} + SensorBasicDataChannel::~SensorBasicDataChannel() { DestroySensorBasicChannel(); -- Gitee