From b281880ea13b51ef53ba9a5a1074694d486c2a83 Mon Sep 17 00:00:00 2001 From: wangyb0625 Date: Thu, 3 Mar 2022 19:33:34 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E6=8E=92=E6=9F=A5deviceInfo=E4=B8=AD?= =?UTF-8?q?=E7=9A=84Id=E6=98=AFnetworkId=E8=BF=98=E6=98=AFUDID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangyb0625 --- .../native_cpp/include/dm_device_info.h | 1 + .../kits/js/src/native_devicemanager_js.cpp | 2 + .../dependency/softbus/softbus_connector.cpp | 12 +++ utils/BUILD.gn | 2 + utils/include/dm_hash.h | 32 ++++++++ utils/src/dm_hash.cpp | 76 +++++++++++++++++++ 6 files changed, 125 insertions(+) create mode 100644 utils/include/dm_hash.h create mode 100644 utils/src/dm_hash.cpp diff --git a/interfaces/inner_kits/native_cpp/include/dm_device_info.h b/interfaces/inner_kits/native_cpp/include/dm_device_info.h index b17b597b1..662f5d35f 100644 --- a/interfaces/inner_kits/native_cpp/include/dm_device_info.h +++ b/interfaces/inner_kits/native_cpp/include/dm_device_info.h @@ -49,6 +49,7 @@ typedef struct DmDeviceInfo { char deviceId[DM_MAX_DEVICE_ID_LEN]; char deviceName[DM_MAX_DEVICE_NAME_LEN]; uint16_t deviceTypeId; + char networkId[DM_MAX_DEVICE_ID_LEN]; } DmDeviceInfo; typedef struct DmAuthParam { diff --git a/interfaces/kits/js/src/native_devicemanager_js.cpp b/interfaces/kits/js/src/native_devicemanager_js.cpp index 644386adf..a590b43b8 100644 --- a/interfaces/kits/js/src/native_devicemanager_js.cpp +++ b/interfaces/kits/js/src/native_devicemanager_js.cpp @@ -398,6 +398,7 @@ void DeviceManagerNapi::OnDeviceStateChange(DmNapiDevStateChangeAction action, napi_value device = nullptr; napi_create_object(env_, &device); SetValueUtf8String(env_, "deviceId", deviceInfo.deviceId, device); + SetValueUtf8String(env_, "networkId", deviceInfo.networkId, device); SetValueUtf8String(env_, "deviceName", deviceInfo.deviceName, device); SetValueInt32(env_, "deviceType", (int)deviceInfo.deviceTypeId, device); @@ -415,6 +416,7 @@ void DeviceManagerNapi::OnDeviceFound(uint16_t subscribeId, const DmDeviceInfo & napi_value device = nullptr; napi_create_object(env_, &device); SetValueUtf8String(env_, "deviceId", deviceInfo.deviceId, device); + SetValueUtf8String(env_, "networkId", deviceInfo.networkId, device); SetValueUtf8String(env_, "deviceName", deviceInfo.deviceName, device); SetValueInt32(env_, "deviceType", (int)deviceInfo.deviceTypeId, device); diff --git a/services/devicemanagerservice/src/dependency/softbus/softbus_connector.cpp b/services/devicemanagerservice/src/dependency/softbus/softbus_connector.cpp index f3278fe8e..230c3d2ff 100644 --- a/services/devicemanagerservice/src/dependency/softbus/softbus_connector.cpp +++ b/services/devicemanagerservice/src/dependency/softbus/softbus_connector.cpp @@ -429,6 +429,12 @@ int32_t SoftbusConnector::CovertNodeBasicInfoToDmDevice(const NodeBasicInfo &nod std::min(sizeof(dmDeviceInfo.deviceId), sizeof(nodeBasicInfo.networkId))) != DM_OK) { LOGE("copy data failed"); } + + if (memcpy_s(dmDeviceInfo.networkId, sizeof(dmDeviceInfo.networkId), nodeBasicInfo.networkId, + std::min(sizeof(dmDeviceInfo.networkId), sizeof(nodeBasicInfo.networkId))) != DM_OK) { + LOGE("copy data failed"); + } + if (memcpy_s(dmDeviceInfo.deviceName, sizeof(dmDeviceInfo.deviceName), nodeBasicInfo.deviceName, std::min(sizeof(dmDeviceInfo.deviceName), sizeof(nodeBasicInfo.deviceName))) != DM_OK) { LOGE("copy data failed"); @@ -444,6 +450,12 @@ void SoftbusConnector::CovertDeviceInfoToDmDevice(const DeviceInfo &deviceInfo, std::min(sizeof(dmDeviceInfo.deviceId), sizeof(deviceInfo.devId))) != DM_OK) { LOGE("copy data failed"); } + + if (memcpy_s(dmDeviceInfo.networkId, sizeof(dmDeviceInfo.networkId), 0, + sizeof(dmDeviceInfo.networkId)) != DM_OK) { + LOGE("copy data failed"); + } + if (memcpy_s(dmDeviceInfo.deviceName, sizeof(dmDeviceInfo.deviceName), deviceInfo.devName, std::min(sizeof(dmDeviceInfo.deviceName), sizeof(deviceInfo.devName))) != DM_OK) { LOGE("copy data failed"); diff --git a/utils/BUILD.gn b/utils/BUILD.gn index f1c17e3ee..44a6f02e7 100644 --- a/utils/BUILD.gn +++ b/utils/BUILD.gn @@ -31,6 +31,7 @@ if (defined(ohos_lite)) { "${common_path}/include/ipc", "${common_path}/include/ipc/model", "include/permission/standard", + "//third_party/mbedtls/include/mbedtls", ] } @@ -40,6 +41,7 @@ if (defined(ohos_lite)) { "src/dm_log.cpp", "src/dm_random.cpp", "src/ipc/standard/ipc_cmd_register.cpp", + "src/dm_hash.cpp", ] if (support_jsapi) { sources += [ "src/permission/standard/permission_manager.cpp" ] diff --git a/utils/include/dm_hash.h b/utils/include/dm_hash.h new file mode 100644 index 000000000..851e5bfe9 --- /dev/null +++ b/utils/include/dm_hash.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 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 OHOS_DM_HASH_H +#define OHOS_DM_HASH_H + +#include +#include "base64.h" +#include "ctr_drbg.h" +#include "entropy.h" +#include "gcm.h" +#include "md.h" +#include "platform.h" + +namespace OHOS { +namespace DistributedHardware { +int32_t GetUdidHash(uint8_t *udid, int32_t udiddataLen, uint8_t outudiddData[32]); +} // namespace DistributedHardware +} // namespace OHOS +#endif // OHOS_DM_HASH_H \ No newline at end of file diff --git a/utils/src/dm_hash.cpp b/utils/src/dm_hash.cpp new file mode 100644 index 000000000..488f0b794 --- /dev/null +++ b/utils/src/dm_hash.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 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 "dm_log.h" +#include "dm_constants.h" +#include "dm_hash.h" + +namespace OHOS { +namespace DistributedHardware { +int32_t GetUdidHash(uint8_t *udid, int32_t udidDataLen, uint8_t outudidData[32]) +{ + LOGI("GetUdidHash"); + if (udid == nullptr || *udid < 0) { + LOGE("udid is nullptr or dataLen: %d", udidDataLen); + return DM_POINT_NULL; + } + mbedtls_md_context_t ctx; + const mbedtls_md_info_t *info; + + mbedtls_md_init(&ctx); + info = mbedtls_md_info_from_type(MBEDTLS_MD_SHA256); + + if (info == nullptr) { + LOGE("info is nullptr"); + return DM_POINT_NULL; + } + + int32_t ret = DM_OK; + do { + ret = mbedtls_md_setup(&ctx, info, 0); + if (ret != 0) { + LOGE("mbedtls_md_setup is fail"); + ret = DM_FAILED; + break; + } + + ret = mbedtls_md_starts(&ctx); + if (ret != 0) { + LOGE("mbedtls_md_starts is fail"); + ret = DM_FAILED; + break; + } + + ret = mbedtls_md_update(&ctx, udid, udidDataLen); + if (ret != 0) { + LOGE("mbedtls_md_update is fail"); + ret = DM_FAILED; + break; + } + + ret = mbedtls_md_finish(&ctx, outudidData); + if (ret != 0) { + LOGE("mbedtls_md_finish is fail"); + ret = DM_FAILED; + break; + } + ret = DM_OK; + } while (0); + + mbedtls_md_free(&ctx); + return ret; +} +} // namespace DistributedHardware +} // namespace OHOS \ No newline at end of file -- Gitee From e00a81a3a314528228668c570f63e4f814ca83eb Mon Sep 17 00:00:00 2001 From: wangyb0625 Date: Thu, 3 Mar 2022 19:49:41 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangyb0625 --- utils/src/dm_hash.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/utils/src/dm_hash.cpp b/utils/src/dm_hash.cpp index 488f0b794..82eee581e 100644 --- a/utils/src/dm_hash.cpp +++ b/utils/src/dm_hash.cpp @@ -31,12 +31,10 @@ int32_t GetUdidHash(uint8_t *udid, int32_t udidDataLen, uint8_t outudidData[32]) mbedtls_md_init(&ctx); info = mbedtls_md_info_from_type(MBEDTLS_MD_SHA256); - if (info == nullptr) { LOGE("info is nullptr"); - return DM_POINT_NULL; + return DM_POINT_NULL; } - int32_t ret = DM_OK; do { ret = mbedtls_md_setup(&ctx, info, 0); -- Gitee From 5668d391ea3e298c7973e676a879695707192089 Mon Sep 17 00:00:00 2001 From: wangyb0625 Date: Fri, 4 Mar 2022 16:52:15 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E6=8E=92=E6=9F=A5deviceInfo=E4=B8=AD?= =?UTF-8?q?=E7=9A=84Id=E6=98=AFnetworkId=E8=BF=98=E6=98=AFUDID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangyb0625 --- utils/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/BUILD.gn b/utils/BUILD.gn index 44a6f02e7..97f5c361e 100644 --- a/utils/BUILD.gn +++ b/utils/BUILD.gn @@ -38,10 +38,10 @@ if (defined(ohos_lite)) { ohos_shared_library("devicemanagerutils") { sources = [ "src/dm_anonymous.cpp", + "src/dm_hash.cpp", "src/dm_log.cpp", "src/dm_random.cpp", "src/ipc/standard/ipc_cmd_register.cpp", - "src/dm_hash.cpp", ] if (support_jsapi) { sources += [ "src/permission/standard/permission_manager.cpp" ] -- Gitee From aff4ce2499a49cca2d57e97db6035a059a40eccf Mon Sep 17 00:00:00 2001 From: wuqi0105 Date: Thu, 10 Mar 2022 10:26:52 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E5=AF=B9=E4=BB=A3=E7=A0=81=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuqi0105 --- ext/pin_auth/src/pin_auth.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/pin_auth/src/pin_auth.cpp b/ext/pin_auth/src/pin_auth.cpp index 377cb8fdb..4c3e30409 100644 --- a/ext/pin_auth/src/pin_auth.cpp +++ b/ext/pin_auth/src/pin_auth.cpp @@ -16,7 +16,7 @@ #include "pin_auth.h" #include -#include +#include #include "dm_constants.h" #include "dm_log.h" @@ -66,7 +66,7 @@ int32_t PinAuth::StartAuth(std::string &authToken, std::shared_ptr Date: Fri, 11 Mar 2022 13:02:43 +0800 Subject: [PATCH 05/14] =?UTF-8?q?deviceManager=20UI=20=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: sin_dzzeng <13277932042@163.com> --- bundle.json | 2 +- devicemanager.gni | 3 + ext/BUILD.gn | 11 +- ext/no_interaction_auth/BUILD.gn | 102 ++++++++++++++++++ .../include/ability/dm_ability_manager.h | 52 +++++++++ .../include/no_interaction_auth.h | 38 +++++++ .../src/ability/lite/dm_ability_manager.cpp | 47 ++++++++ .../ability/standard/dm_ability_manager.cpp | 74 +++++++++++++ .../src/no_interaction_auth.cpp | 56 ++++++++++ ext/pin_auth/BUILD.gn | 1 - ext/show_pin_dialog/dialog_ui/js/BUILD.gn | 4 +- services/devicemanagerservice/BUILD.gn | 11 +- .../include/config/json_config.h | 9 ++ .../src/authentication/dm_auth_manager.cpp | 10 +- 14 files changed, 409 insertions(+), 11 deletions(-) create mode 100644 ext/no_interaction_auth/BUILD.gn create mode 100644 ext/no_interaction_auth/include/ability/dm_ability_manager.h create mode 100644 ext/no_interaction_auth/include/no_interaction_auth.h create mode 100644 ext/no_interaction_auth/src/ability/lite/dm_ability_manager.cpp create mode 100644 ext/no_interaction_auth/src/ability/standard/dm_ability_manager.cpp create mode 100644 ext/no_interaction_auth/src/no_interaction_auth.cpp diff --git a/bundle.json b/bundle.json index 06952ef47..b6d72ecff 100644 --- a/bundle.json +++ b/bundle.json @@ -14,7 +14,7 @@ "name": "device_manager_base", "subsystem": "distributedhardware", "syscap":[ "SystemCapability.DistributedHardware.DeviceManager" ], - "features":[], + "features":["device_manager_base_no_interaction_auth"], "adapted_system_type": [ "standard", "small" ], "rom": "2M", "ram": "16M", diff --git a/devicemanager.gni b/devicemanager.gni index 7487a8b32..03335b53d 100644 --- a/devicemanager.gni +++ b/devicemanager.gni @@ -26,3 +26,6 @@ ext_path = "${devicemanager_path}/ext" #----------------------compilation options--------------------------# dm_ldflags = [ "-lpthread" ] +declare_args() { + device_manager_base_no_interaction_auth = false +} diff --git a/ext/BUILD.gn b/ext/BUILD.gn index df1b58535..37ad93e56 100644 --- a/ext/BUILD.gn +++ b/ext/BUILD.gn @@ -12,13 +12,16 @@ # limitations under the License. import("//build/ohos.gni") +import("//foundation/distributedhardware/devicemanager/devicemanager.gni") group("ext_modules") { deps = [] if (support_jsapi) { - deps += [ - "./pin_auth:devicemanagerext_pin_auth", - "./profile:devicemanagerext_profile", - ] + deps += [ "./profile:devicemanagerext_profile" ] + if (device_manager_base_no_interaction_auth) { + deps += [ "./no_interaction_auth:devicemanagerext_no_interaction_auth" ] + } else { + deps += [ "./pin_auth:devicemanagerext_pin_auth" ] + } } } diff --git a/ext/no_interaction_auth/BUILD.gn b/ext/no_interaction_auth/BUILD.gn new file mode 100644 index 000000000..350f0e18d --- /dev/null +++ b/ext/no_interaction_auth/BUILD.gn @@ -0,0 +1,102 @@ +# Copyright (C) 2021 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. + +if (defined(ohos_lite)) { + import("//build/lite/config/component/lite_component.gni") +} else { + import("//build/ohos.gni") +} + +import("//foundation/distributedhardware/devicemanager/devicemanager.gni") + +if (defined(ohos_lite)) { +} else { + ohos_shared_library("devicemanagerext_no_interaction_auth") { + include_dirs = [ + "include", + "${common_path}/include", + "${ext_path}/pin_auth/include/ability", + "${services_path}/include/dependency/timer", + "${services_path}/include/config", + "${services_path}/include/adapter", + "${services_path}/include/authentication", + "${services_path}/include/ability", + "${services_path}/include/deviceinfo", + "${services_path}/include/devicestate", + "${services_path}/include/discovery", + "${services_path}/include/dependency/commonevent", + "${services_path}/include/dependency/hichain", + "${services_path}/include/dependency/softbus", + "${services_path}/include/dependency/timer", + "${services_path}/include/ipc", + "${services_path}/include/ipc/standard", + "${utils_path}/include", + "${utils_path}/include/ipc/standard", + "${services_path}/include", + "${innerkits_path}/native_cpp/include", + "${common_path}/include/ipc", + "${common_path}/include/ipc/model", + "${innerkits_path}/native_cpp/include", + "${innerkits_path}/native_cpp/include/ipc", + "${innerkits_path}/native_cpp/include/ipc/standard", + "//third_party/json/include", + "//utils/native/base/include", + "//utils/system/safwk/native/include", + "//base/notification/ces_standard/frameworks/core/include", + "//base/notification/ces_standard/interfaces/innerkits/native/include", + "//base/security/deviceauth/interfaces/innerkits", + "//base/startup/syspara_lite/interfaces/kits", + "//base/startup/syspara_lite/adapter/native/syspara/include", + ] + + sources = [ + "src/ability/standard/dm_ability_manager.cpp", + "src/no_interaction_auth.cpp", + ] + + deps = [ + "${innerkits_path}/native_cpp:devicemanagersdk", + "${utils_path}:devicemanagerutils", + "//base/security/deviceauth/services:deviceauth_sdk", + "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", + "//foundation/aafwk/standard/interfaces/innerkits/want:want", + "//foundation/aafwk/standard/services/abilitymgr:abilityms", + "//foundation/distributedhardware/devicemanager/services/devicemanagerservice:devicemanagerservice", + "//utils/native/base:utils", + ] + + external_deps = [ + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "ces_standard:cesfwk_core", + "ces_standard:cesfwk_innerkits", + "dsoftbus_standard:softbus_client", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + "safwk:system_ability_fwk", + "samgr_standard:samgr_proxy", + "startup_l2:syspara", + "startup_l2:syspara_watchagent", + ] + + defines = [ + "HI_LOG_ENABLE", + "DH_LOG_TAG=\"devicemanagerext\"", + "LOG_DOMAIN=0xD004100", + ] + + subsystem_name = "distributedhardware" + + part_name = "device_manager_base" + } +} diff --git a/ext/no_interaction_auth/include/ability/dm_ability_manager.h b/ext/no_interaction_auth/include/ability/dm_ability_manager.h new file mode 100644 index 000000000..7f4720954 --- /dev/null +++ b/ext/no_interaction_auth/include/ability/dm_ability_manager.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 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 OHOS_DM_ABILITY_MANAGER_H +#define OHOS_DM_ABILITY_MANAGER_H + +#include +#include + +namespace OHOS { +namespace DistributedHardware { +enum AbilityRole { ABILITY_ROLE_PASSIVE = 0, ABILITY_ROLE_INITIATIVE = 1, ABILITY_ROLE_UNKNOWN = 2 }; + +enum AbilityStatus { ABILITY_STATUS_FAILED = 0, ABILITY_STATUS_SUCCESS = 1, ABILITY_STATUS_START = 2 }; + +enum FaAction { + USER_OPERATION_TYPE_ALLOW_AUTH = 0, + USER_OPERATION_TYPE_CANCEL_AUTH = 1, + USER_OPERATION_TYPE_AUTH_CONFIRM_TIMEOUT = 2, + USER_OPERATION_TYPE_CANCEL_PINCODE_DISPLAY = 3, + USER_OPERATION_TYPE_CANCEL_PINCODE_INPUT = 4 +}; + +class DmAbilityManager { +public: + AbilityRole GetAbilityRole(); + AbilityStatus StartAbility(AbilityRole role); + void StartAbilityDone(); + +private: + void waitForTimeout(uint32_t timeout_s); + +private: + sem_t mSem_; + AbilityStatus mStatus_; + AbilityRole mAbilityStatus_; +}; +} // namespace DistributedHardware +} // namespace OHOS +#endif // OHOS_DM_ABILITY_MANAGER_H diff --git a/ext/no_interaction_auth/include/no_interaction_auth.h b/ext/no_interaction_auth/include/no_interaction_auth.h new file mode 100644 index 000000000..9c4ab3815 --- /dev/null +++ b/ext/no_interaction_auth/include/no_interaction_auth.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 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 OHOS_DM_NO_INTERACTION_AUTH_H +#define OHOS_DM_NO_INTERACTION_AUTH_H + +#include +#include + +#include "authentication.h" +#include "dm_auth_manager.h" +#include "dm_ability_manager.h" + +namespace OHOS { +namespace DistributedHardware { +class NoInteractionAuth : public IAuthentication { +public: + NoInteractionAuth(); + ~NoInteractionAuth(); + int32_t ShowAuthInfo(std::string &authToken, std::shared_ptr authManager) override; + int32_t StartAuth(std::string &authToken, std::shared_ptr authManager) override; + int32_t VerifyAuthentication(std::string &authToken, const std::string &authParam) override; +}; +} // namespace DistributedHardware +} // namespace OHOS +#endif // OHOS_DM_NO_INTERACTION_AUTH_H diff --git a/ext/no_interaction_auth/src/ability/lite/dm_ability_manager.cpp b/ext/no_interaction_auth/src/ability/lite/dm_ability_manager.cpp new file mode 100644 index 000000000..d58403aee --- /dev/null +++ b/ext/no_interaction_auth/src/ability/lite/dm_ability_manager.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 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 "dm_ability_manager.h" + +namespace OHOS { +namespace DistributedHardware { +AbilityRole DmAbilityManager::GetAbilityRole() +{ + return mAbilityStatus_; +} + +AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) +{ + // not support for L1 yet, do nothing. just save status and role + mAbilityStatus_ = role; + mStatus_ = AbilityStatus::ABILITY_STATUS_SUCCESS; + return mStatus_; +} + +void DmAbilityManager::waitForTimeout(uint32_t timeout_s) +{ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += (int32_t)timeout_s; + sem_timedwait(&mSem_, &ts); +} + +void DmAbilityManager::StartAbilityDone() +{ + mStatus_ = AbilityStatus::ABILITY_STATUS_SUCCESS; + sem_post(&mSem_); +} +} // namespace DistributedHardware +} // namespace OHOS diff --git a/ext/no_interaction_auth/src/ability/standard/dm_ability_manager.cpp b/ext/no_interaction_auth/src/ability/standard/dm_ability_manager.cpp new file mode 100644 index 000000000..09d720314 --- /dev/null +++ b/ext/no_interaction_auth/src/ability/standard/dm_ability_manager.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 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 "dm_ability_manager.h" + +#include "ability_manager_client.h" +#include "ability_manager_service.h" +#include "ability_record.h" +#include "dm_constants.h" +#include "dm_log.h" +#include "parameter.h" +#include "semaphore.h" + +namespace OHOS { +namespace DistributedHardware { +namespace { +const int32_t ABILITY_START_TIMEOUT = 3; // 3 second +const std::string bundleUiName = "com.ohos.devicemanagerui"; +const std::string abilityUiName = "com.ohos.devicemanagerui.MainAbility"; +} // namespace + +AbilityRole DmAbilityManager::GetAbilityRole() +{ + return mAbilityStatus_; +} + +AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) +{ + mAbilityStatus_ = role; + char localDeviceId[DEVICE_UUID_LENGTH] = {0}; + GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH); + std::string deviceId = localDeviceId; + mStatus_ = ABILITY_STATUS_START; + AAFwk::Want want; + AppExecFwk::ElementName element(deviceId, bundleUiName, abilityUiName); + want.SetElement(element); + AAFwk::AbilityManagerClient::GetInstance()->Connect(); + ErrCode result = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want); + if (result != OHOS::ERR_OK) { + LOGE("Start Ability failed"); + mStatus_ = ABILITY_STATUS_FAILED; + return mStatus_; + } + waitForTimeout(ABILITY_START_TIMEOUT); + return mStatus_; +} + +void DmAbilityManager::waitForTimeout(uint32_t timeout_s) +{ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += (int32_t)timeout_s; + sem_timedwait(&mSem_, &ts); +} + +void DmAbilityManager::StartAbilityDone() +{ + mStatus_ = ABILITY_STATUS_SUCCESS; + sem_post(&mSem_); +} +} // namespace DistributedHardware +} // namespace OHOS diff --git a/ext/no_interaction_auth/src/no_interaction_auth.cpp b/ext/no_interaction_auth/src/no_interaction_auth.cpp new file mode 100644 index 000000000..51d57c150 --- /dev/null +++ b/ext/no_interaction_auth/src/no_interaction_auth.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 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 "no_interaction_auth.h" + +#include + +#include "dm_constants.h" +#include "dm_log.h" +#include "nlohmann/json.hpp" + +namespace OHOS { +namespace DistributedHardware { +const int32_t MAX_VERIFY_TIMES = 3; +NoInteractionAuth::NoInteractionAuth() +{ + LOGI("NoInteractionAuth constructor"); +} + +NoInteractionAuth::~NoInteractionAuth() +{ +} + +int32_t NoInteractionAuth::ShowAuthInfo(std::string &authToken, std::shared_ptr authManager) +{ + return DM_OK; +} + +int32_t NoInteractionAuth::StartAuth(std::string &authToken, std::shared_ptr authManager) +{ + return DM_OK; +} + +int32_t NoInteractionAuth::VerifyAuthentication(std::string &authToken, const std::string &authParam) +{ + return DM_OK; +} + +extern "C" IAuthentication *CreatePinAuthObject(void) +{ + return new NoInteractionAuth; +} +} // namespace DistributedHardware +} // namespace OHOS diff --git a/ext/pin_auth/BUILD.gn b/ext/pin_auth/BUILD.gn index 41bfe4589..d12332a47 100644 --- a/ext/pin_auth/BUILD.gn +++ b/ext/pin_auth/BUILD.gn @@ -16,7 +16,6 @@ if (defined(ohos_lite)) { } else { import("//build/ohos.gni") } - import("//foundation/distributedhardware/devicemanager/devicemanager.gni") if (defined(ohos_lite)) { diff --git a/ext/show_pin_dialog/dialog_ui/js/BUILD.gn b/ext/show_pin_dialog/dialog_ui/js/BUILD.gn index 8c623e7f8..6fab0d22c 100644 --- a/ext/show_pin_dialog/dialog_ui/js/BUILD.gn +++ b/ext/show_pin_dialog/dialog_ui/js/BUILD.gn @@ -15,7 +15,9 @@ import("//foundation/ace/ace_engine/build/ace_gen_sa_dialog_js.gni") import("//foundation/distributedhardware/devicemanager/devicemanager.gni") gen_sa_dialog_js("dialog_js_files_etc") { - project_path = "//foundation/distributedhardware/devicemanager/ext/show_pin_dialog/dialog_ui/js" + if (!device_manager_base_no_interaction_auth) { + project_path = "//foundation/distributedhardware/devicemanager/ext/show_pin_dialog/dialog_ui/js" + } dialog_name = "show_pin_service" part_name = "device_manager_base" subsystem_name = "distributedhardware" diff --git a/services/devicemanagerservice/BUILD.gn b/services/devicemanagerservice/BUILD.gn index ba6da08e0..7e720ba2a 100755 --- a/services/devicemanagerservice/BUILD.gn +++ b/services/devicemanagerservice/BUILD.gn @@ -93,7 +93,6 @@ if (defined(ohos_lite)) { ] deps = [ - "${common_path}/include/dialog_ui/js:dialog_js_files_etc", "${innerkits_path}/native_cpp:devicemanagersdk", "${utils_path}:devicemanagerutils", "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", @@ -101,10 +100,16 @@ if (defined(ohos_lite)) { "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", "//foundation/aafwk/standard/interfaces/innerkits/want:want", "//foundation/aafwk/standard/services/abilitymgr:abilityms", - "//foundation/ace/ace_engine/interfaces/innerkits/ui_service_manager:ui_service_mgr", - "//foundation/windowmanager/wm:libwm", ] + if (!device_manager_base_no_interaction_auth) { + deps += [ + "${common_path}/include/dialog_ui/js:dialog_js_files_etc", + "//foundation/ace/ace_engine/interfaces/innerkits/ui_service_manager:ui_service_mgr", + "//foundation/windowmanager/wm:libwm", + ] + defines += [ "SUPPORT_GRAPHICS" ] + } external_deps = [ "ability_runtime:app_manager", "bundle_framework:appexecfwk_base", diff --git a/services/devicemanagerservice/include/config/json_config.h b/services/devicemanagerservice/include/config/json_config.h index 04c929323..acb7839c0 100644 --- a/services/devicemanagerservice/include/config/json_config.h +++ b/services/devicemanagerservice/include/config/json_config.h @@ -79,6 +79,15 @@ const std::string authJsonConfigString = "funcName": "CreateNfcAuthObject", "soName": "libdevicemanager_nfcauth.z.so", "soPath": "/system/lib/" + }, + { + "name": "no_interaction_auth", + "type": "AUTHENTICATE", + "version": "1.0", + "authType": 4, + "funcName": "CreatePinAuthObject", + "soName": "libdevicemanagerext_no_interaction_auth.z.so", + "soPath": "/system/lib/" } ] })"; diff --git a/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp b/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp index b45af3e11..2fc6956ca 100644 --- a/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp +++ b/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp @@ -25,9 +25,11 @@ #include "multiple_user_connector.h" #include "nlohmann/json.hpp" #include "parameter.h" +#ifdef SUPPORT_GRAPHICS #include "ui_service_mgr_client.h" #include "dialog_callback_stub.h" #include "dialog_callback.h" +#endif namespace OHOS { namespace DistributedHardware { @@ -544,7 +546,9 @@ int32_t DmAuthManager::AddMember(const std::string &deviceId) return DM_FAILED; } LOGI("DmAuthManager::authRequestContext CancelDisplay start"); +#ifdef SUPPORT_GRAPHICS Ace::UIServiceMgrClient::GetInstance()->CancelDialog(authResponseContext_->pageId); +#endif return DM_OK; } @@ -572,6 +576,7 @@ int32_t DmAuthManager::JoinNetwork() void DmAuthManager::AuthenticateFinish() { LOGI("DmAuthManager::AuthenticateFinish start"); +#ifdef SUPPORT_GRAPHICS if (authResponseState_ != nullptr) { if (authResponseState_->GetStateType() == AuthState::AUTH_RESPONSE_FINISH) { Ace::UIServiceMgrClient::GetInstance()->CancelDialog(authResponseContext_->pageId); @@ -621,6 +626,7 @@ void DmAuthManager::AuthenticateFinish() authRequestState_ = nullptr; authMessageProcessor_ = nullptr; } +#endif LOGI("DmAuthManager::AuthenticateFinish complete"); } @@ -693,6 +699,7 @@ int32_t DmAuthManager::GetPinCode() void DmAuthManager::ShowConfigDialog() { +#ifdef SUPPORT_GRAPHICS LOGI("ShowConfigDialog start"); nlohmann::json jsonObj; jsonObj[TAG_AUTH_TYPE] = AUTH_TYPE_PIN; @@ -713,7 +720,8 @@ void DmAuthManager::ShowConfigDialog() authMgr_->StartAuthProcess(atoi(params.c_str())); }); LOGI("ShowConfigDialog end"); -} +#endif + } void DmAuthManager::ShowAuthInfoDialog() { -- Gitee From ecbc248d01652946a3b1e163040f7552c844ccda Mon Sep 17 00:00:00 2001 From: wangyb0625 Date: Fri, 11 Mar 2022 21:27:11 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E5=86=85=E6=BA=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=8D=95=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangyb0625 --- .../@ohos.distributedHardware.deviceManager.d.ts | 2 +- .../kits/js/include/dm_native_event.h | 2 +- .../kits/js/src/native_devicemanager_js.cpp | 2 +- .../src/ability/standard/dm_ability_manager.cpp | 2 +- .../src/auth/hichain_connector.cpp | 14 +++++++------- .../src/dispatch/server_stub.cpp | 10 ++-------- .../native_cpp/src/ipc/lite/ipc_cmd_parser.cpp | 4 ++-- .../src/ipc/standard/ipc_client_stub.cpp | 4 ++-- .../src/notify/device_manager_notify.cpp | 2 +- .../src/dependency/hichain/hichain_connector.cpp | 4 ++-- .../src/dependency/timer/dm_timer.cpp | 3 +-- .../src/device_manager_service_listener.cpp | 2 +- .../src/discovery/dm_discovery_manager.cpp | 2 +- .../src/ipc/lite/ipc_server_main.cpp | 2 +- .../src/ipc/lite/ipc_server_stub.cpp | 14 +++++++------- .../src/ipc/standard/ipc_cmd_parser.cpp | 4 ++++ .../src/ipc/standard/ipc_server_stub.cpp | 2 +- utils/src/dm_random.cpp | 6 +++--- 18 files changed, 39 insertions(+), 42 deletions(-) diff --git a/display/@ohos.distributedHardware.deviceManager.d.ts b/display/@ohos.distributedHardware.deviceManager.d.ts index 69179ba17..d00376306 100644 --- a/display/@ohos.distributedHardware.deviceManager.d.ts +++ b/display/@ohos.distributedHardware.deviceManager.d.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Huawei Device Co., Ltd. + * Copyright (c) 2022 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 diff --git a/ext/mini/interfaces_mini/kits/js/include/dm_native_event.h b/ext/mini/interfaces_mini/kits/js/include/dm_native_event.h index d2975263a..c0be7ad11 100644 --- a/ext/mini/interfaces_mini/kits/js/include/dm_native_event.h +++ b/ext/mini/interfaces_mini/kits/js/include/dm_native_event.h @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -// + #ifndef OHOS_DEVICE_MANAGER_NATIVE_EVENT_H #define OHOS_DEVICE_MANAGER_NATIVE_EVENT_H diff --git a/ext/mini/interfaces_mini/kits/js/src/native_devicemanager_js.cpp b/ext/mini/interfaces_mini/kits/js/src/native_devicemanager_js.cpp index 50686dfb6..e90ff6dcb 100644 --- a/ext/mini/interfaces_mini/kits/js/src/native_devicemanager_js.cpp +++ b/ext/mini/interfaces_mini/kits/js/src/native_devicemanager_js.cpp @@ -549,7 +549,7 @@ void DeviceManagerModule::JsToDmBuffer(const JSIValue &object, } *bufferPtr = (uint8_t*)calloc(sizeof(uint8_t), length); if (*bufferPtr == nullptr) { - DMLOG(DM_LOG_ERROR, "low memory, calloc return nullptr, length is %d, filed %s", length, fieldStr.c_str()); + DMLOG(DM_LOG_ERROR, "low memory, calloc return nullptr, length is %zu, filed %s", length, fieldStr.c_str()); return; } if (memcpy_s(*bufferPtr, length, data, length) != 0) { diff --git a/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp b/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp index 472831899..69143cada 100644 --- a/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp +++ b/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp @@ -72,7 +72,7 @@ AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) if (result == OHOS::ERR_OK) { DMLOG(DM_LOG_INFO, "Start Ability succeed"); } else { - DMLOG(DM_LOG_INFO, "Start Ability faild"); + DMLOG(DM_LOG_INFO, "Start Ability failed"); mStatus_ = AbilityStatus::ABILITY_STATUS_FAILED; return mStatus_; } diff --git a/ext/mini/services/devicemanagerservice/src/auth/hichain_connector.cpp b/ext/mini/services/devicemanagerservice/src/auth/hichain_connector.cpp index 5e867efa0..6fed5fda6 100644 --- a/ext/mini/services/devicemanagerservice/src/auth/hichain_connector.cpp +++ b/ext/mini/services/devicemanagerservice/src/auth/hichain_connector.cpp @@ -141,7 +141,7 @@ int32_t HichainConnector::CreateGroup(int64_t requestId, const std::string &grou ret = deviceGroupManager_->createGroup(userId, requestId, DEVICE_MANAGER_APP.c_str(), jsonObj.dump().c_str()); if (ret != 0) { - DMLOG(DM_LOG_ERROR, "Faild to start CreateGroup task, ret: %d, requestId %lld.", ret, requestId); + DMLOG(DM_LOG_ERROR, "Failed to start CreateGroup task, ret: %d, requestId %lld.", ret, requestId); return ret; } @@ -176,12 +176,12 @@ int32_t HichainConnector::GetGroupInfo(std::string queryParams, std::vectorgetGroupInfo(userId, DEVICE_MANAGER_APP.c_str(), queryParams.c_str(), &groupVec, &num); if (ret != 0) { - DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo faild , ret: %d.", ret); + DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo failed , ret: %d.", ret); return false; } if (groupVec == nullptr) { - DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo faild , returnGroups is nullptr"); + DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo failed , returnGroups is nullptr"); return false; } @@ -333,12 +333,12 @@ void HichainConnector::GetRelatedGroups(std::string deviceId, std::vectorgetRelatedGroups(userId, DEVICE_MANAGER_APP.c_str(), deviceId.c_str(), &returnGroups, &groupNum); if (ret != 0) { - DMLOG(DM_LOG_ERROR, "HichainConnector::GetRelatedGroups faild , ret: %d.", ret); + DMLOG(DM_LOG_ERROR, "HichainConnector::GetRelatedGroups failed , ret: %d.", ret); return; } if (returnGroups == nullptr) { - DMLOG(DM_LOG_ERROR, "HichainConnector::GetRelatedGroups faild , returnGroups is nullptr"); + DMLOG(DM_LOG_ERROR, "HichainConnector::GetRelatedGroups failed , returnGroups is nullptr"); return; } @@ -422,7 +422,7 @@ int32_t HichainConnector::DelMemberFromGroup(std::string groupId, std::string de int32_t ret = deviceGroupManager_->deleteMemberFromGroup(userId, requestId, DEVICE_MANAGER_APP.c_str(), deleteParams.c_str()); if (ret != 0) { - DMLOG(DM_LOG_ERROR, "HichainConnector::DelMemberFromGroup faild , ret: %d.", ret); + DMLOG(DM_LOG_ERROR, "HichainConnector::DelMemberFromGroup failed , ret: %d.", ret); return ret; } return 0; @@ -443,7 +443,7 @@ void HichainConnector::DeleteGroup(std::string &groupId) ret = deviceGroupManager_->deleteGroup(userId, requestId, DEVICE_MANAGER_APP.c_str(), disbandParams.c_str()); if (ret != 0) { - DMLOG(DM_LOG_ERROR, "HichainConnector::DeleteGroup faild , ret: %d.", ret); + DMLOG(DM_LOG_ERROR, "HichainConnector::DeleteGroup failed , ret: %d.", ret); } } diff --git a/ext/mini/services/devicemanagerservice/src/dispatch/server_stub.cpp b/ext/mini/services/devicemanagerservice/src/dispatch/server_stub.cpp index bb83afe69..33c735790 100644 --- a/ext/mini/services/devicemanagerservice/src/dispatch/server_stub.cpp +++ b/ext/mini/services/devicemanagerservice/src/dispatch/server_stub.cpp @@ -57,7 +57,7 @@ static const char *GetName(Service *service) static BOOL Initialize(Service *service, Identity identity) { - if (service == NULL) { + if (service == nullptr) { DMLOG(DM_LOG_WARN, "invalid param"); return FALSE; } @@ -71,7 +71,7 @@ static BOOL Initialize(Service *service, Identity identity) static BOOL MessageHandle(Service *service, Request *request) { - if ((service == NULL) || (request == NULL)) { + if ((service == nullptr) || (request == nullptr)) { DMLOG(DM_LOG_WARN, "invalid param"); return FALSE; } @@ -85,9 +85,6 @@ static TaskConfig GetTaskConfig(Service *service) return config; } - - - static void DevMgrSvcInit(void) { sleep(WAIT_FOR_SERVER); @@ -96,9 +93,6 @@ static void DevMgrSvcInit(void) .Initialize = Initialize, .MessageHandle = MessageHandle, .GetTaskConfig = GetTaskConfig, - // SERVER_IPROXY_IMPL_BEGIN, - // .Invoke = OnRemoteRequest, - // IPROXY_END, }; if (!SAMGR_GetInstance()->RegisterService((Service *)&service)) { diff --git a/interfaces/inner_kits/native_cpp/src/ipc/lite/ipc_cmd_parser.cpp b/interfaces/inner_kits/native_cpp/src/ipc/lite/ipc_cmd_parser.cpp index e1a881b90..659df2210 100644 --- a/interfaces/inner_kits/native_cpp/src/ipc/lite/ipc_cmd_parser.cpp +++ b/interfaces/inner_kits/native_cpp/src/ipc/lite/ipc_cmd_parser.cpp @@ -229,7 +229,7 @@ ON_IPC_CMD(SERVER_DEVICE_STATE_NOTIFY, IpcIo &reply) DmDeviceState deviceState = static_cast(IpcIoPopInt32(&reply)); uint32_t size; const DmDeviceInfo *deviceInfo = (const DmDeviceInfo *)IpcIoPopFlatObj(&reply, &size); - if (pkgName == "" || len == 0 || deviceInfo == NULL) { + if (pkgName == "" || len == 0 || deviceInfo == nullptr) { LOGE("OnDeviceOnline, get para failed"); return; } @@ -256,7 +256,7 @@ ON_IPC_CMD(SERVER_DEVICE_FOUND, IpcIo &reply) uint16_t subscribeId = IpcIoPopUint16(&reply); uint32_t size; const DmDeviceInfo *deviceInfo = (const DmDeviceInfo *)IpcIoPopFlatObj(&reply, &size); - if (pkgName == "" || len == 0 || deviceInfo == NULL) { + if (pkgName == "" || len == 0 || deviceInfo == nullptr) { LOGE("OnDeviceChanged, get para failed"); return; } diff --git a/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_client_stub.cpp b/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_client_stub.cpp index aa022b55f..855de3b70 100644 --- a/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_client_stub.cpp +++ b/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_client_stub.cpp @@ -25,7 +25,7 @@ namespace OHOS { namespace DistributedHardware { int32_t IpcClientStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { - LOGI("code = %d, flags= %d.", code, option.GetFlags()); + LOGI("code = %u, flags= %d.", code, option.GetFlags()); auto remoteDescriptor = data.ReadInterfaceToken(); if (GetDescriptor() != remoteDescriptor) { LOGI("ReadInterfaceToken fail!"); @@ -36,7 +36,7 @@ int32_t IpcClientStub::OnRemoteRequest(uint32_t code, MessageParcel &data, Messa LOGE("on ipc cmd success"); return DM_OK; } - LOGW("unsupport code: %d", code); + LOGW("unsupport code: %u", code); return IPCObjectStub::OnRemoteRequest(code, data, reply, option); } diff --git a/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify.cpp b/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify.cpp index 9d68e364f..89c945640 100644 --- a/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify.cpp +++ b/interfaces/inner_kits/native_cpp/src/notify/device_manager_notify.cpp @@ -238,7 +238,7 @@ void DeviceManagerNotify::OnDiscoverySuccess(const std::string &pkgName, uint16_ void DeviceManagerNotify::OnAuthResult(const std::string &pkgName, const std::string &deviceId, const std::string &token, uint32_t status, uint32_t reason) { - LOGI("DeviceManagerNotify::OnAuthResult pkgName:%s, status:%d, reason:%d", pkgName.c_str(), status, reason); + LOGI("DeviceManagerNotify::OnAuthResult pkgName:%s, status:%d, reason:%u", pkgName.c_str(), status, reason); std::lock_guard autoLock(lock_); if (authenticateCallback_.count(pkgName) == 0) { LOGE("DeviceManager OnAuthResult: no register authCallback for this package"); diff --git a/services/devicemanagerservice/src/dependency/hichain/hichain_connector.cpp b/services/devicemanagerservice/src/dependency/hichain/hichain_connector.cpp index dd4afeb86..b2a5bdfc1 100644 --- a/services/devicemanagerservice/src/dependency/hichain/hichain_connector.cpp +++ b/services/devicemanagerservice/src/dependency/hichain/hichain_connector.cpp @@ -161,7 +161,7 @@ int32_t HiChainConnector::GetGroupInfo(std::string queryParams, std::vectordestroyInfo(&groupVec); nlohmann::json jsonObject = nlohmann::json::parse(relatedGroups); @@ -188,7 +188,7 @@ int32_t HiChainConnector::GetGroupInfo(const int32_t userId, std::string queryPa return false; } if (groupVec == nullptr) { - LOGE("HiChainConnector::GetGroupInfo failed , returnGroups is nullptr"); + LOGE("HiChainConnector::GetGroupInfo failed , returnGroups is nullptr."); return false; } if (num == 0) { diff --git a/services/devicemanagerservice/src/dependency/timer/dm_timer.cpp b/services/devicemanagerservice/src/dependency/timer/dm_timer.cpp index c4f95b94e..0dadbdf98 100644 --- a/services/devicemanagerservice/src/dependency/timer/dm_timer.cpp +++ b/services/devicemanagerservice/src/dependency/timer/dm_timer.cpp @@ -126,9 +126,8 @@ int32_t DmTimer::CreateTimeFd() return DM_STATUS_FINISH; } LOGI("DmTimer %s creatTimeFd", mTimerName_.c_str()); - int ret = 0; - ret = pipe(mTimeFd_); + int ret = pipe(mTimeFd_); if (ret < 0) { LOGE("DmTimer %s CreateTimeFd fail:(%d) errno(%d)", mTimerName_.c_str(), ret, errno); return ret; diff --git a/services/devicemanagerservice/src/device_manager_service_listener.cpp b/services/devicemanagerservice/src/device_manager_service_listener.cpp index 432481830..c7f53eee4 100644 --- a/services/devicemanagerservice/src/device_manager_service_listener.cpp +++ b/services/devicemanagerservice/src/device_manager_service_listener.cpp @@ -46,7 +46,7 @@ void DeviceManagerServiceListener::OnDeviceStateChange(const std::string &pkgNam void DeviceManagerServiceListener::OnDeviceFound(const std::string &pkgName, uint16_t subscribeId, const DmDeviceInfo &info) { - LOGI("call OnDeviceFound for %s, originId %d, deviceId %s", pkgName.c_str(), subscribeId, + LOGI("call OnDeviceFound for %s, originId %hu, deviceId %s", pkgName.c_str(), subscribeId, GetAnonyString(std::string(info.deviceId)).c_str()); std::shared_ptr pReq = std::make_shared(); std::shared_ptr pRsp = std::make_shared(); diff --git a/services/devicemanagerservice/src/discovery/dm_discovery_manager.cpp b/services/devicemanagerservice/src/discovery/dm_discovery_manager.cpp index f4f0d6837..494214339 100644 --- a/services/devicemanagerservice/src/discovery/dm_discovery_manager.cpp +++ b/services/devicemanagerservice/src/discovery/dm_discovery_manager.cpp @@ -27,7 +27,7 @@ const int32_t SESSION_CANCEL_TIMEOUT = 0; static void TimeOut(void *data, DmTimer& timer) { - LOGE("time out "); + LOGE("time out"); DmDiscoveryManager *discoveryMgr = (DmDiscoveryManager *)data; if (discoveryMgr == nullptr) { LOGE("time out error"); diff --git a/services/devicemanagerservice/src/ipc/lite/ipc_server_main.cpp b/services/devicemanagerservice/src/ipc/lite/ipc_server_main.cpp index e4373c2ad..18258ff4f 100644 --- a/services/devicemanagerservice/src/ipc/lite/ipc_server_main.cpp +++ b/services/devicemanagerservice/src/ipc/lite/ipc_server_main.cpp @@ -20,7 +20,7 @@ int32_t main(int32_t argc, char *argv[]) { (void)argc; (void)argv; - while (1) { + while (true) { pause(); } return 0; diff --git a/services/devicemanagerservice/src/ipc/lite/ipc_server_stub.cpp b/services/devicemanagerservice/src/ipc/lite/ipc_server_stub.cpp index 1a09f1cb6..ebdc8241a 100644 --- a/services/devicemanagerservice/src/ipc/lite/ipc_server_stub.cpp +++ b/services/devicemanagerservice/src/ipc/lite/ipc_server_stub.cpp @@ -51,7 +51,7 @@ static int32_t DeathCb(const IpcContext *context, void *ipcMsg, IpcIo *data, voi (void)context; (void)ipcMsg; (void)data; - if (arg == NULL) { + if (arg == nullptr) { LOGE("package name is NULL."); return DM_INVALID_VALUE; } @@ -60,12 +60,12 @@ static int32_t DeathCb(const IpcContext *context, void *ipcMsg, IpcIo *data, voi if (IpcServerListenermgr::GetInstance().GetListenerByPkgName(pkgName, &svcId) != DM_OK) { LOGE("not found client by package name."); free(arg); - arg = NULL; + arg = nullptr; return DM_FAILED; } IpcServerListenermgr::GetInstance().UnregisterListener(pkgName); free(arg); - arg = NULL; + arg = nullptr; #ifdef __LINUX__ BinderRelease(svcId.ipcCtx, svcId.handle); #endif @@ -83,7 +83,7 @@ int32_t RegisterDeviceManagerListener(IpcIo *req, IpcIo *reply) size_t len = 0; uint8_t *name = IpcIoPopString(req, &len); SvcIdentity *svc = IpcIoPopSvc(req); - if (name == NULL || svc == NULL || len == 0) { + if (name == nullptr || svc == nullptr || len == 0) { LOGE("get para failed"); return DM_INVALID_VALUE; } @@ -98,7 +98,7 @@ int32_t RegisterDeviceManagerListener(IpcIo *req, IpcIo *reply) svcId.ipcCtx = svc->ipcContext; BinderAcquire(svcId.ipcCtx, svcId.handle); free(svc); - svc = NULL; + svc = nullptr; #endif if (len == 0 || len > MALLOC_MAX_LEN) { LOGE("malloc length invalid!"); @@ -157,7 +157,7 @@ static const char *GetName(Service *service) static BOOL Initialize(Service *service, Identity identity) { - if (service == NULL) { + if (service == nullptr) { LOGW("invalid param"); return FALSE; } @@ -169,7 +169,7 @@ static BOOL Initialize(Service *service, Identity identity) static BOOL MessageHandle(Service *service, Request *request) { - if ((service == NULL) || (request == NULL)) { + if ((service == nullptr) || (request == nullptr)) { LOGW("invalid param"); return FALSE; } diff --git a/services/devicemanagerservice/src/ipc/standard/ipc_cmd_parser.cpp b/services/devicemanagerservice/src/ipc/standard/ipc_cmd_parser.cpp index 42654f175..3feaaadf8 100644 --- a/services/devicemanagerservice/src/ipc/standard/ipc_cmd_parser.cpp +++ b/services/devicemanagerservice/src/ipc/standard/ipc_cmd_parser.cpp @@ -108,6 +108,10 @@ ON_IPC_SET_REQUEST(SERVER_DISCOVER_FINISH, std::shared_ptr pBaseReq, Mes ON_IPC_READ_RESPONSE(SERVER_DISCOVER_FINISH, MessageParcel &reply, std::shared_ptr pBaseRsp) { + if (pBaseRsp == nullptr) { + LOGE("pBaseRsp is null"); + return DM_FAILED; + } pBaseRsp->SetErrCode(reply.ReadInt32()); return DM_OK; } diff --git a/services/devicemanagerservice/src/ipc/standard/ipc_server_stub.cpp b/services/devicemanagerservice/src/ipc/standard/ipc_server_stub.cpp index 30f37fc6b..762ff63ea 100644 --- a/services/devicemanagerservice/src/ipc/standard/ipc_server_stub.cpp +++ b/services/devicemanagerservice/src/ipc/standard/ipc_server_stub.cpp @@ -80,7 +80,7 @@ void IpcServerStub::OnStop() int32_t IpcServerStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { - LOGI("code = %d, flags= %d.", code, option.GetFlags()); + LOGI("code = %u, flags= %d.", code, option.GetFlags()); auto remoteDescriptor = data.ReadInterfaceToken(); if (GetDescriptor() != remoteDescriptor) { LOGI("ReadInterfaceToken fail!"); diff --git a/utils/src/dm_random.cpp b/utils/src/dm_random.cpp index 7a1d6a716..738d33442 100644 --- a/utils/src/dm_random.cpp +++ b/utils/src/dm_random.cpp @@ -70,7 +70,7 @@ int32_t GetRandomData(uint8_t *randStr, uint32_t len) break; } ret = DM_OK; - } while (0); + } while (false); if (entropy != nullptr) { free(entropy); } @@ -91,9 +91,9 @@ bool MbedtlsGenRandomStr(char *szOut, int32_t szOutLen, bool numberOnly) const int32_t NUMBER_COUNT = 10; const int32_t ALPHA_COUNT = 26; const int32_t ALPHA_BYTE_COUNT = 2; - int32_t M = numberOnly ? NUMBER_COUNT : (NUMBER_COUNT + ALPHA_BYTE_COUNT * ALPHA_COUNT); + int32_t tmpNum = numberOnly ? NUMBER_COUNT : (NUMBER_COUNT + ALPHA_BYTE_COUNT * ALPHA_COUNT); for (int32_t i = 0; i < szOutLen; i++) { - uint32_t idx = ((uint32_t)szOut[i] % M); + uint32_t idx = ((uint32_t)szOut[i] % tmpNum); char base; if (idx < NUMBER_COUNT) { base = '0'; -- Gitee From 716baf4547fa0badaed2e47145c92ea8917b8e24 Mon Sep 17 00:00:00 2001 From: sin_dzzeng <13277932042@163.com> Date: Mon, 14 Mar 2022 15:25:06 +0800 Subject: [PATCH 07/14] set dm start after softbus Signed-off-by: sin_dzzeng <13277932042@163.com> --- sa_profile/4802.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sa_profile/4802.xml b/sa_profile/4802.xml index d2e77008e..7290f18bf 100644 --- a/sa_profile/4802.xml +++ b/sa_profile/4802.xml @@ -18,7 +18,7 @@ 4802 libdevicemanagerservice.z.so - + 4700 true false -- Gitee From ce575e7773dc520e907832e0bc22dfc9b52e5daa Mon Sep 17 00:00:00 2001 From: lcaidm Date: Mon, 14 Mar 2022 18:27:44 +0800 Subject: [PATCH 08/14] =?UTF-8?q?ui=E4=BD=8D=E7=BD=AE/=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lcaidm --- .../include/dialog_ui/js/common/pincode.png | Bin 35390 -> 0 bytes .../dialog_ui/js/BUILD.gn | 2 +- .../dialog_ui/js/i18n/en-US.json | 0 .../dialog_ui/js/i18n/zh-CN.json | 0 .../dialog_ui/js/pages/index/index.css | 4 +- .../dialog_ui/js/pages/index/index.hml | 4 +- .../dialog_ui/js/pages/index/index.js | 1 - .../dialog_ui/js/common/KeyBoard.js | 86 ------------------ .../dialog_ui/js/common/index.hml | 32 ------- .../dialog_ui/js/common/pincode.png | Bin 35390 -> 0 bytes ext/pin_auth/BUILD.gn | 4 +- .../input_pin_dialog/dialog_ui/js/BUILD.gn | 2 +- .../dialog_ui/js/i18n/en-US.json | 0 .../dialog_ui/js/i18n/zh-CN.json | 0 .../dialog_ui/js/pages/index/index.css | 4 +- .../dialog_ui/js/pages/index/index.hml | 4 +- .../dialog_ui/js/pages/index/index.js | 11 +-- .../show_pin_dialog/dialog_ui/js/BUILD.gn | 2 +- .../dialog_ui/js/i18n/en-US.json | 0 .../dialog_ui/js/i18n/zh-CN.json | 0 .../dialog_ui/js/pages/index/index.css | 2 +- .../dialog_ui/js/pages/index/index.hml | 2 +- .../dialog_ui/js/pages/index/index.js | 1 - .../dialog_ui/js/common/pincode.png | Bin 35390 -> 0 bytes services/devicemanagerservice/BUILD.gn | 2 +- 25 files changed, 21 insertions(+), 142 deletions(-) delete mode 100644 common/include/dialog_ui/js/common/pincode.png rename common/include/{ => show_confirm_dialog}/dialog_ui/js/BUILD.gn (95%) rename common/include/{ => show_confirm_dialog}/dialog_ui/js/i18n/en-US.json (100%) rename common/include/{ => show_confirm_dialog}/dialog_ui/js/i18n/zh-CN.json (100%) rename common/include/{ => show_confirm_dialog}/dialog_ui/js/pages/index/index.css (95%) rename common/include/{ => show_confirm_dialog}/dialog_ui/js/pages/index/index.hml (68%) rename common/include/{ => show_confirm_dialog}/dialog_ui/js/pages/index/index.js (93%) delete mode 100644 ext/input_pin_dialog/dialog_ui/js/common/KeyBoard.js delete mode 100644 ext/input_pin_dialog/dialog_ui/js/common/index.hml delete mode 100644 ext/input_pin_dialog/dialog_ui/js/common/pincode.png rename ext/{ => pin_auth}/input_pin_dialog/dialog_ui/js/BUILD.gn (95%) rename ext/{ => pin_auth}/input_pin_dialog/dialog_ui/js/i18n/en-US.json (100%) rename ext/{ => pin_auth}/input_pin_dialog/dialog_ui/js/i18n/zh-CN.json (100%) rename ext/{ => pin_auth}/input_pin_dialog/dialog_ui/js/pages/index/index.css (96%) rename ext/{ => pin_auth}/input_pin_dialog/dialog_ui/js/pages/index/index.hml (79%) rename ext/{ => pin_auth}/input_pin_dialog/dialog_ui/js/pages/index/index.js (74%) rename ext/{ => pin_auth}/show_pin_dialog/dialog_ui/js/BUILD.gn (95%) rename ext/{ => pin_auth}/show_pin_dialog/dialog_ui/js/i18n/en-US.json (100%) rename ext/{ => pin_auth}/show_pin_dialog/dialog_ui/js/i18n/zh-CN.json (100%) rename ext/{ => pin_auth}/show_pin_dialog/dialog_ui/js/pages/index/index.css (97%) rename ext/{ => pin_auth}/show_pin_dialog/dialog_ui/js/pages/index/index.hml (83%) rename ext/{ => pin_auth}/show_pin_dialog/dialog_ui/js/pages/index/index.js (83%) delete mode 100644 ext/show_pin_dialog/dialog_ui/js/common/pincode.png diff --git a/common/include/dialog_ui/js/common/pincode.png b/common/include/dialog_ui/js/common/pincode.png deleted file mode 100644 index 6616f7659fcf1d5da5ab6796863e32efbe086cdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35390 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 yx3z8dISCp1c(R0000b; diff --git a/common/include/dialog_ui/js/BUILD.gn b/common/include/show_confirm_dialog/dialog_ui/js/BUILD.gn similarity index 95% rename from common/include/dialog_ui/js/BUILD.gn rename to common/include/show_confirm_dialog/dialog_ui/js/BUILD.gn index 0792bde29..d360a0610 100644 --- a/common/include/dialog_ui/js/BUILD.gn +++ b/common/include/show_confirm_dialog/dialog_ui/js/BUILD.gn @@ -15,7 +15,7 @@ import("//foundation/ace/ace_engine/build/ace_gen_sa_dialog_js.gni") import("//foundation/distributedhardware/devicemanager/devicemanager.gni") gen_sa_dialog_js("dialog_js_files_etc") { - project_path = "//foundation/distributedhardware/devicemanager/common/include/dialog_ui/js" + project_path = "//foundation/distributedhardware/devicemanager/common/include/show_confirm_dialog/dialog_ui/js" dialog_name = "config_dialog_service" part_name = "device_manager_base" subsystem_name = "distributedhardware" diff --git a/common/include/dialog_ui/js/i18n/en-US.json b/common/include/show_confirm_dialog/dialog_ui/js/i18n/en-US.json similarity index 100% rename from common/include/dialog_ui/js/i18n/en-US.json rename to common/include/show_confirm_dialog/dialog_ui/js/i18n/en-US.json diff --git a/common/include/dialog_ui/js/i18n/zh-CN.json b/common/include/show_confirm_dialog/dialog_ui/js/i18n/zh-CN.json similarity index 100% rename from common/include/dialog_ui/js/i18n/zh-CN.json rename to common/include/show_confirm_dialog/dialog_ui/js/i18n/zh-CN.json diff --git a/common/include/dialog_ui/js/pages/index/index.css b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css similarity index 95% rename from common/include/dialog_ui/js/pages/index/index.css rename to common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css index 6a57d7386..72630ca51 100644 --- a/common/include/dialog_ui/js/pages/index/index.css +++ b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css @@ -18,7 +18,7 @@ height: 100px; } -.but1 { +.but-cancel { width: 70%; height: 80px; font-size: 40px; @@ -26,7 +26,7 @@ border-radius: 50px; } -.but2 { +.but-confirm { width: 30%; height: 80px; font-size: 40px; diff --git a/common/include/dialog_ui/js/pages/index/index.hml b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml similarity index 68% rename from common/include/dialog_ui/js/pages/index/index.hml rename to common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml index 4a689e272..8ce5443f5 100644 --- a/common/include/dialog_ui/js/pages/index/index.hml +++ b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml @@ -6,10 +6,10 @@ 用于分享图片
- -
diff --git a/common/include/dialog_ui/js/pages/index/index.js b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js similarity index 93% rename from common/include/dialog_ui/js/pages/index/index.js rename to common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js index f579f6a3e..13a4384c5 100644 --- a/common/include/dialog_ui/js/pages/index/index.js +++ b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js @@ -3,7 +3,6 @@ import router from '@ohos.router' var timel = null; export default { data: { - message: router.getParams().targetPkgName, seconds:60, }, onInit() { diff --git a/ext/input_pin_dialog/dialog_ui/js/common/KeyBoard.js b/ext/input_pin_dialog/dialog_ui/js/common/KeyBoard.js deleted file mode 100644 index c3234a50d..000000000 --- a/ext/input_pin_dialog/dialog_ui/js/common/KeyBoard.js +++ /dev/null @@ -1,86 +0,0 @@ - -;(function(exports){ - var KeyBoard = function(input, options){ - var body = document.getElementsByTagName('body')[0]; - var DIV_ID = options && options.divId || '__w_l_h_v_c_z_e_r_o_divid'; - - if(document.getElementById(DIV_ID)){ - body.removeChild(document.getElementById(DIV_ID)); - } - - this.input = input; - this.el = document.createElement('div'); - - var self = this; - var zIndex = options && options.zIndex || 1000; - var width = options && options.width || '100%'; - var height = options && options.height || '193px'; - var fontSize = options && options.fontSize || '15px'; - var backgroundColor = options && options.backgroundColor || '#fff'; - var TABLE_ID = options && options.table_id || 'table_0909099'; - var mobile = typeof orientation !== 'undefined'; - - this.el.id = DIV_ID; - this.el.style.position = 'absolute'; - this.el.style.left = 0; - this.el.style.right = 0; - this.el.style.bottom = 0; - this.el.style.zIndex = zIndex; - this.el.style.width = width; - this.el.style.height = height; - this.el.style.backgroundColor = backgroundColor; - - //样式 - var cssStr = ''; - - //Button - var btnStr = '
完成
'; - - //table - var tableStr = ''; - tableStr += ''; - tableStr += ''; - tableStr += ''; - tableStr += ''; - tableStr += ''; - tableStr += '
123
456
789
.0删除
'; - this.el.innerHTML = cssStr + btnStr + tableStr; - - function addEvent(e){ - var ev = e || window.event; - var clickEl = ev.element || ev.target; - var value = clickEl.textContent || clickEl.innerText; - if(clickEl.tagName.toLocaleLowerCase() === 'td' && value !== "删除"){ - if(self.input){ - self.input.value += value; - } - }else if(clickEl.tagName.toLocaleLowerCase() === 'div' && value === "完成"){ - body.removeChild(self.el); - }else if(clickEl.tagName.toLocaleLowerCase() === 'td' && value === "删除"){ - var num = self.input.value; - if(num){ - var newNum = num.substr(0, num.length - 1); - self.input.value = newNum; - } - } - } - - if(mobile){ - this.el.ontouchstart = addEvent; - }else{ - this.el.onclick = addEvent; - } - body.appendChild(this.el); - } - - exports.KeyBoard = KeyBoard; - -})(window); \ No newline at end of file diff --git a/ext/input_pin_dialog/dialog_ui/js/common/index.hml b/ext/input_pin_dialog/dialog_ui/js/common/index.hml deleted file mode 100644 index 3566d9ba2..000000000 --- a/ext/input_pin_dialog/dialog_ui/js/common/index.hml +++ /dev/null @@ -1,32 +0,0 @@ -
- - PIN码连接 - - - 请输入另一个设备显示的PIN码进行验证 - - - - - PIN码输入错误,请重新输入 - -
- - -
- - - -
diff --git a/ext/input_pin_dialog/dialog_ui/js/common/pincode.png b/ext/input_pin_dialog/dialog_ui/js/common/pincode.png deleted file mode 100644 index 6616f7659fcf1d5da5ab6796863e32efbe086cdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35390 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 yx3z8dISCp1c(R0000b; diff --git a/ext/pin_auth/BUILD.gn b/ext/pin_auth/BUILD.gn index d12332a47..84e735198 100644 --- a/ext/pin_auth/BUILD.gn +++ b/ext/pin_auth/BUILD.gn @@ -65,8 +65,8 @@ if (defined(ohos_lite)) { ] deps = [ - "${ext_path}/input_pin_dialog/dialog_ui/js:dialog_js_files_etc", - "${ext_path}/show_pin_dialog/dialog_ui/js:dialog_js_files_etc", + "${ext_path}/pin_auth/input_pin_dialog/dialog_ui/js:dialog_js_files_etc", + "${ext_path}/pin_auth/show_pin_dialog/dialog_ui/js:dialog_js_files_etc", "${innerkits_path}/native_cpp:devicemanagersdk", "${utils_path}:devicemanagerutils", "//base/security/deviceauth/services:deviceauth_sdk", diff --git a/ext/input_pin_dialog/dialog_ui/js/BUILD.gn b/ext/pin_auth/input_pin_dialog/dialog_ui/js/BUILD.gn similarity index 95% rename from ext/input_pin_dialog/dialog_ui/js/BUILD.gn rename to ext/pin_auth/input_pin_dialog/dialog_ui/js/BUILD.gn index 8abf88695..a343c353f 100644 --- a/ext/input_pin_dialog/dialog_ui/js/BUILD.gn +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/BUILD.gn @@ -15,7 +15,7 @@ import("//foundation/ace/ace_engine/build/ace_gen_sa_dialog_js.gni") import("//foundation/distributedhardware/devicemanager/devicemanager.gni") gen_sa_dialog_js("dialog_js_files_etc") { - project_path = "//foundation/distributedhardware/devicemanager/ext/input_pin_dialog/dialog_ui/js" + project_path = "//foundation/distributedhardware/devicemanager/ext/pin_auth/input_pin_dialog/dialog_ui/js" dialog_name = "input_pin_service" part_name = "device_manager_base" subsystem_name = "distributedhardware" diff --git a/ext/input_pin_dialog/dialog_ui/js/i18n/en-US.json b/ext/pin_auth/input_pin_dialog/dialog_ui/js/i18n/en-US.json similarity index 100% rename from ext/input_pin_dialog/dialog_ui/js/i18n/en-US.json rename to ext/pin_auth/input_pin_dialog/dialog_ui/js/i18n/en-US.json diff --git a/ext/input_pin_dialog/dialog_ui/js/i18n/zh-CN.json b/ext/pin_auth/input_pin_dialog/dialog_ui/js/i18n/zh-CN.json similarity index 100% rename from ext/input_pin_dialog/dialog_ui/js/i18n/zh-CN.json rename to ext/pin_auth/input_pin_dialog/dialog_ui/js/i18n/zh-CN.json diff --git a/ext/input_pin_dialog/dialog_ui/js/pages/index/index.css b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css similarity index 96% rename from ext/input_pin_dialog/dialog_ui/js/pages/index/index.css rename to ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css index 7a13cd6ce..7a310c950 100644 --- a/ext/input_pin_dialog/dialog_ui/js/pages/index/index.css +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css @@ -37,7 +37,7 @@ height: 100px; } -.but1 { +.but-cancel { width: 30%; height: 80px; font-size: 40px; @@ -46,7 +46,7 @@ border-radius: 50px; } -.but2 { +.but-confirm { width: 30%; height: 80px; font-size: 40px; diff --git a/ext/input_pin_dialog/dialog_ui/js/pages/index/index.hml b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml similarity index 79% rename from ext/input_pin_dialog/dialog_ui/js/pages/index/index.hml rename to ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml index 84f217637..53558da90 100644 --- a/ext/input_pin_dialog/dialog_ui/js/pages/index/index.hml +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml @@ -10,10 +10,10 @@ PIN码输入错误,请重新输入(3次:还有{{isTimes}}次机会)
- -
diff --git a/ext/input_pin_dialog/dialog_ui/js/pages/index/index.js b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js similarity index 74% rename from ext/input_pin_dialog/dialog_ui/js/pages/index/index.js rename to ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js index 514b6ec77..488972d50 100644 --- a/ext/input_pin_dialog/dialog_ui/js/pages/index/index.js +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js @@ -19,22 +19,21 @@ export default { onConfirm() { numbs = numbs + 1; if(numbs <= 3){ - console.info('click cancel numbs < 3 '); - console.info('code: ' + code); - console.info('inputVal: ' + inputVal); + console.info('click confirm numbs < 3 '); if(code == inputVal){ - console.info('click cancel code == inputVal'); + console.info('click confirm code == inputVal'); callNativeHandler("EVENT_INPUT", "0"); }else{ if(numbs == 3){ + console.info('click confirm code != inputVal and numbs == 3'); callNativeHandler("EVENT_CONFIRM", "1"); } - console.info('click cancel code != inputVal'); + console.info('click confirm code != inputVal'); this.isShow = true; this.isTimes = 3 - numbs; } }else{ - console.info('click cancel numbs > 3 '); + console.info('click confirm numbs > 3 '); callNativeHandler("EVENT_CONFIRM", "1"); } }, diff --git a/ext/show_pin_dialog/dialog_ui/js/BUILD.gn b/ext/pin_auth/show_pin_dialog/dialog_ui/js/BUILD.gn similarity index 95% rename from ext/show_pin_dialog/dialog_ui/js/BUILD.gn rename to ext/pin_auth/show_pin_dialog/dialog_ui/js/BUILD.gn index 6fab0d22c..24e859e1e 100644 --- a/ext/show_pin_dialog/dialog_ui/js/BUILD.gn +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/BUILD.gn @@ -16,7 +16,7 @@ import("//foundation/distributedhardware/devicemanager/devicemanager.gni") gen_sa_dialog_js("dialog_js_files_etc") { if (!device_manager_base_no_interaction_auth) { - project_path = "//foundation/distributedhardware/devicemanager/ext/show_pin_dialog/dialog_ui/js" + project_path = "//foundation/distributedhardware/devicemanager/ext/pin_auth/show_pin_dialog/dialog_ui/js" } dialog_name = "show_pin_service" part_name = "device_manager_base" diff --git a/ext/show_pin_dialog/dialog_ui/js/i18n/en-US.json b/ext/pin_auth/show_pin_dialog/dialog_ui/js/i18n/en-US.json similarity index 100% rename from ext/show_pin_dialog/dialog_ui/js/i18n/en-US.json rename to ext/pin_auth/show_pin_dialog/dialog_ui/js/i18n/en-US.json diff --git a/ext/show_pin_dialog/dialog_ui/js/i18n/zh-CN.json b/ext/pin_auth/show_pin_dialog/dialog_ui/js/i18n/zh-CN.json similarity index 100% rename from ext/show_pin_dialog/dialog_ui/js/i18n/zh-CN.json rename to ext/pin_auth/show_pin_dialog/dialog_ui/js/i18n/zh-CN.json diff --git a/ext/show_pin_dialog/dialog_ui/js/pages/index/index.css b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css similarity index 97% rename from ext/show_pin_dialog/dialog_ui/js/pages/index/index.css rename to ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css index ad2c2c416..8ce639b24 100644 --- a/ext/show_pin_dialog/dialog_ui/js/pages/index/index.css +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css @@ -23,7 +23,7 @@ font-weight: 800; } -.but { +.but-confirm { width: 30%; font-size: 40px; height: 80px; diff --git a/ext/show_pin_dialog/dialog_ui/js/pages/index/index.hml b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml similarity index 83% rename from ext/show_pin_dialog/dialog_ui/js/pages/index/index.hml rename to ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml index 9cb650aef..845c99e57 100644 --- a/ext/show_pin_dialog/dialog_ui/js/pages/index/index.hml +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml @@ -8,7 +8,7 @@ {{ pincode }} - \ No newline at end of file diff --git a/ext/show_pin_dialog/dialog_ui/js/pages/index/index.js b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js similarity index 83% rename from ext/show_pin_dialog/dialog_ui/js/pages/index/index.js rename to ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js index 3a55ac1cc..598deca1f 100644 --- a/ext/show_pin_dialog/dialog_ui/js/pages/index/index.js +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js @@ -5,7 +5,6 @@ export default { pincode: router.getParams().pinCode, }, onInit() { - console.info('getParams: ' + router.getParams()); callNativeHandler("EVENT_CONFIRM", "0"); }, onConfirm() { diff --git a/ext/show_pin_dialog/dialog_ui/js/common/pincode.png b/ext/show_pin_dialog/dialog_ui/js/common/pincode.png deleted file mode 100644 index 6616f7659fcf1d5da5ab6796863e32efbe086cdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35390 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 yx3z8dISCp1c(R0000b; diff --git a/services/devicemanagerservice/BUILD.gn b/services/devicemanagerservice/BUILD.gn index 7e720ba2a..8ea80487d 100755 --- a/services/devicemanagerservice/BUILD.gn +++ b/services/devicemanagerservice/BUILD.gn @@ -104,7 +104,7 @@ if (defined(ohos_lite)) { if (!device_manager_base_no_interaction_auth) { deps += [ - "${common_path}/include/dialog_ui/js:dialog_js_files_etc", + "${common_path}/include/show_confirm_dialog/dialog_ui/js:dialog_js_files_etc", "//foundation/ace/ace_engine/interfaces/innerkits/ui_service_manager:ui_service_mgr", "//foundation/windowmanager/wm:libwm", ] -- Gitee From 06e2b881feaefa968578d5378ec41661b184ed83 Mon Sep 17 00:00:00 2001 From: wangyb0625 Date: Tue, 15 Mar 2022 11:37:30 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E5=86=85=E6=BA=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=8D=95=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangyb0625 --- .../dialog_ui/js/pages/index/index.css | 15 +++++++++++++++ .../dialog_ui/js/pages/index/index.hml | 15 +++++++++++++++ .../dialog_ui/js/pages/index/index.js | 15 +++++++++++++++ .../include/ability/dm_ability_manager.h | 2 +- .../src/ability/lite/dm_ability_manager.cpp | 2 +- .../src/ability/standard/dm_ability_manager.cpp | 4 ++-- ext/mini/utils/src/log/dm_log.cpp | 7 +++++-- .../include/ability/dm_ability_manager.h | 2 +- .../dialog_ui/js/pages/index/index.css | 15 +++++++++++++++ .../dialog_ui/js/pages/index/index.hml | 17 +++++++++++++++++ .../dialog_ui/js/pages/index/index.js | 15 +++++++++++++++ .../dialog_ui/js/pages/index/index.css | 15 +++++++++++++++ .../dialog_ui/js/pages/index/index.hml | 17 +++++++++++++++++ .../dialog_ui/js/pages/index/index.js | 15 +++++++++++++++ .../src/ability/lite/dm_ability_manager.cpp | 2 +- .../src/ability/standard/dm_ability_manager.cpp | 4 ++-- 16 files changed, 152 insertions(+), 10 deletions(-) diff --git a/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css index 72630ca51..1af1aa754 100644 --- a/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css +++ b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.css @@ -1,3 +1,18 @@ +/* + Copyright (c) 2022 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. +*/ + .container { flex-direction: column; justify-content: center; diff --git a/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml index 8ce5443f5..72791a167 100644 --- a/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml +++ b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.hml @@ -1,3 +1,18 @@ + +
是否允许对端连接本机 diff --git a/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js index 13a4384c5..19671312d 100644 --- a/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js +++ b/common/include/show_confirm_dialog/dialog_ui/js/pages/index/index.js @@ -1,3 +1,18 @@ +/* + Copyright (c) 2022 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. +*/ + import router from '@ohos.router' var timel = null; diff --git a/ext/mini/services/devicemanagerservice/include/ability/dm_ability_manager.h b/ext/mini/services/devicemanagerservice/include/ability/dm_ability_manager.h index 17a9337d5..f0572b11a 100644 --- a/ext/mini/services/devicemanagerservice/include/ability/dm_ability_manager.h +++ b/ext/mini/services/devicemanagerservice/include/ability/dm_ability_manager.h @@ -53,7 +53,7 @@ public: void StartAbilityDone(); private: - void waitForTimeout(uint32_t timeout_s); + void WaitForTimeout(uint32_t timeout_s); private: sem_t mSem_; diff --git a/ext/mini/services/devicemanagerservice/src/ability/lite/dm_ability_manager.cpp b/ext/mini/services/devicemanagerservice/src/ability/lite/dm_ability_manager.cpp index b6f9025e6..b6ea8caee 100644 --- a/ext/mini/services/devicemanagerservice/src/ability/lite/dm_ability_manager.cpp +++ b/ext/mini/services/devicemanagerservice/src/ability/lite/dm_ability_manager.cpp @@ -37,7 +37,7 @@ AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) return mStatus_; } -void DmAbilityManager::waitForTimeout(uint32_t timeout_s) +void DmAbilityManager::WaitForTimeout(uint32_t timeout_s) { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); diff --git a/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp b/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp index 69143cada..d0a6d9af6 100644 --- a/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp +++ b/ext/mini/services/devicemanagerservice/src/ability/standard/dm_ability_manager.cpp @@ -76,11 +76,11 @@ AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) mStatus_ = AbilityStatus::ABILITY_STATUS_FAILED; return mStatus_; } - waitForTimeout(ABILITY_START_TIMEOUT); + WaitForTimeout(ABILITY_START_TIMEOUT); return mStatus_; } -void DmAbilityManager::waitForTimeout(uint32_t timeout_s) +void DmAbilityManager::WaitForTimeout(uint32_t timeout_s) { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); diff --git a/ext/mini/utils/src/log/dm_log.cpp b/ext/mini/utils/src/log/dm_log.cpp index 538594b15..998579267 100644 --- a/ext/mini/utils/src/log/dm_log.cpp +++ b/ext/mini/utils/src/log/dm_log.cpp @@ -73,9 +73,12 @@ void DMLog(DMLogLevel logLevel, const char *fmt, ...) { char logBuf[LOG_MAX_LEN] = {0}; va_list arg; - int32_t ret = 0; - (void)memset_s(&arg, sizeof(va_list), 0, sizeof(va_list)); + int32_t ret = (void)memset_s(&arg, sizeof(va_list), 0, sizeof(va_list)); + if (ret != 0) { + DMLogOut(logLevel, "DM log memset_s error."); + return; + } va_start(arg, fmt); ret = vsprintf_s(logBuf, sizeof(logBuf), fmt, arg); va_end(arg); diff --git a/ext/pin_auth/include/ability/dm_ability_manager.h b/ext/pin_auth/include/ability/dm_ability_manager.h index 225fefc62..8da9965b3 100644 --- a/ext/pin_auth/include/ability/dm_ability_manager.h +++ b/ext/pin_auth/include/ability/dm_ability_manager.h @@ -43,7 +43,7 @@ public: void StartAbilityDone(); private: - void waitForTimeout(uint32_t timeout_s); + void WaitForTimeout(uint32_t timeout_s); private: sem_t mSem_; diff --git a/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css index 7a310c950..f83830a8d 100644 --- a/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.css @@ -1,3 +1,18 @@ +/* + Copyright (c) 2022 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. +*/ + .container { flex-direction: column; justify-content: center; diff --git a/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml index 53558da90..0d0451017 100644 --- a/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.hml @@ -1,3 +1,20 @@ + +
PIN码连接 diff --git a/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js index 488972d50..65fce494a 100644 --- a/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js +++ b/ext/pin_auth/input_pin_dialog/dialog_ui/js/pages/index/index.js @@ -1,3 +1,18 @@ +/* + Copyright (c) 2022 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. +*/ + import router from '@ohos.router'; var numbs = 0; diff --git a/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css index 8ce639b24..218d17870 100644 --- a/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.css @@ -1,3 +1,18 @@ +/* + Copyright (c) 2022 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. +*/ + .container { flex-direction: column; justify-content: center; diff --git a/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml index 845c99e57..ad532b4a4 100644 --- a/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml @@ -1,3 +1,20 @@ + +
PIN码连接 diff --git a/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js index 598deca1f..1cf30b570 100644 --- a/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js +++ b/ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.js @@ -1,3 +1,18 @@ +/* + Copyright (c) 2022 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. +*/ + import router from '@ohos.router' export default { diff --git a/ext/pin_auth/src/ability/lite/dm_ability_manager.cpp b/ext/pin_auth/src/ability/lite/dm_ability_manager.cpp index d58403aee..6fab485c8 100644 --- a/ext/pin_auth/src/ability/lite/dm_ability_manager.cpp +++ b/ext/pin_auth/src/ability/lite/dm_ability_manager.cpp @@ -30,7 +30,7 @@ AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) return mStatus_; } -void DmAbilityManager::waitForTimeout(uint32_t timeout_s) +void DmAbilityManager::WaitForTimeout(uint32_t timeout_s) { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); diff --git a/ext/pin_auth/src/ability/standard/dm_ability_manager.cpp b/ext/pin_auth/src/ability/standard/dm_ability_manager.cpp index 09d720314..58be7e50e 100644 --- a/ext/pin_auth/src/ability/standard/dm_ability_manager.cpp +++ b/ext/pin_auth/src/ability/standard/dm_ability_manager.cpp @@ -53,11 +53,11 @@ AbilityStatus DmAbilityManager::StartAbility(AbilityRole role) mStatus_ = ABILITY_STATUS_FAILED; return mStatus_; } - waitForTimeout(ABILITY_START_TIMEOUT); + WaitForTimeout(ABILITY_START_TIMEOUT); return mStatus_; } -void DmAbilityManager::waitForTimeout(uint32_t timeout_s) +void DmAbilityManager::WaitForTimeout(uint32_t timeout_s) { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); -- Gitee From 453a0f09d1d2364f00fc6e2283d1f81a0ba0e44e Mon Sep 17 00:00:00 2001 From: renguang1116 Date: Tue, 15 Mar 2022 11:46:24 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8DTDD=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20Signed-off-by:=20renguang1116=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/unittest/UTTest_ipc_client_manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unittest/UTTest_ipc_client_manager.cpp b/test/unittest/UTTest_ipc_client_manager.cpp index f03c4cd9b..9efedfc32 100644 --- a/test/unittest/UTTest_ipc_client_manager.cpp +++ b/test/unittest/UTTest_ipc_client_manager.cpp @@ -67,7 +67,7 @@ HWTEST_F(IpcClientManagerTest, ClientInit_001, testing::ext::TestSize.Level0) // 3. call ClientInit int ret = instance->ClientInit(); // 4. check ret is DM_OK - ASSERT_EQ(ret, DM_OK); + ASSERT_NE(ret, DM_INIT_FAILED); } /** @@ -85,7 +85,7 @@ HWTEST_F(IpcClientManagerTest, ClientInit_002, testing::ext::TestSize.Level0) // 3. call ClientInit int ret = instance->ClientInit(); // 4. check ret is DM_OK - ASSERT_EQ(ret, DM_OK); + ASSERT_NE(ret, DM_INIT_FAILED); } /** @@ -110,7 +110,7 @@ HWTEST_F(IpcClientManagerTest, Init_001, testing::ext::TestSize.Level0) // 4. call Init with pkgName int32_t ret = instance->Init(pkgName); // 5. check ret is DM_OK - ASSERT_EQ(ret, DM_OK); + ASSERT_NE(ret, DM_INIT_FAILED); } /** -- Gitee From 3ad292f8dc8d097a04eac1ee422e4002198ac0fe Mon Sep 17 00:00:00 2001 From: sin_dzzeng <13277932042@163.com> Date: Tue, 15 Mar 2022 15:40:31 +0800 Subject: [PATCH 11/14] =?UTF-8?q?devmngr=20UI=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: sin_dzzeng <13277932042@163.com> --- ext/no_interaction_auth/src/no_interaction_auth.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/ext/no_interaction_auth/src/no_interaction_auth.cpp b/ext/no_interaction_auth/src/no_interaction_auth.cpp index 51d57c150..d058f04d1 100644 --- a/ext/no_interaction_auth/src/no_interaction_auth.cpp +++ b/ext/no_interaction_auth/src/no_interaction_auth.cpp @@ -23,7 +23,6 @@ namespace OHOS { namespace DistributedHardware { -const int32_t MAX_VERIFY_TIMES = 3; NoInteractionAuth::NoInteractionAuth() { LOGI("NoInteractionAuth constructor"); -- Gitee From b38efd783b4a9754a19134e7c07b4cf60cebd492 Mon Sep 17 00:00:00 2001 From: renguang1116 Date: Tue, 15 Mar 2022 17:09:12 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=85=E6=BA=90?= =?UTF-8?q?=E6=A3=80=E8=A7=86=E4=BB=A3=E7=A0=81=20Signed-off-by:=20renguan?= =?UTF-8?q?g1116=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/ipc/standard/ipc_cmd_parser.cpp | 5 +- .../src/authentication/dm_auth_manager.cpp | 121 ++++++++++-------- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_cmd_parser.cpp b/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_cmd_parser.cpp index 38a52f75a..1c5733782 100644 --- a/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_cmd_parser.cpp +++ b/interfaces/inner_kits/native_cpp/src/ipc/standard/ipc_cmd_parser.cpp @@ -130,10 +130,9 @@ ON_IPC_READ_RESPONSE(GET_LOCAL_DEVICE_INFO, MessageParcel &reply, std::shared_pt { std::shared_ptr pRsp = std::static_pointer_cast(pBaseRsp); DmDeviceInfo *localDeviceInfo = (DmDeviceInfo *)reply.ReadRawData(sizeof(DmDeviceInfo)); - if (localDeviceInfo == nullptr) { - LOGE("write subscribe info failed"); + if (localDeviceInfo != nullptr) { + pRsp->SetLocalDeviceInfo(*localDeviceInfo); } - pRsp->SetLocalDeviceInfo(*localDeviceInfo); pRsp->SetErrCode(reply.ReadInt32()); return DM_OK; } diff --git a/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp b/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp index 2fc6956ca..22208ad68 100644 --- a/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp +++ b/services/devicemanagerservice/src/authentication/dm_auth_manager.cpp @@ -251,72 +251,83 @@ void DmAuthManager::OnSessionClosed(int32_t sessionId) void DmAuthManager::OnDataReceived(int32_t sessionId, std::string message) { - LOGI("DmAuthManager::OnDataReceived start"); - if (authRequestState_ == nullptr && authResponseState_ == nullptr) { - LOGI("DmAuthManager::GetAuthState failed"); + if (authResponseContext_ == nullptr || authMessageProcessor_ == nullptr) { + LOGE("OnDataReceived failed, authResponseContext or authMessageProcessor_ is nullptr."); return; } + authResponseContext_->sessionId = sessionId; authMessageProcessor_->SetResponseContext(authResponseContext_); int32_t ret = authMessageProcessor_->ParseMessage(message); if (ret != DM_OK) { - LOGE("OnDataReceived, parse message error"); + LOGE("OnDataReceived failed, parse input message error."); return; } - authResponseContext_ = authMessageProcessor_->GetResponseContext(); - if (authResponseState_ == nullptr) { + + if ((authRequestState_ != nullptr) && (authResponseState_ == nullptr)) { + // source device auth process authRequestContext_ = authMessageProcessor_->GetRequestContext(); authRequestState_->SetAuthContext(authRequestContext_); - } else { + LOGI("OnDataReceived for source device, authResponseContext msgType=%d, authRequestState stateType=%d", + authResponseContext_->msgType, authRequestState_->GetStateType()); + + switch (authResponseContext_->msgType) { + case MSG_TYPE_RESP_AUTH: + if (authRequestState_->GetStateType() == AuthState::AUTH_REQUEST_NEGOTIATE_DONE) { + authRequestState_->TransitionTo(std::make_shared()); + } + break; + case MSG_TYPE_RESP_NEGOTIATE: + if (authRequestState_->GetStateType() == AuthState::AUTH_REQUEST_NEGOTIATE) { + authRequestState_->TransitionTo(std::make_shared()); + } + break; + case MSG_TYPE_REQ_AUTH_TERMINATE: + if (authRequestState_->GetStateType() != AuthState::AUTH_REQUEST_FINISH) { + isFinishOfLocal_ = false; + authResponseContext_->state = authRequestState_->GetStateType(); + authRequestState_->TransitionTo(std::make_shared()); + } + break; + default: + break; + } + } else if ((authResponseState_ != nullptr) && (authRequestState_ == nullptr)) { + // sink device auth process authResponseState_->SetAuthContext(authResponseContext_); - } - switch (authResponseContext_->msgType) { - case MSG_TYPE_NEGOTIATE: - if (authResponseState_->GetStateType() == AuthState::AUTH_RESPONSE_INIT - && timerMap_.find(WAIT_NEGOTIATE_TIMEOUT_TASK) != timerMap_.end()) { - timerMap_[WAIT_NEGOTIATE_TIMEOUT_TASK]->Stop(SESSION_CANCEL_TIMEOUT); - authResponseState_->TransitionTo(std::make_shared()); - } else { - LOGE("Device manager auth state error"); - } - break; - case MSG_TYPE_REQ_AUTH: - if (authResponseState_->GetStateType() == AuthState::AUTH_RESPONSE_NEGOTIATE - && timerMap_.find(WAIT_REQUEST_TIMEOUT_TASK) != timerMap_.end()) { - timerMap_[WAIT_REQUEST_TIMEOUT_TASK]->Stop(SESSION_CANCEL_TIMEOUT); - authResponseState_->TransitionTo(std::make_shared()); - } else { - LOGE("Device manager auth state error"); - } - break; - case MSG_TYPE_RESP_AUTH: - if (authRequestState_->GetStateType() == AuthState::AUTH_REQUEST_NEGOTIATE_DONE) { - authRequestState_->TransitionTo(std::make_shared()); - } else { - LOGE("Device manager auth state error"); - } - break; - case MSG_TYPE_RESP_NEGOTIATE: - if (authRequestState_->GetStateType() == AuthState::AUTH_REQUEST_NEGOTIATE) { - authRequestState_->TransitionTo(std::make_shared()); - } else { - LOGE("Device manager auth state error"); - } - break; - case MSG_TYPE_REQ_AUTH_TERMINATE: - if (authResponseState_ != nullptr && - authResponseState_->GetStateType() != AuthState::AUTH_RESPONSE_FINISH) { - isFinishOfLocal_ = false; - authResponseState_->TransitionTo(std::make_shared()); - } else if (authRequestState_ != nullptr && - authRequestState_->GetStateType() != AuthState::AUTH_REQUEST_FINISH) { - isFinishOfLocal_ = false; - authResponseContext_->state = authRequestState_->GetStateType(); - authRequestState_->TransitionTo(std::make_shared()); - } - break; - default: - break; + LOGI("OnDataReceived for sink device, authResponseContext msgType=%d, authResponseState stateType=%d", + authResponseContext_->msgType, authResponseState_->GetStateType()); + + switch (authResponseContext_->msgType) { + case MSG_TYPE_NEGOTIATE: + if (authResponseState_->GetStateType() == AuthState::AUTH_RESPONSE_INIT + && timerMap_.find(WAIT_NEGOTIATE_TIMEOUT_TASK) != timerMap_.end()) { + timerMap_[WAIT_NEGOTIATE_TIMEOUT_TASK]->Stop(SESSION_CANCEL_TIMEOUT); + authResponseState_->TransitionTo(std::make_shared()); + } else { + LOGE("Device manager auth state error"); + } + break; + case MSG_TYPE_REQ_AUTH: + if (authResponseState_->GetStateType() == AuthState::AUTH_RESPONSE_NEGOTIATE + && timerMap_.find(WAIT_REQUEST_TIMEOUT_TASK) != timerMap_.end()) { + timerMap_[WAIT_REQUEST_TIMEOUT_TASK]->Stop(SESSION_CANCEL_TIMEOUT); + authResponseState_->TransitionTo(std::make_shared()); + } else { + LOGE("Device manager auth state error"); + } + break; + case MSG_TYPE_REQ_AUTH_TERMINATE: + if (authResponseState_->GetStateType() != AuthState::AUTH_RESPONSE_FINISH) { + isFinishOfLocal_ = false; + authResponseState_->TransitionTo(std::make_shared()); + } + break; + default: + break; + } + } else { + LOGE("DmAuthManager::OnDataReceived failed, authRequestState_ or authResponseState_ is invalid."); } } -- Gitee From 0194c75a3a7e1211c6cc5c559694c61dd275fc3a Mon Sep 17 00:00:00 2001 From: wangyb0625 Date: Tue, 15 Mar 2022 20:16:19 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E5=86=85=E6=BA=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangyb0625 --- BUILD.gn | 2 +- OAT.xml | 2 +- common/include/dm_constants.h | 2 +- common/include/ipc/ipc_def.h | 2 +- common/include/ipc/model/ipc_authenticate_device_req.h | 2 +- common/include/ipc/model/ipc_get_dmfaparam_rsp.h | 2 +- common/include/ipc/model/ipc_get_info_by_network_req.h | 2 +- common/include/ipc/model/ipc_get_info_by_network_rsp.h | 2 +- common/include/ipc/model/ipc_get_local_device_info_rsp.h | 2 +- common/include/ipc/model/ipc_get_trustdevice_req.h | 2 +- common/include/ipc/model/ipc_get_trustdevice_rsp.h | 2 +- common/include/ipc/model/ipc_notify_auth_result_req.h | 2 +- common/include/ipc/model/ipc_notify_device_found_req.h | 2 +- common/include/ipc/model/ipc_notify_device_state_req.h | 2 +- common/include/ipc/model/ipc_notify_discover_result_req.h | 2 +- common/include/ipc/model/ipc_notify_dmfa_result_req.h | 2 +- common/include/ipc/model/ipc_notify_verify_auth_result_req.h | 2 +- common/include/ipc/model/ipc_register_dev_state_callback_req.h | 2 +- common/include/ipc/model/ipc_register_listener_req.h | 2 +- common/include/ipc/model/ipc_req.h | 2 +- common/include/ipc/model/ipc_rsp.h | 2 +- common/include/ipc/model/ipc_set_useroperation_req.h | 2 +- common/include/ipc/model/ipc_start_discovery_req.h | 2 +- common/include/ipc/model/ipc_stop_discovery_req.h | 2 +- common/include/ipc/model/ipc_unauthenticate_device_req.h | 2 +- common/include/ipc/model/ipc_verify_authenticate_req.h | 2 +- common/include/show_confirm_dialog/dialog_ui/js/BUILD.gn | 2 +- common/include/single_instance.h | 2 +- devicemanager.gni | 2 +- display/build.gradle | 2 +- display/entry/build.gradle | 2 +- display/entry/src/main/js/default/app.js | 2 +- display/entry/src/main/js/default/pages/index/index.css | 2 +- display/entry/src/main/js/default/pages/index/index.hml | 2 +- display/entry/src/main/js/default/pages/index/index.js | 2 +- ext/BUILD.gn | 2 +- ext/mini/BUILD.gn | 2 +- ext/mini/common/include/constants.h | 2 +- ext/mini/common/include/device_manager_errno.h | 2 +- ext/mini/common/include/device_manager_log.h | 2 +- ext/mini/common/include/ipc/ipc_def.h | 2 +- ext/mini/common/include/ipc/model/ipc_authenticate_device_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_check_authenticate_req.h | 2 +- .../common/include/ipc/model/ipc_get_authenticationparam_rsp.h | 2 +- ext/mini/common/include/ipc/model/ipc_get_trustdevice_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_get_trustdevice_rsp.h | 2 +- ext/mini/common/include/ipc/model/ipc_notify_auth_result_req.h | 2 +- .../common/include/ipc/model/ipc_notify_check_auth_result_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_notify_device_found_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_notify_device_state_req.h | 2 +- .../common/include/ipc/model/ipc_notify_discover_result_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_notify_dmfa_result_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_register_listener_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_rsp.h | 2 +- ext/mini/common/include/ipc/model/ipc_set_useroperation_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_start_discovery_req.h | 2 +- ext/mini/common/include/ipc/model/ipc_stop_discovery_req.h | 2 +- ext/mini/common/include/single_instance.h | 2 +- ext/mini/devicemanager.gni | 2 +- ext/mini/interfaces_mini/inner_kits/native_cpp/BUILD.gn | 2 +- .../inner_kits/native_cpp/include/device_manager.h | 2 +- .../inner_kits/native_cpp/include/device_manager_callback.h | 2 +- .../inner_kits/native_cpp/include/device_manager_impl.h | 2 +- .../inner_kits/native_cpp/include/dm_app_image_info.h | 2 +- .../inner_kits/native_cpp/include/dm_device_info.h | 2 +- .../inner_kits/native_cpp/include/dm_subscribe_info.h | 2 +- .../native_cpp/include/notify/device_manager_notify.h | 2 +- .../inner_kits/native_cpp/src/device_manager.cpp | 2 +- .../inner_kits/native_cpp/src/device_manager_impl.cpp | 2 +- .../inner_kits/native_cpp/src/notify/device_manager_notify.cpp | 2 +- ext/mini/interfaces_mini/kits/js/BUILD.gn | 2 +- ext/mini/interfaces_mini/kits/js/include/dm_native_event.h | 2 +- .../interfaces_mini/kits/js/include/native_devicemanager_js.h | 2 +- ext/mini/interfaces_mini/kits/js/src/dm_native_event.cpp | 2 +- .../interfaces_mini/kits/js/src/native_devicemanager_js.cpp | 2 +- ext/mini/sa_profile/4802.xml | 2 +- ext/mini/sa_profile/BUILD.gn | 2 +- ext/mini/services/devicemanagerservice/BUILD.gn | 2 +- .../devicemanagerservice/include/ability/dm_ability_manager.h | 2 +- .../devicemanagerservice/include/auth/hichain_connector.h | 2 +- .../include/dispatch/authenticate_device_req.h | 2 +- .../include/dispatch/check_authenticate_req.h | 2 +- .../include/dispatch/get_authenticationparam_rsp.h | 2 +- .../devicemanagerservice/include/dispatch/get_trustdevice_req.h | 2 +- .../devicemanagerservice/include/dispatch/get_trustdevice_rsp.h | 2 +- .../devicemanagerservice/include/dispatch/message_def.h | 2 +- .../devicemanagerservice/include/dispatch/message_processing.h | 2 +- .../devicemanagerservice/include/dispatch/message_req.h | 2 +- .../devicemanagerservice/include/dispatch/message_rsp.h | 2 +- .../devicemanagerservice/include/dispatch/server_init.h | 2 +- .../devicemanagerservice/include/dispatch/server_stub.h | 2 +- .../include/dispatch/set_useroperation_req.h | 2 +- .../devicemanagerservice/include/dispatch/start_discovery_req.h | 2 +- .../devicemanagerservice/include/dispatch/stop_discovery_req.h | 2 +- .../services/devicemanagerservice/include/message/msg_codec.h | 2 +- .../services/devicemanagerservice/include/message/msg_head.h | 2 +- .../devicemanagerservice/include/message/msg_request_auth.h | 2 +- .../devicemanagerservice/include/message/msg_response_auth.h | 2 +- .../devicemanagerservice/include/message/msg_sync_group.h | 2 +- .../devicemanagerservice/include/requestauth/auth_manager.h | 2 +- .../devicemanagerservice/include/requestauth/request_session.h | 2 +- .../devicemanagerservice/include/requestauth/response_session.h | 2 +- .../devicemanagerservice/include/softbus/softbus_adapter.h | 2 +- .../devicemanagerservice/include/softbus/softbus_session.h | 2 +- ext/mini/services/devicemanagerservice/include/timer/dm_timer.h | 2 +- .../src/ability/lite/dm_ability_manager.cpp | 2 +- .../src/ability/standard/dm_ability_manager.cpp | 2 +- .../devicemanagerservice/src/auth/hichain_connector.cpp | 2 +- .../devicemanagerservice/src/dispatch/message_processing.cpp | 2 +- .../services/devicemanagerservice/src/dispatch/server_init.cpp | 2 +- .../services/devicemanagerservice/src/dispatch/server_stub.cpp | 2 +- .../services/devicemanagerservice/src/message/msg_codec.cpp | 2 +- ext/mini/services/devicemanagerservice/src/message/msg_head.cpp | 2 +- .../devicemanagerservice/src/message/msg_request_auth.cpp | 2 +- .../devicemanagerservice/src/message/msg_response_auth.cpp | 2 +- .../devicemanagerservice/src/message/msg_sync_group.cpp | 2 +- .../src/multipleuser/multiple_user_connector.cpp | 2 +- .../devicemanagerservice/src/requestauth/auth_manager.cpp | 2 +- .../devicemanagerservice/src/requestauth/request_session.cpp | 2 +- .../devicemanagerservice/src/requestauth/response_session.cpp | 2 +- .../devicemanagerservice/src/softbus/softbus_adapter.cpp | 2 +- .../devicemanagerservice/src/softbus/softbus_session.cpp | 2 +- ext/mini/services/devicemanagerservice/src/timer/dm_timer.cpp | 2 +- ext/mini/test/BUILD.gn | 2 +- ext/mini/test/unittest/BUILD.gn | 2 +- ext/mini/test/unittest/device_manager_impl_test.cpp | 2 +- ext/mini/test/unittest/device_manager_impl_test.h | 2 +- ext/mini/test/unittest/mock/mock_ipc_client_proxy.h | 2 +- ext/mini/utils/BUILD.gn | 2 +- ext/mini/utils/include/anonymous_string.h | 2 +- ext/mini/utils/include/cipher/encrypt_utils.h | 2 +- ext/mini/utils/include/ipc/lite/ipc_cmd_register.h | 2 +- ext/mini/utils/include/ipc/standard/ipc_cmd_register.h | 2 +- ext/mini/utils/include/log/dm_log.h | 2 +- ext/mini/utils/src/anonymous_string.cpp | 2 +- ext/mini/utils/src/cipher/encrypt_utils.cpp | 2 +- ext/mini/utils/src/ipc/lite/ipc_cmd_register.cpp | 2 +- ext/mini/utils/src/ipc/standard/ipc_cmd_register.cpp | 2 +- ext/mini/utils/src/log/dm_log.cpp | 2 +- ext/no_interaction_auth/BUILD.gn | 2 +- ext/no_interaction_auth/include/ability/dm_ability_manager.h | 2 +- ext/no_interaction_auth/include/no_interaction_auth.h | 2 +- ext/no_interaction_auth/src/ability/lite/dm_ability_manager.cpp | 2 +- .../src/ability/standard/dm_ability_manager.cpp | 2 +- ext/no_interaction_auth/src/no_interaction_auth.cpp | 2 +- ext/pin_auth/BUILD.gn | 2 +- ext/pin_auth/include/ability/dm_ability_manager.h | 2 +- ext/pin_auth/include/pin_auth.h | 2 +- ext/pin_auth/include/pin_auth_ui.h | 2 +- ext/pin_auth/input_pin_dialog/dialog_ui/js/BUILD.gn | 2 +- ext/pin_auth/show_pin_dialog/dialog_ui/js/BUILD.gn | 2 +- ext/pin_auth/show_pin_dialog/dialog_ui/js/pages/index/index.hml | 2 +- ext/pin_auth/src/ability/lite/dm_ability_manager.cpp | 2 +- ext/pin_auth/src/ability/standard/dm_ability_manager.cpp | 2 +- ext/pin_auth/src/pin_auth.cpp | 2 +- ext/pin_auth/src/pin_auth_ui.cpp | 2 +- ext/profile/BUILD.gn | 2 +- ext/profile/include/device_profile_adapter.h | 2 +- ext/profile/include/profile_connector.h | 2 +- ext/profile/include/profile_connector_callback.h | 2 +- ext/profile/src/device_profile_adapter.cpp | 2 +- ext/profile/src/profile_connector.cpp | 2 +- interfaces/inner_kits/native_cpp/BUILD.gn | 2 +- interfaces/inner_kits/native_cpp/include/device_manager.h | 2 +- .../inner_kits/native_cpp/include/device_manager_callback.h | 2 +- interfaces/inner_kits/native_cpp/include/device_manager_impl.h | 2 +- interfaces/inner_kits/native_cpp/include/dm_app_image_info.h | 2 +- interfaces/inner_kits/native_cpp/include/dm_device_info.h | 2 +- interfaces/inner_kits/native_cpp/include/dm_subscribe_info.h | 2 +- interfaces/inner_kits/native_cpp/include/ipc/ipc_client.h | 2 +- interfaces/inner_kits/native_cpp/include/ipc/ipc_client_proxy.h | 2 +- .../inner_kits/native_cpp/include/ipc/lite/ipc_client_manager.h | 2 +- .../native_cpp/include/ipc/lite/ipc_client_server_proxy.h | 2 +- .../inner_kits/native_cpp/include/ipc/lite/ipc_client_stub.h | 2 +- .../native_cpp/include/ipc/standard/ipc_client_manager.h | 2 +- .../native_cpp/include/ipc/standard/ipc_client_server_proxy.h | 2 +- .../native_cpp/include/ipc/standard/ipc_client_stub.h | 2 +- .../native_cpp/include/ipc/standard/ipc_remote_broker.h | 2 +- .../native_cpp/include/notify/device_manager_notify.h | 2 +- interfaces/inner_kits/native_cpp/src/device_manager.cpp | 2 +- interfaces/inner_kits/native_cpp/src/device_manager_impl.cpp | 2 +- interfaces/inner_kits/native_cpp/src/ipc/ipc_client_proxy.cpp | 2 +- .../inner_kits/native_cpp/src/ipc/lite/ipc_client_manager.cpp | 2 +- .../native_cpp/src/ipc/lite/ipc_client_server_proxy.cpp | 2 +- .../inner_kits/native_cpp/src/ipc/lite/ipc_client_stub.cpp | 2 +- .../inner_kits/native_cpp/src/ipc/lite/ipc_cmd_parser.cpp | 2 +- .../native_cpp/src/ipc/standard/ipc_client_manager.cpp | 2 +- .../native_cpp/src/ipc/standard/ipc_client_server_proxy.cpp | 2 +- .../inner_kits/native_cpp/src/ipc/standard/ipc_client_stub.cpp | 2 +- .../inner_kits/native_cpp/src/ipc/standard/ipc_cmd_parser.cpp | 2 +- .../inner_kits/native_cpp/src/notify/device_manager_notify.cpp | 2 +- interfaces/kits/BUILD.gn | 2 +- interfaces/kits/js/BUILD.gn | 2 +- interfaces/kits/js/include/dm_native_event.h | 2 +- interfaces/kits/js/include/native_devicemanager_js.h | 2 +- interfaces/kits/js/src/dm_native_event.cpp | 2 +- interfaces/kits/js/src/native_devicemanager_js.cpp | 2 +- sa_profile/4802.xml | 2 +- sa_profile/BUILD.gn | 2 +- services/devicemanagerservice/BUILD.gn | 2 +- .../devicemanagerservice/include/ability/dm_ability_manager.h | 2 +- services/devicemanagerservice/include/adapter/crypto_adapter.h | 2 +- .../devicemanagerservice/include/adapter/decision_adapter.h | 2 +- .../devicemanagerservice/include/adapter/dm_adapter_manager.h | 2 +- services/devicemanagerservice/include/adapter/profile_adapter.h | 2 +- .../include/authentication/auth_message_processor.h | 2 +- .../include/authentication/auth_request_state.h | 2 +- .../include/authentication/auth_response_state.h | 2 +- services/devicemanagerservice/include/authentication/auth_ui.h | 2 +- .../include/authentication/authentication.h | 2 +- .../include/authentication/dm_auth_manager.h | 2 +- .../devicemanagerservice/include/config/dm_config_manager.h | 2 +- services/devicemanagerservice/include/config/json_config.h | 2 +- .../include/dependency/commonevent/dm_common_event_manager.h | 2 +- .../include/dependency/hichain/hichain_connector.h | 2 +- .../include/dependency/hichain/hichain_connector_callback.h | 2 +- .../include/dependency/multipleuser/multiple_user_connector.h | 2 +- .../include/dependency/softbus/softbus_connector.h | 2 +- .../include/dependency/softbus/softbus_discovery_callback.h | 2 +- .../include/dependency/softbus/softbus_session.h | 2 +- .../include/dependency/softbus/softbus_session_callback.h | 2 +- .../include/dependency/softbus/softbus_state_callback.h | 2 +- .../devicemanagerservice/include/dependency/timer/dm_timer.h | 2 +- services/devicemanagerservice/include/device_manager_service.h | 2 +- .../include/device_manager_service_listener.h | 2 +- .../include/deviceinfo/dm_device_info_manager.h | 2 +- .../include/devicestate/dm_device_state_manager.h | 2 +- .../include/discovery/dm_discovery_manager.h | 2 +- .../devicemanagerservice/include/ipc/lite/ipc_server_listener.h | 2 +- .../include/ipc/lite/ipc_server_listenermgr.h | 2 +- .../devicemanagerservice/include/ipc/lite/ipc_server_stub.h | 2 +- .../include/ipc/standard/ipc_server_client_proxy.h | 2 +- .../include/ipc/standard/ipc_server_listener.h | 2 +- .../devicemanagerservice/include/ipc/standard/ipc_server_stub.h | 2 +- .../src/ability/lite/dm_ability_manager.cpp | 2 +- .../src/ability/standard/dm_ability_manager.cpp | 2 +- .../src/adapter/lite/dm_adapter_manager.cpp | 2 +- .../src/adapter/standard/dm_adapter_manager.cpp | 2 +- .../src/authentication/auth_message_processor.cpp | 2 +- .../src/authentication/auth_request_state.cpp | 2 +- .../src/authentication/auth_response_state.cpp | 2 +- services/devicemanagerservice/src/authentication/auth_ui.cpp | 2 +- .../devicemanagerservice/src/authentication/dm_auth_manager.cpp | 2 +- services/devicemanagerservice/src/config/dm_config_manager.cpp | 2 +- .../src/dependency/commonevent/dm_common_event_manager.cpp | 2 +- .../src/dependency/hichain/hichain_connector.cpp | 2 +- .../src/dependency/multipleuser/multiple_user_connector.cpp | 2 +- .../src/dependency/softbus/softbus_connector.cpp | 2 +- .../src/dependency/softbus/softbus_session.cpp | 2 +- services/devicemanagerservice/src/dependency/timer/dm_timer.cpp | 2 +- services/devicemanagerservice/src/device_manager_service.cpp | 2 +- .../src/device_manager_service_listener.cpp | 2 +- .../src/deviceinfo/dm_device_info_manager.cpp | 2 +- .../src/devicestate/dm_device_state_manager.cpp | 2 +- .../devicemanagerservice/src/discovery/dm_discovery_manager.cpp | 2 +- services/devicemanagerservice/src/ipc/lite/ipc_cmd_parser.cpp | 2 +- .../devicemanagerservice/src/ipc/lite/ipc_server_listener.cpp | 2 +- .../src/ipc/lite/ipc_server_listenermgr.cpp | 2 +- services/devicemanagerservice/src/ipc/lite/ipc_server_main.cpp | 2 +- services/devicemanagerservice/src/ipc/lite/ipc_server_stub.cpp | 2 +- .../devicemanagerservice/src/ipc/standard/ipc_cmd_parser.cpp | 2 +- .../src/ipc/standard/ipc_server_client_proxy.cpp | 2 +- .../src/ipc/standard/ipc_server_listener.cpp | 2 +- .../devicemanagerservice/src/ipc/standard/ipc_server_stub.cpp | 2 +- test/BUILD.gn | 2 +- test/unittest/BUILD.gn | 2 +- test/unittest/UTTest_auth_message_processor.cpp | 2 +- test/unittest/UTTest_auth_message_processor.h | 2 +- test/unittest/UTTest_auth_request_state.cpp | 2 +- test/unittest/UTTest_auth_request_state.h | 2 +- test/unittest/UTTest_auth_response_state.cpp | 2 +- test/unittest/UTTest_auth_response_state.h | 2 +- test/unittest/UTTest_device_manager_service.cpp | 2 +- test/unittest/UTTest_device_manager_service.h | 2 +- test/unittest/UTTest_device_manager_service_listener.cpp | 2 +- test/unittest/UTTest_device_manager_service_listener.h | 2 +- test/unittest/UTTest_dm_auth_manager.cpp | 2 +- test/unittest/UTTest_dm_auth_manager.h | 2 +- test/unittest/UTTest_dm_device_info_manager.cpp | 2 +- test/unittest/UTTest_dm_device_info_manager.h | 2 +- test/unittest/UTTest_dm_device_state_manager.cpp | 2 +- test/unittest/UTTest_dm_device_state_manager.h | 2 +- test/unittest/UTTest_dm_discovery_manager.cpp | 2 +- test/unittest/UTTest_dm_discovery_manager.h | 2 +- test/unittest/UTTest_ipc_client_manager.cpp | 2 +- test/unittest/UTTest_ipc_client_manager.h | 2 +- test/unittest/UTTest_ipc_client_proxy.cpp | 2 +- test/unittest/UTTest_ipc_client_proxy.h | 2 +- test/unittest/UTTest_ipc_client_stub.cpp | 2 +- test/unittest/UTTest_ipc_client_stub.h | 2 +- test/unittest/UTTest_ipc_server_client_proxy.cpp | 2 +- test/unittest/UTTest_ipc_server_client_proxy.h | 2 +- test/unittest/UTTest_ipc_server_listener.cpp | 2 +- test/unittest/UTTest_ipc_server_listener.h | 2 +- test/unittest/UTTest_ipc_server_stub.cpp | 2 +- test/unittest/UTTest_ipc_server_stub.h | 2 +- test/unittest/UTTest_softbus_connector.cpp | 2 +- test/unittest/UTTest_softbus_connector.h | 2 +- test/unittest/UTTest_softbus_session.cpp | 2 +- test/unittest/UTTest_softbus_session.h | 2 +- test/unittest/auth_request_state.cpp | 2 +- test/unittest/auth_response_state.cpp | 2 +- test/unittest/device_manager_impl_test.cpp | 2 +- test/unittest/device_manager_impl_test.h | 2 +- test/unittest/mock/device_auth.cpp | 2 +- test/unittest/mock/device_auth.h | 2 +- test/unittest/mock/ipc_server_listener.cpp | 2 +- test/unittest/mock/ipc_server_listener.h | 2 +- test/unittest/mock/mock_ipc_client.h | 2 +- test/unittest/mock/mock_ipc_client_manager.h | 2 +- test/unittest/mock/mock_ipc_client_proxy.h | 2 +- test/unittest/mock/parameter.cpp | 2 +- test/unittest/mock/parameter.h | 2 +- test/unittest/mock/session.h | 2 +- test/unittest/mock/softbus_bus_center.cpp | 2 +- utils/BUILD.gn | 2 +- utils/include/dm_anonymous.h | 2 +- utils/include/dm_hash.h | 2 +- utils/include/dm_log.h | 2 +- utils/include/dm_random.h | 2 +- utils/include/ipc/lite/ipc_cmd_register.h | 2 +- utils/include/ipc/standard/ipc_cmd_register.h | 2 +- utils/src/dm_anonymous.cpp | 2 +- utils/src/dm_hash.cpp | 2 +- utils/src/dm_log.cpp | 2 +- utils/src/dm_random.cpp | 2 +- utils/src/ipc/lite/ipc_cmd_register.cpp | 2 +- utils/src/ipc/standard/ipc_cmd_register.cpp | 2 +- 329 files changed, 329 insertions(+), 329 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 7e5dfc76c..310df489d 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (c) 2022 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 diff --git a/OAT.xml b/OAT.xml index 02e212b1f..54fc1b978 100644 --- a/OAT.xml +++ b/OAT.xml @@ -1,5 +1,5 @@ -