117fd14ceSopenharmony_ci/* 217fd14ceSopenharmony_ci * Copyright (C) 2021-2023 Huawei Device Co., Ltd. 317fd14ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 417fd14ceSopenharmony_ci * you may not use this file except in compliance with the License. 517fd14ceSopenharmony_ci * You may obtain a copy of the License at 617fd14ceSopenharmony_ci * 717fd14ceSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 817fd14ceSopenharmony_ci * 917fd14ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1017fd14ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1117fd14ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1217fd14ceSopenharmony_ci * See the License for the specific language governing permissions and 1317fd14ceSopenharmony_ci * limitations under the License. 1417fd14ceSopenharmony_ci */ 1517fd14ceSopenharmony_ci 1617fd14ceSopenharmony_ci#include "device_auth.h" 1717fd14ceSopenharmony_ci 1817fd14ceSopenharmony_ci#include "account_auth_plugin_proxy.h" 1917fd14ceSopenharmony_ci#include "alg_loader.h" 2017fd14ceSopenharmony_ci#include "callback_manager.h" 2117fd14ceSopenharmony_ci#include "channel_manager.h" 2217fd14ceSopenharmony_ci#include "common_defs.h" 2317fd14ceSopenharmony_ci#include "cred_manager.h" 2417fd14ceSopenharmony_ci#include "data_manager.h" 2517fd14ceSopenharmony_ci#include "dev_auth_module_manager.h" 2617fd14ceSopenharmony_ci#include "dev_session_mgr.h" 2717fd14ceSopenharmony_ci#include "group_manager.h" 2817fd14ceSopenharmony_ci#include "group_operation_common.h" 2917fd14ceSopenharmony_ci#include "hc_dev_info.h" 3017fd14ceSopenharmony_ci#include "hc_init_protection.h" 3117fd14ceSopenharmony_ci#include "hc_log.h" 3217fd14ceSopenharmony_ci#include "hc_time.h" 3317fd14ceSopenharmony_ci#include "hisysevent_adapter.h" 3417fd14ceSopenharmony_ci#include "hitrace_adapter.h" 3517fd14ceSopenharmony_ci#include "json_utils.h" 3617fd14ceSopenharmony_ci#include "key_manager.h" 3717fd14ceSopenharmony_ci#include "os_account_adapter.h" 3817fd14ceSopenharmony_ci#include "plugin_adapter.h" 3917fd14ceSopenharmony_ci#include "pseudonym_manager.h" 4017fd14ceSopenharmony_ci#include "task_manager.h" 4117fd14ceSopenharmony_ci#include "performance_dumper.h" 4217fd14ceSopenharmony_ci#include "identity_manager.h" 4317fd14ceSopenharmony_ci#include "group_auth_manager.h" 4417fd14ceSopenharmony_ci 4517fd14ceSopenharmony_cistatic GroupAuthManager *g_groupAuthManager = NULL; 4617fd14ceSopenharmony_cistatic DeviceGroupManager *g_groupManagerInstance = NULL; 4717fd14ceSopenharmony_ci 4817fd14ceSopenharmony_citypedef struct { 4917fd14ceSopenharmony_ci HcTaskBase base; 5017fd14ceSopenharmony_ci int64_t sessionId; 5117fd14ceSopenharmony_ci} StartSessionTask; 5217fd14ceSopenharmony_ci 5317fd14ceSopenharmony_citypedef struct { 5417fd14ceSopenharmony_ci HcTaskBase base; 5517fd14ceSopenharmony_ci int64_t sessionId; 5617fd14ceSopenharmony_ci CJson *receivedMsg; 5717fd14ceSopenharmony_ci} ProcSessionTask; 5817fd14ceSopenharmony_ci 5917fd14ceSopenharmony_citypedef struct { 6017fd14ceSopenharmony_ci HcTaskBase base; 6117fd14ceSopenharmony_ci int64_t requestId; 6217fd14ceSopenharmony_ci} SoftBusTask; 6317fd14ceSopenharmony_ci 6417fd14ceSopenharmony_cistatic int32_t IsDeviceIdHashMatch(const char *udid, const char *subUdidHash) 6517fd14ceSopenharmony_ci{ 6617fd14ceSopenharmony_ci Uint8Buff udidBuf = { (uint8_t *)udid, (uint32_t)HcStrlen(udid) }; 6717fd14ceSopenharmony_ci uint8_t udidHashByte[SHA256_LEN] = { 0 }; 6817fd14ceSopenharmony_ci Uint8Buff udidHashBuf = { udidHashByte, sizeof(udidHashByte) }; 6917fd14ceSopenharmony_ci int32_t ret = GetLoaderInstance()->sha256(&udidBuf, &udidHashBuf); 7017fd14ceSopenharmony_ci if (ret != HC_SUCCESS) { 7117fd14ceSopenharmony_ci LOGE("sha256 failed, ret:%d", ret); 7217fd14ceSopenharmony_ci return ret; 7317fd14ceSopenharmony_ci } 7417fd14ceSopenharmony_ci uint32_t udidHashLen = SHA256_LEN * BYTE_TO_HEX_OPER_LENGTH + 1; 7517fd14ceSopenharmony_ci char *udidHash = (char *)HcMalloc(udidHashLen, 0); 7617fd14ceSopenharmony_ci if (udidHash == NULL) { 7717fd14ceSopenharmony_ci LOGE("malloc udidHash string failed"); 7817fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 7917fd14ceSopenharmony_ci } 8017fd14ceSopenharmony_ci ret = ByteToHexString(udidHashByte, SHA256_LEN, udidHash, udidHashLen); 8117fd14ceSopenharmony_ci if (ret != HC_SUCCESS) { 8217fd14ceSopenharmony_ci LOGE("Byte to hexString failed, ret:%d", ret); 8317fd14ceSopenharmony_ci HcFree(udidHash); 8417fd14ceSopenharmony_ci return ret; 8517fd14ceSopenharmony_ci } 8617fd14ceSopenharmony_ci char *subUdidHashUpper = NULL; 8717fd14ceSopenharmony_ci ret = ToUpperCase(subUdidHash, &subUdidHashUpper); 8817fd14ceSopenharmony_ci if (ret != HC_SUCCESS) { 8917fd14ceSopenharmony_ci LOGE("Failed to convert the input sub udid hash to upper case!"); 9017fd14ceSopenharmony_ci HcFree(udidHash); 9117fd14ceSopenharmony_ci return ret; 9217fd14ceSopenharmony_ci } 9317fd14ceSopenharmony_ci if (strstr((const char *)udidHash, subUdidHashUpper) != NULL) { 9417fd14ceSopenharmony_ci LOGI("udid hash is match!"); 9517fd14ceSopenharmony_ci HcFree(udidHash); 9617fd14ceSopenharmony_ci HcFree(subUdidHashUpper); 9717fd14ceSopenharmony_ci return HC_SUCCESS; 9817fd14ceSopenharmony_ci } 9917fd14ceSopenharmony_ci HcFree(udidHash); 10017fd14ceSopenharmony_ci HcFree(subUdidHashUpper); 10117fd14ceSopenharmony_ci return HC_ERROR; 10217fd14ceSopenharmony_ci} 10317fd14ceSopenharmony_ci 10417fd14ceSopenharmony_cistatic const char *GetUdidByGroup(int32_t osAccountId, const char *groupId, const char *deviceIdHash) 10517fd14ceSopenharmony_ci{ 10617fd14ceSopenharmony_ci uint32_t index; 10717fd14ceSopenharmony_ci TrustedDeviceEntry **deviceEntry = NULL; 10817fd14ceSopenharmony_ci DeviceEntryVec deviceEntryVec = CREATE_HC_VECTOR(DeviceEntryVec); 10917fd14ceSopenharmony_ci QueryDeviceParams params = InitQueryDeviceParams(); 11017fd14ceSopenharmony_ci params.groupId = groupId; 11117fd14ceSopenharmony_ci if (QueryDevices(osAccountId, ¶ms, &deviceEntryVec) != HC_SUCCESS) { 11217fd14ceSopenharmony_ci LOGE("query trusted devices failed!"); 11317fd14ceSopenharmony_ci ClearDeviceEntryVec(&deviceEntryVec); 11417fd14ceSopenharmony_ci return NULL; 11517fd14ceSopenharmony_ci } 11617fd14ceSopenharmony_ci FOR_EACH_HC_VECTOR(deviceEntryVec, index, deviceEntry) { 11717fd14ceSopenharmony_ci const char *udid = StringGet(&(*deviceEntry)->udid); 11817fd14ceSopenharmony_ci if (IsDeviceIdHashMatch(udid, deviceIdHash) == HC_SUCCESS) { 11917fd14ceSopenharmony_ci ClearDeviceEntryVec(&deviceEntryVec); 12017fd14ceSopenharmony_ci return udid; 12117fd14ceSopenharmony_ci } 12217fd14ceSopenharmony_ci continue; 12317fd14ceSopenharmony_ci } 12417fd14ceSopenharmony_ci ClearDeviceEntryVec(&deviceEntryVec); 12517fd14ceSopenharmony_ci return NULL; 12617fd14ceSopenharmony_ci} 12717fd14ceSopenharmony_ci 12817fd14ceSopenharmony_cistatic const char *GetDeviceIdByUdidHash(int32_t osAccountId, const char *deviceIdHash) 12917fd14ceSopenharmony_ci{ 13017fd14ceSopenharmony_ci if (deviceIdHash == NULL) { 13117fd14ceSopenharmony_ci LOGE("deviceIdHash is null"); 13217fd14ceSopenharmony_ci return NULL; 13317fd14ceSopenharmony_ci } 13417fd14ceSopenharmony_ci QueryGroupParams queryParams = InitQueryGroupParams(); 13517fd14ceSopenharmony_ci GroupEntryVec groupEntryVec = CreateGroupEntryVec(); 13617fd14ceSopenharmony_ci int32_t ret = QueryGroups(osAccountId, &queryParams, &groupEntryVec); 13717fd14ceSopenharmony_ci if (ret != HC_SUCCESS) { 13817fd14ceSopenharmony_ci LOGE("Failed to query groups!"); 13917fd14ceSopenharmony_ci ClearGroupEntryVec(&groupEntryVec); 14017fd14ceSopenharmony_ci return NULL; 14117fd14ceSopenharmony_ci } 14217fd14ceSopenharmony_ci uint32_t index; 14317fd14ceSopenharmony_ci TrustedGroupEntry **ptr = NULL; 14417fd14ceSopenharmony_ci FOR_EACH_HC_VECTOR(groupEntryVec, index, ptr) { 14517fd14ceSopenharmony_ci const TrustedGroupEntry *groupEntry = (const TrustedGroupEntry *)(*ptr); 14617fd14ceSopenharmony_ci const char *groupId = StringGet(&(groupEntry->id)); 14717fd14ceSopenharmony_ci if (groupId == NULL) { 14817fd14ceSopenharmony_ci continue; 14917fd14ceSopenharmony_ci } 15017fd14ceSopenharmony_ci const char *udid = GetUdidByGroup(osAccountId, groupId, deviceIdHash); 15117fd14ceSopenharmony_ci if (udid != NULL) { 15217fd14ceSopenharmony_ci ClearGroupEntryVec(&groupEntryVec); 15317fd14ceSopenharmony_ci return udid; 15417fd14ceSopenharmony_ci } 15517fd14ceSopenharmony_ci } 15617fd14ceSopenharmony_ci ClearGroupEntryVec(&groupEntryVec); 15717fd14ceSopenharmony_ci return NULL; 15817fd14ceSopenharmony_ci} 15917fd14ceSopenharmony_ci 16017fd14ceSopenharmony_cistatic const char *GetPeerUdidFromJson(int32_t osAccountId, const CJson *in) 16117fd14ceSopenharmony_ci{ 16217fd14ceSopenharmony_ci const char *peerConnDeviceId = GetStringFromJson(in, FIELD_PEER_CONN_DEVICE_ID); 16317fd14ceSopenharmony_ci if (peerConnDeviceId == NULL) { 16417fd14ceSopenharmony_ci LOGI("get peerConnDeviceId from json fail."); 16517fd14ceSopenharmony_ci return NULL; 16617fd14ceSopenharmony_ci } 16717fd14ceSopenharmony_ci bool isUdidHash = false; 16817fd14ceSopenharmony_ci (void)GetBoolFromJson(in, FIELD_IS_UDID_HASH, &isUdidHash); 16917fd14ceSopenharmony_ci if (isUdidHash) { 17017fd14ceSopenharmony_ci const char *deviceId = GetDeviceIdByUdidHash(osAccountId, peerConnDeviceId); 17117fd14ceSopenharmony_ci return (deviceId == NULL ? peerConnDeviceId : deviceId); 17217fd14ceSopenharmony_ci } 17317fd14ceSopenharmony_ci return peerConnDeviceId; 17417fd14ceSopenharmony_ci} 17517fd14ceSopenharmony_ci 17617fd14ceSopenharmony_cistatic int32_t AddGroupInfoToContextByInput(const CJson *receivedMsg, CJson *context) 17717fd14ceSopenharmony_ci{ 17817fd14ceSopenharmony_ci const char *groupId = GetStringFromJson(receivedMsg, FIELD_GROUP_ID); 17917fd14ceSopenharmony_ci if (groupId == NULL) { 18017fd14ceSopenharmony_ci LOGE("get groupId from json fail."); 18117fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 18217fd14ceSopenharmony_ci } 18317fd14ceSopenharmony_ci const char *groupName = GetStringFromJson(receivedMsg, FIELD_GROUP_NAME); 18417fd14ceSopenharmony_ci if (groupName == NULL) { 18517fd14ceSopenharmony_ci LOGE("Failed to get groupName from jsonParams!"); 18617fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 18717fd14ceSopenharmony_ci } 18817fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_GROUP_ID, groupId) != HC_SUCCESS) { 18917fd14ceSopenharmony_ci LOGE("Failed to add groupId to json!"); 19017fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 19117fd14ceSopenharmony_ci } 19217fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_GROUP_TYPE, PEER_TO_PEER_GROUP) != HC_SUCCESS) { 19317fd14ceSopenharmony_ci LOGE("Failed to add groupType to json!"); 19417fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 19517fd14ceSopenharmony_ci } 19617fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_GROUP_NAME, groupName) != HC_SUCCESS) { 19717fd14ceSopenharmony_ci LOGE("Failed to add groupName to json!"); 19817fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 19917fd14ceSopenharmony_ci } 20017fd14ceSopenharmony_ci return HC_SUCCESS; 20117fd14ceSopenharmony_ci} 20217fd14ceSopenharmony_ci 20317fd14ceSopenharmony_cistatic int32_t AddDevInfoToContextByInput(CJson *context) 20417fd14ceSopenharmony_ci{ 20517fd14ceSopenharmony_ci int32_t userType = DEVICE_TYPE_ACCESSORY; 20617fd14ceSopenharmony_ci (void)GetIntFromJson(context, FIELD_USER_TYPE, &userType); 20717fd14ceSopenharmony_ci const char *authId = GetStringFromJson(context, FIELD_DEVICE_ID); 20817fd14ceSopenharmony_ci char udid[INPUT_UDID_LEN] = { 0 }; 20917fd14ceSopenharmony_ci if (authId == NULL) { 21017fd14ceSopenharmony_ci LOGD("No authId is found. The default value is udid!"); 21117fd14ceSopenharmony_ci int32_t res = HcGetUdid((uint8_t *)udid, INPUT_UDID_LEN); 21217fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 21317fd14ceSopenharmony_ci LOGE("Failed to get local udid! res: %d", res); 21417fd14ceSopenharmony_ci return HC_ERR_DB; 21517fd14ceSopenharmony_ci } 21617fd14ceSopenharmony_ci authId = udid; 21717fd14ceSopenharmony_ci } 21817fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_AUTH_ID, authId) != HC_SUCCESS) { 21917fd14ceSopenharmony_ci LOGE("Failed to add authId to params!"); 22017fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 22117fd14ceSopenharmony_ci } 22217fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_USER_TYPE, userType) != HC_SUCCESS) { 22317fd14ceSopenharmony_ci LOGE("Failed to add userType to params!"); 22417fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 22517fd14ceSopenharmony_ci } 22617fd14ceSopenharmony_ci return HC_SUCCESS; 22717fd14ceSopenharmony_ci} 22817fd14ceSopenharmony_ci 22917fd14ceSopenharmony_cistatic int32_t AddGroupInfoToContextByDb(const char *groupId, CJson *context) 23017fd14ceSopenharmony_ci{ 23117fd14ceSopenharmony_ci int32_t osAccountId; 23217fd14ceSopenharmony_ci if (GetIntFromJson(context, FIELD_OS_ACCOUNT_ID, &osAccountId) != HC_SUCCESS) { 23317fd14ceSopenharmony_ci LOGE("get osAccountId from json fail."); 23417fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 23517fd14ceSopenharmony_ci } 23617fd14ceSopenharmony_ci TrustedGroupEntry *entry = GetGroupEntryById(osAccountId, groupId); 23717fd14ceSopenharmony_ci if (entry == NULL) { 23817fd14ceSopenharmony_ci LOGE("Failed to get groupEntry from db!"); 23917fd14ceSopenharmony_ci return HC_ERR_DB; 24017fd14ceSopenharmony_ci } 24117fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_GROUP_ID, StringGet(&entry->id)) != HC_SUCCESS) { 24217fd14ceSopenharmony_ci LOGE("Failed to add groupId to json!"); 24317fd14ceSopenharmony_ci DestroyGroupEntry(entry); 24417fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 24517fd14ceSopenharmony_ci } 24617fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_GROUP_TYPE, entry->type) != HC_SUCCESS) { 24717fd14ceSopenharmony_ci LOGE("Failed to add groupType to json!"); 24817fd14ceSopenharmony_ci DestroyGroupEntry(entry); 24917fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 25017fd14ceSopenharmony_ci } 25117fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_GROUP_NAME, StringGet(&entry->name)) != HC_SUCCESS) { 25217fd14ceSopenharmony_ci LOGE("Failed to add groupName to json!"); 25317fd14ceSopenharmony_ci DestroyGroupEntry(entry); 25417fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 25517fd14ceSopenharmony_ci } 25617fd14ceSopenharmony_ci DestroyGroupEntry(entry); 25717fd14ceSopenharmony_ci return HC_SUCCESS; 25817fd14ceSopenharmony_ci} 25917fd14ceSopenharmony_ci 26017fd14ceSopenharmony_cistatic int32_t AddDevInfoToContextByDb(const char *groupId, CJson *context) 26117fd14ceSopenharmony_ci{ 26217fd14ceSopenharmony_ci int32_t osAccountId; 26317fd14ceSopenharmony_ci if (GetIntFromJson(context, FIELD_OS_ACCOUNT_ID, &osAccountId) != HC_SUCCESS) { 26417fd14ceSopenharmony_ci LOGE("get osAccountId from json fail."); 26517fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 26617fd14ceSopenharmony_ci } 26717fd14ceSopenharmony_ci char udid[INPUT_UDID_LEN] = { 0 }; 26817fd14ceSopenharmony_ci int32_t res = HcGetUdid((uint8_t *)udid, INPUT_UDID_LEN); 26917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 27017fd14ceSopenharmony_ci LOGE("Failed to get local udid! res: %d", res); 27117fd14ceSopenharmony_ci return HC_ERR_DB; 27217fd14ceSopenharmony_ci } 27317fd14ceSopenharmony_ci TrustedDeviceEntry *devAuthParams = CreateDeviceEntry(); 27417fd14ceSopenharmony_ci if (devAuthParams == NULL) { 27517fd14ceSopenharmony_ci LOGE("Failed to allocate devEntry memory!"); 27617fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 27717fd14ceSopenharmony_ci } 27817fd14ceSopenharmony_ci if (GetTrustedDevInfoById(osAccountId, udid, true, groupId, devAuthParams) != HC_SUCCESS) { 27917fd14ceSopenharmony_ci LOGE("Failed to obtain the local device information from the database!"); 28017fd14ceSopenharmony_ci DestroyDeviceEntry(devAuthParams); 28117fd14ceSopenharmony_ci return HC_ERR_DB; 28217fd14ceSopenharmony_ci } 28317fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_AUTH_ID, StringGet(&devAuthParams->authId)) != HC_SUCCESS) { 28417fd14ceSopenharmony_ci LOGE("Failed to add authId to params!"); 28517fd14ceSopenharmony_ci DestroyDeviceEntry(devAuthParams); 28617fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 28717fd14ceSopenharmony_ci } 28817fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_USER_TYPE, devAuthParams->devType) != HC_SUCCESS) { 28917fd14ceSopenharmony_ci LOGE("Failed to add userType to params!"); 29017fd14ceSopenharmony_ci DestroyDeviceEntry(devAuthParams); 29117fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 29217fd14ceSopenharmony_ci } 29317fd14ceSopenharmony_ci DestroyDeviceEntry(devAuthParams); 29417fd14ceSopenharmony_ci return HC_SUCCESS; 29517fd14ceSopenharmony_ci} 29617fd14ceSopenharmony_ci 29717fd14ceSopenharmony_cistatic int32_t GetOpCodeFromContext(const CJson *context) 29817fd14ceSopenharmony_ci{ 29917fd14ceSopenharmony_ci bool isAdmin = true; 30017fd14ceSopenharmony_ci (void)GetBoolFromJson(context, FIELD_IS_ADMIN, &isAdmin); 30117fd14ceSopenharmony_ci return isAdmin ? MEMBER_INVITE : MEMBER_JOIN; 30217fd14ceSopenharmony_ci} 30317fd14ceSopenharmony_ci 30417fd14ceSopenharmony_cistatic int32_t AddClientReqInfoToContext(int32_t osAccountId, int64_t requestId, const char *appId, CJson *context) 30517fd14ceSopenharmony_ci{ 30617fd14ceSopenharmony_ci const char *groupId = GetStringFromJson(context, FIELD_GROUP_ID); 30717fd14ceSopenharmony_ci if (groupId == NULL) { 30817fd14ceSopenharmony_ci LOGE("get groupId from json fail."); 30917fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 31017fd14ceSopenharmony_ci } 31117fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_BIND, true) != HC_SUCCESS) { 31217fd14ceSopenharmony_ci LOGE("add isBind to context fail."); 31317fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 31417fd14ceSopenharmony_ci } 31517fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_CLIENT, true) != HC_SUCCESS) { 31617fd14ceSopenharmony_ci LOGE("add isClient to context fail."); 31717fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 31817fd14ceSopenharmony_ci } 31917fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OS_ACCOUNT_ID, osAccountId) != HC_SUCCESS) { 32017fd14ceSopenharmony_ci LOGE("add osAccountId to context fail."); 32117fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 32217fd14ceSopenharmony_ci } 32317fd14ceSopenharmony_ci if (AddInt64StringToJson(context, FIELD_REQUEST_ID, requestId) != HC_SUCCESS) { 32417fd14ceSopenharmony_ci LOGE("add requestId to context fail."); 32517fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 32617fd14ceSopenharmony_ci } 32717fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_APP_ID, appId) != HC_SUCCESS) { 32817fd14ceSopenharmony_ci LOGE("add appId to context fail."); 32917fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 33017fd14ceSopenharmony_ci } 33117fd14ceSopenharmony_ci int32_t opCode = GetOpCodeFromContext(context); 33217fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OPERATION_CODE, opCode) != HC_SUCCESS) { 33317fd14ceSopenharmony_ci LOGE("add operationCode to context fail."); 33417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 33517fd14ceSopenharmony_ci } 33617fd14ceSopenharmony_ci if (opCode == MEMBER_JOIN) { 33717fd14ceSopenharmony_ci return AddDevInfoToContextByInput(context); 33817fd14ceSopenharmony_ci } 33917fd14ceSopenharmony_ci int32_t res = AddDevInfoToContextByDb(groupId, context); 34017fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 34117fd14ceSopenharmony_ci return res; 34217fd14ceSopenharmony_ci } 34317fd14ceSopenharmony_ci return AddGroupInfoToContextByDb(groupId, context); 34417fd14ceSopenharmony_ci} 34517fd14ceSopenharmony_ci 34617fd14ceSopenharmony_cistatic int32_t AddChannelInfoToContext(int32_t channelType, int64_t channelId, CJson *context) 34717fd14ceSopenharmony_ci{ 34817fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_CHANNEL_TYPE, channelType) != HC_SUCCESS) { 34917fd14ceSopenharmony_ci LOGE("add channelType to context fail."); 35017fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 35117fd14ceSopenharmony_ci } 35217fd14ceSopenharmony_ci if (AddByteToJson(context, FIELD_CHANNEL_ID, (uint8_t *)&channelId, sizeof(int64_t)) != HC_SUCCESS) { 35317fd14ceSopenharmony_ci LOGE("add channelId to context fail."); 35417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 35517fd14ceSopenharmony_ci } 35617fd14ceSopenharmony_ci return HC_SUCCESS; 35717fd14ceSopenharmony_ci} 35817fd14ceSopenharmony_ci 35917fd14ceSopenharmony_cistatic int32_t BuildClientBindContext(int32_t osAccountId, int64_t requestId, const char *appId, 36017fd14ceSopenharmony_ci const DeviceAuthCallback *callback, CJson *context) 36117fd14ceSopenharmony_ci{ 36217fd14ceSopenharmony_ci int32_t res = AddClientReqInfoToContext(osAccountId, requestId, appId, context); 36317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 36417fd14ceSopenharmony_ci return res; 36517fd14ceSopenharmony_ci } 36617fd14ceSopenharmony_ci ChannelType channelType = GetChannelType(callback, context); 36717fd14ceSopenharmony_ci int64_t channelId; 36817fd14ceSopenharmony_ci res = OpenChannel(channelType, context, requestId, &channelId); 36917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 37017fd14ceSopenharmony_ci LOGE("open channel fail."); 37117fd14ceSopenharmony_ci return res; 37217fd14ceSopenharmony_ci } 37317fd14ceSopenharmony_ci return AddChannelInfoToContext(channelType, channelId, context); 37417fd14ceSopenharmony_ci} 37517fd14ceSopenharmony_ci 37617fd14ceSopenharmony_cistatic void DoStartSession(HcTaskBase *task) 37717fd14ceSopenharmony_ci{ 37817fd14ceSopenharmony_ci LOGI("start session task begin."); 37917fd14ceSopenharmony_ci if (task == NULL) { 38017fd14ceSopenharmony_ci LOGE("The input task is NULL, can't start session!"); 38117fd14ceSopenharmony_ci return; 38217fd14ceSopenharmony_ci } 38317fd14ceSopenharmony_ci StartSessionTask *realTask = (StartSessionTask *)task; 38417fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 38517fd14ceSopenharmony_ci SET_TRACE_ID(realTask->sessionId); 38617fd14ceSopenharmony_ci int32_t res = StartDevSession(realTask->sessionId); 38717fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 38817fd14ceSopenharmony_ci LOGE("start session fail.[Res]: %d", res); 38917fd14ceSopenharmony_ci CloseDevSession(realTask->sessionId); 39017fd14ceSopenharmony_ci } 39117fd14ceSopenharmony_ci} 39217fd14ceSopenharmony_ci 39317fd14ceSopenharmony_cistatic void DoProcSession(HcTaskBase *task) 39417fd14ceSopenharmony_ci{ 39517fd14ceSopenharmony_ci LOGI("proc session task begin."); 39617fd14ceSopenharmony_ci if (task == NULL) { 39717fd14ceSopenharmony_ci LOGE("The input task is NULL, can't start session!"); 39817fd14ceSopenharmony_ci return; 39917fd14ceSopenharmony_ci } 40017fd14ceSopenharmony_ci ProcSessionTask *realTask = (ProcSessionTask *)task; 40117fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 40217fd14ceSopenharmony_ci SET_TRACE_ID(realTask->sessionId); 40317fd14ceSopenharmony_ci bool isFinish = false; 40417fd14ceSopenharmony_ci int32_t res = ProcessDevSession(realTask->sessionId, realTask->receivedMsg, &isFinish); 40517fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 40617fd14ceSopenharmony_ci LOGE("ProcessDevSession fail. [Res]: %d", res); 40717fd14ceSopenharmony_ci CloseDevSession(realTask->sessionId); 40817fd14ceSopenharmony_ci return; 40917fd14ceSopenharmony_ci } 41017fd14ceSopenharmony_ci LOGI("ProcessDevSession success. [State]: %s", isFinish ? "FINISH" : "CONTINUE"); 41117fd14ceSopenharmony_ci if (isFinish) { 41217fd14ceSopenharmony_ci CloseDevSession(realTask->sessionId); 41317fd14ceSopenharmony_ci } 41417fd14ceSopenharmony_ci} 41517fd14ceSopenharmony_ci 41617fd14ceSopenharmony_cistatic void InitStartSessionTask(StartSessionTask *task, int64_t sessionId) 41717fd14ceSopenharmony_ci{ 41817fd14ceSopenharmony_ci task->base.doAction = DoStartSession; 41917fd14ceSopenharmony_ci task->base.destroy = NULL; 42017fd14ceSopenharmony_ci task->sessionId = sessionId; 42117fd14ceSopenharmony_ci} 42217fd14ceSopenharmony_ci 42317fd14ceSopenharmony_cistatic void DestroyProcSessionTask(HcTaskBase *task) 42417fd14ceSopenharmony_ci{ 42517fd14ceSopenharmony_ci ProcSessionTask *realTask = (ProcSessionTask *)task; 42617fd14ceSopenharmony_ci FreeJson(realTask->receivedMsg); 42717fd14ceSopenharmony_ci} 42817fd14ceSopenharmony_ci 42917fd14ceSopenharmony_cistatic void InitProcSessionTask(ProcSessionTask *task, int64_t sessionId, CJson *receivedMsg) 43017fd14ceSopenharmony_ci{ 43117fd14ceSopenharmony_ci task->base.doAction = DoProcSession; 43217fd14ceSopenharmony_ci task->base.destroy = DestroyProcSessionTask; 43317fd14ceSopenharmony_ci task->sessionId = sessionId; 43417fd14ceSopenharmony_ci task->receivedMsg = receivedMsg; 43517fd14ceSopenharmony_ci} 43617fd14ceSopenharmony_ci 43717fd14ceSopenharmony_cistatic int32_t PushStartSessionTask(int64_t sessionId) 43817fd14ceSopenharmony_ci{ 43917fd14ceSopenharmony_ci StartSessionTask *task = (StartSessionTask *)HcMalloc(sizeof(StartSessionTask), 0); 44017fd14ceSopenharmony_ci if (task == NULL) { 44117fd14ceSopenharmony_ci LOGE("Failed to allocate memory for task!"); 44217fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 44317fd14ceSopenharmony_ci } 44417fd14ceSopenharmony_ci InitStartSessionTask(task, sessionId); 44517fd14ceSopenharmony_ci if (PushTask((HcTaskBase*)task) != HC_SUCCESS) { 44617fd14ceSopenharmony_ci LOGE("push start session task fail."); 44717fd14ceSopenharmony_ci HcFree(task); 44817fd14ceSopenharmony_ci return HC_ERR_INIT_TASK_FAIL; 44917fd14ceSopenharmony_ci } 45017fd14ceSopenharmony_ci LOGI("push start session task success."); 45117fd14ceSopenharmony_ci return HC_SUCCESS; 45217fd14ceSopenharmony_ci} 45317fd14ceSopenharmony_ci 45417fd14ceSopenharmony_cistatic int32_t AddOriginDataForPlugin(CJson *receivedMsg, const uint8_t *data) 45517fd14ceSopenharmony_ci{ 45617fd14ceSopenharmony_ci if ((receivedMsg == NULL) || (data == NULL)) { 45717fd14ceSopenharmony_ci LOGE("Invalid params"); 45817fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 45917fd14ceSopenharmony_ci } 46017fd14ceSopenharmony_ci return AddStringToJson(receivedMsg, FIELD_PLUGIN_EXT_DATA, (const char *)data); 46117fd14ceSopenharmony_ci} 46217fd14ceSopenharmony_ci 46317fd14ceSopenharmony_cistatic int32_t PushProcSessionTask(int64_t sessionId, CJson *receivedMsg) 46417fd14ceSopenharmony_ci{ 46517fd14ceSopenharmony_ci ProcSessionTask *task = (ProcSessionTask *)HcMalloc(sizeof(ProcSessionTask), 0); 46617fd14ceSopenharmony_ci if (task == NULL) { 46717fd14ceSopenharmony_ci LOGE("Failed to allocate memory for task!"); 46817fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 46917fd14ceSopenharmony_ci } 47017fd14ceSopenharmony_ci InitProcSessionTask(task, sessionId, receivedMsg); 47117fd14ceSopenharmony_ci if (PushTask((HcTaskBase*)task) != HC_SUCCESS) { 47217fd14ceSopenharmony_ci LOGE("push start session task fail."); 47317fd14ceSopenharmony_ci HcFree(task); 47417fd14ceSopenharmony_ci return HC_ERR_INIT_TASK_FAIL; 47517fd14ceSopenharmony_ci } 47617fd14ceSopenharmony_ci LOGI("push start session task success."); 47717fd14ceSopenharmony_ci return HC_SUCCESS; 47817fd14ceSopenharmony_ci} 47917fd14ceSopenharmony_ci 48017fd14ceSopenharmony_ci#ifdef ENABLE_P2P_BIND_LITE_PROTOCOL_CHECK 48117fd14ceSopenharmony_ci// If bind with iso short pin, groupVisibility must be private 48217fd14ceSopenharmony_cistatic int32_t CheckGroupVisibility(const CJson *context) 48317fd14ceSopenharmony_ci{ 48417fd14ceSopenharmony_ci int32_t osAccountId = INVALID_OS_ACCOUNT; 48517fd14ceSopenharmony_ci if (GetIntFromJson(context, FIELD_OS_ACCOUNT_ID, &osAccountId) != HC_SUCCESS) { 48617fd14ceSopenharmony_ci LOGE("Failed to get osAccountId!"); 48717fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 48817fd14ceSopenharmony_ci } 48917fd14ceSopenharmony_ci const char *groupId = GetStringFromJson(context, FIELD_GROUP_ID); 49017fd14ceSopenharmony_ci if (groupId == NULL) { 49117fd14ceSopenharmony_ci LOGE("Failed to get groupId!"); 49217fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 49317fd14ceSopenharmony_ci } 49417fd14ceSopenharmony_ci const char *appId = GetStringFromJson(context, FIELD_APP_ID); 49517fd14ceSopenharmony_ci if (appId == NULL) { 49617fd14ceSopenharmony_ci LOGE("Failed to get appId!"); 49717fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 49817fd14ceSopenharmony_ci } 49917fd14ceSopenharmony_ci TrustedGroupEntry *entry = GetGroupEntryById(osAccountId, groupId); 50017fd14ceSopenharmony_ci if (entry == NULL) { 50117fd14ceSopenharmony_ci LOGE("Failed to get group entry!"); 50217fd14ceSopenharmony_ci return HC_ERR_GROUP_NOT_EXIST; 50317fd14ceSopenharmony_ci } 50417fd14ceSopenharmony_ci int32_t res = CheckUpgradeIdentity(entry->upgradeFlag, appId, NULL); 50517fd14ceSopenharmony_ci if (res == HC_SUCCESS) { 50617fd14ceSopenharmony_ci LOGI("Group is from upgrade, no need to check visibility."); 50717fd14ceSopenharmony_ci DestroyGroupEntry(entry); 50817fd14ceSopenharmony_ci return HC_SUCCESS; 50917fd14ceSopenharmony_ci } 51017fd14ceSopenharmony_ci if (entry->visibility != GROUP_VISIBILITY_PRIVATE) { 51117fd14ceSopenharmony_ci LOGE("Group is not private, can not bind old version wearable device!"); 51217fd14ceSopenharmony_ci DestroyGroupEntry(entry); 51317fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 51417fd14ceSopenharmony_ci } 51517fd14ceSopenharmony_ci DestroyGroupEntry(entry); 51617fd14ceSopenharmony_ci return HC_SUCCESS; 51717fd14ceSopenharmony_ci} 51817fd14ceSopenharmony_ci#endif 51917fd14ceSopenharmony_ci 52017fd14ceSopenharmony_ci#ifdef ENABLE_P2P_BIND_LITE_PROTOCOL_CHECK 52117fd14ceSopenharmony_cistatic int32_t CheckBindParams(const CJson *context, bool isClient) 52217fd14ceSopenharmony_ci{ 52317fd14ceSopenharmony_ci int32_t opCode; 52417fd14ceSopenharmony_ci if (GetIntFromJson(context, FIELD_OPERATION_CODE, &opCode) != HC_SUCCESS) { 52517fd14ceSopenharmony_ci LOGE("Failed to get operation code!"); 52617fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 52717fd14ceSopenharmony_ci } 52817fd14ceSopenharmony_ci if ((isClient && opCode == MEMBER_INVITE) || (!isClient && opCode == MEMBER_JOIN)) { 52917fd14ceSopenharmony_ci int32_t protocolExpandVal = INVALID_PROTOCOL_EXPAND_VALUE; 53017fd14ceSopenharmony_ci (void)GetIntFromJson(context, FIELD_PROTOCOL_EXPAND, &protocolExpandVal); 53117fd14ceSopenharmony_ci if (protocolExpandVal == LITE_PROTOCOL_COMPATIBILITY_MODE) { 53217fd14ceSopenharmony_ci return CheckGroupVisibility(context); 53317fd14ceSopenharmony_ci } 53417fd14ceSopenharmony_ci } 53517fd14ceSopenharmony_ci return HC_SUCCESS; 53617fd14ceSopenharmony_ci} 53717fd14ceSopenharmony_ci#endif 53817fd14ceSopenharmony_ci 53917fd14ceSopenharmony_cistatic int32_t StartClientBindSession(int32_t osAccountId, int64_t requestId, const char *appId, 54017fd14ceSopenharmony_ci const char *contextParams, const DeviceAuthCallback *callback) 54117fd14ceSopenharmony_ci{ 54217fd14ceSopenharmony_ci CJson *context = CreateJsonFromString(contextParams); 54317fd14ceSopenharmony_ci if (context == NULL) { 54417fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 54517fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 54617fd14ceSopenharmony_ci } 54717fd14ceSopenharmony_ci int32_t res = BuildClientBindContext(osAccountId, requestId, appId, callback, context); 54817fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 54917fd14ceSopenharmony_ci FreeJson(context); 55017fd14ceSopenharmony_ci return res; 55117fd14ceSopenharmony_ci } 55217fd14ceSopenharmony_ci#ifdef ENABLE_P2P_BIND_LITE_PROTOCOL_CHECK 55317fd14ceSopenharmony_ci res = CheckBindParams(context, true); 55417fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 55517fd14ceSopenharmony_ci FreeJson(context); 55617fd14ceSopenharmony_ci return res; 55717fd14ceSopenharmony_ci } 55817fd14ceSopenharmony_ci#endif 55917fd14ceSopenharmony_ci ChannelType channelType = GetChannelType(callback, context); 56017fd14ceSopenharmony_ci SessionInitParams params = { context, *callback }; 56117fd14ceSopenharmony_ci res = OpenDevSession(requestId, appId, ¶ms); 56217fd14ceSopenharmony_ci FreeJson(context); 56317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 56417fd14ceSopenharmony_ci LOGE("OpenDevSession fail. [Res]: %d", res); 56517fd14ceSopenharmony_ci return res; 56617fd14ceSopenharmony_ci } 56717fd14ceSopenharmony_ci if (channelType == SERVICE_CHANNEL) { 56817fd14ceSopenharmony_ci res = PushStartSessionTask(requestId); 56917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 57017fd14ceSopenharmony_ci return res; 57117fd14ceSopenharmony_ci } 57217fd14ceSopenharmony_ci } 57317fd14ceSopenharmony_ci return HC_SUCCESS; 57417fd14ceSopenharmony_ci} 57517fd14ceSopenharmony_ci 57617fd14ceSopenharmony_ci#ifdef DEV_AUTH_HIVIEW_ENABLE 57717fd14ceSopenharmony_cistatic const char *GetAddMemberCallEventFuncName(const char *addParams) 57817fd14ceSopenharmony_ci{ 57917fd14ceSopenharmony_ci if (addParams == NULL) { 58017fd14ceSopenharmony_ci LOGE("add params is null!"); 58117fd14ceSopenharmony_ci return ADD_MEMBER_EVENT; 58217fd14ceSopenharmony_ci } 58317fd14ceSopenharmony_ci CJson *in = CreateJsonFromString(addParams); 58417fd14ceSopenharmony_ci if (in == NULL) { 58517fd14ceSopenharmony_ci LOGE("Failed to create json param!"); 58617fd14ceSopenharmony_ci return ADD_MEMBER_EVENT; 58717fd14ceSopenharmony_ci } 58817fd14ceSopenharmony_ci int32_t protocolExpandVal = INVALID_PROTOCOL_EXPAND_VALUE; 58917fd14ceSopenharmony_ci (void)GetIntFromJson(in, FIELD_PROTOCOL_EXPAND, &protocolExpandVal); 59017fd14ceSopenharmony_ci FreeJson(in); 59117fd14ceSopenharmony_ci if (protocolExpandVal == LITE_PROTOCOL_STANDARD_MODE) { 59217fd14ceSopenharmony_ci return ADD_MEMBER_WITH_LITE_STANDARD; 59317fd14ceSopenharmony_ci } else if (protocolExpandVal == LITE_PROTOCOL_COMPATIBILITY_MODE) { 59417fd14ceSopenharmony_ci return ADD_MEMBER_WITH_LITE_COMPATIBILITY; 59517fd14ceSopenharmony_ci } else { 59617fd14ceSopenharmony_ci return ADD_MEMBER_EVENT; 59717fd14ceSopenharmony_ci } 59817fd14ceSopenharmony_ci} 59917fd14ceSopenharmony_ci#endif 60017fd14ceSopenharmony_ci 60117fd14ceSopenharmony_cistatic int32_t AddMemberToGroupInner(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams) 60217fd14ceSopenharmony_ci{ 60317fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 60417fd14ceSopenharmony_ci SET_TRACE_ID(requestId); 60517fd14ceSopenharmony_ci ADD_PERFORM_DATA(requestId, true, true, HcGetCurTimeInMillis()); 60617fd14ceSopenharmony_ci osAccountId = DevAuthGetRealOsAccountLocalId(osAccountId); 60717fd14ceSopenharmony_ci if ((appId == NULL) || (addParams == NULL) || (osAccountId == INVALID_OS_ACCOUNT)) { 60817fd14ceSopenharmony_ci LOGE("Invalid input parameters!"); 60917fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 61017fd14ceSopenharmony_ci } 61117fd14ceSopenharmony_ci if (!CheckIsForegroundOsAccountId(osAccountId)) { 61217fd14ceSopenharmony_ci LOGE("This access is not from the foreground user, rejected it."); 61317fd14ceSopenharmony_ci return HC_ERR_CROSS_USER_ACCESS; 61417fd14ceSopenharmony_ci } 61517fd14ceSopenharmony_ci if (!IsOsAccountUnlocked(osAccountId)) { 61617fd14ceSopenharmony_ci LOGE("Os account is not unlocked!"); 61717fd14ceSopenharmony_ci return HC_ERR_OS_ACCOUNT_NOT_UNLOCKED; 61817fd14ceSopenharmony_ci } 61917fd14ceSopenharmony_ci LOGI("Start to add member to group. [ReqId]: %" PRId64 ", [OsAccountId]: %d, [AppId]: %s", 62017fd14ceSopenharmony_ci requestId, osAccountId, appId); 62117fd14ceSopenharmony_ci const DeviceAuthCallback *callback = GetGMCallbackByAppId(appId); 62217fd14ceSopenharmony_ci if (callback == NULL) { 62317fd14ceSopenharmony_ci LOGE("Failed to find callback by appId! [AppId]: %s", appId); 62417fd14ceSopenharmony_ci return HC_ERR_CALLBACK_NOT_FOUND; 62517fd14ceSopenharmony_ci } 62617fd14ceSopenharmony_ci return StartClientBindSession(osAccountId, requestId, appId, addParams, callback); 62717fd14ceSopenharmony_ci} 62817fd14ceSopenharmony_ci 62917fd14ceSopenharmony_cistatic int32_t AddMemberToGroup(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams) 63017fd14ceSopenharmony_ci{ 63117fd14ceSopenharmony_ci int32_t res = AddMemberToGroupInner(osAccountId, requestId, appId, addParams); 63217fd14ceSopenharmony_ci#ifdef DEV_AUTH_HIVIEW_ENABLE 63317fd14ceSopenharmony_ci const char *callEventFuncName = GetAddMemberCallEventFuncName(addParams); 63417fd14ceSopenharmony_ci DEV_AUTH_REPORT_CALL_EVENT_WITH_RESULT(appId, callEventFuncName, osAccountId, res, PROCESS_ADD_MEMBER_TO_GROUP); 63517fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(osAccountId, addParams, appId, callEventFuncName); 63617fd14ceSopenharmony_ci#endif 63717fd14ceSopenharmony_ci return res; 63817fd14ceSopenharmony_ci} 63917fd14ceSopenharmony_ci 64017fd14ceSopenharmony_cistatic int32_t AddServerReqInfoToContext(int64_t requestId, const char *appId, int32_t opCode, 64117fd14ceSopenharmony_ci const CJson *receivedMsg, CJson *context) 64217fd14ceSopenharmony_ci{ 64317fd14ceSopenharmony_ci const char *groupId = GetStringFromJson(receivedMsg, FIELD_GROUP_ID); 64417fd14ceSopenharmony_ci if (groupId == NULL) { 64517fd14ceSopenharmony_ci LOGE("get groupId from json fail."); 64617fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 64717fd14ceSopenharmony_ci } 64817fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_BIND, true) != HC_SUCCESS) { 64917fd14ceSopenharmony_ci LOGE("add isBind to context fail."); 65017fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 65117fd14ceSopenharmony_ci } 65217fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_CLIENT, false) != HC_SUCCESS) { 65317fd14ceSopenharmony_ci LOGE("add isClient to context fail."); 65417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 65517fd14ceSopenharmony_ci } 65617fd14ceSopenharmony_ci if (AddInt64StringToJson(context, FIELD_REQUEST_ID, requestId) != HC_SUCCESS) { 65717fd14ceSopenharmony_ci LOGE("add requestId to context fail."); 65817fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 65917fd14ceSopenharmony_ci } 66017fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_APP_ID, appId) != HC_SUCCESS) { 66117fd14ceSopenharmony_ci LOGE("add appId to context fail."); 66217fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 66317fd14ceSopenharmony_ci } 66417fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OPERATION_CODE, opCode) != HC_SUCCESS) { 66517fd14ceSopenharmony_ci LOGE("add opCode to context fail."); 66617fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 66717fd14ceSopenharmony_ci } 66817fd14ceSopenharmony_ci int32_t res; 66917fd14ceSopenharmony_ci if (opCode == MEMBER_INVITE) { 67017fd14ceSopenharmony_ci res = AddGroupInfoToContextByInput(receivedMsg, context); 67117fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 67217fd14ceSopenharmony_ci return res; 67317fd14ceSopenharmony_ci } 67417fd14ceSopenharmony_ci return AddDevInfoToContextByInput(context); 67517fd14ceSopenharmony_ci } 67617fd14ceSopenharmony_ci res = AddGroupInfoToContextByDb(groupId, context); 67717fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 67817fd14ceSopenharmony_ci return res; 67917fd14ceSopenharmony_ci } 68017fd14ceSopenharmony_ci return AddDevInfoToContextByDb(groupId, context); 68117fd14ceSopenharmony_ci} 68217fd14ceSopenharmony_ci 68317fd14ceSopenharmony_cistatic int32_t CheckConfirmationExist(const CJson *context) 68417fd14ceSopenharmony_ci{ 68517fd14ceSopenharmony_ci uint32_t confirmation = REQUEST_REJECTED; 68617fd14ceSopenharmony_ci if (GetUnsignedIntFromJson(context, FIELD_CONFIRMATION, &confirmation) != HC_SUCCESS) { 68717fd14ceSopenharmony_ci LOGE("Failed to get confimation from json!"); 68817fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 68917fd14ceSopenharmony_ci } 69017fd14ceSopenharmony_ci if (confirmation == REQUEST_ACCEPTED) { 69117fd14ceSopenharmony_ci LOGI("The service accepts this request!"); 69217fd14ceSopenharmony_ci } else { 69317fd14ceSopenharmony_ci LOGW("The service rejects this request!"); 69417fd14ceSopenharmony_ci } 69517fd14ceSopenharmony_ci return HC_SUCCESS; 69617fd14ceSopenharmony_ci} 69717fd14ceSopenharmony_ci 69817fd14ceSopenharmony_cistatic int32_t AddOsAccountIdToContextIfValid(CJson *context) 69917fd14ceSopenharmony_ci{ 70017fd14ceSopenharmony_ci int32_t osAccountId = ANY_OS_ACCOUNT; 70117fd14ceSopenharmony_ci (void)GetIntFromJson(context, FIELD_OS_ACCOUNT_ID, &osAccountId); 70217fd14ceSopenharmony_ci osAccountId = DevAuthGetRealOsAccountLocalId(osAccountId); 70317fd14ceSopenharmony_ci LOGI("[OsAccountId]: %d", osAccountId); 70417fd14ceSopenharmony_ci if (osAccountId == INVALID_OS_ACCOUNT) { 70517fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 70617fd14ceSopenharmony_ci } 70717fd14ceSopenharmony_ci if (!CheckIsForegroundOsAccountId(osAccountId)) { 70817fd14ceSopenharmony_ci LOGE("This access is not from the foreground user, rejected it."); 70917fd14ceSopenharmony_ci return HC_ERR_CROSS_USER_ACCESS; 71017fd14ceSopenharmony_ci } 71117fd14ceSopenharmony_ci if (!IsOsAccountUnlocked(osAccountId)) { 71217fd14ceSopenharmony_ci LOGE("Os account is not unlocked!"); 71317fd14ceSopenharmony_ci return HC_ERR_OS_ACCOUNT_NOT_UNLOCKED; 71417fd14ceSopenharmony_ci } 71517fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OS_ACCOUNT_ID, osAccountId) != HC_SUCCESS) { 71617fd14ceSopenharmony_ci LOGE("add operationCode to context fail."); 71717fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 71817fd14ceSopenharmony_ci } 71917fd14ceSopenharmony_ci return HC_SUCCESS; 72017fd14ceSopenharmony_ci} 72117fd14ceSopenharmony_ci 72217fd14ceSopenharmony_cistatic int32_t BuildServerBindContext(int64_t requestId, const char *appId, int32_t opCode, 72317fd14ceSopenharmony_ci const CJson *receivedMsg, CJson *context) 72417fd14ceSopenharmony_ci{ 72517fd14ceSopenharmony_ci int32_t res = CheckConfirmationExist(context); 72617fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 72717fd14ceSopenharmony_ci return res; 72817fd14ceSopenharmony_ci } 72917fd14ceSopenharmony_ci res = AddOsAccountIdToContextIfValid(context); 73017fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 73117fd14ceSopenharmony_ci return res; 73217fd14ceSopenharmony_ci } 73317fd14ceSopenharmony_ci res = AddServerReqInfoToContext(requestId, appId, opCode, receivedMsg, context); 73417fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 73517fd14ceSopenharmony_ci return res; 73617fd14ceSopenharmony_ci } 73717fd14ceSopenharmony_ci int32_t channelType; 73817fd14ceSopenharmony_ci int64_t channelId = DEFAULT_CHANNEL_ID; 73917fd14ceSopenharmony_ci if (GetByteFromJson(receivedMsg, FIELD_CHANNEL_ID, (uint8_t *)&channelId, sizeof(int64_t)) == HC_SUCCESS) { 74017fd14ceSopenharmony_ci channelType = SOFT_BUS; 74117fd14ceSopenharmony_ci } else { 74217fd14ceSopenharmony_ci channelType = SERVICE_CHANNEL; 74317fd14ceSopenharmony_ci } 74417fd14ceSopenharmony_ci return AddChannelInfoToContext(channelType, channelId, context); 74517fd14ceSopenharmony_ci} 74617fd14ceSopenharmony_ci 74717fd14ceSopenharmony_cistatic const char *GetAppIdFromReceivedMsg(const CJson *receivedMsg) 74817fd14ceSopenharmony_ci{ 74917fd14ceSopenharmony_ci const char *appId = GetStringFromJson(receivedMsg, FIELD_APP_ID); 75017fd14ceSopenharmony_ci if (appId == NULL) { 75117fd14ceSopenharmony_ci LOGW("use default device manager appId."); 75217fd14ceSopenharmony_ci appId = DM_APP_ID; 75317fd14ceSopenharmony_ci } 75417fd14ceSopenharmony_ci return appId; 75517fd14ceSopenharmony_ci} 75617fd14ceSopenharmony_ci 75717fd14ceSopenharmony_cistatic int32_t OpenServerBindSession(int64_t requestId, const CJson *receivedMsg) 75817fd14ceSopenharmony_ci{ 75917fd14ceSopenharmony_ci const char *appId = GetAppIdFromReceivedMsg(receivedMsg); 76017fd14ceSopenharmony_ci const DeviceAuthCallback *callback = GetGMCallbackByAppId(appId); 76117fd14ceSopenharmony_ci if (callback == NULL) { 76217fd14ceSopenharmony_ci LOGE("Failed to find callback by appId! [AppId]: %s", appId); 76317fd14ceSopenharmony_ci return HC_ERR_CALLBACK_NOT_FOUND; 76417fd14ceSopenharmony_ci } 76517fd14ceSopenharmony_ci int32_t opCode; 76617fd14ceSopenharmony_ci if (GetIntFromJson(receivedMsg, FIELD_GROUP_OP, &opCode) != HC_SUCCESS) { 76717fd14ceSopenharmony_ci if (GetIntFromJson(receivedMsg, FIELD_OP_CODE, &opCode) != HC_SUCCESS) { 76817fd14ceSopenharmony_ci opCode = MEMBER_JOIN; 76917fd14ceSopenharmony_ci LOGW("use default opCode."); 77017fd14ceSopenharmony_ci } 77117fd14ceSopenharmony_ci } 77217fd14ceSopenharmony_ci char *returnDataStr = ProcessRequestCallback(requestId, opCode, NULL, callback); 77317fd14ceSopenharmony_ci if (returnDataStr == NULL) { 77417fd14ceSopenharmony_ci LOGE("The OnRequest callback is fail!"); 77517fd14ceSopenharmony_ci return HC_ERR_REQ_REJECTED; 77617fd14ceSopenharmony_ci } 77717fd14ceSopenharmony_ci CJson *context = CreateJsonFromString(returnDataStr); 77817fd14ceSopenharmony_ci FreeJsonString(returnDataStr); 77917fd14ceSopenharmony_ci if (context == NULL) { 78017fd14ceSopenharmony_ci LOGE("Failed to create context from string!"); 78117fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 78217fd14ceSopenharmony_ci } 78317fd14ceSopenharmony_ci int32_t res = BuildServerBindContext(requestId, appId, opCode, receivedMsg, context); 78417fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 78517fd14ceSopenharmony_ci FreeJson(context); 78617fd14ceSopenharmony_ci return res; 78717fd14ceSopenharmony_ci } 78817fd14ceSopenharmony_ci#ifdef ENABLE_P2P_BIND_LITE_PROTOCOL_CHECK 78917fd14ceSopenharmony_ci res = CheckBindParams(context, false); 79017fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 79117fd14ceSopenharmony_ci FreeJson(context); 79217fd14ceSopenharmony_ci return res; 79317fd14ceSopenharmony_ci } 79417fd14ceSopenharmony_ci#endif 79517fd14ceSopenharmony_ci SessionInitParams params = { context, *callback }; 79617fd14ceSopenharmony_ci res = OpenDevSession(requestId, appId, ¶ms); 79717fd14ceSopenharmony_ci FreeJson(context); 79817fd14ceSopenharmony_ci return res; 79917fd14ceSopenharmony_ci} 80017fd14ceSopenharmony_ci 80117fd14ceSopenharmony_cistatic int32_t ProcessBindData(int64_t requestId, const uint8_t *data, uint32_t dataLen) 80217fd14ceSopenharmony_ci{ 80317fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 80417fd14ceSopenharmony_ci SET_TRACE_ID(requestId); 80517fd14ceSopenharmony_ci if (!IsSessionExist(requestId)) { 80617fd14ceSopenharmony_ci ADD_PERFORM_DATA(requestId, true, false, HcGetCurTimeInMillis()); 80717fd14ceSopenharmony_ci } else { 80817fd14ceSopenharmony_ci UPDATE_PERFORM_DATA_BY_SELF_INDEX(requestId, HcGetCurTimeInMillis()); 80917fd14ceSopenharmony_ci } 81017fd14ceSopenharmony_ci if ((data == NULL) || (dataLen == 0) || (dataLen > MAX_DATA_BUFFER_SIZE)) { 81117fd14ceSopenharmony_ci LOGE("The input data is invalid!"); 81217fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 81317fd14ceSopenharmony_ci } 81417fd14ceSopenharmony_ci LOGI("[Start]: RequestProcessBindData! [ReqId]: %" PRId64, requestId); 81517fd14ceSopenharmony_ci CJson *receivedMsg = CreateJsonFromString((const char *)data); 81617fd14ceSopenharmony_ci if (receivedMsg == NULL) { 81717fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 81817fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 81917fd14ceSopenharmony_ci } 82017fd14ceSopenharmony_ci int32_t res; 82117fd14ceSopenharmony_ci if (!IsSessionExist(requestId)) { 82217fd14ceSopenharmony_ci res = OpenServerBindSession(requestId, receivedMsg); 82317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 82417fd14ceSopenharmony_ci FreeJson(receivedMsg); 82517fd14ceSopenharmony_ci return res; 82617fd14ceSopenharmony_ci } 82717fd14ceSopenharmony_ci } 82817fd14ceSopenharmony_ci res = PushProcSessionTask(requestId, receivedMsg); 82917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 83017fd14ceSopenharmony_ci FreeJson(receivedMsg); 83117fd14ceSopenharmony_ci return res; 83217fd14ceSopenharmony_ci } 83317fd14ceSopenharmony_ci return HC_SUCCESS; 83417fd14ceSopenharmony_ci} 83517fd14ceSopenharmony_ci 83617fd14ceSopenharmony_cistatic int32_t BuildClientAuthContext(int32_t osAccountId, int64_t requestId, const char *appId, CJson *context) 83717fd14ceSopenharmony_ci{ 83817fd14ceSopenharmony_ci const char *peerUdid = GetPeerUdidFromJson(osAccountId, context); 83917fd14ceSopenharmony_ci if (peerUdid != NULL) { 84017fd14ceSopenharmony_ci char *deviceId = NULL; 84117fd14ceSopenharmony_ci if (DeepCopyString(peerUdid, &deviceId) != HC_SUCCESS) { 84217fd14ceSopenharmony_ci LOGE("Failed to copy peerUdid!"); 84317fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 84417fd14ceSopenharmony_ci } 84517fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_PEER_UDID, deviceId) != HC_SUCCESS) { 84617fd14ceSopenharmony_ci LOGE("add peerUdid to context fail."); 84717fd14ceSopenharmony_ci HcFree(deviceId); 84817fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 84917fd14ceSopenharmony_ci } 85017fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_PEER_CONN_DEVICE_ID, deviceId) != HC_SUCCESS) { 85117fd14ceSopenharmony_ci LOGE("add peerConnDeviceId to context fail."); 85217fd14ceSopenharmony_ci HcFree(deviceId); 85317fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 85417fd14ceSopenharmony_ci } 85517fd14ceSopenharmony_ci PRINT_SENSITIVE_DATA("PeerUdid", deviceId); 85617fd14ceSopenharmony_ci HcFree(deviceId); 85717fd14ceSopenharmony_ci } 85817fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_BIND, false) != HC_SUCCESS) { 85917fd14ceSopenharmony_ci LOGE("add isBind to context fail."); 86017fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 86117fd14ceSopenharmony_ci } 86217fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_CLIENT, true) != HC_SUCCESS) { 86317fd14ceSopenharmony_ci LOGE("add isClient to context fail."); 86417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 86517fd14ceSopenharmony_ci } 86617fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OS_ACCOUNT_ID, osAccountId) != HC_SUCCESS) { 86717fd14ceSopenharmony_ci LOGE("add osAccountId to context fail."); 86817fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 86917fd14ceSopenharmony_ci } 87017fd14ceSopenharmony_ci if (AddInt64StringToJson(context, FIELD_REQUEST_ID, requestId) != HC_SUCCESS) { 87117fd14ceSopenharmony_ci LOGE("add requestId to context fail."); 87217fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 87317fd14ceSopenharmony_ci } 87417fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_APP_ID, appId) != HC_SUCCESS) { 87517fd14ceSopenharmony_ci LOGE("add appId to context fail."); 87617fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 87717fd14ceSopenharmony_ci } 87817fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OPERATION_CODE, AUTH_FORM_ACCOUNT_UNRELATED) != HC_SUCCESS) { 87917fd14ceSopenharmony_ci LOGE("add opCode to context fail."); 88017fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 88117fd14ceSopenharmony_ci } 88217fd14ceSopenharmony_ci return AddChannelInfoToContext(SERVICE_CHANNEL, DEFAULT_CHANNEL_ID, context); 88317fd14ceSopenharmony_ci} 88417fd14ceSopenharmony_ci 88517fd14ceSopenharmony_cistatic int32_t BuildP2PBindContext(CJson *context) 88617fd14ceSopenharmony_ci{ 88717fd14ceSopenharmony_ci int32_t acquireType = -1; 88817fd14ceSopenharmony_ci if (GetIntFromJson(context, FIELD_ACQURIED_TYPE, &acquireType) != HC_SUCCESS) { 88917fd14ceSopenharmony_ci LOGE("Failed to get acquireType from reqJsonStr!"); 89017fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 89117fd14ceSopenharmony_ci } 89217fd14ceSopenharmony_ci if ((acquireType == P2P_BIND) && AddBoolToJson(context, FIELD_IS_DIRECT_AUTH, true) != HC_SUCCESS) { 89317fd14ceSopenharmony_ci LOGE("add isDirectAuth to context fail."); 89417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 89517fd14ceSopenharmony_ci } 89617fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OPERATION_CODE, acquireType) != HC_SUCCESS) { 89717fd14ceSopenharmony_ci LOGE("add opCode to context fail."); 89817fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 89917fd14ceSopenharmony_ci } 90017fd14ceSopenharmony_ci const char *serviceType = GetStringFromJson(context, FIELD_SERVICE_TYPE); 90117fd14ceSopenharmony_ci if (serviceType == NULL) { 90217fd14ceSopenharmony_ci if ((acquireType == P2P_BIND) && 90317fd14ceSopenharmony_ci AddStringToJson(context, FIELD_SERVICE_TYPE, DEFAULT_SERVICE_TYPE) != HC_SUCCESS) { 90417fd14ceSopenharmony_ci LOGE("add serviceType to context fail."); 90517fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 90617fd14ceSopenharmony_ci } 90717fd14ceSopenharmony_ci } 90817fd14ceSopenharmony_ci return HC_SUCCESS; 90917fd14ceSopenharmony_ci} 91017fd14ceSopenharmony_ci 91117fd14ceSopenharmony_cistatic int32_t AuthDevice(int32_t osAccountId, int64_t authReqId, const char *authParams, 91217fd14ceSopenharmony_ci const DeviceAuthCallback *gaCallback) 91317fd14ceSopenharmony_ci{ 91417fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 91517fd14ceSopenharmony_ci SET_TRACE_ID(authReqId); 91617fd14ceSopenharmony_ci ADD_PERFORM_DATA(authReqId, false, true, HcGetCurTimeInMillis()); 91717fd14ceSopenharmony_ci osAccountId = DevAuthGetRealOsAccountLocalId(osAccountId); 91817fd14ceSopenharmony_ci LOGI("Begin AuthDevice. [ReqId]: %" PRId64 ", [OsAccountId]: %d", authReqId, osAccountId); 91917fd14ceSopenharmony_ci if ((authParams == NULL) || (osAccountId == INVALID_OS_ACCOUNT) || (gaCallback == NULL)) { 92017fd14ceSopenharmony_ci LOGE("The input auth params is invalid!"); 92117fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 92217fd14ceSopenharmony_ci } 92317fd14ceSopenharmony_ci if (!CheckIsForegroundOsAccountId(osAccountId)) { 92417fd14ceSopenharmony_ci LOGE("This access is not from the foreground user, rejected it."); 92517fd14ceSopenharmony_ci return HC_ERR_CROSS_USER_ACCESS; 92617fd14ceSopenharmony_ci } 92717fd14ceSopenharmony_ci if (!IsOsAccountUnlocked(osAccountId)) { 92817fd14ceSopenharmony_ci LOGE("Os account is not unlocked!"); 92917fd14ceSopenharmony_ci return HC_ERR_OS_ACCOUNT_NOT_UNLOCKED; 93017fd14ceSopenharmony_ci } 93117fd14ceSopenharmony_ci CJson *context = CreateJsonFromString(authParams); 93217fd14ceSopenharmony_ci if (context == NULL) { 93317fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 93417fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 93517fd14ceSopenharmony_ci } 93617fd14ceSopenharmony_ci const char *appId = GetStringFromJson(context, FIELD_SERVICE_PKG_NAME); 93717fd14ceSopenharmony_ci if (appId == NULL) { 93817fd14ceSopenharmony_ci LOGE("get servicePkgName from json fail."); 93917fd14ceSopenharmony_ci FreeJson(context); 94017fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 94117fd14ceSopenharmony_ci } 94217fd14ceSopenharmony_ci int32_t res = BuildClientAuthContext(osAccountId, authReqId, appId, context); 94317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 94417fd14ceSopenharmony_ci FreeJson(context); 94517fd14ceSopenharmony_ci return res; 94617fd14ceSopenharmony_ci } 94717fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(osAccountId, authParams, appId, AUTH_DEV_EVENT); 94817fd14ceSopenharmony_ci DEV_AUTH_REPORT_CALL_EVENT_WITH_RESULT(appId, AUTH_DEV_EVENT, osAccountId, res, PROCESS_AUTH_DEVICE); 94917fd14ceSopenharmony_ci SessionInitParams params = { context, *gaCallback }; 95017fd14ceSopenharmony_ci res = OpenDevSession(authReqId, appId, ¶ms); 95117fd14ceSopenharmony_ci FreeJson(context); 95217fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 95317fd14ceSopenharmony_ci LOGE("OpenDevSession fail. [Res]: %d", res); 95417fd14ceSopenharmony_ci return res; 95517fd14ceSopenharmony_ci } 95617fd14ceSopenharmony_ci return PushStartSessionTask(authReqId); 95717fd14ceSopenharmony_ci} 95817fd14ceSopenharmony_ci 95917fd14ceSopenharmony_cistatic int32_t AddDeviceIdToJson(CJson *context, const char *peerUdid) 96017fd14ceSopenharmony_ci{ 96117fd14ceSopenharmony_ci char *deviceId = NULL; 96217fd14ceSopenharmony_ci if (DeepCopyString(peerUdid, &deviceId) != HC_SUCCESS) { 96317fd14ceSopenharmony_ci LOGE("Failed to copy peerUdid!"); 96417fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 96517fd14ceSopenharmony_ci } 96617fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_PEER_UDID, deviceId) != HC_SUCCESS) { 96717fd14ceSopenharmony_ci LOGE("add peerUdid to context fail."); 96817fd14ceSopenharmony_ci HcFree(deviceId); 96917fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 97017fd14ceSopenharmony_ci } 97117fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_PEER_CONN_DEVICE_ID, deviceId) != HC_SUCCESS) { 97217fd14ceSopenharmony_ci LOGE("add peerConnDeviceId to context fail."); 97317fd14ceSopenharmony_ci HcFree(deviceId); 97417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 97517fd14ceSopenharmony_ci } 97617fd14ceSopenharmony_ci HcFree(deviceId); 97717fd14ceSopenharmony_ci return HC_SUCCESS; 97817fd14ceSopenharmony_ci} 97917fd14ceSopenharmony_ci 98017fd14ceSopenharmony_cistatic int32_t BuildServerAuthContext(int64_t requestId, int32_t opCode, const char *appId, CJson *context) 98117fd14ceSopenharmony_ci{ 98217fd14ceSopenharmony_ci int32_t res = CheckConfirmationExist(context); 98317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 98417fd14ceSopenharmony_ci return res; 98517fd14ceSopenharmony_ci } 98617fd14ceSopenharmony_ci res = AddOsAccountIdToContextIfValid(context); 98717fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 98817fd14ceSopenharmony_ci return res; 98917fd14ceSopenharmony_ci } 99017fd14ceSopenharmony_ci int32_t osAccountId = ANY_OS_ACCOUNT; 99117fd14ceSopenharmony_ci (void)GetIntFromJson(context, FIELD_OS_ACCOUNT_ID, &osAccountId); 99217fd14ceSopenharmony_ci const char *peerUdid = GetPeerUdidFromJson(osAccountId, context); 99317fd14ceSopenharmony_ci if (peerUdid == NULL) { 99417fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 99517fd14ceSopenharmony_ci } 99617fd14ceSopenharmony_ci PRINT_SENSITIVE_DATA("PeerUdid", peerUdid); 99717fd14ceSopenharmony_ci if (AddDeviceIdToJson(context, peerUdid) != HC_SUCCESS) { 99817fd14ceSopenharmony_ci LOGE("add deviceId to context fail."); 99917fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 100017fd14ceSopenharmony_ci } 100117fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_BIND, false) != HC_SUCCESS) { 100217fd14ceSopenharmony_ci LOGE("add isBind to context fail."); 100317fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 100417fd14ceSopenharmony_ci } 100517fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_CLIENT, false) != HC_SUCCESS) { 100617fd14ceSopenharmony_ci LOGE("add isClient to context fail."); 100717fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 100817fd14ceSopenharmony_ci } 100917fd14ceSopenharmony_ci if (AddInt64StringToJson(context, FIELD_REQUEST_ID, requestId) != HC_SUCCESS) { 101017fd14ceSopenharmony_ci LOGE("add requestId to context fail."); 101117fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 101217fd14ceSopenharmony_ci } 101317fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_APP_ID, appId) != HC_SUCCESS) { 101417fd14ceSopenharmony_ci LOGE("add appId to context fail."); 101517fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 101617fd14ceSopenharmony_ci } 101717fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OPERATION_CODE, opCode) != HC_SUCCESS) { 101817fd14ceSopenharmony_ci LOGE("add opCode to context fail."); 101917fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 102017fd14ceSopenharmony_ci } 102117fd14ceSopenharmony_ci return AddChannelInfoToContext(SERVICE_CHANNEL, DEFAULT_CHANNEL_ID, context); 102217fd14ceSopenharmony_ci} 102317fd14ceSopenharmony_ci 102417fd14ceSopenharmony_cistatic int32_t BuildServerP2PAuthContext(int64_t requestId, int32_t opCode, const char *appId, CJson *context) 102517fd14ceSopenharmony_ci{ 102617fd14ceSopenharmony_ci int32_t res = CheckConfirmationExist(context); 102717fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 102817fd14ceSopenharmony_ci return res; 102917fd14ceSopenharmony_ci } 103017fd14ceSopenharmony_ci res = AddOsAccountIdToContextIfValid(context); 103117fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 103217fd14ceSopenharmony_ci return res; 103317fd14ceSopenharmony_ci } 103417fd14ceSopenharmony_ci const char *peerUdid = GetStringFromJson(context, FIELD_PEER_CONN_DEVICE_ID); 103517fd14ceSopenharmony_ci const char *pinCode = GetStringFromJson(context, FIELD_PIN_CODE); 103617fd14ceSopenharmony_ci if (peerUdid == NULL && pinCode == NULL) { 103717fd14ceSopenharmony_ci LOGE("need peerConnDeviceId or pinCode!"); 103817fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 103917fd14ceSopenharmony_ci } 104017fd14ceSopenharmony_ci if (peerUdid != NULL) { 104117fd14ceSopenharmony_ci PRINT_SENSITIVE_DATA("PeerUdid", peerUdid); 104217fd14ceSopenharmony_ci if (AddDeviceIdToJson(context, peerUdid) != HC_SUCCESS) { 104317fd14ceSopenharmony_ci LOGE("add deviceId to context fail."); 104417fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 104517fd14ceSopenharmony_ci } 104617fd14ceSopenharmony_ci } 104717fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_BIND, false) != HC_SUCCESS) { 104817fd14ceSopenharmony_ci LOGE("add isBind to context fail."); 104917fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 105017fd14ceSopenharmony_ci } 105117fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_CLIENT, false) != HC_SUCCESS) { 105217fd14ceSopenharmony_ci LOGE("add isClient to context fail."); 105317fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 105417fd14ceSopenharmony_ci } 105517fd14ceSopenharmony_ci if (AddInt64StringToJson(context, FIELD_REQUEST_ID, requestId) != HC_SUCCESS) { 105617fd14ceSopenharmony_ci LOGE("add requestId to context fail."); 105717fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 105817fd14ceSopenharmony_ci } 105917fd14ceSopenharmony_ci if (AddStringToJson(context, FIELD_APP_ID, appId) != HC_SUCCESS) { 106017fd14ceSopenharmony_ci LOGE("add appId to context fail."); 106117fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 106217fd14ceSopenharmony_ci } 106317fd14ceSopenharmony_ci if (AddIntToJson(context, FIELD_OPERATION_CODE, opCode) != HC_SUCCESS) { 106417fd14ceSopenharmony_ci LOGE("add opCode to context fail."); 106517fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 106617fd14ceSopenharmony_ci } 106717fd14ceSopenharmony_ci return AddChannelInfoToContext(SERVICE_CHANNEL, DEFAULT_CHANNEL_ID, context); 106817fd14ceSopenharmony_ci} 106917fd14ceSopenharmony_ci 107017fd14ceSopenharmony_cistatic int32_t OpenServerAuthSession(int64_t requestId, const CJson *receivedMsg, const DeviceAuthCallback *callback) 107117fd14ceSopenharmony_ci{ 107217fd14ceSopenharmony_ci int32_t opCode = AUTH_FORM_ACCOUNT_UNRELATED; 107317fd14ceSopenharmony_ci if (GetIntFromJson(receivedMsg, FIELD_AUTH_FORM, &opCode) != HC_SUCCESS) { 107417fd14ceSopenharmony_ci if (GetIntFromJson(receivedMsg, FIELD_OP_CODE, &opCode) != HC_SUCCESS) { 107517fd14ceSopenharmony_ci opCode = AUTH_FORM_INVALID_TYPE; 107617fd14ceSopenharmony_ci LOGW("use default opCode."); 107717fd14ceSopenharmony_ci } 107817fd14ceSopenharmony_ci } 107917fd14ceSopenharmony_ci char *returnDataStr = ProcessRequestCallback(requestId, opCode, NULL, callback); 108017fd14ceSopenharmony_ci if (returnDataStr == NULL) { 108117fd14ceSopenharmony_ci LOGE("The OnRequest callback is fail!"); 108217fd14ceSopenharmony_ci return HC_ERR_REQ_REJECTED; 108317fd14ceSopenharmony_ci } 108417fd14ceSopenharmony_ci CJson *context = CreateJsonFromString(returnDataStr); 108517fd14ceSopenharmony_ci FreeJsonString(returnDataStr); 108617fd14ceSopenharmony_ci if (context == NULL) { 108717fd14ceSopenharmony_ci LOGE("Failed to create context from string!"); 108817fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 108917fd14ceSopenharmony_ci } 109017fd14ceSopenharmony_ci const char *appId = GetStringFromJson(context, FIELD_SERVICE_PKG_NAME); 109117fd14ceSopenharmony_ci if (appId == NULL) { 109217fd14ceSopenharmony_ci LOGE("get appId from json fail."); 109317fd14ceSopenharmony_ci FreeJson(context); 109417fd14ceSopenharmony_ci return HC_ERR_JSON_GET; 109517fd14ceSopenharmony_ci } 109617fd14ceSopenharmony_ci int32_t res = BuildServerAuthContext(requestId, opCode, appId, context); 109717fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 109817fd14ceSopenharmony_ci FreeJson(context); 109917fd14ceSopenharmony_ci return res; 110017fd14ceSopenharmony_ci } 110117fd14ceSopenharmony_ci SessionInitParams params = { context, *callback }; 110217fd14ceSopenharmony_ci res = OpenDevSession(requestId, appId, ¶ms); 110317fd14ceSopenharmony_ci FreeJson(context); 110417fd14ceSopenharmony_ci return res; 110517fd14ceSopenharmony_ci} 110617fd14ceSopenharmony_ci 110717fd14ceSopenharmony_cistatic int32_t OpenServerAuthSessionForP2P( 110817fd14ceSopenharmony_ci int64_t requestId, const CJson *receivedMsg, const DeviceAuthCallback *callback) 110917fd14ceSopenharmony_ci{ 111017fd14ceSopenharmony_ci int32_t opCode = P2P_BIND; 111117fd14ceSopenharmony_ci if (GetIntFromJson(receivedMsg, FIELD_OP_CODE, &opCode) != HC_SUCCESS) { 111217fd14ceSopenharmony_ci opCode = P2P_BIND; 111317fd14ceSopenharmony_ci LOGW("use default opCode."); 111417fd14ceSopenharmony_ci } 111517fd14ceSopenharmony_ci char *returnDataStr = ProcessRequestCallback(requestId, opCode, NULL, callback); 111617fd14ceSopenharmony_ci if (returnDataStr == NULL) { 111717fd14ceSopenharmony_ci LOGE("The OnRequest callback is fail!"); 111817fd14ceSopenharmony_ci return HC_ERR_REQ_REJECTED; 111917fd14ceSopenharmony_ci } 112017fd14ceSopenharmony_ci CJson *context = CreateJsonFromString(returnDataStr); 112117fd14ceSopenharmony_ci FreeJsonString(returnDataStr); 112217fd14ceSopenharmony_ci if (context == NULL) { 112317fd14ceSopenharmony_ci LOGE("Failed to create context from string!"); 112417fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 112517fd14ceSopenharmony_ci } 112617fd14ceSopenharmony_ci if (AddBoolToJson(context, FIELD_IS_DIRECT_AUTH, true) != HC_SUCCESS) { 112717fd14ceSopenharmony_ci LOGE("Failed to add isDirectAuth to context!"); 112817fd14ceSopenharmony_ci FreeJson(context); 112917fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 113017fd14ceSopenharmony_ci } 113117fd14ceSopenharmony_ci const char *pkgName = GetStringFromJson(context, FIELD_SERVICE_PKG_NAME); 113217fd14ceSopenharmony_ci if (pkgName == NULL && AddStringToJson(context, FIELD_SERVICE_PKG_NAME, DEFAULT_PACKAGE_NAME) != HC_SUCCESS) { 113317fd14ceSopenharmony_ci LOGE("Failed to add default package name to context!"); 113417fd14ceSopenharmony_ci FreeJson(context); 113517fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 113617fd14ceSopenharmony_ci } 113717fd14ceSopenharmony_ci const char *serviceType = GetStringFromJson(context, FIELD_SERVICE_TYPE); 113817fd14ceSopenharmony_ci if (serviceType == NULL && AddStringToJson(context, FIELD_SERVICE_TYPE, DEFAULT_SERVICE_TYPE) != HC_SUCCESS) { 113917fd14ceSopenharmony_ci LOGE("Failed to add default package name to context!"); 114017fd14ceSopenharmony_ci FreeJson(context); 114117fd14ceSopenharmony_ci return HC_ERR_JSON_ADD; 114217fd14ceSopenharmony_ci } 114317fd14ceSopenharmony_ci const char *appId = pkgName != NULL ? pkgName : DEFAULT_PACKAGE_NAME; 114417fd14ceSopenharmony_ci int32_t res = BuildServerP2PAuthContext(requestId, opCode, appId, context); 114517fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 114617fd14ceSopenharmony_ci FreeJson(context); 114717fd14ceSopenharmony_ci return res; 114817fd14ceSopenharmony_ci } 114917fd14ceSopenharmony_ci SessionInitParams params = { context, *callback }; 115017fd14ceSopenharmony_ci res = OpenDevSession(requestId, appId, ¶ms); 115117fd14ceSopenharmony_ci FreeJson(context); 115217fd14ceSopenharmony_ci return res; 115317fd14ceSopenharmony_ci} 115417fd14ceSopenharmony_ci 115517fd14ceSopenharmony_cistatic int32_t ProcessData(int64_t authReqId, const uint8_t *data, uint32_t dataLen, 115617fd14ceSopenharmony_ci const DeviceAuthCallback *gaCallback) 115717fd14ceSopenharmony_ci{ 115817fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 115917fd14ceSopenharmony_ci SET_TRACE_ID(authReqId); 116017fd14ceSopenharmony_ci if (!IsSessionExist(authReqId)) { 116117fd14ceSopenharmony_ci ADD_PERFORM_DATA(authReqId, false, false, HcGetCurTimeInMillis()); 116217fd14ceSopenharmony_ci } else { 116317fd14ceSopenharmony_ci UPDATE_PERFORM_DATA_BY_SELF_INDEX(authReqId, HcGetCurTimeInMillis()); 116417fd14ceSopenharmony_ci } 116517fd14ceSopenharmony_ci LOGI("[GA] Begin ProcessData. [DataLen]: %u, [ReqId]: %" PRId64, dataLen, authReqId); 116617fd14ceSopenharmony_ci if ((data == NULL) || (dataLen > MAX_DATA_BUFFER_SIZE)) { 116717fd14ceSopenharmony_ci LOGE("Invalid input for ProcessData!"); 116817fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 116917fd14ceSopenharmony_ci } 117017fd14ceSopenharmony_ci CJson *receivedMsg = CreateJsonFromString((const char *)data); 117117fd14ceSopenharmony_ci if (receivedMsg == NULL) { 117217fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 117317fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 117417fd14ceSopenharmony_ci } 117517fd14ceSopenharmony_ci int32_t res; 117617fd14ceSopenharmony_ci if (!IsSessionExist(authReqId)) { 117717fd14ceSopenharmony_ci res = OpenServerAuthSession(authReqId, receivedMsg, gaCallback); 117817fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 117917fd14ceSopenharmony_ci FreeJson(receivedMsg); 118017fd14ceSopenharmony_ci return res; 118117fd14ceSopenharmony_ci } 118217fd14ceSopenharmony_ci } 118317fd14ceSopenharmony_ci if (HasAccountAuthPlugin() == HC_SUCCESS) { 118417fd14ceSopenharmony_ci res = AddOriginDataForPlugin(receivedMsg, data); 118517fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 118617fd14ceSopenharmony_ci FreeJson(receivedMsg); 118717fd14ceSopenharmony_ci return res; 118817fd14ceSopenharmony_ci } 118917fd14ceSopenharmony_ci } 119017fd14ceSopenharmony_ci res = PushProcSessionTask(authReqId, receivedMsg); 119117fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 119217fd14ceSopenharmony_ci FreeJson(receivedMsg); 119317fd14ceSopenharmony_ci return res; 119417fd14ceSopenharmony_ci } 119517fd14ceSopenharmony_ci return HC_SUCCESS; 119617fd14ceSopenharmony_ci} 119717fd14ceSopenharmony_ci 119817fd14ceSopenharmony_cistatic void CancelRequest(int64_t requestId, const char *appId) 119917fd14ceSopenharmony_ci{ 120017fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 120117fd14ceSopenharmony_ci SET_TRACE_ID(requestId); 120217fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(DEFAULT_OS_ACCOUNT, NULL, appId, CANCEL_REQUEST_EVENT); 120317fd14ceSopenharmony_ci if (appId == NULL) { 120417fd14ceSopenharmony_ci LOGE("Invalid app id!"); 120517fd14ceSopenharmony_ci return; 120617fd14ceSopenharmony_ci } 120717fd14ceSopenharmony_ci LOGI("cancel request. [AppId]: %s, [ReqId]: %" PRId64, appId, requestId); 120817fd14ceSopenharmony_ci CancelDevSession(requestId, appId); 120917fd14ceSopenharmony_ci} 121017fd14ceSopenharmony_ci 121117fd14ceSopenharmony_cistatic int32_t GetRealInfo(int32_t osAccountId, const char *pseudonymId, char **realInfo) 121217fd14ceSopenharmony_ci{ 121317fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(osAccountId, NULL, NULL, GET_REAL_INFO_EVENT); 121417fd14ceSopenharmony_ci if (pseudonymId == NULL || realInfo == NULL) { 121517fd14ceSopenharmony_ci LOGE("Invalid params!"); 121617fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 121717fd14ceSopenharmony_ci } 121817fd14ceSopenharmony_ci PseudonymManager *pseudonymInstance = GetPseudonymInstance(); 121917fd14ceSopenharmony_ci if (pseudonymInstance == NULL) { 122017fd14ceSopenharmony_ci LOGE("not support privacy enhancement!"); 122117fd14ceSopenharmony_ci return HC_ERR_NOT_SUPPORT; 122217fd14ceSopenharmony_ci } 122317fd14ceSopenharmony_ci return pseudonymInstance->getRealInfo(osAccountId, pseudonymId, realInfo); 122417fd14ceSopenharmony_ci} 122517fd14ceSopenharmony_ci 122617fd14ceSopenharmony_cistatic int32_t GetPseudonymId(int32_t osAccountId, const char *indexKey, char **pseudonymId) 122717fd14ceSopenharmony_ci{ 122817fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(osAccountId, NULL, NULL, GET_PSEUDONYM_ID_EVENT); 122917fd14ceSopenharmony_ci if (indexKey == NULL || pseudonymId == NULL) { 123017fd14ceSopenharmony_ci LOGE("Invalid params!"); 123117fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 123217fd14ceSopenharmony_ci } 123317fd14ceSopenharmony_ci PseudonymManager *pseudonymInstance = GetPseudonymInstance(); 123417fd14ceSopenharmony_ci if (pseudonymInstance == NULL) { 123517fd14ceSopenharmony_ci LOGE("not support privacy enhancement!"); 123617fd14ceSopenharmony_ci return HC_ERR_NOT_SUPPORT; 123717fd14ceSopenharmony_ci } 123817fd14ceSopenharmony_ci return pseudonymInstance->getPseudonymId(osAccountId, indexKey, pseudonymId); 123917fd14ceSopenharmony_ci} 124017fd14ceSopenharmony_ci 124117fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t ProcessCredential(int32_t operationCode, const char *reqJsonStr, char **returnData) 124217fd14ceSopenharmony_ci{ 124317fd14ceSopenharmony_ci if (reqJsonStr == NULL || returnData == NULL) { 124417fd14ceSopenharmony_ci LOGE("Invalid params!"); 124517fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 124617fd14ceSopenharmony_ci } 124717fd14ceSopenharmony_ci 124817fd14ceSopenharmony_ci const CredentialOperator *credOperator = GetCredentialOperator(); 124917fd14ceSopenharmony_ci if (credOperator == NULL) { 125017fd14ceSopenharmony_ci LOGE("credOperator is null!"); 125117fd14ceSopenharmony_ci return HC_ERR_NOT_SUPPORT; 125217fd14ceSopenharmony_ci } 125317fd14ceSopenharmony_ci 125417fd14ceSopenharmony_ci int32_t res = HC_ERR_UNSUPPORTED_OPCODE; 125517fd14ceSopenharmony_ci switch (operationCode) { 125617fd14ceSopenharmony_ci case CRED_OP_QUERY: 125717fd14ceSopenharmony_ci res = credOperator->queryCredential(reqJsonStr, returnData); 125817fd14ceSopenharmony_ci break; 125917fd14ceSopenharmony_ci case CRED_OP_CREATE: 126017fd14ceSopenharmony_ci res = credOperator->genarateCredential(reqJsonStr, returnData); 126117fd14ceSopenharmony_ci break; 126217fd14ceSopenharmony_ci case CRED_OP_IMPORT: 126317fd14ceSopenharmony_ci res = credOperator->importCredential(reqJsonStr, returnData); 126417fd14ceSopenharmony_ci break; 126517fd14ceSopenharmony_ci case CRED_OP_DELETE: 126617fd14ceSopenharmony_ci res = credOperator->deleteCredential(reqJsonStr, returnData); 126717fd14ceSopenharmony_ci break; 126817fd14ceSopenharmony_ci default: 126917fd14ceSopenharmony_ci LOGE("invalid opCode: %d", operationCode); 127017fd14ceSopenharmony_ci break; 127117fd14ceSopenharmony_ci } 127217fd14ceSopenharmony_ci 127317fd14ceSopenharmony_ci return res; 127417fd14ceSopenharmony_ci} 127517fd14ceSopenharmony_ci 127617fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t ProcessAuthDevice( 127717fd14ceSopenharmony_ci int64_t authReqId, const char *authParams, const DeviceAuthCallback *callback) 127817fd14ceSopenharmony_ci{ 127917fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 128017fd14ceSopenharmony_ci SET_TRACE_ID(authReqId); 128117fd14ceSopenharmony_ci LOGI("[DA] Begin ProcessAuthDevice [ReqId]: %" PRId64, authReqId); 128217fd14ceSopenharmony_ci if (authParams == NULL || HcStrlen(authParams) > MAX_DATA_BUFFER_SIZE) { 128317fd14ceSopenharmony_ci LOGE("Invalid input for ProcessData!"); 128417fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 128517fd14ceSopenharmony_ci } 128617fd14ceSopenharmony_ci CJson *json = CreateJsonFromString(authParams); 128717fd14ceSopenharmony_ci if (json == NULL) { 128817fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 128917fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 129017fd14ceSopenharmony_ci } 129117fd14ceSopenharmony_ci const char *data = GetStringFromJson(json, "data"); 129217fd14ceSopenharmony_ci if (data == NULL) { 129317fd14ceSopenharmony_ci LOGE("Failed to get received data from parameter!"); 129417fd14ceSopenharmony_ci FreeJson(json); 129517fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 129617fd14ceSopenharmony_ci } 129717fd14ceSopenharmony_ci CJson *receivedMsg = CreateJsonFromString(data); 129817fd14ceSopenharmony_ci FreeJson(json); 129917fd14ceSopenharmony_ci if (receivedMsg == NULL) { 130017fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 130117fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 130217fd14ceSopenharmony_ci } 130317fd14ceSopenharmony_ci int32_t res; 130417fd14ceSopenharmony_ci if (!IsSessionExist(authReqId)) { 130517fd14ceSopenharmony_ci res = OpenServerAuthSessionForP2P(authReqId, receivedMsg, callback); 130617fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 130717fd14ceSopenharmony_ci FreeJson(receivedMsg); 130817fd14ceSopenharmony_ci return res; 130917fd14ceSopenharmony_ci } 131017fd14ceSopenharmony_ci } 131117fd14ceSopenharmony_ci res = PushProcSessionTask(authReqId, receivedMsg); 131217fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 131317fd14ceSopenharmony_ci FreeJson(receivedMsg); 131417fd14ceSopenharmony_ci return res; 131517fd14ceSopenharmony_ci } 131617fd14ceSopenharmony_ci return HC_SUCCESS; 131717fd14ceSopenharmony_ci} 131817fd14ceSopenharmony_ci 131917fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t StartAuthDevice( 132017fd14ceSopenharmony_ci int64_t authReqId, const char *authParams, const DeviceAuthCallback *callback) 132117fd14ceSopenharmony_ci{ 132217fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 132317fd14ceSopenharmony_ci SET_TRACE_ID(authReqId); 132417fd14ceSopenharmony_ci LOGI("StartAuthDevice. [ReqId]:%" PRId64, authReqId); 132517fd14ceSopenharmony_ci 132617fd14ceSopenharmony_ci if ((authParams == NULL) || (callback == NULL) || HcStrlen(authParams) > MAX_DATA_BUFFER_SIZE) { 132717fd14ceSopenharmony_ci LOGE("The input auth params is invalid!"); 132817fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 132917fd14ceSopenharmony_ci } 133017fd14ceSopenharmony_ci CJson *context = CreateJsonFromString(authParams); 133117fd14ceSopenharmony_ci if (context == NULL) { 133217fd14ceSopenharmony_ci LOGE("Failed to create json from string!"); 133317fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 133417fd14ceSopenharmony_ci } 133517fd14ceSopenharmony_ci int32_t osAccountId = INVALID_OS_ACCOUNT; 133617fd14ceSopenharmony_ci if (GetIntFromJson(context, FIELD_OS_ACCOUNT_ID, &osAccountId) != HC_SUCCESS) { 133717fd14ceSopenharmony_ci LOGE("Failed to get osAccountId from json!"); 133817fd14ceSopenharmony_ci FreeJson(context); 133917fd14ceSopenharmony_ci return HC_ERR_JSON_FAIL; 134017fd14ceSopenharmony_ci } 134117fd14ceSopenharmony_ci osAccountId = DevAuthGetRealOsAccountLocalId(osAccountId); 134217fd14ceSopenharmony_ci if (osAccountId == INVALID_OS_ACCOUNT) { 134317fd14ceSopenharmony_ci FreeJson(context); 134417fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 134517fd14ceSopenharmony_ci } 134617fd14ceSopenharmony_ci if (!CheckIsForegroundOsAccountId(osAccountId)) { 134717fd14ceSopenharmony_ci LOGE("This access is not from the foreground user, rejected it."); 134817fd14ceSopenharmony_ci return HC_ERR_CROSS_USER_ACCESS; 134917fd14ceSopenharmony_ci } 135017fd14ceSopenharmony_ci int32_t res = BuildClientAuthContext(osAccountId, authReqId, DEFAULT_PACKAGE_NAME, context); 135117fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 135217fd14ceSopenharmony_ci FreeJson(context); 135317fd14ceSopenharmony_ci return res; 135417fd14ceSopenharmony_ci } 135517fd14ceSopenharmony_ci res = BuildP2PBindContext(context); 135617fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 135717fd14ceSopenharmony_ci FreeJson(context); 135817fd14ceSopenharmony_ci return res; 135917fd14ceSopenharmony_ci } 136017fd14ceSopenharmony_ci SessionInitParams params = { context, *callback }; 136117fd14ceSopenharmony_ci res = OpenDevSession(authReqId, DEFAULT_PACKAGE_NAME, ¶ms); 136217fd14ceSopenharmony_ci FreeJson(context); 136317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 136417fd14ceSopenharmony_ci LOGE("OpenDevSession fail. [Res]: %d", res); 136517fd14ceSopenharmony_ci return res; 136617fd14ceSopenharmony_ci } 136717fd14ceSopenharmony_ci return PushStartSessionTask(authReqId); 136817fd14ceSopenharmony_ci} 136917fd14ceSopenharmony_ci 137017fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int32_t CancelAuthRequest(int64_t requestId, const char *authParams) 137117fd14ceSopenharmony_ci{ 137217fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 137317fd14ceSopenharmony_ci SET_TRACE_ID(requestId); 137417fd14ceSopenharmony_ci if (authParams == NULL || HcStrlen(authParams) > MAX_DATA_BUFFER_SIZE) { 137517fd14ceSopenharmony_ci LOGE("Invalid authParams!"); 137617fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 137717fd14ceSopenharmony_ci } 137817fd14ceSopenharmony_ci LOGI("cancel request. [ReqId]: %" PRId64, requestId); 137917fd14ceSopenharmony_ci CancelDevSession(requestId, DEFAULT_PACKAGE_NAME); 138017fd14ceSopenharmony_ci return HC_SUCCESS; 138117fd14ceSopenharmony_ci} 138217fd14ceSopenharmony_ci 138317fd14ceSopenharmony_cistatic int32_t AllocGmAndGa(void) 138417fd14ceSopenharmony_ci{ 138517fd14ceSopenharmony_ci if (g_groupManagerInstance == NULL) { 138617fd14ceSopenharmony_ci g_groupManagerInstance = (DeviceGroupManager *)HcMalloc(sizeof(DeviceGroupManager), 0); 138717fd14ceSopenharmony_ci if (g_groupManagerInstance == NULL) { 138817fd14ceSopenharmony_ci LOGE("Failed to allocate groupManager Instance memory!"); 138917fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 139017fd14ceSopenharmony_ci } 139117fd14ceSopenharmony_ci } 139217fd14ceSopenharmony_ci if (g_groupAuthManager == NULL) { 139317fd14ceSopenharmony_ci g_groupAuthManager = (GroupAuthManager *)HcMalloc(sizeof(GroupAuthManager), 0); 139417fd14ceSopenharmony_ci if (g_groupAuthManager == NULL) { 139517fd14ceSopenharmony_ci LOGE("Failed to allocate groupAuth Instance memory!"); 139617fd14ceSopenharmony_ci HcFree(g_groupManagerInstance); 139717fd14ceSopenharmony_ci g_groupManagerInstance = NULL; 139817fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 139917fd14ceSopenharmony_ci } 140017fd14ceSopenharmony_ci } 140117fd14ceSopenharmony_ci return HC_SUCCESS; 140217fd14ceSopenharmony_ci} 140317fd14ceSopenharmony_ci 140417fd14ceSopenharmony_cistatic void DestroyGmAndGa(void) 140517fd14ceSopenharmony_ci{ 140617fd14ceSopenharmony_ci if (g_groupAuthManager != NULL) { 140717fd14ceSopenharmony_ci HcFree(g_groupAuthManager); 140817fd14ceSopenharmony_ci g_groupAuthManager = NULL; 140917fd14ceSopenharmony_ci } 141017fd14ceSopenharmony_ci if (g_groupManagerInstance != NULL) { 141117fd14ceSopenharmony_ci HcFree(g_groupManagerInstance); 141217fd14ceSopenharmony_ci g_groupManagerInstance = NULL; 141317fd14ceSopenharmony_ci } 141417fd14ceSopenharmony_ci} 141517fd14ceSopenharmony_ci 141617fd14ceSopenharmony_cistatic int32_t InitAllModules(void) 141717fd14ceSopenharmony_ci{ 141817fd14ceSopenharmony_ci int32_t res = GetLoaderInstance()->initAlg(); 141917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 142017fd14ceSopenharmony_ci LOGE("[End]: [Service]: Failed to init algorithm module!"); 142117fd14ceSopenharmony_ci return res; 142217fd14ceSopenharmony_ci } 142317fd14ceSopenharmony_ci res = InitCredMgr(); 142417fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 142517fd14ceSopenharmony_ci LOGE("[End]: [Service]: Failed to init cred mgr!"); 142617fd14ceSopenharmony_ci return res; 142717fd14ceSopenharmony_ci } 142817fd14ceSopenharmony_ci res = InitModules(); 142917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 143017fd14ceSopenharmony_ci LOGE("[End]: [Service]: Failed to init all authenticator modules!"); 143117fd14ceSopenharmony_ci goto CLEAN_CRED; 143217fd14ceSopenharmony_ci } 143317fd14ceSopenharmony_ci res = InitCallbackManager(); 143417fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 143517fd14ceSopenharmony_ci LOGE("[End]: [Service]: Failed to init callback manage module!"); 143617fd14ceSopenharmony_ci goto CLEAN_MODULE; 143717fd14ceSopenharmony_ci } 143817fd14ceSopenharmony_ci res = InitGroupManager(); 143917fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 144017fd14ceSopenharmony_ci goto CLEAN_CALLBACK; 144117fd14ceSopenharmony_ci } 144217fd14ceSopenharmony_ci res = InitDevSessionManager(); 144317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 144417fd14ceSopenharmony_ci goto CLEAN_GROUP_MANAGER; 144517fd14ceSopenharmony_ci } 144617fd14ceSopenharmony_ci (void)InitGroupAuthManager(); 144717fd14ceSopenharmony_ci res = InitTaskManager(); 144817fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 144917fd14ceSopenharmony_ci LOGE("[End]: [Service]: Failed to init worker thread!"); 145017fd14ceSopenharmony_ci goto CLEAN_ALL; 145117fd14ceSopenharmony_ci } 145217fd14ceSopenharmony_ci return res; 145317fd14ceSopenharmony_ciCLEAN_ALL: 145417fd14ceSopenharmony_ci DestroyDevSessionManager(); 145517fd14ceSopenharmony_ciCLEAN_GROUP_MANAGER: 145617fd14ceSopenharmony_ci DestroyGroupManager(); 145717fd14ceSopenharmony_ciCLEAN_CALLBACK: 145817fd14ceSopenharmony_ci DestroyCallbackManager(); 145917fd14ceSopenharmony_ciCLEAN_MODULE: 146017fd14ceSopenharmony_ci DestroyModules(); 146117fd14ceSopenharmony_ciCLEAN_CRED: 146217fd14ceSopenharmony_ci DestroyCredMgr(); 146317fd14ceSopenharmony_ci return res; 146417fd14ceSopenharmony_ci} 146517fd14ceSopenharmony_ci 146617fd14ceSopenharmony_cistatic void InitPseudonymModule(void) 146717fd14ceSopenharmony_ci{ 146817fd14ceSopenharmony_ci PseudonymManager *manager = GetPseudonymInstance(); 146917fd14ceSopenharmony_ci if (manager == NULL) { 147017fd14ceSopenharmony_ci LOGE("Pseudonym manager is null!"); 147117fd14ceSopenharmony_ci return; 147217fd14ceSopenharmony_ci } 147317fd14ceSopenharmony_ci manager->loadPseudonymData(); 147417fd14ceSopenharmony_ci} 147517fd14ceSopenharmony_ci 147617fd14ceSopenharmony_cistatic void DoOnChannelOpened(HcTaskBase *baseTask) 147717fd14ceSopenharmony_ci{ 147817fd14ceSopenharmony_ci if (baseTask == NULL) { 147917fd14ceSopenharmony_ci LOGE("The input task is NULL!"); 148017fd14ceSopenharmony_ci return; 148117fd14ceSopenharmony_ci } 148217fd14ceSopenharmony_ci SoftBusTask *task = (SoftBusTask *)baseTask; 148317fd14ceSopenharmony_ci SET_LOG_MODE(TRACE_MODE); 148417fd14ceSopenharmony_ci SET_TRACE_ID(task->requestId); 148517fd14ceSopenharmony_ci LOGI("[Start]: DoOnChannelOpened!"); 148617fd14ceSopenharmony_ci int32_t res = StartDevSession(task->requestId); 148717fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 148817fd14ceSopenharmony_ci LOGE("start session fail.[Res]: %d", res); 148917fd14ceSopenharmony_ci CloseDevSession(task->requestId); 149017fd14ceSopenharmony_ci } 149117fd14ceSopenharmony_ci} 149217fd14ceSopenharmony_ci 149317fd14ceSopenharmony_cistatic void InitSoftBusTask(SoftBusTask *task, int64_t requestId) 149417fd14ceSopenharmony_ci{ 149517fd14ceSopenharmony_ci task->base.doAction = DoOnChannelOpened; 149617fd14ceSopenharmony_ci task->base.destroy = NULL; 149717fd14ceSopenharmony_ci task->requestId = requestId; 149817fd14ceSopenharmony_ci} 149917fd14ceSopenharmony_ci 150017fd14ceSopenharmony_cistatic int OnChannelOpenedCb(int64_t requestId, int result) 150117fd14ceSopenharmony_ci{ 150217fd14ceSopenharmony_ci if (result != HC_SUCCESS) { 150317fd14ceSopenharmony_ci LOGE("[SoftBus][Out]: Failed to open channel! res: %d", result); 150417fd14ceSopenharmony_ci CloseDevSession(requestId); 150517fd14ceSopenharmony_ci return HC_ERR_SOFT_BUS; 150617fd14ceSopenharmony_ci } 150717fd14ceSopenharmony_ci LOGI("[Start]: OnChannelOpened! [ReqId]: %" PRId64, requestId); 150817fd14ceSopenharmony_ci SoftBusTask *task = (SoftBusTask *)HcMalloc(sizeof(SoftBusTask), 0); 150917fd14ceSopenharmony_ci if (task == NULL) { 151017fd14ceSopenharmony_ci LOGE("Failed to allocate task memory!"); 151117fd14ceSopenharmony_ci CloseDevSession(requestId); 151217fd14ceSopenharmony_ci return HC_ERR_ALLOC_MEMORY; 151317fd14ceSopenharmony_ci } 151417fd14ceSopenharmony_ci InitSoftBusTask(task, requestId); 151517fd14ceSopenharmony_ci if (PushTask((HcTaskBase *)task) != HC_SUCCESS) { 151617fd14ceSopenharmony_ci HcFree(task); 151717fd14ceSopenharmony_ci CloseDevSession(requestId); 151817fd14ceSopenharmony_ci return HC_ERR_INIT_TASK_FAIL; 151917fd14ceSopenharmony_ci } 152017fd14ceSopenharmony_ci LOGI("[End]: OnChannelOpened!"); 152117fd14ceSopenharmony_ci return HC_SUCCESS; 152217fd14ceSopenharmony_ci} 152317fd14ceSopenharmony_ci 152417fd14ceSopenharmony_cistatic void OnChannelClosedCb(void) 152517fd14ceSopenharmony_ci{ 152617fd14ceSopenharmony_ci return; 152717fd14ceSopenharmony_ci} 152817fd14ceSopenharmony_ci 152917fd14ceSopenharmony_cistatic void OnBytesReceivedCb(int64_t requestId, uint8_t *data, uint32_t dataLen) 153017fd14ceSopenharmony_ci{ 153117fd14ceSopenharmony_ci if ((data == NULL) || (dataLen == 0) || (dataLen > MAX_DATA_BUFFER_SIZE)) { 153217fd14ceSopenharmony_ci LOGE("Invalid input params!"); 153317fd14ceSopenharmony_ci return; 153417fd14ceSopenharmony_ci } 153517fd14ceSopenharmony_ci (void)ProcessBindData(requestId, data, dataLen); 153617fd14ceSopenharmony_ci} 153717fd14ceSopenharmony_ci 153817fd14ceSopenharmony_cistatic int32_t RegCallback(const char *appId, const DeviceAuthCallback *callback) 153917fd14ceSopenharmony_ci{ 154017fd14ceSopenharmony_ci SET_LOG_MODE(NORMAL_MODE); 154117fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(DEFAULT_OS_ACCOUNT, NULL, appId, REG_CALLBACK_EVENT); 154217fd14ceSopenharmony_ci if ((appId == NULL) || (callback == NULL)) { 154317fd14ceSopenharmony_ci LOGE("The input parameters contains NULL value!"); 154417fd14ceSopenharmony_ci return HC_ERR_INVALID_PARAMS; 154517fd14ceSopenharmony_ci } 154617fd14ceSopenharmony_ci ChannelProxy proxy = { 154717fd14ceSopenharmony_ci .onChannelOpened = OnChannelOpenedCb, 154817fd14ceSopenharmony_ci .onChannelClosed = OnChannelClosedCb, 154917fd14ceSopenharmony_ci .onBytesReceived = OnBytesReceivedCb 155017fd14ceSopenharmony_ci }; 155117fd14ceSopenharmony_ci int32_t res = InitChannelManager(&proxy); 155217fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 155317fd14ceSopenharmony_ci LOGE("[End]: [Service]: Failed to init channel manage module!"); 155417fd14ceSopenharmony_ci return res; 155517fd14ceSopenharmony_ci } 155617fd14ceSopenharmony_ci return RegGroupManagerCallback(appId, callback); 155717fd14ceSopenharmony_ci} 155817fd14ceSopenharmony_ci 155917fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void) 156017fd14ceSopenharmony_ci{ 156117fd14ceSopenharmony_ci LOGI("[Service]: Start to init device auth service!"); 156217fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(DEFAULT_OS_ACCOUNT, NULL, NULL, INIT_DEVICE_AUTH_SERVICE_EVENT); 156317fd14ceSopenharmony_ci if (CheckInit() == FINISH_INIT) { 156417fd14ceSopenharmony_ci LOGI("[End]: [Service]: Device auth service is running!"); 156517fd14ceSopenharmony_ci return HC_SUCCESS; 156617fd14ceSopenharmony_ci } 156717fd14ceSopenharmony_ci int32_t res = AllocGmAndGa(); 156817fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 156917fd14ceSopenharmony_ci return res; 157017fd14ceSopenharmony_ci } 157117fd14ceSopenharmony_ci InitOsAccountAdapter(); 157217fd14ceSopenharmony_ci res = InitAllModules(); 157317fd14ceSopenharmony_ci if (res != HC_SUCCESS) { 157417fd14ceSopenharmony_ci DestroyGmAndGa(); 157517fd14ceSopenharmony_ci return res; 157617fd14ceSopenharmony_ci } 157717fd14ceSopenharmony_ci INIT_PERFORMANCE_DUMPER(); 157817fd14ceSopenharmony_ci InitPseudonymModule(); 157917fd14ceSopenharmony_ci DEV_AUTH_LOAD_PLUGIN(); 158017fd14ceSopenharmony_ci SetInitStatus(); 158117fd14ceSopenharmony_ci LOGI("[End]: [Service]: Init device auth service successfully!"); 158217fd14ceSopenharmony_ci return HC_SUCCESS; 158317fd14ceSopenharmony_ci} 158417fd14ceSopenharmony_ci 158517fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC void DestroyDeviceAuthService(void) 158617fd14ceSopenharmony_ci{ 158717fd14ceSopenharmony_ci LOGI("[Service]: Start to destroy device auth service!"); 158817fd14ceSopenharmony_ci DEV_AUTH_REPORT_UE_CALL_EVENT_BY_PARAMS(DEFAULT_OS_ACCOUNT, NULL, NULL, DESTROY_DEVICE_AUTH_SERVICE_EVENT); 158917fd14ceSopenharmony_ci if (CheckDestroy() == FINISH_DESTROY) { 159017fd14ceSopenharmony_ci LOGI("[End]: [Service]: The service has not been initialized!"); 159117fd14ceSopenharmony_ci return; 159217fd14ceSopenharmony_ci } 159317fd14ceSopenharmony_ci DestroyTaskManager(); 159417fd14ceSopenharmony_ci DestroyDevSessionManager(); 159517fd14ceSopenharmony_ci DestroyGroupManager(); 159617fd14ceSopenharmony_ci DestroyGmAndGa(); 159717fd14ceSopenharmony_ci DEV_AUTH_UNLOAD_PLUGIN(); 159817fd14ceSopenharmony_ci DestroyModules(); 159917fd14ceSopenharmony_ci DestroyCredMgr(); 160017fd14ceSopenharmony_ci DestroyChannelManager(); 160117fd14ceSopenharmony_ci DestroyCallbackManager(); 160217fd14ceSopenharmony_ci DESTROY_PERFORMANCE_DUMPER(); 160317fd14ceSopenharmony_ci DestroyPseudonymManager(); 160417fd14ceSopenharmony_ci DestroyOsAccountAdapter(); 160517fd14ceSopenharmony_ci SetDeInitStatus(); 160617fd14ceSopenharmony_ci LOGI("[End]: [Service]: Destroy device auth service successfully!"); 160717fd14ceSopenharmony_ci} 160817fd14ceSopenharmony_ci 160917fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC const DeviceGroupManager *GetGmInstance(void) 161017fd14ceSopenharmony_ci{ 161117fd14ceSopenharmony_ci if (g_groupManagerInstance == NULL) { 161217fd14ceSopenharmony_ci LOGE("Service not init."); 161317fd14ceSopenharmony_ci return NULL; 161417fd14ceSopenharmony_ci } 161517fd14ceSopenharmony_ci 161617fd14ceSopenharmony_ci g_groupManagerInstance->regCallback = RegCallback; 161717fd14ceSopenharmony_ci g_groupManagerInstance->unRegCallback = UnRegGroupManagerCallback; 161817fd14ceSopenharmony_ci g_groupManagerInstance->regDataChangeListener = RegListenerImpl; 161917fd14ceSopenharmony_ci g_groupManagerInstance->unRegDataChangeListener = UnRegListenerImpl; 162017fd14ceSopenharmony_ci g_groupManagerInstance->createGroup = CreateGroupImpl; 162117fd14ceSopenharmony_ci g_groupManagerInstance->deleteGroup = DeleteGroupImpl; 162217fd14ceSopenharmony_ci g_groupManagerInstance->addMemberToGroup = AddMemberToGroup; 162317fd14ceSopenharmony_ci g_groupManagerInstance->deleteMemberFromGroup = DeleteMemberFromGroupImpl; 162417fd14ceSopenharmony_ci g_groupManagerInstance->addMultiMembersToGroup = AddMultiMembersToGroupImpl; 162517fd14ceSopenharmony_ci g_groupManagerInstance->delMultiMembersFromGroup = DelMultiMembersFromGroupImpl; 162617fd14ceSopenharmony_ci g_groupManagerInstance->processData = ProcessBindData; 162717fd14ceSopenharmony_ci g_groupManagerInstance->getRegisterInfo = GetRegisterInfoImpl; 162817fd14ceSopenharmony_ci g_groupManagerInstance->checkAccessToGroup = CheckAccessToGroupImpl; 162917fd14ceSopenharmony_ci g_groupManagerInstance->getPkInfoList = GetPkInfoListImpl; 163017fd14ceSopenharmony_ci g_groupManagerInstance->getGroupInfoById = GetGroupInfoByIdImpl; 163117fd14ceSopenharmony_ci g_groupManagerInstance->getGroupInfo = GetGroupInfoImpl; 163217fd14ceSopenharmony_ci g_groupManagerInstance->getJoinedGroups = GetJoinedGroupsImpl; 163317fd14ceSopenharmony_ci g_groupManagerInstance->getRelatedGroups = GetRelatedGroupsImpl; 163417fd14ceSopenharmony_ci g_groupManagerInstance->getDeviceInfoById = GetDeviceInfoByIdImpl; 163517fd14ceSopenharmony_ci g_groupManagerInstance->getTrustedDevices = GetTrustedDevicesImpl; 163617fd14ceSopenharmony_ci g_groupManagerInstance->isDeviceInGroup = IsDeviceInGroupImpl; 163717fd14ceSopenharmony_ci g_groupManagerInstance->cancelRequest = CancelRequest; 163817fd14ceSopenharmony_ci g_groupManagerInstance->destroyInfo = DestroyInfoImpl; 163917fd14ceSopenharmony_ci return g_groupManagerInstance; 164017fd14ceSopenharmony_ci} 164117fd14ceSopenharmony_ci 164217fd14ceSopenharmony_ciDEVICE_AUTH_API_PUBLIC const GroupAuthManager *GetGaInstance(void) 164317fd14ceSopenharmony_ci{ 164417fd14ceSopenharmony_ci if (g_groupAuthManager == NULL) { 164517fd14ceSopenharmony_ci LOGE("Service not init."); 164617fd14ceSopenharmony_ci return NULL; 164717fd14ceSopenharmony_ci } 164817fd14ceSopenharmony_ci 164917fd14ceSopenharmony_ci g_groupAuthManager->processData = ProcessData; 165017fd14ceSopenharmony_ci g_groupAuthManager->authDevice = AuthDevice; 165117fd14ceSopenharmony_ci g_groupAuthManager->cancelRequest = CancelRequest; 165217fd14ceSopenharmony_ci g_groupAuthManager->getRealInfo = GetRealInfo; 165317fd14ceSopenharmony_ci g_groupAuthManager->getPseudonymId = GetPseudonymId; 165417fd14ceSopenharmony_ci return g_groupAuthManager; 165517fd14ceSopenharmony_ci} 1656