diff --git a/frameworks/native/BUILD.gn b/frameworks/native/BUILD.gn index 6ee82e32020891ea186fbe049166a66b5e5d6304..097d94fd466925195060615ca0adad45982a3cff 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 2fd9df9ac4441be519248b32630f20f7699daa22..cdbddd442f14f87aa6630f53a9c35b5c09f41ebd 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 6df8958628da1c7ac8586431ec83a110f14d6e68..0000000000000000000000000000000000000000 --- 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 be7fbea805ac195dc969d88759e6050d58eaf4b0..0000000000000000000000000000000000000000 --- 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 bd27c5f461ec4b85595e951b361cc669264f4328..b44273c09af9c08767fa0718b453f8853cc2e35d 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 b52e2897070676f4cf3b36aebef278d03181790e..0397d053d7bb9ccd922ca2a8fcd1bf05191015f3 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 b9b2b3d967f0062c0a982dc29b882ca6a8b8a6e9..0000000000000000000000000000000000000000 --- 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 db5914a2282a8268a7aae8db13484e7b46754a03..20606c5368314e548723436792f8478a284faa92 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 8d6e509bc5b7952915ad3c040d6300d65a7af006..8260e14be5dee64818369892b0c2db8efdd0160e 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 7711690172ae43536a58c74a77f248c7912bef37..9f2c4fae3efc09b64f0b412b906dc4045b37ff68 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 c799965d4dca6fa4b18826e9811fc3c262e524d4..0000000000000000000000000000000000000000 --- 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 2f86564c2d1555e5543109c667ee5447b51640cd..d529ce197e8182cba7ed024c1958b6da6b1009c5 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 36a679fb667eb27ff5ac12f3f744882e98c6fa61..0000000000000000000000000000000000000000 --- 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 68de4207ce97256146228d4aed741f3b3f43ac10..4a23ec6056acbde678cdec935ad7354a1acd888a 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 8d1ffe485965493dda966a6b4ad3f04f2dff630c..a92cbe68749952c2892ac9c10545a55b37d3e304 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 e23de7472dbebf5b8c67a25fa735ca5b994613ad..39b8c4d4035191d4d09e35fb37681c1370791e13 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 21dc7572b0bb5c9fd8c62f959999273a1ffea509..249064faeedc921cb80c8681014c29e5aa2e9009 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 381063076c0ab8d6b23c8a2523d92ecf9c1dc45b..33c7bf258aece8b72a16e84252e3f6ee4ead0733 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 a99b9e13bdc7ca83f308ec0e92f61dcd79e96e51..279510c51c3bd76054fb049124dc14c0ff074db1 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 d27736ae5e1f9dee7ebc7a7441e9b154f57ee604..fa587c6b91e9f18c219457e255a8642f22d0e2ce 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 c31efbb1a9350faa0eeff6995a668e54bc216dd5..2ad06c2924005b25a1fedb29428db6c4665b195d 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 72f96fb0941f04dd3c93746b18ba1f169e4d9eef..c1fed453386075cdda0246c92d027ba2896807f9 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 ef06d085a28ddbd3ba9c2792806be1dc17bc2c69..a80656817a41fa5c89973c21398345b5344a9ef1 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 56ebd8e5c111546f9ee72a6087575412a95bc529..b8312a6fe0abf0b0867389c96d78a640911648be 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 414206330f0bb0e84656224aa2bd956d7689dcfb..71ce1199d85db9bd4353bbfe68aa56e49fc99acb 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 5b6362aeb5900e41dbd78154eee1b8d9d12436e8..8f45be0d4ead572554ae2834cafd471ffbe46305 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 91c67ddb547dd56350d2dd1f0fbf9082bf8da37b..d598264155d3f709d4e14d900633b43edc883799 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 9b11b7edb5adbde36d9d5157bc2a34adafc9c627..9ae68bc322a3323444eedcd8f44735e0491a317d 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 f5ca6e0d55116238d4d51f3f3a029b872a3b68d5..be7aef29d4e65cc453690ab35349c0dfdac213d0 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 7b91576c9aff628a58eef90de4054e63e09c3c42..d24df39cd39206112b0107265e7e4a360ddfc694 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 28b34adb967217ac701cedfba3b720ede3c8f5c9..a714fd1dd284ad788854234453b3dcbd5aa4ff65 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 103c41ecefc3f8de06d50ee4c698e041ad4e6c2e..541a9f6c3e9a098326001e1f1024f1464b5e6493 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 26378f39c0bef12451c1310f573ae03e23226e71..930036d33739e351debbfd731e5c6622ed90374d 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 46dfb718eab61d01ae66b85549d3839baea4e7e9..10dd74626db7444eeba1f3372ae56a13e0835e1f 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 556816d208c56d0bd36629c619c09aaa67576000..475f0a67860e2b7b80020e2a679ad40531105878 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 ab0f298c78dc639d563d8c5c10383c139068f629..55ef3111cec1c851435fa5d35f7b89791ae4d0ea 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 da2e315bd07b135ddc1e2f53969cd9be0b3231a2..e9025cf19f55dd302c3a8fa861d9e93e9b853eb5 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 2efd1e4545293f065aa3a371b2d665926803603e..793ee5b17d48659ec1d490f0b83d8e91c60f3f87 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 0a1803a6ae8d2ef42d013740b72b4744d94206b9..68851482722528de75d5ff428f815ec8858b89a3 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 a7794b1b07fb079d923cbd2b0da74460674b5ee2..068c76f306ea7d7958647ec2fbb651fc3b002c42 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 e72bab07cb63b4b7de34d481b56a8c05ef121cbc..a59873dda276ffa3132a7ee80e173f15f28407bf 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 645fb5328a07e9c780b5f9e124bd19001a5c5c23..9bc1b6f30b5d563eb6514a8480dc6d04bbb1a807 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 f51ed75819244f3bb70d6bb39f0ac8c876a973e5..1782b13cafcafae42208755ecc5613fc49ea3b58 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 4cfbe60ada246c186d0cd953deb8fb5061a79e3b..a1293ea314ca7cb488191c76c9a6753b09495b29 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 7a4acd2e06da7c5ee6e68e3246cb588d9f0ffae3..e242775248c1866475eca6b606d129949f8d5254 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 2493615b4cf64bac98802456b5367d48b7a059fb..03e1bad5ad81c7c9045052c763c6e0f95f5b951c 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 4c13c51fd5dc3c741d1579c96302989347dc9dee..0a4885ec3d1eea3771d0831a500817ec9b7ad6e1 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 7cd3109f81af75174948500268f8107c5346ee32..f7f3ff6a876afcc7bf5a33cc4683f14fe3a744fe 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();