From 41c17c5149bed8cafcd7e745c4ea08067d0cc6ee Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 20 Jun 2025 17:39:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?DM=20IDL=E5=8C=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- interfaces/inner_kits/native_cpp/BUILD.gn | 6 +++- .../notify/device_manager_notify_service.h | 34 +++++++++++++++++++ .../notify/device_manager_notify_service.cpp | 33 ++++++++++++++++++ services/service/BUILD.gn | 32 +++++++++++++++++ services/service/IDeviceManagerIpc.idl | 17 ++++++++++ .../include/device_manager_service_listener.h | 5 +-- .../include/ipc/standard/ipc_server_stub.h | 5 +-- .../src/device_manager_service_listener.cpp | 19 ++++++++--- .../src/ipc/standard/ipc_server_stub.cpp | 14 ++++++++ 9 files changed, 155 insertions(+), 10 deletions(-) create mode 100644 interfaces/inner_kits/native_cpp/include/notify/device_manager_notify_service.h create mode 100644 interfaces/inner_kits/native_cpp/src/notify/device_manager_notify_service.cpp create mode 100644 services/service/IDeviceManagerIpc.idl diff --git a/interfaces/inner_kits/native_cpp/BUILD.gn b/interfaces/inner_kits/native_cpp/BUILD.gn index 2068a5585..566081064 100644 --- a/interfaces/inner_kits/native_cpp/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/BUILD.gn @@ -188,6 +188,7 @@ if (defined(ohos_lite)) { "src/ipc/standard/ipc_client_stub.cpp", "src/ipc/standard/ipc_cmd_parser.cpp", "src/notify/device_manager_notify.cpp", + "src/notify/device_manager_notify_service.cpp", ] public_configs = [ ":devicemanagersdk_config" ] @@ -200,7 +201,10 @@ if (defined(ohos_lite)) { "LOG_DOMAIN=0xD004111", ] - deps = [ "${json_path}:devicemanagerjson" ] + deps = [ + "${json_path}:devicemanagerjson", + "${devicemanager_path}/services/service:device_manager_ipc", + ] external_deps = [ "access_token:libaccesstoken_sdk", diff --git a/interfaces/inner_kits/native_cpp/include/notify/device_manager_notify_service.h b/interfaces/inner_kits/native_cpp/include/notify/device_manager_notify_service.h new file mode 100644 index 000000000..37f76f038 --- /dev/null +++ b/interfaces/inner_kits/native_cpp/include/notify/device_manager_notify_service.h @@ -0,0 +1,34 @@ +/* + * 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 + * + * 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 DEVICE_MANAGER_NOTIFY_SERVICE_H +#define DEVICE_MANAGER_NOTIFY_SERVICE_H +#include "device_manager_ipc_stub.h" +#include "dm_single_instance.h" +namespace OHOS { +namespace DistributedHardware { +class DeviceManagerNotifyService : public DeviceManagerIpcStub { + DM_DECLARE_SINGLE_INSTANCE_BASE(DeviceManagerNotifyService); +public: + DeviceManagerNotifyService() {}; + ~DeviceManagerNotifyService() = default; + +ErrCode ServerPublishFinish( + const std::string &pkgName, + int32_t publishId, + int32_t publishResult); +}; +} +} +#endif // DEVICE_MANAGER_NOTIFY_SERVICE_H \ No newline at end of file diff --git a/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify_service.cpp b/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify_service.cpp new file mode 100644 index 000000000..7e4c4c1a3 --- /dev/null +++ b/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify_service.cpp @@ -0,0 +1,33 @@ +/* + * 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 + * + * 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 +#include "device_manager_notify_service.h" +#include "device_manager_notify.h" +#include "dm_log.h" +namespace OHOS { +namespace DistributedHardware { +DM_IMPLEMENT_SINGLE_INSTANCE(DeviceManagerNotifyService); +ErrCode DeviceManagerNotifyService::ServerPublishFinish( + const std::string &pkgName, + int32_t publishId, + int32_t publishResult) +{ + LOGI("DM IDL DMNS::ServerPublishFinish : pkgName: %{public}s, publishId: %{public}d, publishResult: %{public}d", + pkgName.c_str(), publishResult, publishResult); + DeviceManagerNotify::GetInstance().OnPublishResult(pkgName, publishId, publishResult); + return 0; +} +} +} \ No newline at end of file diff --git a/services/service/BUILD.gn b/services/service/BUILD.gn index c6d338d2f..702ffe997 100644 --- a/services/service/BUILD.gn +++ b/services/service/BUILD.gn @@ -15,6 +15,7 @@ if (defined(ohos_lite)) { import("//build/lite/config/component/lite_component.gni") } else { import("//build/ohos.gni") + import("//build/config/components/idl_tool/idl.gni") } import("//foundation/distributedhardware/device_manager/device_manager.gni") @@ -126,6 +127,32 @@ if (defined(ohos_lite)) { deps = [] } } else { +idl_gen_interface("device_manager_interface") { +src_idl = rebase_path("IDeviceManagerIpc.idl") +log_tag = "devicemanagerservice" +log_domainid = "0xD004110" +} + +ohos_source_set("device_manager_ipc") { +sanitize = { + debug = false + cfi = true + cfi_cross_dso = true +} +output_values = get_target_outputs(":device_manager_interface") +sources = [] +sources += filter_include(output_values, [ "*.cpp" ]) +public_configs = [ ":devicemanagerservice_config" ] +deps = [ ":device_manager_interface" ] +external_deps = [ + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", +] +subsystem_name = "distributedhardware" +part_name = "device_manager" +} config("devicemanagerservice_config") { include_dirs = [ "include", @@ -158,6 +185,7 @@ if (defined(ohos_lite)) { "${utils_path}/include/kvadapter", "${utils_path}/include/timer", "${json_path}/include", + "${target_gen_dir}", ] } config("cflags_config") { @@ -237,9 +265,11 @@ if (defined(ohos_lite)) { "HI_LOG_ENABLE", "DH_LOG_TAG=\"devicemanagerservice\"", "LOG_DOMAIN=0xD004110", + "private = public", ] deps = [ + ":device_manager_ipc", "${devicemanager_path}/commondependency:devicemanagerdependency", "${devicemanager_path}/radar:devicemanagerradar", "${devicemanager_path}/services/implementation:devicemanagerserviceimpl", @@ -380,9 +410,11 @@ if (defined(ohos_lite)) { "HI_LOG_ENABLE", "DH_LOG_TAG=\"devicemanagerservice\"", "LOG_DOMAIN=0xD004110", + "private = public", ] deps = [ + ":device_manager_ipc", "${devicemanager_path}/commondependency:devicemanagerdependency", "${devicemanager_path}/radar:devicemanagerradar", "${devicemanager_path}/services/implementation:devicemanagerserviceimpl", diff --git a/services/service/IDeviceManagerIpc.idl b/services/service/IDeviceManagerIpc.idl new file mode 100644 index 000000000..13bcc9965 --- /dev/null +++ b/services/service/IDeviceManagerIpc.idl @@ -0,0 +1,17 @@ +/* + * 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 + * + * 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. + */ +interface OHOS.DistributedHardware.IDeviceManagerIpc { +[ipccode 17] void ServerPublishFinish([in] String pkgName, [in] int publishId, [in] int publishResult); +} \ No newline at end of file diff --git a/services/service/include/device_manager_service_listener.h b/services/service/include/device_manager_service_listener.h index fbf03d22a..136ca214c 100644 --- a/services/service/include/device_manager_service_listener.h +++ b/services/service/include/device_manager_service_listener.h @@ -33,12 +33,13 @@ #include "ipc_server_listener.h" #endif #include "ipc_notify_device_state_req.h" - +#include "ipc_server_stub.h" +#include "idevice_manager_ipc.h" namespace OHOS { namespace DistributedHardware { class DM_EXPORT DeviceManagerServiceListener : public IDeviceManagerServiceListener { public: - DeviceManagerServiceListener() {}; + DeviceManagerServiceListener(); virtual ~DeviceManagerServiceListener() {}; void OnDeviceStateChange(const ProcessInfo &processInfo, const DmDeviceState &state, diff --git a/services/service/include/ipc/standard/ipc_server_stub.h b/services/service/include/ipc/standard/ipc_server_stub.h index 475632301..69db61e14 100644 --- a/services/service/include/ipc/standard/ipc_server_stub.h +++ b/services/service/include/ipc/standard/ipc_server_stub.h @@ -32,7 +32,7 @@ #include "dm_device_info.h" #include "dm_single_instance.h" - +#include "idevice_manager_ipc.h" namespace OHOS { namespace DistributedHardware { enum class ServiceRunningState { STATE_NOT_START, STATE_RUNNING }; @@ -116,7 +116,7 @@ public: * @tc.type: FUNC */ const sptr GetDmListener(ProcessInfo processInfo) const; - + const sptr GetDmListenerIpc(ProcessInfo processInfo) const; /** * @tc.name: IpcServerStub::GetDmListenerPkgName * @tc.desc: Get DmListener PkgName of the IpcServerStub @@ -165,6 +165,7 @@ private: mutable std::mutex listenerLock_; std::map> appRecipient_; std::map> dmListener_; + std::map> dmListenerIpc_; std::set systemSA_; int64_t startBeginTime_ = 0; }; diff --git a/services/service/src/device_manager_service_listener.cpp b/services/service/src/device_manager_service_listener.cpp index d1d0a84b8..6a0062315 100644 --- a/services/service/src/device_manager_service_listener.cpp +++ b/services/service/src/device_manager_service_listener.cpp @@ -59,6 +59,10 @@ std::map DeviceManagerServiceListener::alreadyOnlineP std::unordered_set DeviceManagerServiceListener::highPriorityPkgNameSet_ = { "ohos.deviceprofile", "ohos.distributeddata.service" }; +DeviceManagerServiceListener::DeviceManagerServiceListener() +{ + LOGI("DeviceManagerServiceListener constructor called."); +} void handleExtraData(const DmDeviceInfo &info, DmDeviceBasicInfo &deviceBasicInfo) { cJSON *extraDataJsonObj = cJSON_Parse(info.extraData.c_str()); @@ -309,14 +313,19 @@ void DeviceManagerServiceListener::OnDiscoverySuccess(const ProcessInfo &process void DeviceManagerServiceListener::OnPublishResult(const std::string &pkgName, int32_t publishId, int32_t publishResult) { - LOGI("OnPublishResult : %{public}d", publishResult); + LOGI("DM IDL DMSL::OnPublishResult : pkgName: %{public}s, publishId: %{public}d, publishResult: %{public}d", + pkgName.c_str(), publishResult, publishResult); std::shared_ptr pReq = std::make_shared(); std::shared_ptr pRsp = std::make_shared(); - pReq->SetPkgName(pkgName); - pReq->SetPublishId(publishId); - pReq->SetResult(publishResult); - ipcServerListener_.SendRequest(SERVER_PUBLISH_FINISH, pReq, pRsp); + ProcessInfo processInfo; + processInfo.pkgName = pkgName; + sptr deviceManagerIpc = IpcServerStub::GetInstance().GetDmListenerIpc(processInfo); + if (deviceManagerIpc == nullptr) { + LOGE("cannot get listener for package:%{public}s.", processInfo.pkgName.c_str()); + return; + } + deviceManagerIpc->ServerPublishFinish(pkgName, publishId, publishResult); } void DeviceManagerServiceListener::OnAuthResult(const ProcessInfo &processInfo, const std::string &deviceId, diff --git a/services/service/src/ipc/standard/ipc_server_stub.cpp b/services/service/src/ipc/standard/ipc_server_stub.cpp index c85383af7..3e120eff6 100644 --- a/services/service/src/ipc/standard/ipc_server_stub.cpp +++ b/services/service/src/ipc/standard/ipc_server_stub.cpp @@ -384,6 +384,20 @@ const sptr IpcServerStub::GetDmListener(ProcessInfo processInfo return iter->second; } +const sptr IpcServerStub::GetDmListenerIpc(ProcessInfo processInfo) const +{ + if (processInfo.pkgName.empty()) { + LOGE("Invalid parameter, pkgName is empty."); + return nullptr; + } + std::lock_guard autoLock(listenerLock_); + auto iter = dmListenerIpc_.find(processInfo); + if (iter == dmListenerIpc_.end()) { + return nullptr; + } + return iter->second; +} + const ProcessInfo IpcServerStub::GetDmListenerPkgName(const wptr &remote) const { ProcessInfo processInfo; -- Gitee From cbc76fb5484decec6d2c45a8ab8a650c2b1e482d Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 20 Jun 2025 17:39:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?DM=20IDL=E5=8C=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- .vscode/settings.json | 60 +++++++++++++++++++ services/service/BUILD.gn | 32 ++++++++++ services/service/IDeviceManagerIpc.idl | 17 ++++++ .../include/ipc/standard/ipc_server_stub.h | 2 - 4 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 services/service/IDeviceManagerIpc.idl diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..e9829aafe --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,60 @@ +{ + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "cinttypes": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/services/service/BUILD.gn b/services/service/BUILD.gn index c6d338d2f..702ffe997 100644 --- a/services/service/BUILD.gn +++ b/services/service/BUILD.gn @@ -15,6 +15,7 @@ if (defined(ohos_lite)) { import("//build/lite/config/component/lite_component.gni") } else { import("//build/ohos.gni") + import("//build/config/components/idl_tool/idl.gni") } import("//foundation/distributedhardware/device_manager/device_manager.gni") @@ -126,6 +127,32 @@ if (defined(ohos_lite)) { deps = [] } } else { +idl_gen_interface("device_manager_interface") { +src_idl = rebase_path("IDeviceManagerIpc.idl") +log_tag = "devicemanagerservice" +log_domainid = "0xD004110" +} + +ohos_source_set("device_manager_ipc") { +sanitize = { + debug = false + cfi = true + cfi_cross_dso = true +} +output_values = get_target_outputs(":device_manager_interface") +sources = [] +sources += filter_include(output_values, [ "*.cpp" ]) +public_configs = [ ":devicemanagerservice_config" ] +deps = [ ":device_manager_interface" ] +external_deps = [ + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", +] +subsystem_name = "distributedhardware" +part_name = "device_manager" +} config("devicemanagerservice_config") { include_dirs = [ "include", @@ -158,6 +185,7 @@ if (defined(ohos_lite)) { "${utils_path}/include/kvadapter", "${utils_path}/include/timer", "${json_path}/include", + "${target_gen_dir}", ] } config("cflags_config") { @@ -237,9 +265,11 @@ if (defined(ohos_lite)) { "HI_LOG_ENABLE", "DH_LOG_TAG=\"devicemanagerservice\"", "LOG_DOMAIN=0xD004110", + "private = public", ] deps = [ + ":device_manager_ipc", "${devicemanager_path}/commondependency:devicemanagerdependency", "${devicemanager_path}/radar:devicemanagerradar", "${devicemanager_path}/services/implementation:devicemanagerserviceimpl", @@ -380,9 +410,11 @@ if (defined(ohos_lite)) { "HI_LOG_ENABLE", "DH_LOG_TAG=\"devicemanagerservice\"", "LOG_DOMAIN=0xD004110", + "private = public", ] deps = [ + ":device_manager_ipc", "${devicemanager_path}/commondependency:devicemanagerdependency", "${devicemanager_path}/radar:devicemanagerradar", "${devicemanager_path}/services/implementation:devicemanagerserviceimpl", diff --git a/services/service/IDeviceManagerIpc.idl b/services/service/IDeviceManagerIpc.idl new file mode 100644 index 000000000..13bcc9965 --- /dev/null +++ b/services/service/IDeviceManagerIpc.idl @@ -0,0 +1,17 @@ +/* + * 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 + * + * 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. + */ +interface OHOS.DistributedHardware.IDeviceManagerIpc { +[ipccode 17] void ServerPublishFinish([in] String pkgName, [in] int publishId, [in] int publishResult); +} \ No newline at end of file diff --git a/services/service/include/ipc/standard/ipc_server_stub.h b/services/service/include/ipc/standard/ipc_server_stub.h index 475632301..d7406b379 100644 --- a/services/service/include/ipc/standard/ipc_server_stub.h +++ b/services/service/include/ipc/standard/ipc_server_stub.h @@ -32,7 +32,6 @@ #include "dm_device_info.h" #include "dm_single_instance.h" - namespace OHOS { namespace DistributedHardware { enum class ServiceRunningState { STATE_NOT_START, STATE_RUNNING }; @@ -116,7 +115,6 @@ public: * @tc.type: FUNC */ const sptr GetDmListener(ProcessInfo processInfo) const; - /** * @tc.name: IpcServerStub::GetDmListenerPkgName * @tc.desc: Get DmListener PkgName of the IpcServerStub -- Gitee