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 "ipc_service.h"
1717fd14ceSopenharmony_ci
1817fd14ceSopenharmony_ci#include "common_defs.h"
1917fd14ceSopenharmony_ci#include "device_auth_defines.h"
2017fd14ceSopenharmony_ci#include "device_auth.h"
2117fd14ceSopenharmony_ci#include "hc_condition.h"
2217fd14ceSopenharmony_ci#include "hc_log.h"
2317fd14ceSopenharmony_ci#include "hc_thread.h"
2417fd14ceSopenharmony_ci#include "ipc_adapt.h"
2517fd14ceSopenharmony_ci#include "ipc_sdk.h"
2617fd14ceSopenharmony_ci#include "securec.h"
2717fd14ceSopenharmony_ci
2817fd14ceSopenharmony_ci#ifdef __cplusplus
2917fd14ceSopenharmony_ciextern "C" {
3017fd14ceSopenharmony_ci#endif
3117fd14ceSopenharmony_ci
3217fd14ceSopenharmony_cistatic const int32_t IPC_RESULT_NUM_1 = 1;
3317fd14ceSopenharmony_cistatic const int32_t IPC_RESULT_NUM_2 = 2;
3417fd14ceSopenharmony_cistatic const char *SERVICE_APP_ID = "deviceauth_service";
3517fd14ceSopenharmony_cistatic DeviceGroupManager g_devGroupMgrMethod = {NULL};
3617fd14ceSopenharmony_cistatic GroupAuthManager g_groupAuthMgrMethod = {NULL};
3717fd14ceSopenharmony_cistatic DeviceAuthCallback g_bindCbAdt = {NULL};
3817fd14ceSopenharmony_cistatic DeviceAuthCallback g_authCbAdt = {NULL};
3917fd14ceSopenharmony_cistatic DataChangeListener g_listenCbAdt = {NULL};
4017fd14ceSopenharmony_ci
4117fd14ceSopenharmony_cistatic int32_t BindRequestIdWithAppId(const char *data)
4217fd14ceSopenharmony_ci{
4317fd14ceSopenharmony_ci    const char *appId = NULL;
4417fd14ceSopenharmony_ci    int32_t ret;
4517fd14ceSopenharmony_ci    int64_t requestId = -1;
4617fd14ceSopenharmony_ci    CJson *dataJson = CreateJsonFromString(data);
4717fd14ceSopenharmony_ci    if (dataJson == NULL) {
4817fd14ceSopenharmony_ci        LOGE("failed to create json from string!");
4917fd14ceSopenharmony_ci        return HC_ERR_JSON_CREATE;
5017fd14ceSopenharmony_ci    }
5117fd14ceSopenharmony_ci
5217fd14ceSopenharmony_ci    appId = GetStringFromJson(dataJson, FIELD_APP_ID);
5317fd14ceSopenharmony_ci    if (appId == NULL) {
5417fd14ceSopenharmony_ci        LOGE("failed to get appId from json object!");
5517fd14ceSopenharmony_ci        FreeJson(dataJson);
5617fd14ceSopenharmony_ci        return HC_ERROR;
5717fd14ceSopenharmony_ci    }
5817fd14ceSopenharmony_ci    (void)GetInt64FromJson(dataJson, FIELD_REQUEST_ID, &requestId);
5917fd14ceSopenharmony_ci    ret = AddReqIdByAppId(appId, requestId);
6017fd14ceSopenharmony_ci    FreeJson(dataJson);
6117fd14ceSopenharmony_ci    return ret;
6217fd14ceSopenharmony_ci}
6317fd14ceSopenharmony_ci
6417fd14ceSopenharmony_cistatic int32_t IpcServiceGmRegCallback(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
6517fd14ceSopenharmony_ci{
6617fd14ceSopenharmony_ci    int32_t callRet;
6717fd14ceSopenharmony_ci    int32_t ret;
6817fd14ceSopenharmony_ci    const char *appId = NULL;
6917fd14ceSopenharmony_ci    const DeviceAuthCallback *callback = NULL;
7017fd14ceSopenharmony_ci    int32_t cbObjIdx = -1;
7117fd14ceSopenharmony_ci    int32_t inOutLen;
7217fd14ceSopenharmony_ci
7317fd14ceSopenharmony_ci    LOGI("starting ...");
7417fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
7517fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
7617fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
7717fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
7817fd14ceSopenharmony_ci    }
7917fd14ceSopenharmony_ci
8017fd14ceSopenharmony_ci    inOutLen = sizeof(DeviceAuthCallback);
8117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&callback, &inOutLen);
8217fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DeviceAuthCallback))) {
8317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEV_AUTH_CB);
8417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
8517fd14ceSopenharmony_ci    }
8617fd14ceSopenharmony_ci    ret = AddIpcCallBackByAppId(appId, (const uint8_t *)callback, sizeof(DeviceAuthCallback), CB_TYPE_DEV_AUTH);
8717fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
8817fd14ceSopenharmony_ci        LOGE("add ipc callback failed");
8917fd14ceSopenharmony_ci        return HC_ERROR;
9017fd14ceSopenharmony_ci    }
9117fd14ceSopenharmony_ci
9217fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
9317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
9417fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
9517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CB_OBJECT);
9617fd14ceSopenharmony_ci        DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
9717fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
9817fd14ceSopenharmony_ci    }
9917fd14ceSopenharmony_ci    AddIpcCbObjByAppId(appId, cbObjIdx, CB_TYPE_DEV_AUTH);
10017fd14ceSopenharmony_ci    InitDeviceAuthCbCtx(&g_bindCbAdt, CB_TYPE_DEV_AUTH);
10117fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.regCallback(appId, &g_bindCbAdt);
10217fd14ceSopenharmony_ci    if (callRet != HC_SUCCESS) {
10317fd14ceSopenharmony_ci        DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
10417fd14ceSopenharmony_ci    }
10517fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
10617fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
10717fd14ceSopenharmony_ci    return ret;
10817fd14ceSopenharmony_ci}
10917fd14ceSopenharmony_ci
11017fd14ceSopenharmony_cistatic int32_t IpcServiceGmUnRegCallback(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
11117fd14ceSopenharmony_ci{
11217fd14ceSopenharmony_ci    int32_t callRet = HC_SUCCESS;
11317fd14ceSopenharmony_ci    int32_t ret;
11417fd14ceSopenharmony_ci    const char *appId = NULL;
11517fd14ceSopenharmony_ci
11617fd14ceSopenharmony_ci    LOGI("starting ...");
11717fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
11817fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
11917fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
12017fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
12117fd14ceSopenharmony_ci    }
12217fd14ceSopenharmony_ci
12317fd14ceSopenharmony_ci    DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
12417fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
12517fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
12617fd14ceSopenharmony_ci    return ret;
12717fd14ceSopenharmony_ci}
12817fd14ceSopenharmony_ci
12917fd14ceSopenharmony_cistatic int32_t IpcServiceGmRegDataChangeListener(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
13017fd14ceSopenharmony_ci{
13117fd14ceSopenharmony_ci    int32_t callRet;
13217fd14ceSopenharmony_ci    int32_t ret;
13317fd14ceSopenharmony_ci    const char *appId = NULL;
13417fd14ceSopenharmony_ci    const DataChangeListener *callback = NULL;
13517fd14ceSopenharmony_ci    static int32_t registered = 0;
13617fd14ceSopenharmony_ci    int32_t cbObjIdx = -1;
13717fd14ceSopenharmony_ci    int32_t inOutLen;
13817fd14ceSopenharmony_ci
13917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
14017fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
14117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
14217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
14317fd14ceSopenharmony_ci    }
14417fd14ceSopenharmony_ci
14517fd14ceSopenharmony_ci    inOutLen = sizeof(DataChangeListener);
14617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_LISTERNER, (uint8_t *)&callback, &inOutLen);
14717fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DataChangeListener))) {
14817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_LISTERNER);
14917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
15017fd14ceSopenharmony_ci    }
15117fd14ceSopenharmony_ci
15217fd14ceSopenharmony_ci    ret = AddIpcCallBackByAppId(appId, (const uint8_t *)callback, sizeof(DataChangeListener), CB_TYPE_LISTENER);
15317fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
15417fd14ceSopenharmony_ci        LOGE("add ipc callback failed");
15517fd14ceSopenharmony_ci        return HC_ERROR;
15617fd14ceSopenharmony_ci    }
15717fd14ceSopenharmony_ci
15817fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
15917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
16017fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
16117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CB_OBJECT);
16217fd14ceSopenharmony_ci        DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
16317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
16417fd14ceSopenharmony_ci    }
16517fd14ceSopenharmony_ci    AddIpcCbObjByAppId(appId, cbObjIdx, CB_TYPE_LISTENER);
16617fd14ceSopenharmony_ci
16717fd14ceSopenharmony_ci    callRet = HC_SUCCESS;
16817fd14ceSopenharmony_ci    if (registered == 0) {
16917fd14ceSopenharmony_ci        InitDevAuthListenerCbCtx(&g_listenCbAdt);
17017fd14ceSopenharmony_ci        callRet = g_devGroupMgrMethod.regDataChangeListener(SERVICE_APP_ID, &g_listenCbAdt);
17117fd14ceSopenharmony_ci        if (callRet == HC_SUCCESS) {
17217fd14ceSopenharmony_ci            registered = 1;
17317fd14ceSopenharmony_ci        } else {
17417fd14ceSopenharmony_ci            DelIpcCallBackByAppId(appId, CB_TYPE_LISTENER);
17517fd14ceSopenharmony_ci        }
17617fd14ceSopenharmony_ci    }
17717fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
17817fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
17917fd14ceSopenharmony_ci    return ret;
18017fd14ceSopenharmony_ci}
18117fd14ceSopenharmony_ci
18217fd14ceSopenharmony_cistatic int32_t IpcServiceGmUnRegDataChangeListener(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
18317fd14ceSopenharmony_ci{
18417fd14ceSopenharmony_ci    int32_t callRet = HC_SUCCESS;
18517fd14ceSopenharmony_ci    int32_t ret;
18617fd14ceSopenharmony_ci    const char *appId = NULL;
18717fd14ceSopenharmony_ci
18817fd14ceSopenharmony_ci    LOGI("starting ...");
18917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
19017fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
19117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
19217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
19317fd14ceSopenharmony_ci    }
19417fd14ceSopenharmony_ci    DelIpcCallBackByAppId(appId, CB_TYPE_LISTENER);
19517fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
19617fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
19717fd14ceSopenharmony_ci    return ret;
19817fd14ceSopenharmony_ci}
19917fd14ceSopenharmony_ci
20017fd14ceSopenharmony_cistatic int32_t IpcServiceGmCreateGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
20117fd14ceSopenharmony_ci{
20217fd14ceSopenharmony_ci    int32_t callRet;
20317fd14ceSopenharmony_ci    int32_t ret;
20417fd14ceSopenharmony_ci    int32_t osAccountId;
20517fd14ceSopenharmony_ci    int64_t requestId = 0;
20617fd14ceSopenharmony_ci    int32_t inOutLen;
20717fd14ceSopenharmony_ci    const char *createParams = NULL;
20817fd14ceSopenharmony_ci    const char *appId = NULL;
20917fd14ceSopenharmony_ci
21017fd14ceSopenharmony_ci    LOGI("starting ...");
21117fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
21217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
21317fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
21417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
21517fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
21617fd14ceSopenharmony_ci    }
21717fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
21817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
21917fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int64_t)) || (ret != HC_SUCCESS)) {
22017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
22117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
22217fd14ceSopenharmony_ci    }
22317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
22417fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
22517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
22617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
22717fd14ceSopenharmony_ci    }
22817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CREATE_PARAMS, (uint8_t *)&createParams, NULL);
22917fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
23017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CREATE_PARAMS);
23117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
23217fd14ceSopenharmony_ci    }
23317fd14ceSopenharmony_ci    ret = AddReqIdByAppId(appId, requestId);
23417fd14ceSopenharmony_ci    if (ret != 0) {
23517fd14ceSopenharmony_ci        LOGE("bind request id by app id failed");
23617fd14ceSopenharmony_ci        return ret;
23717fd14ceSopenharmony_ci    }
23817fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.createGroup(osAccountId, requestId, appId, createParams);
23917fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
24017fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
24117fd14ceSopenharmony_ci    return ret;
24217fd14ceSopenharmony_ci}
24317fd14ceSopenharmony_ci
24417fd14ceSopenharmony_cistatic int32_t IpcServiceGmDelGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
24517fd14ceSopenharmony_ci{
24617fd14ceSopenharmony_ci    int32_t callRet;
24717fd14ceSopenharmony_ci    int32_t ret;
24817fd14ceSopenharmony_ci    int32_t osAccountId;
24917fd14ceSopenharmony_ci    int64_t requestId = 0;
25017fd14ceSopenharmony_ci    int32_t inOutLen;
25117fd14ceSopenharmony_ci    const char *appId = NULL;
25217fd14ceSopenharmony_ci    const char *delParams = NULL;
25317fd14ceSopenharmony_ci
25417fd14ceSopenharmony_ci    LOGI("starting ...");
25517fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
25617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
25717fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
25817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
25917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
26017fd14ceSopenharmony_ci    }
26117fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
26217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
26317fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int64_t)) || (ret != HC_SUCCESS)) {
26417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
26517fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
26617fd14ceSopenharmony_ci    }
26717fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
26817fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
26917fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
27017fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
27117fd14ceSopenharmony_ci    }
27217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEL_PARAMS, (uint8_t *)&delParams, NULL);
27317fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
27417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEL_PARAMS);
27517fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
27617fd14ceSopenharmony_ci    }
27717fd14ceSopenharmony_ci    ret = AddReqIdByAppId(appId, requestId);
27817fd14ceSopenharmony_ci    if (ret != 0) {
27917fd14ceSopenharmony_ci        LOGE("bind request id by app id failed");
28017fd14ceSopenharmony_ci        return ret;
28117fd14ceSopenharmony_ci    }
28217fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.deleteGroup(osAccountId, requestId, appId, delParams);
28317fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
28417fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
28517fd14ceSopenharmony_ci    return ret;
28617fd14ceSopenharmony_ci}
28717fd14ceSopenharmony_ci
28817fd14ceSopenharmony_cistatic int32_t IpcServiceGmAddMemberToGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
28917fd14ceSopenharmony_ci{
29017fd14ceSopenharmony_ci    int32_t callRet;
29117fd14ceSopenharmony_ci    int32_t ret;
29217fd14ceSopenharmony_ci    int32_t inOutLen;
29317fd14ceSopenharmony_ci    int32_t osAccountId;
29417fd14ceSopenharmony_ci    int64_t requestId = 0;
29517fd14ceSopenharmony_ci    const char *addParams = NULL;
29617fd14ceSopenharmony_ci    const char *appId = NULL;
29717fd14ceSopenharmony_ci
29817fd14ceSopenharmony_ci    LOGI("starting ...");
29917fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
30017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
30117fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
30217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
30317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
30417fd14ceSopenharmony_ci    }
30517fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
30617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
30717fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int64_t)) || (ret != HC_SUCCESS)) {
30817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
30917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
31017fd14ceSopenharmony_ci    }
31117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_ADD_PARAMS, (uint8_t *)&addParams, NULL);
31217fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
31317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_ADD_PARAMS);
31417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
31517fd14ceSopenharmony_ci    }
31617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
31717fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
31817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
31917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
32017fd14ceSopenharmony_ci    }
32117fd14ceSopenharmony_ci    ret = AddReqIdByAppId(appId, requestId);
32217fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
32317fd14ceSopenharmony_ci        return ret;
32417fd14ceSopenharmony_ci    }
32517fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.addMemberToGroup(osAccountId, requestId, appId, addParams);
32617fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
32717fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
32817fd14ceSopenharmony_ci    return ret;
32917fd14ceSopenharmony_ci}
33017fd14ceSopenharmony_ci
33117fd14ceSopenharmony_cistatic int32_t IpcServiceGmDelMemberFromGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
33217fd14ceSopenharmony_ci{
33317fd14ceSopenharmony_ci    int32_t callRet;
33417fd14ceSopenharmony_ci    int32_t ret;
33517fd14ceSopenharmony_ci    int32_t inOutLen;
33617fd14ceSopenharmony_ci    int32_t osAccountId;
33717fd14ceSopenharmony_ci    int64_t requestId = 0;
33817fd14ceSopenharmony_ci    const char *delParams = NULL;
33917fd14ceSopenharmony_ci    const char *appId = NULL;
34017fd14ceSopenharmony_ci
34117fd14ceSopenharmony_ci    LOGI("starting ...");
34217fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
34317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
34417fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
34517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
34617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
34717fd14ceSopenharmony_ci    }
34817fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
34917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
35017fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int64_t)) || (ret != HC_SUCCESS)) {
35117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
35217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
35317fd14ceSopenharmony_ci    }
35417fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
35517fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
35617fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
35717fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
35817fd14ceSopenharmony_ci    }
35917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEL_PARAMS, (uint8_t *)&delParams, NULL);
36017fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
36117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEL_PARAMS);
36217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
36317fd14ceSopenharmony_ci    }
36417fd14ceSopenharmony_ci    ret = AddReqIdByAppId(appId, requestId);
36517fd14ceSopenharmony_ci    if (ret != 0) {
36617fd14ceSopenharmony_ci        LOGE("bind request id by app id failed");
36717fd14ceSopenharmony_ci        return ret;
36817fd14ceSopenharmony_ci    }
36917fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.deleteMemberFromGroup(osAccountId, requestId, appId, delParams);
37017fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
37117fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
37217fd14ceSopenharmony_ci    return ret;
37317fd14ceSopenharmony_ci}
37417fd14ceSopenharmony_ci
37517fd14ceSopenharmony_cistatic int32_t IpcServiceGmAddMultiMembersToGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
37617fd14ceSopenharmony_ci{
37717fd14ceSopenharmony_ci    int32_t callRet;
37817fd14ceSopenharmony_ci    int32_t ret;
37917fd14ceSopenharmony_ci    int32_t inOutLen;
38017fd14ceSopenharmony_ci    int32_t osAccountId;
38117fd14ceSopenharmony_ci    const char *addParams = NULL;
38217fd14ceSopenharmony_ci    const char *appId = NULL;
38317fd14ceSopenharmony_ci
38417fd14ceSopenharmony_ci    LOGI("starting ...");
38517fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
38617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
38717fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
38817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
38917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
39017fd14ceSopenharmony_ci    }
39117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_ADD_PARAMS, (uint8_t *)&addParams, NULL);
39217fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
39317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_ADD_PARAMS);
39417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
39517fd14ceSopenharmony_ci    }
39617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
39717fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
39817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
39917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
40017fd14ceSopenharmony_ci    }
40117fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.addMultiMembersToGroup(osAccountId, appId, addParams);
40217fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
40317fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
40417fd14ceSopenharmony_ci    return ret;
40517fd14ceSopenharmony_ci}
40617fd14ceSopenharmony_ci
40717fd14ceSopenharmony_cistatic int32_t IpcServiceGmDelMultiMembersFromGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
40817fd14ceSopenharmony_ci{
40917fd14ceSopenharmony_ci    int32_t callRet;
41017fd14ceSopenharmony_ci    int32_t ret;
41117fd14ceSopenharmony_ci    int32_t inOutLen;
41217fd14ceSopenharmony_ci    int32_t osAccountId;
41317fd14ceSopenharmony_ci    const char *delParams = NULL;
41417fd14ceSopenharmony_ci    const char *appId = NULL;
41517fd14ceSopenharmony_ci
41617fd14ceSopenharmony_ci    LOGI("starting ...");
41717fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
41817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
41917fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
42017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
42117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
42217fd14ceSopenharmony_ci    }
42317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
42417fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
42517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
42617fd14ceSopenharmony_ci        return ret;
42717fd14ceSopenharmony_ci    }
42817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEL_PARAMS, (uint8_t *)&delParams, NULL);
42917fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
43017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEL_PARAMS);
43117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
43217fd14ceSopenharmony_ci    }
43317fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.delMultiMembersFromGroup(osAccountId, appId, delParams);
43417fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
43517fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
43617fd14ceSopenharmony_ci    return ret;
43717fd14ceSopenharmony_ci}
43817fd14ceSopenharmony_ci
43917fd14ceSopenharmony_cistatic int32_t IpcServiceGmProcessData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
44017fd14ceSopenharmony_ci{
44117fd14ceSopenharmony_ci    int32_t callRet;
44217fd14ceSopenharmony_ci    int32_t ret;
44317fd14ceSopenharmony_ci    int32_t dataLen;
44417fd14ceSopenharmony_ci    int32_t inOutLen;
44517fd14ceSopenharmony_ci    int64_t requestId = 0;
44617fd14ceSopenharmony_ci    const uint8_t *data = NULL;
44717fd14ceSopenharmony_ci
44817fd14ceSopenharmony_ci    LOGI("starting ...");
44917fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
45017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
45117fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int64_t)) || (ret != HC_SUCCESS)) {
45217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
45317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
45417fd14ceSopenharmony_ci    }
45517fd14ceSopenharmony_ci
45617fd14ceSopenharmony_ci    dataLen = 0;
45717fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_COMM_DATA, (uint8_t *)&data, &dataLen);
45817fd14ceSopenharmony_ci    if ((dataLen <= 0) || (ret != HC_SUCCESS)) {
45917fd14ceSopenharmony_ci        LOGE("get param error, type %d, data length %d", PARAM_TYPE_COMM_DATA, dataLen);
46017fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
46117fd14ceSopenharmony_ci    }
46217fd14ceSopenharmony_ci    ret = BindRequestIdWithAppId((const char *)data);
46317fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
46417fd14ceSopenharmony_ci        return ret;
46517fd14ceSopenharmony_ci    }
46617fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.processData(requestId, data, dataLen);
46717fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
46817fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
46917fd14ceSopenharmony_ci    return ret;
47017fd14ceSopenharmony_ci}
47117fd14ceSopenharmony_ci
47217fd14ceSopenharmony_cistatic int32_t IpcServiceGmApplyRegisterInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
47317fd14ceSopenharmony_ci{
47417fd14ceSopenharmony_ci    int32_t callRet;
47517fd14ceSopenharmony_ci    int32_t ret;
47617fd14ceSopenharmony_ci    const char *reqJsonStr = NULL;
47717fd14ceSopenharmony_ci    char *registerInfo = NULL;
47817fd14ceSopenharmony_ci
47917fd14ceSopenharmony_ci    LOGI("starting ...");
48017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQ_JSON, (uint8_t *)&reqJsonStr, NULL);
48117fd14ceSopenharmony_ci    if ((reqJsonStr == NULL) || (ret != HC_SUCCESS)) {
48217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQ_JSON);
48317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
48417fd14ceSopenharmony_ci    }
48517fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getRegisterInfo(reqJsonStr, &registerInfo);
48617fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
48717fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
48817fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
48917fd14ceSopenharmony_ci    if (registerInfo != NULL) {
49017fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_REG_INFO,
49117fd14ceSopenharmony_ci            (const uint8_t *)registerInfo, HcStrlen(registerInfo) + 1);
49217fd14ceSopenharmony_ci        g_devGroupMgrMethod.destroyInfo(&registerInfo);
49317fd14ceSopenharmony_ci    } else {
49417fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_REG_INFO, NULL, 0);
49517fd14ceSopenharmony_ci    }
49617fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
49717fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
49817fd14ceSopenharmony_ci}
49917fd14ceSopenharmony_ci
50017fd14ceSopenharmony_cistatic int32_t IpcServiceGmCheckAccessToGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
50117fd14ceSopenharmony_ci{
50217fd14ceSopenharmony_ci    int32_t callRet;
50317fd14ceSopenharmony_ci    int32_t ret;
50417fd14ceSopenharmony_ci    int32_t inOutLen;
50517fd14ceSopenharmony_ci    int32_t osAccountId;
50617fd14ceSopenharmony_ci    const char *appId = NULL;
50717fd14ceSopenharmony_ci    const char *groupId = NULL;
50817fd14ceSopenharmony_ci
50917fd14ceSopenharmony_ci    LOGI("starting ...");
51017fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
51117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
51217fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
51317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
51417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
51517fd14ceSopenharmony_ci    }
51617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
51717fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
51817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
51917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
52017fd14ceSopenharmony_ci    }
52117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
52217fd14ceSopenharmony_ci    if ((groupId == NULL) || (ret != HC_SUCCESS)) {
52317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_GROUPID);
52417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
52517fd14ceSopenharmony_ci    }
52617fd14ceSopenharmony_ci
52717fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.checkAccessToGroup(osAccountId, appId, groupId);
52817fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
52917fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
53017fd14ceSopenharmony_ci    return ret;
53117fd14ceSopenharmony_ci}
53217fd14ceSopenharmony_ci
53317fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetPkInfoList(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
53417fd14ceSopenharmony_ci{
53517fd14ceSopenharmony_ci    int32_t callRet;
53617fd14ceSopenharmony_ci    int32_t ret;
53717fd14ceSopenharmony_ci    int32_t inOutLen;
53817fd14ceSopenharmony_ci    int32_t osAccountId;
53917fd14ceSopenharmony_ci    const char *appId = NULL;
54017fd14ceSopenharmony_ci    const char *queryParams = NULL;
54117fd14ceSopenharmony_ci    char *returnInfoList = NULL;
54217fd14ceSopenharmony_ci    uint32_t returnInfoNum = 0;
54317fd14ceSopenharmony_ci
54417fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
54517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
54617fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
54717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
54817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
54917fd14ceSopenharmony_ci    }
55017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
55117fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
55217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
55317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
55417fd14ceSopenharmony_ci    }
55517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_QUERY_PARAMS, (uint8_t *)&queryParams, NULL);
55617fd14ceSopenharmony_ci    if ((queryParams == NULL) || (ret != HC_SUCCESS)) {
55717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_QUERY_PARAMS);
55817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
55917fd14ceSopenharmony_ci    }
56017fd14ceSopenharmony_ci
56117fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getPkInfoList(osAccountId, appId, queryParams, &returnInfoList, &returnInfoNum);
56217fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
56317fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
56417fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
56517fd14ceSopenharmony_ci    if (returnInfoList != NULL) {
56617fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)returnInfoList,
56717fd14ceSopenharmony_ci                                  HcStrlen(returnInfoList) + 1);
56817fd14ceSopenharmony_ci    } else {
56917fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
57017fd14ceSopenharmony_ci    }
57117fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&returnInfoNum, sizeof(int32_t));
57217fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
57317fd14ceSopenharmony_ci    g_devGroupMgrMethod.destroyInfo(&returnInfoList);
57417fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
57517fd14ceSopenharmony_ci}
57617fd14ceSopenharmony_ci
57717fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetGroupInfoById(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
57817fd14ceSopenharmony_ci{
57917fd14ceSopenharmony_ci    int32_t callRet;
58017fd14ceSopenharmony_ci    int32_t ret;
58117fd14ceSopenharmony_ci    int32_t inOutLen;
58217fd14ceSopenharmony_ci    int32_t osAccountId;
58317fd14ceSopenharmony_ci    const char *appId = NULL;
58417fd14ceSopenharmony_ci    const char *groupId = NULL;
58517fd14ceSopenharmony_ci    char *groupInfo = NULL;
58617fd14ceSopenharmony_ci
58717fd14ceSopenharmony_ci    LOGI("starting ...");
58817fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
58917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
59017fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
59117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
59217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
59317fd14ceSopenharmony_ci    }
59417fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
59517fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
59617fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
59717fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
59817fd14ceSopenharmony_ci    }
59917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
60017fd14ceSopenharmony_ci    if ((groupId == NULL) || (ret != HC_SUCCESS)) {
60117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_GROUPID);
60217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
60317fd14ceSopenharmony_ci    }
60417fd14ceSopenharmony_ci
60517fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getGroupInfoById(osAccountId, appId, groupId, &groupInfo);
60617fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
60717fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
60817fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
60917fd14ceSopenharmony_ci    if (groupInfo != NULL) {
61017fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)groupInfo, HcStrlen(groupInfo) + 1);
61117fd14ceSopenharmony_ci        g_devGroupMgrMethod.destroyInfo(&groupInfo);
61217fd14ceSopenharmony_ci    } else {
61317fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
61417fd14ceSopenharmony_ci    }
61517fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
61617fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
61717fd14ceSopenharmony_ci}
61817fd14ceSopenharmony_ci
61917fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetGroupInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
62017fd14ceSopenharmony_ci{
62117fd14ceSopenharmony_ci    int32_t callRet;
62217fd14ceSopenharmony_ci    int32_t ret;
62317fd14ceSopenharmony_ci    int32_t inOutLen;
62417fd14ceSopenharmony_ci    int32_t osAccountId;
62517fd14ceSopenharmony_ci    const char *appId = NULL;
62617fd14ceSopenharmony_ci    const char *queryParams = NULL;
62717fd14ceSopenharmony_ci    char *outGroups = NULL;
62817fd14ceSopenharmony_ci    uint32_t groupNum = 0;
62917fd14ceSopenharmony_ci
63017fd14ceSopenharmony_ci    LOGI("starting ...");
63117fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
63217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
63317fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
63417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
63517fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
63617fd14ceSopenharmony_ci    }
63717fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
63817fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
63917fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
64017fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
64117fd14ceSopenharmony_ci    }
64217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_QUERY_PARAMS, (uint8_t *)&queryParams, NULL);
64317fd14ceSopenharmony_ci    if ((queryParams == NULL) || (ret != HC_SUCCESS)) {
64417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_QUERY_PARAMS);
64517fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
64617fd14ceSopenharmony_ci    }
64717fd14ceSopenharmony_ci
64817fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getGroupInfo(osAccountId, appId, queryParams, &outGroups, &groupNum);
64917fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
65017fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
65117fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
65217fd14ceSopenharmony_ci    if (outGroups != NULL) {
65317fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)outGroups, HcStrlen(outGroups) + 1);
65417fd14ceSopenharmony_ci    } else {
65517fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
65617fd14ceSopenharmony_ci    }
65717fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&groupNum, sizeof(int32_t));
65817fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
65917fd14ceSopenharmony_ci    g_devGroupMgrMethod.destroyInfo(&outGroups);
66017fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
66117fd14ceSopenharmony_ci}
66217fd14ceSopenharmony_ci
66317fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetJoinedGroups(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
66417fd14ceSopenharmony_ci{
66517fd14ceSopenharmony_ci    int32_t callRet;
66617fd14ceSopenharmony_ci    int32_t ret;
66717fd14ceSopenharmony_ci    int32_t groupType = 0;
66817fd14ceSopenharmony_ci    int32_t inOutLen;
66917fd14ceSopenharmony_ci    int32_t osAccountId;
67017fd14ceSopenharmony_ci    const char *appId = NULL;
67117fd14ceSopenharmony_ci    char *outGroups = NULL;
67217fd14ceSopenharmony_ci    uint32_t groupNum = 0;
67317fd14ceSopenharmony_ci
67417fd14ceSopenharmony_ci    LOGI("starting ...");
67517fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
67617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
67717fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
67817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
67917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
68017fd14ceSopenharmony_ci    }
68117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
68217fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
68317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
68417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
68517fd14ceSopenharmony_ci    }
68617fd14ceSopenharmony_ci    inOutLen = sizeof(groupType);
68717fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUP_TYPE, (uint8_t *)&groupType, &inOutLen);
68817fd14ceSopenharmony_ci    if ((inOutLen != sizeof(groupType)) || (ret != HC_SUCCESS)) {
68917fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_GROUP_TYPE);
69017fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
69117fd14ceSopenharmony_ci    }
69217fd14ceSopenharmony_ci
69317fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getJoinedGroups(osAccountId, appId, groupType, &outGroups, &groupNum);
69417fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
69517fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
69617fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
69717fd14ceSopenharmony_ci    if (outGroups != NULL) {
69817fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)outGroups, HcStrlen(outGroups) + 1);
69917fd14ceSopenharmony_ci        g_devGroupMgrMethod.destroyInfo(&outGroups);
70017fd14ceSopenharmony_ci    } else {
70117fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
70217fd14ceSopenharmony_ci    }
70317fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&groupNum, sizeof(int32_t));
70417fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
70517fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
70617fd14ceSopenharmony_ci}
70717fd14ceSopenharmony_ci
70817fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetRelatedGroups(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
70917fd14ceSopenharmony_ci{
71017fd14ceSopenharmony_ci    int32_t callRet;
71117fd14ceSopenharmony_ci    int32_t ret;
71217fd14ceSopenharmony_ci    int32_t inOutLen;
71317fd14ceSopenharmony_ci    int32_t osAccountId;
71417fd14ceSopenharmony_ci    const char *appId = NULL;
71517fd14ceSopenharmony_ci    const char *peerUdid = NULL;
71617fd14ceSopenharmony_ci    char *outGroups = NULL;
71717fd14ceSopenharmony_ci    uint32_t groupNum = 0;
71817fd14ceSopenharmony_ci
71917fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
72017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
72117fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
72217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
72317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
72417fd14ceSopenharmony_ci    }
72517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
72617fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
72717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
72817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
72917fd14ceSopenharmony_ci    }
73017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_UDID, (uint8_t *)&peerUdid, NULL);
73117fd14ceSopenharmony_ci    if ((peerUdid == NULL) || (ret != HC_SUCCESS)) {
73217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_UDID);
73317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
73417fd14ceSopenharmony_ci    }
73517fd14ceSopenharmony_ci
73617fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getRelatedGroups(osAccountId, appId, peerUdid, &outGroups, &groupNum);
73717fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
73817fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
73917fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
74017fd14ceSopenharmony_ci    if (outGroups != NULL) {
74117fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)outGroups, HcStrlen(outGroups) + 1);
74217fd14ceSopenharmony_ci    } else {
74317fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
74417fd14ceSopenharmony_ci    }
74517fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&groupNum, sizeof(int32_t));
74617fd14ceSopenharmony_ci    g_devGroupMgrMethod.destroyInfo(&outGroups);
74717fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
74817fd14ceSopenharmony_ci}
74917fd14ceSopenharmony_ci
75017fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetDeviceInfoById(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
75117fd14ceSopenharmony_ci{
75217fd14ceSopenharmony_ci    int32_t callRet;
75317fd14ceSopenharmony_ci    int32_t ret;
75417fd14ceSopenharmony_ci    int32_t inOutLen;
75517fd14ceSopenharmony_ci    int32_t osAccountId;
75617fd14ceSopenharmony_ci    const char *appId = NULL;
75717fd14ceSopenharmony_ci    const char *peerUdid = NULL;
75817fd14ceSopenharmony_ci    const char *groupId = NULL;
75917fd14ceSopenharmony_ci    char *outDevInfo = NULL;
76017fd14ceSopenharmony_ci
76117fd14ceSopenharmony_ci    LOGI("starting ...");
76217fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
76317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
76417fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
76517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
76617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
76717fd14ceSopenharmony_ci    }
76817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
76917fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
77017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
77117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
77217fd14ceSopenharmony_ci    }
77317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_UDID, (uint8_t *)&peerUdid, NULL);
77417fd14ceSopenharmony_ci    if ((peerUdid == NULL) || (ret != HC_SUCCESS)) {
77517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_UDID);
77617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
77717fd14ceSopenharmony_ci    }
77817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
77917fd14ceSopenharmony_ci    if ((groupId == NULL) || (ret != HC_SUCCESS)) {
78017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_GROUPID);
78117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
78217fd14ceSopenharmony_ci    }
78317fd14ceSopenharmony_ci
78417fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getDeviceInfoById(osAccountId, appId, peerUdid, groupId, &outDevInfo);
78517fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
78617fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
78717fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
78817fd14ceSopenharmony_ci    if (outDevInfo != NULL) {
78917fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO,
79017fd14ceSopenharmony_ci            (const uint8_t *)outDevInfo, HcStrlen(outDevInfo) + 1);
79117fd14ceSopenharmony_ci        g_devGroupMgrMethod.destroyInfo(&outDevInfo);
79217fd14ceSopenharmony_ci    } else {
79317fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO, NULL, 0);
79417fd14ceSopenharmony_ci    }
79517fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
79617fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
79717fd14ceSopenharmony_ci}
79817fd14ceSopenharmony_ci
79917fd14ceSopenharmony_cistatic int32_t IpcServiceGmGetTrustedDevices(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
80017fd14ceSopenharmony_ci{
80117fd14ceSopenharmony_ci    int32_t callRet;
80217fd14ceSopenharmony_ci    int32_t ret;
80317fd14ceSopenharmony_ci    int32_t inOutLen;
80417fd14ceSopenharmony_ci    int32_t osAccountId;
80517fd14ceSopenharmony_ci    const char *appId = NULL;
80617fd14ceSopenharmony_ci    const char *groupId = NULL;
80717fd14ceSopenharmony_ci    char *outDevInfo = NULL;
80817fd14ceSopenharmony_ci    uint32_t outDevNum = 0;
80917fd14ceSopenharmony_ci
81017fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
81117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
81217fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
81317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
81417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
81517fd14ceSopenharmony_ci    }
81617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
81717fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
81817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
81917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
82017fd14ceSopenharmony_ci    }
82117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
82217fd14ceSopenharmony_ci    if ((groupId == NULL) || (ret != HC_SUCCESS)) {
82317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_GROUPID);
82417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
82517fd14ceSopenharmony_ci    }
82617fd14ceSopenharmony_ci
82717fd14ceSopenharmony_ci    callRet = g_devGroupMgrMethod.getTrustedDevices(osAccountId, appId, groupId, &outDevInfo, &outDevNum);
82817fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
82917fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
83017fd14ceSopenharmony_ci                              (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
83117fd14ceSopenharmony_ci    if (outDevInfo != NULL) {
83217fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO,
83317fd14ceSopenharmony_ci            (const uint8_t *)outDevInfo, HcStrlen(outDevInfo) + 1);
83417fd14ceSopenharmony_ci    } else {
83517fd14ceSopenharmony_ci        ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO, NULL, 0);
83617fd14ceSopenharmony_ci    }
83717fd14ceSopenharmony_ci    ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&outDevNum, sizeof(int32_t));
83817fd14ceSopenharmony_ci    g_devGroupMgrMethod.destroyInfo(&outDevInfo);
83917fd14ceSopenharmony_ci    return (ret == HC_SUCCESS) ? ret : HC_ERROR;
84017fd14ceSopenharmony_ci}
84117fd14ceSopenharmony_ci
84217fd14ceSopenharmony_cistatic int32_t IpcServiceGmIsDeviceInGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
84317fd14ceSopenharmony_ci{
84417fd14ceSopenharmony_ci    int32_t callRet;
84517fd14ceSopenharmony_ci    int32_t ret;
84617fd14ceSopenharmony_ci    int32_t inOutLen;
84717fd14ceSopenharmony_ci    int32_t osAccountId;
84817fd14ceSopenharmony_ci    bool bRet = false;
84917fd14ceSopenharmony_ci    const char *appId = NULL;
85017fd14ceSopenharmony_ci    const char *udid = NULL;
85117fd14ceSopenharmony_ci    const char *groupId = NULL;
85217fd14ceSopenharmony_ci
85317fd14ceSopenharmony_ci    LOGI("starting ...");
85417fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
85517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
85617fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
85717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
85817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
85917fd14ceSopenharmony_ci    }
86017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
86117fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
86217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
86317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
86417fd14ceSopenharmony_ci    }
86517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_UDID, (uint8_t *)&udid, NULL);
86617fd14ceSopenharmony_ci    if ((udid == NULL) || (ret != HC_SUCCESS)) {
86717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_UDID);
86817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
86917fd14ceSopenharmony_ci    }
87017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
87117fd14ceSopenharmony_ci    if ((groupId == NULL) || (ret != HC_SUCCESS)) {
87217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_GROUPID);
87317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
87417fd14ceSopenharmony_ci    }
87517fd14ceSopenharmony_ci
87617fd14ceSopenharmony_ci    bRet = g_devGroupMgrMethod.isDeviceInGroup(osAccountId, appId, groupId, udid);
87717fd14ceSopenharmony_ci    callRet = ((bRet == true) ? HC_SUCCESS : HC_ERROR);
87817fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
87917fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
88017fd14ceSopenharmony_ci    return ret;
88117fd14ceSopenharmony_ci}
88217fd14ceSopenharmony_ci
88317fd14ceSopenharmony_cistatic int32_t IpcServiceGmCancelRequest(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
88417fd14ceSopenharmony_ci{
88517fd14ceSopenharmony_ci    int32_t ret;
88617fd14ceSopenharmony_ci    int64_t requestId = 0;
88717fd14ceSopenharmony_ci    const char *appId = NULL;
88817fd14ceSopenharmony_ci
88917fd14ceSopenharmony_ci    LOGI("starting ...");
89017fd14ceSopenharmony_ci    int32_t inOutLen = sizeof(int64_t);
89117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
89217fd14ceSopenharmony_ci    if ((inOutLen != sizeof(requestId)) || (ret != HC_SUCCESS)) {
89317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
89417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
89517fd14ceSopenharmony_ci    }
89617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
89717fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
89817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
89917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
90017fd14ceSopenharmony_ci    }
90117fd14ceSopenharmony_ci
90217fd14ceSopenharmony_ci    g_devGroupMgrMethod.cancelRequest(requestId, appId);
90317fd14ceSopenharmony_ci    LOGI("process done, ipc ret %d", ret);
90417fd14ceSopenharmony_ci    return ret;
90517fd14ceSopenharmony_ci}
90617fd14ceSopenharmony_ci
90717fd14ceSopenharmony_cistatic int32_t IpcServiceGaProcessData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
90817fd14ceSopenharmony_ci{
90917fd14ceSopenharmony_ci    int32_t callRet;
91017fd14ceSopenharmony_ci    int32_t ret;
91117fd14ceSopenharmony_ci    const DeviceAuthCallback *gaCallback = NULL;
91217fd14ceSopenharmony_ci    int64_t reqId = 0;
91317fd14ceSopenharmony_ci    uint8_t *data = NULL;
91417fd14ceSopenharmony_ci    uint32_t dataLen = 0;
91517fd14ceSopenharmony_ci    int32_t inOutLen;
91617fd14ceSopenharmony_ci    int32_t cbObjIdx = -1;
91717fd14ceSopenharmony_ci
91817fd14ceSopenharmony_ci    LOGI("starting ...");
91917fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
92017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&reqId, &inOutLen);
92117fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int64_t)) || (ret != HC_SUCCESS)) {
92217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
92317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
92417fd14ceSopenharmony_ci    }
92517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_COMM_DATA, (uint8_t *)&data, (int32_t *)&dataLen);
92617fd14ceSopenharmony_ci    if ((data == NULL) || (dataLen == 0) || (ret != HC_SUCCESS)) {
92717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_COMM_DATA);
92817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
92917fd14ceSopenharmony_ci    }
93017fd14ceSopenharmony_ci    inOutLen = sizeof(DeviceAuthCallback);
93117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&gaCallback, &inOutLen);
93217fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DeviceAuthCallback))) {
93317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEV_AUTH_CB);
93417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
93517fd14ceSopenharmony_ci    }
93617fd14ceSopenharmony_ci    /* add call back */
93717fd14ceSopenharmony_ci    ret = AddIpcCallBackByReqId(reqId, (const uint8_t *)gaCallback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
93817fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
93917fd14ceSopenharmony_ci        LOGE("add ipc callback failed");
94017fd14ceSopenharmony_ci        return ret;
94117fd14ceSopenharmony_ci    }
94217fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
94317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
94417fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
94517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CB_OBJECT);
94617fd14ceSopenharmony_ci        DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
94717fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
94817fd14ceSopenharmony_ci    }
94917fd14ceSopenharmony_ci    AddIpcCbObjByReqId(reqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
95017fd14ceSopenharmony_ci    InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
95117fd14ceSopenharmony_ci    callRet = g_groupAuthMgrMethod.processData(reqId, data, dataLen, &g_authCbAdt);
95217fd14ceSopenharmony_ci    if (callRet != HC_SUCCESS) {
95317fd14ceSopenharmony_ci        DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
95417fd14ceSopenharmony_ci    }
95517fd14ceSopenharmony_ci    return IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
95617fd14ceSopenharmony_ci}
95717fd14ceSopenharmony_ci
95817fd14ceSopenharmony_cistatic int32_t IpcServiceGaAuthDevice(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
95917fd14ceSopenharmony_ci{
96017fd14ceSopenharmony_ci    int32_t ret;
96117fd14ceSopenharmony_ci    DeviceAuthCallback *gaCallback = NULL;
96217fd14ceSopenharmony_ci    int32_t osAccountId;
96317fd14ceSopenharmony_ci    int64_t reqId = 0;
96417fd14ceSopenharmony_ci    const char *authParams = NULL;
96517fd14ceSopenharmony_ci    int32_t inOutLen;
96617fd14ceSopenharmony_ci    int32_t cbObjIdx = -1;
96717fd14ceSopenharmony_ci
96817fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
96917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
97017fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
97117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
97217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
97317fd14ceSopenharmony_ci    }
97417fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
97517fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&reqId, &inOutLen);
97617fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(int64_t))) {
97717fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
97817fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
97917fd14ceSopenharmony_ci    }
98017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
98117fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (authParams == NULL)) {
98217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_AUTH_PARAMS);
98317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
98417fd14ceSopenharmony_ci    }
98517fd14ceSopenharmony_ci    inOutLen = sizeof(DeviceAuthCallback);
98617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&gaCallback, &inOutLen);
98717fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DeviceAuthCallback))) {
98817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEV_AUTH_CB);
98917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
99017fd14ceSopenharmony_ci    }
99117fd14ceSopenharmony_ci
99217fd14ceSopenharmony_ci    /* add call back */
99317fd14ceSopenharmony_ci    ret = AddIpcCallBackByReqId(reqId, (const uint8_t *)gaCallback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
99417fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
99517fd14ceSopenharmony_ci        return ret;
99617fd14ceSopenharmony_ci    }
99717fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
99817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
99917fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
100017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CB_OBJECT);
100117fd14ceSopenharmony_ci        DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
100217fd14ceSopenharmony_ci        return ret;
100317fd14ceSopenharmony_ci    }
100417fd14ceSopenharmony_ci    AddIpcCbObjByReqId(reqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
100517fd14ceSopenharmony_ci    InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
100617fd14ceSopenharmony_ci    ret = g_groupAuthMgrMethod.authDevice(osAccountId, reqId, authParams, &g_authCbAdt);
100717fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
100817fd14ceSopenharmony_ci        DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
100917fd14ceSopenharmony_ci    }
101017fd14ceSopenharmony_ci    return IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&ret, sizeof(int32_t));
101117fd14ceSopenharmony_ci}
101217fd14ceSopenharmony_ci
101317fd14ceSopenharmony_cistatic int32_t IpcServiceGaCancelRequest(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
101417fd14ceSopenharmony_ci{
101517fd14ceSopenharmony_ci    int32_t ret;
101617fd14ceSopenharmony_ci    int64_t requestId = 0;
101717fd14ceSopenharmony_ci    const char *appId = NULL;
101817fd14ceSopenharmony_ci
101917fd14ceSopenharmony_ci    LOGI("starting ...");
102017fd14ceSopenharmony_ci    int32_t inOutLen = sizeof(int64_t);
102117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
102217fd14ceSopenharmony_ci    if ((inOutLen != sizeof(requestId)) || (ret != HC_SUCCESS)) {
102317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
102417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
102517fd14ceSopenharmony_ci    }
102617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
102717fd14ceSopenharmony_ci    if ((appId == NULL) || (ret != HC_SUCCESS)) {
102817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_APPID);
102917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
103017fd14ceSopenharmony_ci    }
103117fd14ceSopenharmony_ci
103217fd14ceSopenharmony_ci    g_groupAuthMgrMethod.cancelRequest(requestId, appId);
103317fd14ceSopenharmony_ci    DelIpcCallBackByReqId(requestId, CB_TYPE_TMP_DEV_AUTH, true);
103417fd14ceSopenharmony_ci    LOGI("process done, ipc ret %d", ret);
103517fd14ceSopenharmony_ci    return ret;
103617fd14ceSopenharmony_ci}
103717fd14ceSopenharmony_ci
103817fd14ceSopenharmony_cistatic int32_t IpcServiceGaGetRealInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
103917fd14ceSopenharmony_ci{
104017fd14ceSopenharmony_ci    int32_t ret;
104117fd14ceSopenharmony_ci    int32_t osAccountId;
104217fd14ceSopenharmony_ci    const char *pseudonymId = NULL;
104317fd14ceSopenharmony_ci
104417fd14ceSopenharmony_ci    LOGI("starting ...");
104517fd14ceSopenharmony_ci    int32_t inOutLen = sizeof(int64_t);
104617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
104717fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
104817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
104917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
105017fd14ceSopenharmony_ci    }
105117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_PSEUDONYM_ID, (uint8_t *)&pseudonymId, NULL);
105217fd14ceSopenharmony_ci    if ((pseudonymId == NULL) || (ret != HC_SUCCESS)) {
105317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_PSEUDONYM_ID);
105417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
105517fd14ceSopenharmony_ci    }
105617fd14ceSopenharmony_ci
105717fd14ceSopenharmony_ci    char *realInfo = NULL;
105817fd14ceSopenharmony_ci    ret = g_groupAuthMgrMethod.getRealInfo(osAccountId, pseudonymId, &realInfo);
105917fd14ceSopenharmony_ci    if ((realInfo != NULL) && (ret == HC_SUCCESS)) {
106017fd14ceSopenharmony_ci        ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)realInfo,
106117fd14ceSopenharmony_ci            HcStrlen(realInfo) + 1);
106217fd14ceSopenharmony_ci        HcFree(realInfo);
106317fd14ceSopenharmony_ci    } else {
106417fd14ceSopenharmony_ci        ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
106517fd14ceSopenharmony_ci    }
106617fd14ceSopenharmony_ci    LOGI("process done, ipc ret %d", ret);
106717fd14ceSopenharmony_ci    return ret;
106817fd14ceSopenharmony_ci}
106917fd14ceSopenharmony_ci
107017fd14ceSopenharmony_cistatic int32_t IpcServiceGaGetPseudonymId(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
107117fd14ceSopenharmony_ci{
107217fd14ceSopenharmony_ci    int32_t ret;
107317fd14ceSopenharmony_ci    int32_t osAccountId;
107417fd14ceSopenharmony_ci    const char *indexKey = NULL;
107517fd14ceSopenharmony_ci
107617fd14ceSopenharmony_ci    LOGI("starting ...");
107717fd14ceSopenharmony_ci    int32_t inOutLen = sizeof(int64_t);
107817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
107917fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
108017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OS_ACCOUNT_ID);
108117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
108217fd14ceSopenharmony_ci    }
108317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_INDEX_KEY, (uint8_t *)&indexKey, NULL);
108417fd14ceSopenharmony_ci    if ((indexKey == NULL) || (ret != HC_SUCCESS)) {
108517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_INDEX_KEY);
108617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
108717fd14ceSopenharmony_ci    }
108817fd14ceSopenharmony_ci
108917fd14ceSopenharmony_ci    char *pseudonymId = NULL;
109017fd14ceSopenharmony_ci    ret = g_groupAuthMgrMethod.getPseudonymId(osAccountId, indexKey, &pseudonymId);
109117fd14ceSopenharmony_ci    if ((pseudonymId != NULL) && (ret == HC_SUCCESS)) {
109217fd14ceSopenharmony_ci        ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)pseudonymId,
109317fd14ceSopenharmony_ci            HcStrlen(pseudonymId) + 1);
109417fd14ceSopenharmony_ci        HcFree(pseudonymId);
109517fd14ceSopenharmony_ci    } else {
109617fd14ceSopenharmony_ci        ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
109717fd14ceSopenharmony_ci    }
109817fd14ceSopenharmony_ci    LOGI("process done, ipc ret %d", ret);
109917fd14ceSopenharmony_ci    return ret;
110017fd14ceSopenharmony_ci}
110117fd14ceSopenharmony_ci
110217fd14ceSopenharmony_cistatic int32_t IpcServiceDaProcessCredential(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
110317fd14ceSopenharmony_ci{
110417fd14ceSopenharmony_ci    int32_t ret;
110517fd14ceSopenharmony_ci    int32_t operationCode = 0;
110617fd14ceSopenharmony_ci    const char *reqJsonStr = NULL;
110717fd14ceSopenharmony_ci    char *returnData = NULL;
110817fd14ceSopenharmony_ci
110917fd14ceSopenharmony_ci    LOGI("starting ...");
111017fd14ceSopenharmony_ci    int32_t inOutLen = sizeof(int32_t);
111117fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_OPCODE, (uint8_t *)&operationCode, &inOutLen);
111217fd14ceSopenharmony_ci    if ((inOutLen != sizeof(int32_t)) || (ret != HC_SUCCESS)) {
111317fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_OPCODE);
111417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
111517fd14ceSopenharmony_ci    }
111617fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQ_JSON, (uint8_t *)&reqJsonStr, NULL);
111717fd14ceSopenharmony_ci    if ((reqJsonStr == NULL) || (ret != HC_SUCCESS)) {
111817fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQ_JSON);
111917fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
112017fd14ceSopenharmony_ci    }
112117fd14ceSopenharmony_ci    ret = ProcessCredential(operationCode, reqJsonStr, &returnData);
112217fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
112317fd14ceSopenharmony_ci        LOGI("call ProcessCredential failed %d", ret);
112417fd14ceSopenharmony_ci    }
112517fd14ceSopenharmony_ci    if (returnData != NULL) {
112617fd14ceSopenharmony_ci        ret = IpcEncodeCallReply(
112717fd14ceSopenharmony_ci            outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)returnData, HcStrlen(returnData) + 1);
112817fd14ceSopenharmony_ci        HcFree(returnData);
112917fd14ceSopenharmony_ci    } else {
113017fd14ceSopenharmony_ci        ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
113117fd14ceSopenharmony_ci    }
113217fd14ceSopenharmony_ci    LOGI("process done, ipc ret %d", ret);
113317fd14ceSopenharmony_ci    return ret;
113417fd14ceSopenharmony_ci}
113517fd14ceSopenharmony_ci
113617fd14ceSopenharmony_cistatic int32_t IpcServiceDaProcessData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
113717fd14ceSopenharmony_ci{
113817fd14ceSopenharmony_ci    int32_t callRet;
113917fd14ceSopenharmony_ci    int32_t ret;
114017fd14ceSopenharmony_ci    const DeviceAuthCallback *callback = NULL;
114117fd14ceSopenharmony_ci    int64_t authReqId = 0;
114217fd14ceSopenharmony_ci    const char *authParams = NULL;
114317fd14ceSopenharmony_ci    int32_t inOutLen;
114417fd14ceSopenharmony_ci    int32_t cbObjIdx = -1;
114517fd14ceSopenharmony_ci
114617fd14ceSopenharmony_ci    LOGI("starting ...");
114717fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
114817fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&authReqId, &inOutLen);
114917fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(authReqId))) {
115017fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
115117fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
115217fd14ceSopenharmony_ci    }
115317fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
115417fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (authParams == NULL)) {
115517fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_AUTH_PARAMS);
115617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
115717fd14ceSopenharmony_ci    }
115817fd14ceSopenharmony_ci    inOutLen = sizeof(DeviceAuthCallback);
115917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&callback, &inOutLen);
116017fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DeviceAuthCallback))) {
116117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEV_AUTH_CB);
116217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
116317fd14ceSopenharmony_ci    }
116417fd14ceSopenharmony_ci    ret = AddIpcCallBackByReqId(
116517fd14ceSopenharmony_ci        authReqId, (const uint8_t *)callback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
116617fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
116717fd14ceSopenharmony_ci        return ret;
116817fd14ceSopenharmony_ci    }
116917fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
117017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
117117fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
117217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CB_OBJECT);
117317fd14ceSopenharmony_ci        DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
117417fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
117517fd14ceSopenharmony_ci    }
117617fd14ceSopenharmony_ci    AddIpcCbObjByReqId(authReqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
117717fd14ceSopenharmony_ci    InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
117817fd14ceSopenharmony_ci    callRet = ProcessAuthDevice(authReqId, authParams, &g_authCbAdt);
117917fd14ceSopenharmony_ci    if (callRet != HC_SUCCESS) {
118017fd14ceSopenharmony_ci        DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
118117fd14ceSopenharmony_ci    }
118217fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
118317fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
118417fd14ceSopenharmony_ci    return ret;
118517fd14ceSopenharmony_ci}
118617fd14ceSopenharmony_ci
118717fd14ceSopenharmony_cistatic int32_t IpcServiceDaAuthDevice(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
118817fd14ceSopenharmony_ci{
118917fd14ceSopenharmony_ci    int32_t callRet;
119017fd14ceSopenharmony_ci    int32_t ret;
119117fd14ceSopenharmony_ci    DeviceAuthCallback *callback = NULL;
119217fd14ceSopenharmony_ci    int64_t authReqId = 0;
119317fd14ceSopenharmony_ci    const char *authParams = NULL;
119417fd14ceSopenharmony_ci    int32_t inOutLen;
119517fd14ceSopenharmony_ci    int32_t cbObjIdx = -1;
119617fd14ceSopenharmony_ci
119717fd14ceSopenharmony_ci    LOGI("starting ...");
119817fd14ceSopenharmony_ci    inOutLen = sizeof(int64_t);
119917fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&authReqId, &inOutLen);
120017fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(int64_t))) {
120117fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
120217fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
120317fd14ceSopenharmony_ci    }
120417fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
120517fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (authParams == NULL)) {
120617fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_AUTH_PARAMS);
120717fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
120817fd14ceSopenharmony_ci    }
120917fd14ceSopenharmony_ci    inOutLen = sizeof(DeviceAuthCallback);
121017fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&callback, &inOutLen);
121117fd14ceSopenharmony_ci    if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DeviceAuthCallback))) {
121217fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_DEV_AUTH_CB);
121317fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
121417fd14ceSopenharmony_ci    }
121517fd14ceSopenharmony_ci    ret = AddIpcCallBackByReqId(
121617fd14ceSopenharmony_ci        authReqId, (const uint8_t *)callback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
121717fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
121817fd14ceSopenharmony_ci        LOGE("add ipc callback failed");
121917fd14ceSopenharmony_ci        return ret;
122017fd14ceSopenharmony_ci    }
122117fd14ceSopenharmony_ci    inOutLen = sizeof(int32_t);
122217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
122317fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
122417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_CB_OBJECT);
122517fd14ceSopenharmony_ci        DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
122617fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
122717fd14ceSopenharmony_ci    }
122817fd14ceSopenharmony_ci    AddIpcCbObjByReqId(authReqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
122917fd14ceSopenharmony_ci    InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
123017fd14ceSopenharmony_ci    callRet = StartAuthDevice(authReqId, authParams, &g_authCbAdt);
123117fd14ceSopenharmony_ci    if (callRet != HC_SUCCESS) {
123217fd14ceSopenharmony_ci        DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
123317fd14ceSopenharmony_ci    }
123417fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
123517fd14ceSopenharmony_ci    LOGI("process done, call ret %d, ipc ret %d", callRet, ret);
123617fd14ceSopenharmony_ci    return ret;
123717fd14ceSopenharmony_ci}
123817fd14ceSopenharmony_ci
123917fd14ceSopenharmony_cistatic int32_t IpcServiceDaCancelRequest(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
124017fd14ceSopenharmony_ci{
124117fd14ceSopenharmony_ci    int32_t ret;
124217fd14ceSopenharmony_ci    int64_t requestId = 0;
124317fd14ceSopenharmony_ci    const char *authParams = NULL;
124417fd14ceSopenharmony_ci
124517fd14ceSopenharmony_ci    LOGI("starting ...");
124617fd14ceSopenharmony_ci    int32_t inOutLen = sizeof(int64_t);
124717fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
124817fd14ceSopenharmony_ci    if ((inOutLen != sizeof(requestId)) || (ret != HC_SUCCESS)) {
124917fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_REQID);
125017fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
125117fd14ceSopenharmony_ci    }
125217fd14ceSopenharmony_ci    ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
125317fd14ceSopenharmony_ci    if ((authParams == NULL) || (ret != HC_SUCCESS)) {
125417fd14ceSopenharmony_ci        LOGE("get param error, type %d", PARAM_TYPE_AUTH_PARAMS);
125517fd14ceSopenharmony_ci        return HC_ERR_IPC_BAD_PARAM;
125617fd14ceSopenharmony_ci    }
125717fd14ceSopenharmony_ci    ret = CancelAuthRequest(requestId, authParams);
125817fd14ceSopenharmony_ci    DelIpcCallBackByReqId(requestId, CB_TYPE_TMP_DEV_AUTH, true);
125917fd14ceSopenharmony_ci    ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&ret, sizeof(int32_t));
126017fd14ceSopenharmony_ci    LOGI("process done, ipc ret %d", ret);
126117fd14ceSopenharmony_ci    return ret;
126217fd14ceSopenharmony_ci}
126317fd14ceSopenharmony_ci
126417fd14ceSopenharmony_ci#ifndef DEV_AUTH_FUZZ_TEST
126517fd14ceSopenharmony_cistatic void DeMainRescInit(void)
126617fd14ceSopenharmony_ci{
126717fd14ceSopenharmony_ci    if (g_devGroupMgrMethod.unRegDataChangeListener != NULL) {
126817fd14ceSopenharmony_ci        (void)g_devGroupMgrMethod.unRegDataChangeListener(SERVICE_APP_ID);
126917fd14ceSopenharmony_ci    }
127017fd14ceSopenharmony_ci    DeInitIpcCallBackList();
127117fd14ceSopenharmony_ci}
127217fd14ceSopenharmony_ci#endif
127317fd14ceSopenharmony_ci
127417fd14ceSopenharmony_ciint32_t AddMethodMap(uintptr_t ipcInstance)
127517fd14ceSopenharmony_ci{
127617fd14ceSopenharmony_ci    uint32_t ret;
127717fd14ceSopenharmony_ci
127817fd14ceSopenharmony_ci    // Group Manager Interfaces
127917fd14ceSopenharmony_ci    ret = SetIpcCallMap(ipcInstance, IpcServiceGmRegCallback, IPC_CALL_ID_REG_CB);
128017fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmUnRegCallback, IPC_CALL_ID_UNREG_CB);
128117fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmRegDataChangeListener, IPC_CALL_ID_REG_LISTENER);
128217fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmUnRegDataChangeListener, IPC_CALL_ID_UNREG_LISTENER);
128317fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmCreateGroup, IPC_CALL_ID_CREATE_GROUP);
128417fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmDelGroup, IPC_CALL_ID_DEL_GROUP);
128517fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmAddMemberToGroup, IPC_CALL_ID_ADD_GROUP_MEMBER);
128617fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmDelMemberFromGroup, IPC_CALL_ID_DEL_GROUP_MEMBER);
128717fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmAddMultiMembersToGroup, IPC_CALL_ID_ADD_MULTI_GROUP_MEMBERS);
128817fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmDelMultiMembersFromGroup, IPC_CALL_ID_DEL_MULTI_GROUP_MEMBERS);
128917fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmProcessData, IPC_CALL_ID_GM_PROC_DATA);
129017fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmApplyRegisterInfo, IPC_CALL_ID_APPLY_REG_INFO);
129117fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmCheckAccessToGroup, IPC_CALL_ID_CHECK_ACCESS_TO_GROUP);
129217fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetPkInfoList, IPC_CALL_ID_GET_PK_INFO_LIST);
129317fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetGroupInfoById, IPC_CALL_ID_GET_GROUP_INFO);
129417fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetGroupInfo, IPC_CALL_ID_SEARCH_GROUPS);
129517fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetJoinedGroups, IPC_CALL_ID_GET_JOINED_GROUPS);
129617fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetRelatedGroups, IPC_CALL_ID_GET_RELATED_GROUPS);
129717fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetDeviceInfoById, IPC_CALL_ID_GET_DEV_INFO_BY_ID);
129817fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmGetTrustedDevices, IPC_CALL_ID_GET_TRUST_DEVICES);
129917fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmIsDeviceInGroup, IPC_CALL_ID_IS_DEV_IN_GROUP);
130017fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGmCancelRequest, IPC_CALL_GM_CANCEL_REQUEST);
130117fd14ceSopenharmony_ci
130217fd14ceSopenharmony_ci    // Group Auth Interfaces
130317fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGaProcessData, IPC_CALL_ID_GA_PROC_DATA);
130417fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGaAuthDevice, IPC_CALL_ID_AUTH_DEVICE);
130517fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGaCancelRequest, IPC_CALL_GA_CANCEL_REQUEST);
130617fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGaGetRealInfo, IPC_CALL_ID_GET_REAL_INFO);
130717fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceGaGetPseudonymId, IPC_CALL_ID_GET_PSEUDONYM_ID);
130817fd14ceSopenharmony_ci
130917fd14ceSopenharmony_ci    // Direct Auth Interfaces
131017fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceDaProcessCredential, IPC_CALL_ID_PROCESS_CREDENTIAL);
131117fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceDaAuthDevice, IPC_CALL_ID_DA_AUTH_DEVICE);
131217fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceDaProcessData, IPC_CALL_ID_DA_PROC_DATA);
131317fd14ceSopenharmony_ci    ret &= SetIpcCallMap(ipcInstance, IpcServiceDaCancelRequest, IPC_CALL_ID_DA_CANCEL_REQUEST);
131417fd14ceSopenharmony_ci    LOGI("process done, ret %u", ret);
131517fd14ceSopenharmony_ci    return ret;
131617fd14ceSopenharmony_ci}
131717fd14ceSopenharmony_ci
131817fd14ceSopenharmony_ciint32_t MainRescInit(void)
131917fd14ceSopenharmony_ci{
132017fd14ceSopenharmony_ci    int32_t ret;
132117fd14ceSopenharmony_ci    const DeviceGroupManager *gmInst = NULL;
132217fd14ceSopenharmony_ci    const GroupAuthManager *gaInst = NULL;
132317fd14ceSopenharmony_ci
132417fd14ceSopenharmony_ci    LOGI("starting ...");
132517fd14ceSopenharmony_ci    ret = InitIpcCallBackList();
132617fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
132717fd14ceSopenharmony_ci        return ret;
132817fd14ceSopenharmony_ci    }
132917fd14ceSopenharmony_ci    gmInst = GetGmInstance();
133017fd14ceSopenharmony_ci    gaInst = GetGaInstance();
133117fd14ceSopenharmony_ci    if ((gmInst == NULL) || (gaInst == NULL)) {
133217fd14ceSopenharmony_ci        DeInitIpcCallBackList();
133317fd14ceSopenharmony_ci        LOGE("MainInit, GetGmInstance failed");
133417fd14ceSopenharmony_ci        return HC_ERROR;
133517fd14ceSopenharmony_ci    }
133617fd14ceSopenharmony_ci    g_devGroupMgrMethod = (DeviceGroupManager)(*gmInst);
133717fd14ceSopenharmony_ci    g_groupAuthMgrMethod = (GroupAuthManager)(*gaInst);
133817fd14ceSopenharmony_ci    InitDevAuthListenerCbCtx(&g_listenCbAdt);
133917fd14ceSopenharmony_ci    ret = gmInst->regDataChangeListener(SERVICE_APP_ID, &g_listenCbAdt);
134017fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
134117fd14ceSopenharmony_ci        DeInitIpcCallBackList();
134217fd14ceSopenharmony_ci        LOGE("MainInit, register ipc listener failed, ret %d", ret);
134317fd14ceSopenharmony_ci        return HC_ERROR;
134417fd14ceSopenharmony_ci    }
134517fd14ceSopenharmony_ci
134617fd14ceSopenharmony_ci    LOGI("process done");
134717fd14ceSopenharmony_ci    return HC_SUCCESS;
134817fd14ceSopenharmony_ci}
134917fd14ceSopenharmony_ci
135017fd14ceSopenharmony_ci#ifndef DEV_AUTH_FUZZ_TEST
135117fd14ceSopenharmony_ciint32_t main(int32_t argc, char const *argv[])
135217fd14ceSopenharmony_ci{
135317fd14ceSopenharmony_ci    int32_t ret;
135417fd14ceSopenharmony_ci    HcCondition cond;
135517fd14ceSopenharmony_ci
135617fd14ceSopenharmony_ci    (void)argc;
135717fd14ceSopenharmony_ci    (void)argv;
135817fd14ceSopenharmony_ci    LOGI("device authentication service starting ...");
135917fd14ceSopenharmony_ci    ret = InitDeviceAuthService();
136017fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
136117fd14ceSopenharmony_ci        LOGE("device auth service main, InitDeviceAuthService failed, ret %d", ret);
136217fd14ceSopenharmony_ci        return 1;
136317fd14ceSopenharmony_ci    }
136417fd14ceSopenharmony_ci
136517fd14ceSopenharmony_ci    ret = MainRescInit();
136617fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
136717fd14ceSopenharmony_ci        DestroyDeviceAuthService();
136817fd14ceSopenharmony_ci        LOGE("device auth service main, init work failed");
136917fd14ceSopenharmony_ci        return 1;
137017fd14ceSopenharmony_ci    }
137117fd14ceSopenharmony_ci
137217fd14ceSopenharmony_ci    uintptr_t serviceInstance = 0x0;
137317fd14ceSopenharmony_ci    ret = CreateServiceInstance(&serviceInstance);
137417fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
137517fd14ceSopenharmony_ci        LOGE("Failed to create device auth service instance!");
137617fd14ceSopenharmony_ci        DeMainRescInit();
137717fd14ceSopenharmony_ci        DestroyDeviceAuthService();
137817fd14ceSopenharmony_ci        return 1;
137917fd14ceSopenharmony_ci    }
138017fd14ceSopenharmony_ci    (void)AddMethodMap(serviceInstance);
138117fd14ceSopenharmony_ci    ret = AddDevAuthServiceToManager(serviceInstance);
138217fd14ceSopenharmony_ci    if (ret != HC_SUCCESS) {
138317fd14ceSopenharmony_ci        DestroyServiceInstance(serviceInstance);
138417fd14ceSopenharmony_ci        DeMainRescInit();
138517fd14ceSopenharmony_ci        DestroyDeviceAuthService();
138617fd14ceSopenharmony_ci        LOGE("device auth service main, AddDevAuthServiceToManager failed, ret %d", ret);
138717fd14ceSopenharmony_ci        return 1;
138817fd14ceSopenharmony_ci    }
138917fd14ceSopenharmony_ci    LOGI("device authentication service register to IPC manager done, service running...");
139017fd14ceSopenharmony_ci    (void)memset_s(&cond, sizeof(cond), 0, sizeof(cond));
139117fd14ceSopenharmony_ci    InitHcCond(&cond, NULL);
139217fd14ceSopenharmony_ci    cond.wait(&cond);
139317fd14ceSopenharmony_ci    DestroyHcCond(&cond);
139417fd14ceSopenharmony_ci    return 0;
139517fd14ceSopenharmony_ci}
139617fd14ceSopenharmony_ci#endif
139717fd14ceSopenharmony_ci
139817fd14ceSopenharmony_ci#ifdef __cplusplus
139917fd14ceSopenharmony_ci}
140017fd14ceSopenharmony_ci#endif
1401