• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024-2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "ipc_service_common.h"
17 
18 #include "common_defs.h"
19 #include "device_auth_defines.h"
20 #include "device_auth.h"
21 #include "hc_log.h"
22 #include "ipc_adapt.h"
23 #include "ipc_sdk_defines.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 # endif
28 
29 static const int32_t IPC_RESULT_NUM_1 = 1;
30 static const int32_t IPC_RESULT_NUM_2 = 2;
31 static const int32_t IPC_RESULT_NUM_4 = 4;
32 static const char *SERVICE_APP_ID = "deviceauth_service";
33 static DeviceGroupManager g_devGroupMgrMethod = {NULL};
34 static GroupAuthManager g_groupAuthMgrMethod = {NULL};
35 static AccountVerifier g_accountVerifierMethod = {NULL};
36 static DeviceAuthCallback g_bindCbAdt = {NULL};
37 static DeviceAuthCallback g_authCbAdt = {NULL};
38 static DataChangeListener g_listenCbAdt = {NULL};
39 
40 #ifdef DEV_AUTH_IS_ENABLE
41 static CredManager g_devCredMgrMethod = {NULL};
42 static CredChangeListener g_credListenCbAdt = {NULL};
43 static CredAuthManager g_credAuthMgrMethod = {NULL};
44 #endif
45 
GetAndValSize32Param(const IpcDataInfo * ipcParams,int32_t paramNum,int32_t paramType,uint8_t * param,int32_t * paramSize)46 static inline int32_t GetAndValSize32Param(const IpcDataInfo *ipcParams,
47     int32_t paramNum, int32_t paramType, uint8_t *param, int32_t *paramSize)
48 {
49     int32_t ret = GetIpcRequestParamByType(ipcParams, paramNum, paramType, param, paramSize);
50     if ((*paramSize) != sizeof(int32_t) || ret != HC_SUCCESS) {
51         LOGE("get param error, type %" LOG_PUB "d", paramType);
52         return HC_ERR_IPC_BAD_PARAM;
53     }
54     return HC_SUCCESS;
55 }
56 
GetAndValSize64Param(const IpcDataInfo * ipcParams,int32_t paramNum,int32_t paramType,uint8_t * param,int32_t * paramSize)57 static inline int32_t GetAndValSize64Param(const IpcDataInfo *ipcParams,
58     int32_t paramNum, int32_t paramType, uint8_t *param, int32_t *paramSize)
59 {
60     int32_t ret = GetIpcRequestParamByType(ipcParams, paramNum, paramType, param, paramSize);
61     if ((*paramSize) != sizeof(int64_t) || ret != HC_SUCCESS) {
62         LOGE("get param error, type %" LOG_PUB "d", paramType);
63         return HC_ERR_IPC_BAD_PARAM;
64     }
65     return HC_SUCCESS;
66 }
67 
GetAndValSizeCbParam(const IpcDataInfo * ipcParams,int32_t paramNum,int32_t paramType,uint8_t * param,int32_t * paramSize)68 static inline int32_t GetAndValSizeCbParam(const IpcDataInfo *ipcParams,
69     int32_t paramNum, int32_t paramType, uint8_t *param, int32_t *paramSize)
70 {
71     int32_t ret = GetIpcRequestParamByType(ipcParams, paramNum, paramType, param, paramSize);
72     if ((*paramSize) != sizeof(DeviceAuthCallback) || ret != HC_SUCCESS) {
73         LOGE("get param error, type %" LOG_PUB "d", paramType);
74         return HC_ERR_IPC_BAD_PARAM;
75     }
76     return HC_SUCCESS;
77 }
78 
GetAndValNullParam(const IpcDataInfo * ipcParams,int32_t paramNum,int32_t paramType,uint8_t * param,int32_t * paramSize)79 static inline int32_t GetAndValNullParam(const IpcDataInfo *ipcParams,
80     int32_t paramNum, int32_t paramType, uint8_t *param, int32_t *paramSize)
81 {
82     int32_t ret = GetIpcRequestParamByType(ipcParams, paramNum, paramType, param, NULL);
83     if (param == NULL || ret != HC_SUCCESS) {
84         LOGE("get param error, type %" LOG_PUB "d", paramType);
85         return HC_ERR_IPC_BAD_PARAM;
86     }
87     return HC_SUCCESS;
88 }
89 
BindRequestIdWithAppId(const char * data)90 static int32_t BindRequestIdWithAppId(const char *data)
91 {
92     const char *appId = NULL;
93     int32_t ret;
94     int64_t requestId = -1;
95     CJson *dataJson = CreateJsonFromString(data);
96     if (dataJson == NULL) {
97         LOGE("failed to create json from string!");
98         return HC_ERR_JSON_CREATE;
99     }
100 
101     appId = GetStringFromJson(dataJson, FIELD_APP_ID);
102     if (appId == NULL) {
103         LOGE("failed to get appId from json object!");
104         FreeJson(dataJson);
105         return HC_ERROR;
106     }
107     (void)GetInt64FromJson(dataJson, FIELD_REQUEST_ID, &requestId);
108     ret = AddReqIdByAppId(appId, requestId);
109     FreeJson(dataJson);
110     return ret;
111 }
112 
IpcServiceGmRegCallback(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)113 int32_t IpcServiceGmRegCallback(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
114 {
115     int32_t callRet;
116     int32_t ret;
117     const char *appId = NULL;
118     const DeviceAuthCallback *callback = NULL;
119     int32_t cbObjIdx = -1;
120     int32_t inOutLen;
121 
122     LOGI("starting ...");
123     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
124     if (ret != HC_SUCCESS) {
125         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
126         return HC_ERR_IPC_BAD_PARAM;
127     }
128 
129     inOutLen = sizeof(DeviceAuthCallback);
130     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&callback, &inOutLen);
131     if (ret != HC_SUCCESS) {
132         return ret;
133     }
134     ret = AddIpcCallBackByAppId(appId, (const uint8_t *)callback, sizeof(DeviceAuthCallback), CB_TYPE_DEV_AUTH);
135     if (ret != HC_SUCCESS) {
136         LOGE("add ipc callback failed");
137         return HC_ERROR;
138     }
139 
140     inOutLen = sizeof(int32_t);
141     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
142     if (ret != HC_SUCCESS) {
143         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
144         DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
145         return HC_ERR_IPC_BAD_PARAM;
146     }
147     AddIpcCbObjByAppId(appId, cbObjIdx, CB_TYPE_DEV_AUTH);
148     InitDeviceAuthCbCtx(&g_bindCbAdt, CB_TYPE_DEV_AUTH);
149     callRet = g_devGroupMgrMethod.regCallback(appId, &g_bindCbAdt);
150     if (callRet != HC_SUCCESS) {
151         DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
152     }
153     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
154     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
155     return ret;
156 }
157 
IpcServiceGmUnRegCallback(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)158 int32_t IpcServiceGmUnRegCallback(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
159 {
160     int32_t callRet = HC_SUCCESS;
161     int32_t ret;
162     const char *appId = NULL;
163 
164     LOGI("starting ...");
165     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
166     if (ret != HC_SUCCESS) {
167         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
168         return HC_ERR_IPC_BAD_PARAM;
169     }
170 
171     DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
172     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
173     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
174     return ret;
175 }
176 
IpcServiceGmRegDataChangeListener(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)177 int32_t IpcServiceGmRegDataChangeListener(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
178 {
179     int32_t callRet;
180     int32_t ret;
181     const char *appId = NULL;
182     const DataChangeListener *callback = NULL;
183     static int32_t registered = 0;
184     int32_t cbObjIdx = -1;
185     int32_t inOutLen;
186 
187     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
188     if (ret != HC_SUCCESS) {
189         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
190         return HC_ERR_IPC_BAD_PARAM;
191     }
192 
193     inOutLen = sizeof(DataChangeListener);
194     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_LISTERNER, (uint8_t *)&callback, &inOutLen);
195     if ((ret != HC_SUCCESS) || (inOutLen != sizeof(DataChangeListener))) {
196         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_LISTERNER);
197         return HC_ERR_IPC_BAD_PARAM;
198     }
199 
200     ret = AddIpcCallBackByAppId(appId, (const uint8_t *)callback, sizeof(DataChangeListener), CB_TYPE_LISTENER);
201     if (ret != HC_SUCCESS) {
202         LOGE("add ipc callback failed");
203         return HC_ERROR;
204     }
205 
206     inOutLen = sizeof(int32_t);
207     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
208     if (ret != HC_SUCCESS) {
209         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
210         DelIpcCallBackByAppId(appId, CB_TYPE_DEV_AUTH);
211         return HC_ERR_IPC_BAD_PARAM;
212     }
213     AddIpcCbObjByAppId(appId, cbObjIdx, CB_TYPE_LISTENER);
214 
215     callRet = HC_SUCCESS;
216     if (registered == 0) {
217         InitDevAuthListenerCbCtx(&g_listenCbAdt);
218         callRet = g_devGroupMgrMethod.regDataChangeListener(SERVICE_APP_ID, &g_listenCbAdt);
219         if (callRet == HC_SUCCESS) {
220             registered = 1;
221         } else {
222             DelIpcCallBackByAppId(appId, CB_TYPE_LISTENER);
223         }
224     }
225     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
226     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
227     return ret;
228 }
229 
IpcServiceGmUnRegDataChangeListener(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)230 int32_t IpcServiceGmUnRegDataChangeListener(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
231 {
232     int32_t callRet = HC_SUCCESS;
233     int32_t ret;
234     const char *appId = NULL;
235 
236     LOGI("starting ...");
237     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
238     if (ret != HC_SUCCESS) {
239         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
240         return HC_ERR_IPC_BAD_PARAM;
241     }
242     DelIpcCallBackByAppId(appId, CB_TYPE_LISTENER);
243     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
244     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
245     return ret;
246 }
247 
IpcServiceGmCreateGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)248 int32_t IpcServiceGmCreateGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
249 {
250     int32_t callRet;
251     int32_t ret;
252     int32_t osAccountId;
253     int64_t requestId = 0;
254     int32_t inOutLen;
255     const char *createParams = NULL;
256     const char *appId = NULL;
257 
258     LOGI("starting ...");
259     inOutLen = sizeof(int32_t);
260     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
261     if (ret != HC_SUCCESS) {
262         return ret;
263     }
264     inOutLen = sizeof(int64_t);
265     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
266     if (ret != HC_SUCCESS) {
267         return ret;
268     }
269     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
270     if (ret != HC_SUCCESS) {
271         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
272         return HC_ERR_IPC_BAD_PARAM;
273     }
274     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CREATE_PARAMS, (uint8_t *)&createParams, NULL);
275     if (ret != HC_SUCCESS) {
276         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CREATE_PARAMS);
277         return HC_ERR_IPC_BAD_PARAM;
278     }
279     ret = AddReqIdByAppId(appId, requestId);
280     if (ret != 0) {
281         LOGE("bind request id by app id failed");
282         return ret;
283     }
284     callRet = g_devGroupMgrMethod.createGroup(osAccountId, requestId, appId, createParams);
285     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
286     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
287     return ret;
288 }
289 
IpcServiceGmDelGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)290 int32_t IpcServiceGmDelGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
291 {
292     int32_t callRet;
293     int32_t ret;
294     int32_t osAccountId;
295     int64_t requestId = 0;
296     int32_t inOutLen;
297     const char *appId = NULL;
298     const char *delParams = NULL;
299 
300     LOGI("starting ...");
301     inOutLen = sizeof(int32_t);
302     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
303     if (ret != HC_SUCCESS) {
304         return ret;
305     }
306     inOutLen = sizeof(int64_t);
307     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
308     if (ret != HC_SUCCESS) {
309         return ret;
310     }
311     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
312     if (ret != HC_SUCCESS) {
313         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
314         return HC_ERR_IPC_BAD_PARAM;
315     }
316     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEL_PARAMS, (uint8_t *)&delParams, NULL);
317     if (ret != HC_SUCCESS) {
318         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_DEL_PARAMS);
319         return HC_ERR_IPC_BAD_PARAM;
320     }
321     ret = AddReqIdByAppId(appId, requestId);
322     if (ret != 0) {
323         LOGE("bind request id by app id failed");
324         return ret;
325     }
326     callRet = g_devGroupMgrMethod.deleteGroup(osAccountId, requestId, appId, delParams);
327     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
328     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
329     return ret;
330 }
331 
IpcServiceGmAddMemberToGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)332 int32_t IpcServiceGmAddMemberToGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
333 {
334     int32_t callRet;
335     int32_t ret;
336     int32_t inOutLen;
337     int32_t osAccountId;
338     int64_t requestId = 0;
339     const char *addParams = NULL;
340     const char *appId = NULL;
341 
342     LOGI("starting ...");
343     inOutLen = sizeof(int32_t);
344     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
345     if (ret != HC_SUCCESS) {
346         return ret;
347     }
348     inOutLen = sizeof(int64_t);
349     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
350     if (ret != HC_SUCCESS) {
351         return ret;
352     }
353     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_ADD_PARAMS, (uint8_t *)&addParams, NULL);
354     if (ret != HC_SUCCESS) {
355         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_ADD_PARAMS);
356         return HC_ERR_IPC_BAD_PARAM;
357     }
358     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
359     if (ret != HC_SUCCESS) {
360         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
361         return HC_ERR_IPC_BAD_PARAM;
362     }
363     ret = AddReqIdByAppId(appId, requestId);
364     if (ret != HC_SUCCESS) {
365         return ret;
366     }
367     callRet = g_devGroupMgrMethod.addMemberToGroup(osAccountId, requestId, appId, addParams);
368     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
369     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
370     return ret;
371 }
372 
IpcServiceGmDelMemberFromGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)373 int32_t IpcServiceGmDelMemberFromGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
374 {
375     int32_t callRet;
376     int32_t ret;
377     int32_t inOutLen;
378     int32_t osAccountId;
379     int64_t requestId = 0;
380     const char *delParams = NULL;
381     const char *appId = NULL;
382 
383     LOGI("starting ...");
384     inOutLen = sizeof(int32_t);
385     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
386     if (ret != HC_SUCCESS) {
387         return ret;
388     }
389     inOutLen = sizeof(int64_t);
390     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
391     if (ret != HC_SUCCESS) {
392         return ret;
393     }
394     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
395     if (ret != HC_SUCCESS) {
396         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
397         return HC_ERR_IPC_BAD_PARAM;
398     }
399     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEL_PARAMS, (uint8_t *)&delParams, NULL);
400     if (ret != HC_SUCCESS) {
401         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_DEL_PARAMS);
402         return HC_ERR_IPC_BAD_PARAM;
403     }
404     ret = AddReqIdByAppId(appId, requestId);
405     if (ret != 0) {
406         LOGE("bind request id by app id failed");
407         return ret;
408     }
409     callRet = g_devGroupMgrMethod.deleteMemberFromGroup(osAccountId, requestId, appId, delParams);
410     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
411     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
412     return ret;
413 }
414 
IpcServiceGmAddMultiMembersToGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)415 int32_t IpcServiceGmAddMultiMembersToGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
416 {
417     int32_t callRet;
418     int32_t ret;
419     int32_t inOutLen;
420     int32_t osAccountId;
421     const char *addParams = NULL;
422     const char *appId = NULL;
423 
424     LOGI("starting ...");
425     inOutLen = sizeof(int32_t);
426     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
427     if (ret != HC_SUCCESS) {
428         return ret;
429     }
430     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_ADD_PARAMS, (uint8_t *)&addParams, NULL);
431     if (ret != HC_SUCCESS) {
432         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_ADD_PARAMS);
433         return HC_ERR_IPC_BAD_PARAM;
434     }
435     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
436     if (ret != HC_SUCCESS) {
437         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
438         return HC_ERR_IPC_BAD_PARAM;
439     }
440     callRet = g_devGroupMgrMethod.addMultiMembersToGroup(osAccountId, appId, addParams);
441     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
442     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
443     return ret;
444 }
445 
IpcServiceGmDelMultiMembersFromGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)446 int32_t IpcServiceGmDelMultiMembersFromGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
447 {
448     int32_t callRet;
449     int32_t ret;
450     int32_t inOutLen;
451     int32_t osAccountId;
452     const char *delParams = NULL;
453     const char *appId = NULL;
454 
455     LOGI("starting ...");
456     inOutLen = sizeof(int32_t);
457     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
458     if (ret != HC_SUCCESS) {
459         return ret;
460     }
461     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
462     if (ret != HC_SUCCESS) {
463         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
464         return ret;
465     }
466     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_DEL_PARAMS, (uint8_t *)&delParams, NULL);
467     if (ret != HC_SUCCESS) {
468         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_DEL_PARAMS);
469         return HC_ERR_IPC_BAD_PARAM;
470     }
471     callRet = g_devGroupMgrMethod.delMultiMembersFromGroup(osAccountId, appId, delParams);
472     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
473     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
474     return ret;
475 }
476 
IpcServiceGmProcessData(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)477 int32_t IpcServiceGmProcessData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
478 {
479     int32_t callRet;
480     int32_t ret;
481     int32_t dataLen;
482     int32_t inOutLen;
483     int64_t requestId = 0;
484     const uint8_t *data = NULL;
485 
486     LOGI("starting ...");
487     inOutLen = sizeof(int64_t);
488     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
489     if (ret != HC_SUCCESS) {
490         return ret;
491     }
492 
493     dataLen = 0;
494     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_COMM_DATA, (uint8_t *)&data, &dataLen);
495     if ((dataLen <= 0) || (ret != HC_SUCCESS)) {
496         LOGE("get param error, type %" LOG_PUB "d, data length %" LOG_PUB "d", PARAM_TYPE_COMM_DATA, dataLen);
497         return HC_ERR_IPC_BAD_PARAM;
498     }
499     ret = BindRequestIdWithAppId((const char *)data);
500     if (ret != HC_SUCCESS) {
501         return ret;
502     }
503     callRet = g_devGroupMgrMethod.processData(requestId, data, dataLen);
504     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
505     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
506     return ret;
507 }
508 
IpcServiceGmApplyRegisterInfo(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)509 int32_t IpcServiceGmApplyRegisterInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
510 {
511     int32_t callRet;
512     int32_t ret;
513     const char *reqJsonStr = NULL;
514     char *registerInfo = NULL;
515 
516     LOGI("starting ...");
517     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQ_JSON, (uint8_t *)&reqJsonStr, NULL);
518     if (ret != HC_SUCCESS) {
519         return ret;
520     }
521     callRet = g_devGroupMgrMethod.getRegisterInfo(reqJsonStr, &registerInfo);
522     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
523     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
524                               (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
525     if (registerInfo != NULL) {
526         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_REG_INFO,
527             (const uint8_t *)registerInfo, HcStrlen(registerInfo) + 1);
528         g_devGroupMgrMethod.destroyInfo(&registerInfo);
529     } else {
530         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_REG_INFO, NULL, 0);
531     }
532     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
533     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
534 }
535 
IpcServiceGmCheckAccessToGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)536 int32_t IpcServiceGmCheckAccessToGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
537 {
538     int32_t callRet;
539     int32_t ret;
540     int32_t inOutLen;
541     int32_t osAccountId;
542     const char *appId = NULL;
543     const char *groupId = NULL;
544 
545     LOGI("starting ...");
546     inOutLen = sizeof(int32_t);
547     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
548     if (ret != HC_SUCCESS) {
549         return ret;
550     }
551     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
552     if (ret != HC_SUCCESS) {
553         return ret;
554     }
555     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
556     if (ret != HC_SUCCESS) {
557         return ret;
558     }
559 
560     callRet = g_devGroupMgrMethod.checkAccessToGroup(osAccountId, appId, groupId);
561     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
562     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
563     return ret;
564 }
565 
IpcServiceGmGetPkInfoList(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)566 int32_t IpcServiceGmGetPkInfoList(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
567 {
568     int32_t callRet;
569     int32_t ret;
570     int32_t inOutLen;
571     int32_t osAccountId;
572     const char *appId = NULL;
573     const char *queryParams = NULL;
574     char *returnInfoList = NULL;
575     uint32_t returnInfoNum = 0;
576 
577     inOutLen = sizeof(int32_t);
578     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
579     if (ret != HC_SUCCESS) {
580         return ret;
581     }
582     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
583     if (ret != HC_SUCCESS) {
584         return ret;
585     }
586     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_QUERY_PARAMS, (uint8_t *)&queryParams, NULL);
587     if (ret != HC_SUCCESS) {
588         return ret;
589     }
590 
591     callRet = g_devGroupMgrMethod.getPkInfoList(osAccountId, appId, queryParams, &returnInfoList, &returnInfoNum);
592     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
593     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
594                               (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
595     if (returnInfoList != NULL) {
596         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)returnInfoList,
597                                   HcStrlen(returnInfoList) + 1);
598     } else {
599         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
600     }
601     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&returnInfoNum, sizeof(int32_t));
602     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
603     g_devGroupMgrMethod.destroyInfo(&returnInfoList);
604     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
605 }
606 
IpcServiceGmGetGroupInfoById(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)607 int32_t IpcServiceGmGetGroupInfoById(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
608 {
609     int32_t callRet;
610     int32_t ret;
611     int32_t inOutLen;
612     int32_t osAccountId;
613     const char *appId = NULL;
614     const char *groupId = NULL;
615     char *groupInfo = NULL;
616 
617     LOGI("starting ...");
618     inOutLen = sizeof(int32_t);
619     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
620     if (ret != HC_SUCCESS) {
621         return ret;
622     }
623     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
624     if (ret != HC_SUCCESS) {
625         return ret;
626     }
627     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
628     if (ret != HC_SUCCESS) {
629         return ret;
630     }
631 
632     callRet = g_devGroupMgrMethod.getGroupInfoById(osAccountId, appId, groupId, &groupInfo);
633     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
634     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
635                               (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
636     if (groupInfo != NULL) {
637         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)groupInfo, HcStrlen(groupInfo) + 1);
638         g_devGroupMgrMethod.destroyInfo(&groupInfo);
639     } else {
640         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
641     }
642     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
643     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
644 }
645 
IpcServiceGmGetGroupInfo(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)646 int32_t IpcServiceGmGetGroupInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
647 {
648     int32_t callRet;
649     int32_t ret;
650     int32_t inOutLen;
651     int32_t osAccountId;
652     const char *appId = NULL;
653     const char *queryParams = NULL;
654     char *outGroups = NULL;
655     uint32_t groupNum = 0;
656 
657     LOGI("starting ...");
658     inOutLen = sizeof(int32_t);
659     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
660     if (ret != HC_SUCCESS) {
661         return ret;
662     }
663     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
664     if (ret != HC_SUCCESS) {
665         return ret;
666     }
667     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_QUERY_PARAMS, (uint8_t *)&queryParams, NULL);
668     if (ret != HC_SUCCESS) {
669         return ret;
670     }
671 
672     callRet = g_devGroupMgrMethod.getGroupInfo(osAccountId, appId, queryParams, &outGroups, &groupNum);
673     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
674     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
675                               (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
676     if (outGroups != NULL) {
677         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)outGroups, HcStrlen(outGroups) + 1);
678     } else {
679         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
680     }
681     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&groupNum, sizeof(int32_t));
682     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
683     g_devGroupMgrMethod.destroyInfo(&outGroups);
684     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
685 }
686 
IpcServiceGmGetJoinedGroups(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)687 int32_t IpcServiceGmGetJoinedGroups(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
688 {
689     int32_t callRet;
690     int32_t ret;
691     int32_t groupType = 0;
692     int32_t inOutLen;
693     int32_t osAccountId;
694     const char *appId = NULL;
695     char *outGroups = NULL;
696     uint32_t groupNum = 0;
697 
698     LOGI("starting ...");
699     inOutLen = sizeof(int32_t);
700     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
701     if (ret != HC_SUCCESS) {
702         return ret;
703     }
704     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
705     if (ret != HC_SUCCESS) {
706         return ret;
707     }
708     inOutLen = sizeof(groupType);
709     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_GROUP_TYPE, (uint8_t *)&groupType, &inOutLen);
710     if ((inOutLen != sizeof(groupType)) || (ret != HC_SUCCESS)) {
711         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_GROUP_TYPE);
712         return HC_ERR_IPC_BAD_PARAM;
713     }
714 
715     callRet = g_devGroupMgrMethod.getJoinedGroups(osAccountId, appId, groupType, &outGroups, &groupNum);
716     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
717     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
718                               (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
719     if (outGroups != NULL) {
720         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)outGroups, HcStrlen(outGroups) + 1);
721         g_devGroupMgrMethod.destroyInfo(&outGroups);
722     } else {
723         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
724     }
725     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&groupNum, sizeof(int32_t));
726     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
727     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
728 }
729 
IpcServiceGmGetRelatedGroups(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)730 int32_t IpcServiceGmGetRelatedGroups(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
731 {
732     int32_t callRet;
733     int32_t ret;
734     int32_t inOutLen;
735     int32_t osAccountId;
736     const char *appId = NULL;
737     const char *peerUdid = NULL;
738     char *outGroups = NULL;
739     uint32_t groupNum = 0;
740 
741     inOutLen = sizeof(int32_t);
742     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
743     if (ret != HC_SUCCESS) {
744         return ret;
745     }
746     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
747     if (ret != HC_SUCCESS) {
748         return ret;
749     }
750     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_UDID, (uint8_t *)&peerUdid, NULL);
751     if (ret != HC_SUCCESS) {
752         return ret;
753     }
754 
755     callRet = g_devGroupMgrMethod.getRelatedGroups(osAccountId, appId, peerUdid, &outGroups, &groupNum);
756     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
757     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
758                               (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
759     if (outGroups != NULL) {
760         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, (const uint8_t *)outGroups, HcStrlen(outGroups) + 1);
761     } else {
762         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_GROUP_INFO, NULL, 0);
763     }
764     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&groupNum, sizeof(int32_t));
765     g_devGroupMgrMethod.destroyInfo(&outGroups);
766     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
767 }
768 
IpcServiceGmGetDeviceInfoById(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)769 int32_t IpcServiceGmGetDeviceInfoById(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
770 {
771     int32_t callRet;
772     int32_t ret;
773     int32_t inOutLen;
774     int32_t osAccountId;
775     const char *appId = NULL;
776     const char *peerUdid = NULL;
777     const char *groupId = NULL;
778     char *outDevInfo = NULL;
779 
780     LOGI("starting ...");
781     inOutLen = sizeof(int32_t);
782     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
783     if (ret != HC_SUCCESS) {
784         return ret;
785     }
786     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
787     if (ret != HC_SUCCESS) {
788         return ret;
789     }
790     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_UDID, (uint8_t *)&peerUdid, NULL);
791     if (ret != HC_SUCCESS) {
792         return ret;
793     }
794     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
795     if (ret != HC_SUCCESS) {
796         return ret;
797     }
798 
799     callRet = g_devGroupMgrMethod.getDeviceInfoById(osAccountId, appId, peerUdid, groupId, &outDevInfo);
800     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
801     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
802                               (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
803     if (outDevInfo != NULL) {
804         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO,
805             (const uint8_t *)outDevInfo, HcStrlen(outDevInfo) + 1);
806         g_devGroupMgrMethod.destroyInfo(&outDevInfo);
807     } else {
808         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO, NULL, 0);
809     }
810     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
811     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
812 }
813 
IpcServiceGmGetTrustedDevices(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)814 int32_t IpcServiceGmGetTrustedDevices(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
815 {
816     int32_t callRet;
817     int32_t ret;
818     int32_t inOutLen;
819     int32_t osAccountId;
820     const char *appId = NULL;
821     const char *groupId = NULL;
822     char *outDevInfo = NULL;
823     uint32_t outDevNum = 0;
824 
825     inOutLen = sizeof(int32_t);
826     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
827     if (ret != HC_SUCCESS) {
828         return ret;
829     }
830     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
831     if (ret != HC_SUCCESS) {
832         return ret;
833     }
834     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
835     if (ret != HC_SUCCESS) {
836         return ret;
837     }
838 
839     callRet = g_devGroupMgrMethod.getTrustedDevices(osAccountId, appId, groupId, &outDevInfo, &outDevNum);
840     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
841     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM,
842                               (const uint8_t *)&IPC_RESULT_NUM_2, sizeof(int32_t));
843     if (outDevInfo != NULL) {
844         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO,
845             (const uint8_t *)outDevInfo, HcStrlen(outDevInfo) + 1);
846     } else {
847         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DEVICE_INFO, NULL, 0);
848     }
849     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_DATA_NUM, (const uint8_t *)&outDevNum, sizeof(int32_t));
850     g_devGroupMgrMethod.destroyInfo(&outDevInfo);
851     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
852 }
853 
IpcServiceAvGetClientSharedKey(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)854 int32_t IpcServiceAvGetClientSharedKey(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
855 {
856     const char *peerPk = NULL;
857     int32_t ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_PUB_KEY, (uint8_t *)&peerPk, NULL);
858     if (ret != HC_SUCCESS) {
859         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_PUB_KEY);
860         return HC_ERR_IPC_BAD_PARAM;
861     }
862 
863     const char *serviceId = NULL;
864     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_SERVICE_ID, (uint8_t *)&serviceId, NULL);
865     if (ret != HC_SUCCESS) {
866         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_SERVICE_ID);
867         return HC_ERR_IPC_BAD_PARAM;
868     }
869     DataBuff returnSharedKey = { NULL, 0 };
870     DataBuff returnRandom = { NULL, 0 };
871     int32_t callRet = g_accountVerifierMethod.getClientSharedKey(peerPk, serviceId, &returnSharedKey, &returnRandom);
872     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
873     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_4,
874         sizeof(int32_t));
875     if (returnSharedKey.data != NULL) {
876         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_VAL, (const uint8_t *)returnSharedKey.data,
877             returnSharedKey.length);
878         uint32_t len = returnSharedKey.length;
879         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_LEN, (const uint8_t *)&len, sizeof(uint32_t));
880         g_accountVerifierMethod.destroyDataBuff(&returnSharedKey);
881     } else {
882         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_VAL, NULL, 0);
883         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_LEN, NULL, 0);
884     }
885     if (returnRandom.data != NULL) {
886         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RANDOM_VAL, (const uint8_t *)returnRandom.data,
887             returnRandom.length);
888         uint32_t len = returnRandom.length;
889         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RANDOM_LEN, (const uint8_t *)&len, sizeof(uint32_t));
890         g_accountVerifierMethod.destroyDataBuff(&returnRandom);
891     } else {
892         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RANDOM_VAL, NULL, 0);
893         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_RANDOM_LEN, NULL, 0);
894     }
895     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
896 }
897 
IpcServiceAvGetServerSharedKey(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)898 int32_t IpcServiceAvGetServerSharedKey(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
899 {
900     const char *peerPk = NULL;
901     int32_t ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_PUB_KEY, (uint8_t *)&peerPk, NULL);
902     if (ret != HC_SUCCESS) {
903         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_PUB_KEY);
904         return HC_ERR_IPC_BAD_PARAM;
905     }
906 
907     const char *serviceId = NULL;
908     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_SERVICE_ID, (uint8_t *)&serviceId, NULL);
909     if (ret != HC_SUCCESS) {
910         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_SERVICE_ID);
911         return HC_ERR_IPC_BAD_PARAM;
912     }
913 
914     int32_t randomLen = 0;
915     const uint8_t *randomVal = NULL;
916     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_RANDOM, (uint8_t *)&randomVal, &randomLen);
917     if (ret != HC_SUCCESS) {
918         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_RANDOM);
919         return HC_ERR_IPC_BAD_PARAM;
920     }
921     DataBuff randomBuff = { (uint8_t *)randomVal, (uint32_t)randomLen };
922     DataBuff returnSharedKey = { NULL, 0 };
923     int32_t callRet = g_accountVerifierMethod.getServerSharedKey(peerPk, serviceId, &randomBuff, &returnSharedKey);
924     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
925     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_2,
926         sizeof(int32_t));
927     if (returnSharedKey.data != NULL) {
928         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_VAL, (const uint8_t *)returnSharedKey.data,
929             returnSharedKey.length);
930         uint32_t len = returnSharedKey.length;
931         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_LEN, (const uint8_t *)&len, sizeof(uint32_t));
932         g_accountVerifierMethod.destroyDataBuff(&returnSharedKey);
933     } else {
934         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_VAL, NULL, 0);
935         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_SHARED_KEY_LEN, NULL, 0);
936     }
937     return (ret == HC_SUCCESS) ? ret : HC_ERROR;
938 }
939 
IpcServiceGmIsDeviceInGroup(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)940 int32_t IpcServiceGmIsDeviceInGroup(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
941 {
942     int32_t callRet;
943     int32_t ret;
944     int32_t inOutLen;
945     int32_t osAccountId;
946     bool bRet = false;
947     const char *appId = NULL;
948     const char *udid = NULL;
949     const char *groupId = NULL;
950 
951     LOGI("starting ...");
952     inOutLen = sizeof(int32_t);
953     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
954     if (ret != HC_SUCCESS) {
955         return ret;
956     }
957     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
958     if (ret != HC_SUCCESS) {
959         return ret;
960     }
961     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_UDID, (uint8_t *)&udid, NULL);
962     if (ret != HC_SUCCESS) {
963         return ret;
964     }
965     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_GROUPID, (uint8_t *)&groupId, NULL);
966     if (ret != HC_SUCCESS) {
967         return ret;
968     }
969 
970     bRet = g_devGroupMgrMethod.isDeviceInGroup(osAccountId, appId, groupId, udid);
971     callRet = ((bRet == true) ? HC_SUCCESS : HC_ERROR);
972     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
973     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
974     return ret;
975 }
976 
IpcServiceGmCancelRequest(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)977 int32_t IpcServiceGmCancelRequest(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
978 {
979     int32_t ret;
980     int64_t requestId = 0;
981     const char *appId = NULL;
982 
983     LOGI("starting ...");
984     int32_t inOutLen = sizeof(int64_t);
985     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
986     if ((inOutLen != sizeof(requestId)) || (ret != HC_SUCCESS)) {
987         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQID);
988         return HC_ERR_IPC_BAD_PARAM;
989     }
990     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
991     if (ret != HC_SUCCESS) {
992         return ret;
993     }
994 
995     g_devGroupMgrMethod.cancelRequest(requestId, appId);
996     LOGI("process done, ipc ret %" LOG_PUB "d", ret);
997     return ret;
998 }
999 
IpcServiceGaProcessData(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1000 int32_t IpcServiceGaProcessData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1001 {
1002     int32_t callRet;
1003     int32_t ret;
1004     const DeviceAuthCallback *gaCallback = NULL;
1005     int64_t reqId = 0;
1006     uint8_t *data = NULL;
1007     uint32_t dataLen = 0;
1008     int32_t inOutLen;
1009     int32_t cbObjIdx = -1;
1010 
1011     LOGI("starting ...");
1012     inOutLen = sizeof(int64_t);
1013     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&reqId, &inOutLen);
1014     if (ret != HC_SUCCESS) {
1015         return ret;
1016     }
1017     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_COMM_DATA, (uint8_t *)&data, (int32_t *)&dataLen);
1018     if ((data == NULL) || (dataLen == 0) || (ret != HC_SUCCESS)) {
1019         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_COMM_DATA);
1020         return HC_ERR_IPC_BAD_PARAM;
1021     }
1022     inOutLen = sizeof(DeviceAuthCallback);
1023     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&gaCallback, &inOutLen);
1024     if (ret != HC_SUCCESS) {
1025         return ret;
1026     }
1027     /* add call back */
1028     ret = AddIpcCallBackByReqId(reqId, (const uint8_t *)gaCallback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
1029     if (ret != HC_SUCCESS) {
1030         LOGE("add ipc callback failed");
1031         return ret;
1032     }
1033     inOutLen = sizeof(int32_t);
1034     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1035     if (ret != HC_SUCCESS) {
1036         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1037         DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
1038         return HC_ERR_IPC_BAD_PARAM;
1039     }
1040     AddIpcCbObjByReqId(reqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
1041     InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
1042     callRet = g_groupAuthMgrMethod.processData(reqId, data, dataLen, &g_authCbAdt);
1043     if (callRet != HC_SUCCESS) {
1044         DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
1045     }
1046     return IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1047 }
1048 
IpcServiceGaAuthDevice(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1049 int32_t IpcServiceGaAuthDevice(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1050 {
1051     int32_t ret;
1052     DeviceAuthCallback *gaCallback = NULL;
1053     int32_t osAccountId;
1054     int64_t reqId = 0;
1055     const char *authParams = NULL;
1056     int32_t inOutLen;
1057     int32_t cbObjIdx = -1;
1058 
1059     inOutLen = sizeof(int32_t);
1060     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1061     if (ret != HC_SUCCESS) {
1062         return ret;
1063     }
1064     inOutLen = sizeof(int64_t);
1065     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&reqId, &inOutLen);
1066     if (ret != HC_SUCCESS) {
1067         return ret;
1068     }
1069     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
1070     if (ret != HC_SUCCESS) {
1071         return ret;
1072     }
1073     inOutLen = sizeof(DeviceAuthCallback);
1074     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&gaCallback, &inOutLen);
1075     if (ret != HC_SUCCESS) {
1076         return ret;
1077     }
1078 
1079     /* add call back */
1080     ret = AddIpcCallBackByReqId(reqId, (const uint8_t *)gaCallback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
1081     if (ret != HC_SUCCESS) {
1082         return ret;
1083     }
1084     inOutLen = sizeof(int32_t);
1085     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1086     if (ret != HC_SUCCESS) {
1087         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1088         DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
1089         return ret;
1090     }
1091     AddIpcCbObjByReqId(reqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
1092     InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
1093     ret = g_groupAuthMgrMethod.authDevice(osAccountId, reqId, authParams, &g_authCbAdt);
1094     if (ret != HC_SUCCESS) {
1095         DelIpcCallBackByReqId(reqId, CB_TYPE_TMP_DEV_AUTH, true);
1096     }
1097     return IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&ret, sizeof(int32_t));
1098 }
1099 
IpcServiceGaCancelRequest(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1100 int32_t IpcServiceGaCancelRequest(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1101 {
1102     int32_t ret;
1103     int64_t requestId = 0;
1104     const char *appId = NULL;
1105 
1106     LOGI("starting ...");
1107     int32_t inOutLen = sizeof(int64_t);
1108     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
1109     if ((inOutLen != sizeof(requestId)) || (ret != HC_SUCCESS)) {
1110         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQID);
1111         return HC_ERR_IPC_BAD_PARAM;
1112     }
1113     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
1114     if (ret != HC_SUCCESS) {
1115         return ret;
1116     }
1117 
1118     g_groupAuthMgrMethod.cancelRequest(requestId, appId);
1119     DelIpcCallBackByReqId(requestId, CB_TYPE_TMP_DEV_AUTH, true);
1120     LOGI("process done, ipc ret %" LOG_PUB "d", ret);
1121     return ret;
1122 }
1123 
IpcServiceGaGetRealInfo(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1124 int32_t IpcServiceGaGetRealInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1125 {
1126     int32_t ret;
1127     int32_t osAccountId;
1128     const char *pseudonymId = NULL;
1129 
1130     LOGI("starting ...");
1131     int32_t inOutLen = sizeof(int64_t);
1132     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1133     if (ret != HC_SUCCESS) {
1134         return ret;
1135     }
1136     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_PSEUDONYM_ID, (uint8_t *)&pseudonymId, NULL);
1137     if (ret != HC_SUCCESS) {
1138         return ret;
1139     }
1140 
1141     char *realInfo = NULL;
1142     ret = g_groupAuthMgrMethod.getRealInfo(osAccountId, pseudonymId, &realInfo);
1143     if ((realInfo != NULL) && (ret == HC_SUCCESS)) {
1144         ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)realInfo,
1145             HcStrlen(realInfo) + 1);
1146         HcFree(realInfo);
1147     } else {
1148         ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
1149     }
1150     LOGI("process done, ipc ret %" LOG_PUB "d", ret);
1151     return ret;
1152 }
1153 
IpcServiceGaGetPseudonymId(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1154 int32_t IpcServiceGaGetPseudonymId(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1155 {
1156     int32_t ret;
1157     int32_t osAccountId;
1158     const char *indexKey = NULL;
1159 
1160     LOGI("starting ...");
1161     int32_t inOutLen = sizeof(int64_t);
1162     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1163     if (ret != HC_SUCCESS) {
1164         return ret;
1165     }
1166     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_INDEX_KEY, (uint8_t *)&indexKey, NULL);
1167     if (ret != HC_SUCCESS) {
1168         return ret;
1169     }
1170 
1171     char *pseudonymId = NULL;
1172     ret = g_groupAuthMgrMethod.getPseudonymId(osAccountId, indexKey, &pseudonymId);
1173     if ((pseudonymId != NULL) && (ret == HC_SUCCESS)) {
1174         ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)pseudonymId,
1175             HcStrlen(pseudonymId) + 1);
1176         HcFree(pseudonymId);
1177     } else {
1178         ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
1179     }
1180     LOGI("process done, ipc ret %" LOG_PUB "d", ret);
1181     return ret;
1182 }
1183 
IpcServiceDaProcessCredential(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1184 int32_t IpcServiceDaProcessCredential(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1185 {
1186     int32_t ret;
1187     int32_t operationCode = 0;
1188     const char *reqJsonStr = NULL;
1189     char *returnData = NULL;
1190 
1191     LOGI("starting ...");
1192     int32_t inOutLen = sizeof(int32_t);
1193     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OPCODE, (uint8_t *)&operationCode, &inOutLen);
1194     if (ret != HC_SUCCESS) {
1195         return ret;
1196     }
1197     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQ_JSON, (uint8_t *)&reqJsonStr, NULL);
1198     if (ret != HC_SUCCESS) {
1199         return ret;
1200     }
1201     ret = ProcessCredential(operationCode, reqJsonStr, &returnData);
1202     if (ret != HC_SUCCESS) {
1203         LOGI("call ProcessCredential failed %" LOG_PUB "d", ret);
1204     }
1205     if (returnData != NULL) {
1206         ret = IpcEncodeCallReply(
1207             outCache, PARAM_TYPE_RETURN_DATA, (const uint8_t *)returnData, HcStrlen(returnData) + 1);
1208         HcFree(returnData);
1209     } else {
1210         ret = IpcEncodeCallReply(outCache, PARAM_TYPE_RETURN_DATA, NULL, 0);
1211     }
1212     LOGI("process done, ipc ret %" LOG_PUB "d", ret);
1213     return ret;
1214 }
1215 
IpcServiceDaProcessData(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1216 int32_t IpcServiceDaProcessData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1217 {
1218     int32_t callRet;
1219     int32_t ret;
1220     const DeviceAuthCallback *callback = NULL;
1221     int64_t authReqId = 0;
1222     const char *authParams = NULL;
1223     int32_t inOutLen;
1224     int32_t cbObjIdx = -1;
1225 
1226     LOGI("starting ...");
1227     inOutLen = sizeof(int64_t);
1228     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&authReqId, &inOutLen);
1229     if ((ret != HC_SUCCESS) || (inOutLen != sizeof(authReqId))) {
1230         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQID);
1231         return HC_ERR_IPC_BAD_PARAM;
1232     }
1233     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
1234     if (ret != HC_SUCCESS) {
1235         return ret;
1236     }
1237     inOutLen = sizeof(DeviceAuthCallback);
1238     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&callback, &inOutLen);
1239     if (ret != HC_SUCCESS) {
1240         return ret;
1241     }
1242     ret = AddIpcCallBackByReqId(
1243         authReqId, (const uint8_t *)callback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
1244     if (ret != HC_SUCCESS) {
1245         return ret;
1246     }
1247     inOutLen = sizeof(int32_t);
1248     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1249     if (ret != HC_SUCCESS) {
1250         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1251         DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
1252         return HC_ERR_IPC_BAD_PARAM;
1253     }
1254     AddIpcCbObjByReqId(authReqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
1255     InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
1256     callRet = ProcessAuthDevice(authReqId, authParams, &g_authCbAdt);
1257     if (callRet != HC_SUCCESS) {
1258         DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
1259     }
1260     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1261     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1262     return ret;
1263 }
1264 
IpcServiceDaAuthDevice(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1265 int32_t IpcServiceDaAuthDevice(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1266 {
1267     int32_t callRet;
1268     int32_t ret;
1269     DeviceAuthCallback *callback = NULL;
1270     int64_t authReqId = 0;
1271     const char *authParams = NULL;
1272     int32_t inOutLen;
1273     int32_t cbObjIdx = -1;
1274 
1275     LOGI("starting ...");
1276     inOutLen = sizeof(int64_t);
1277     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&authReqId, &inOutLen);
1278     if (ret != HC_SUCCESS) {
1279         return ret;
1280     }
1281     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
1282     if (ret != HC_SUCCESS) {
1283         return ret;
1284     }
1285     inOutLen = sizeof(DeviceAuthCallback);
1286     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&callback, &inOutLen);
1287     if (ret != HC_SUCCESS) {
1288         return ret;
1289     }
1290     ret = AddIpcCallBackByReqId(
1291         authReqId, (const uint8_t *)callback, sizeof(DeviceAuthCallback), CB_TYPE_TMP_DEV_AUTH);
1292     if (ret != HC_SUCCESS) {
1293         LOGE("add ipc callback failed");
1294         return ret;
1295     }
1296     inOutLen = sizeof(int32_t);
1297     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1298     if (ret != HC_SUCCESS) {
1299         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1300         DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
1301         return HC_ERR_IPC_BAD_PARAM;
1302     }
1303     AddIpcCbObjByReqId(authReqId, cbObjIdx, CB_TYPE_TMP_DEV_AUTH);
1304     InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_TMP_DEV_AUTH);
1305     callRet = StartAuthDevice(authReqId, authParams, &g_authCbAdt);
1306     if (callRet != HC_SUCCESS) {
1307         DelIpcCallBackByReqId(authReqId, CB_TYPE_TMP_DEV_AUTH, true);
1308     }
1309     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1310     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1311     return ret;
1312 }
1313 
IpcServiceDaCancelRequest(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1314 int32_t IpcServiceDaCancelRequest(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1315 {
1316     int32_t ret;
1317     int64_t requestId = 0;
1318     const char *authParams = NULL;
1319 
1320     LOGI("starting ...");
1321     int32_t inOutLen = sizeof(int64_t);
1322     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&requestId, &inOutLen);
1323     if ((inOutLen != sizeof(requestId)) || (ret != HC_SUCCESS)) {
1324         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQID);
1325         return HC_ERR_IPC_BAD_PARAM;
1326     }
1327     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
1328     if (ret != HC_SUCCESS) {
1329         return ret;
1330     }
1331     ret = CancelAuthRequest(requestId, authParams);
1332     DelIpcCallBackByReqId(requestId, CB_TYPE_TMP_DEV_AUTH, true);
1333     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&ret, sizeof(int32_t));
1334     LOGI("process done, ipc ret %" LOG_PUB "d", ret);
1335     return ret;
1336 }
1337 
1338 #ifdef DEV_AUTH_IS_ENABLE
IpcServiceCmAddCredential(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1339 int32_t IpcServiceCmAddCredential(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1340 {
1341     int32_t callRet;
1342     int32_t ret;
1343     int32_t osAccountId;
1344     int32_t inOutLen;
1345     const char *requestParams = NULL;
1346     char *credId = NULL;
1347 
1348     LOGI("starting ...");
1349     inOutLen = sizeof(int32_t);
1350     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1351     if (ret != HC_SUCCESS) {
1352         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1353         return ret;
1354     }
1355     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQUEST_PARAMS, (uint8_t *)&requestParams, NULL);
1356     if (ret != HC_SUCCESS) {
1357         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQUEST_PARAMS);
1358         return ret;
1359     }
1360     callRet = g_devCredMgrMethod.addCredential(osAccountId, requestParams, &credId);
1361     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1362     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1363     if (credId != NULL) {
1364         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_ID, (const uint8_t *)credId, HcStrlen(credId) + 1);
1365     } else {
1366         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_ID, NULL, 0);
1367     }
1368     g_devCredMgrMethod.destroyInfo(&credId);
1369     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1370     return ret;
1371 }
1372 
IpcServiceCmRegCredChangeListener(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1373 int32_t IpcServiceCmRegCredChangeListener(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1374 {
1375     int32_t callRet;
1376     int32_t ret;
1377     const char *appId = NULL;
1378     const CredChangeListener *listener = NULL;
1379     static int32_t registered = 0;
1380     int32_t cbObjIdx = -1;
1381     int32_t inOutLen;
1382     LOGI("starting ...");
1383     inOutLen = sizeof(int32_t);
1384 
1385     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
1386     if (ret != HC_SUCCESS) {
1387         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
1388         return HC_ERR_IPC_BAD_PARAM;
1389     }
1390 
1391     inOutLen = sizeof(CredChangeListener);
1392     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_LISTERNER, (uint8_t *)&listener, &inOutLen);
1393     if ((ret != HC_SUCCESS) || (inOutLen != sizeof(CredChangeListener))) {
1394         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_LISTERNER);
1395         return HC_ERR_IPC_BAD_PARAM;
1396     }
1397 
1398     ret = AddIpcCallBackByAppId(appId, (const uint8_t *)listener, sizeof(CredChangeListener), CB_TYPE_CRED_LISTENER);
1399     if (ret != HC_SUCCESS) {
1400         LOGE("add ipc listener failed");
1401         return HC_ERROR;
1402     }
1403 
1404     inOutLen = sizeof(int32_t);
1405     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1406     if (ret != HC_SUCCESS) {
1407         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1408         DelIpcCallBackByAppId(appId, CB_TYPE_CRED_LISTENER);
1409         return HC_ERR_IPC_BAD_PARAM;
1410     }
1411     AddIpcCbObjByAppId(appId, cbObjIdx, CB_TYPE_CRED_LISTENER);
1412 
1413     callRet = HC_SUCCESS;
1414     if (registered == 0) {
1415         InitDevAuthCredListenerCbCtx(&g_credListenCbAdt);
1416         callRet = g_devCredMgrMethod.registerChangeListener(SERVICE_APP_ID, &g_credListenCbAdt);
1417         if (callRet == HC_SUCCESS) {
1418             registered = 1;
1419         } else {
1420             DelIpcCallBackByAppId(appId, CB_TYPE_CRED_LISTENER);
1421         }
1422     }
1423     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1424     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1425     return ret;
1426 }
1427 
IpcServiceCmUnRegCredChangeListener(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1428 int32_t IpcServiceCmUnRegCredChangeListener(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1429 {
1430     int32_t callRet = HC_SUCCESS;
1431     int32_t ret;
1432     const char *appId = NULL;
1433     LOGI("starting ...");
1434     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_APPID, (uint8_t *)&appId, NULL);
1435     if (ret != HC_SUCCESS) {
1436         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_APPID);
1437         return HC_ERR_IPC_BAD_PARAM;
1438     }
1439     DelIpcCallBackByAppId(appId, CB_TYPE_CRED_LISTENER);
1440     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1441     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1442     return ret;
1443 }
1444 
1445 
IpcServiceCmExportCredential(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1446 int32_t IpcServiceCmExportCredential(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1447 {
1448     int32_t callRet;
1449     int32_t ret;
1450     int32_t osAccountId;
1451     int32_t inOutLen;
1452     const char *credId = NULL;
1453     char *returnCredVal = NULL;
1454     LOGI("starting ...");
1455     inOutLen = sizeof(int32_t);
1456     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1457     if (ret != HC_SUCCESS) {
1458         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1459         return ret;
1460     }
1461     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_CRED_ID, (uint8_t *)&credId, NULL);
1462     if (ret != HC_SUCCESS) {
1463         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQUEST_PARAMS);
1464         return ret;
1465     }
1466     callRet = g_devCredMgrMethod.exportCredential(osAccountId, credId, &returnCredVal);
1467     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1468     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1469     if (returnCredVal != NULL) {
1470         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_VAL, (const uint8_t *)returnCredVal,
1471             HcStrlen(returnCredVal) + 1);
1472     } else {
1473         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_VAL, NULL, 0);
1474     }
1475     g_devCredMgrMethod.destroyInfo(&returnCredVal);
1476     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1477     return ret;
1478 }
1479 
IpcServiceCmQueryCredentialByParams(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1480 int32_t IpcServiceCmQueryCredentialByParams(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1481 {
1482     int32_t callRet;
1483     int32_t ret;
1484     int32_t osAccountId;
1485     int32_t inOutLen;
1486     const char *requestParams = NULL;
1487     char *returnCredList = NULL;
1488     LOGI("starting ...");
1489     inOutLen = sizeof(int32_t);
1490     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1491     if (ret != HC_SUCCESS) {
1492         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1493         return ret;
1494     }
1495     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_QUERY_PARAMS, (uint8_t *)&requestParams, NULL);
1496     if (ret != HC_SUCCESS) {
1497         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_QUERY_PARAMS);
1498         return ret;
1499     }
1500     callRet = g_devCredMgrMethod.queryCredentialByParams(osAccountId, requestParams, &returnCredList);
1501     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1502     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1503     if (returnCredList != NULL) {
1504         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO_LIST, (const uint8_t *)returnCredList,
1505             HcStrlen(returnCredList) + 1);
1506     } else {
1507         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO_LIST, NULL, 0);
1508     }
1509     g_devCredMgrMethod.destroyInfo(&returnCredList);
1510     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1511     return ret;
1512 }
1513 
IpcServiceCmQueryCredentialByCredId(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1514 int32_t IpcServiceCmQueryCredentialByCredId(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1515 {
1516     int32_t callRet;
1517     int32_t ret;
1518     int32_t osAccountId;
1519     int32_t inOutLen;
1520     const char *credId = NULL;
1521     char *returnCredInfo = NULL;
1522     LOGI("starting ...");
1523     inOutLen = sizeof(int32_t);
1524     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1525     if (ret != HC_SUCCESS) {
1526         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1527         return ret;
1528     }
1529     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_CRED_ID, (uint8_t *)&credId, NULL);
1530     if (ret != HC_SUCCESS) {
1531         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CRED_ID);
1532         return ret;
1533     }
1534     callRet = g_devCredMgrMethod.queryCredInfoByCredId(osAccountId, credId, &returnCredInfo);
1535     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1536     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1537     if (returnCredInfo != NULL) {
1538         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO, (const uint8_t *)returnCredInfo,
1539             HcStrlen(returnCredInfo) + 1);
1540     } else {
1541         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO, NULL, 0);
1542     }
1543     g_devCredMgrMethod.destroyInfo(&returnCredInfo);
1544     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1545     return ret;
1546 }
1547 
IpcServiceCmDeleteCredential(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1548 int32_t IpcServiceCmDeleteCredential(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1549 {
1550     int32_t callRet;
1551     int32_t ret;
1552     int32_t osAccountId;
1553     int32_t inOutLen;
1554     const char *credId = NULL;
1555     LOGI("starting ...");
1556     inOutLen = sizeof(int32_t);
1557     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1558     if (ret != HC_SUCCESS) {
1559         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1560         return ret;
1561     }
1562     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_CRED_ID, (uint8_t *)&credId, NULL);
1563     if (ret != HC_SUCCESS) {
1564         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CRED_ID);
1565         return ret;
1566     }
1567     callRet = g_devCredMgrMethod.deleteCredential(osAccountId, credId);
1568     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1569     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1570     return ret;
1571 }
1572 
IpcServiceCmUpdateCredInfo(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1573 int32_t IpcServiceCmUpdateCredInfo(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1574 {
1575     int32_t callRet;
1576     int32_t ret;
1577     int32_t osAccountId;
1578     int32_t inOutLen;
1579     const char *credId = NULL;
1580     const char *requestParams = NULL;
1581     LOGI("starting ...");
1582     inOutLen = sizeof(int32_t);
1583     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1584     if (ret != HC_SUCCESS) {
1585         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1586         return ret;
1587     }
1588     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_CRED_ID, (uint8_t *)&credId, NULL);
1589     if (ret != HC_SUCCESS) {
1590         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CRED_ID);
1591         return ret;
1592     }
1593     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQUEST_PARAMS, (uint8_t *)&requestParams, NULL);
1594     if (ret != HC_SUCCESS) {
1595         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQUEST_PARAMS);
1596         return ret;
1597     }
1598     callRet = g_devCredMgrMethod.updateCredInfo(osAccountId, credId, requestParams);
1599     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1600     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1601     return ret;
1602 }
1603 
IpcServiceCmAgreeCredential(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1604 int32_t IpcServiceCmAgreeCredential(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1605 {
1606     int32_t callRet;
1607     int32_t ret;
1608     int32_t osAccountId;
1609     int32_t inOutLen;
1610     const char *selfCredId = NULL;
1611     const char *requestParams = NULL;
1612     char *agreeCredId = NULL;
1613 
1614     LOGI("starting ...");
1615     inOutLen = sizeof(int32_t);
1616     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1617     if (ret != HC_SUCCESS) {
1618         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1619         return ret;
1620     }
1621     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_CRED_ID, (uint8_t *)&selfCredId, NULL);
1622     if (ret != HC_SUCCESS) {
1623         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CRED_ID);
1624         return ret;
1625     }
1626     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQUEST_PARAMS, (uint8_t *)&requestParams, NULL);
1627     if (ret != HC_SUCCESS) {
1628         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQUEST_PARAMS);
1629         return ret;
1630     }
1631     callRet = g_devCredMgrMethod.agreeCredential(osAccountId, selfCredId, requestParams, &agreeCredId);
1632     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1633     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1634     if (agreeCredId != NULL) {
1635         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_ID, (const uint8_t *)agreeCredId,
1636             HcStrlen(agreeCredId) + 1);
1637     } else {
1638         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_ID, NULL, 0);
1639     }
1640     g_devCredMgrMethod.destroyInfo(&agreeCredId);
1641     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1642     return ret;
1643 }
1644 
IpcServiceCmDelCredByParams(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1645 int32_t IpcServiceCmDelCredByParams(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1646 {
1647     int32_t callRet;
1648     int32_t ret;
1649     int32_t osAccountId;
1650     int32_t inOutLen;
1651     const char *requestParams = NULL;
1652     char *returnCredList = NULL;
1653     LOGI("starting ...");
1654     inOutLen = sizeof(int32_t);
1655     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1656     if (ret != HC_SUCCESS) {
1657         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1658         return ret;
1659     }
1660     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQUEST_PARAMS, (uint8_t *)&requestParams, NULL);
1661     if (ret != HC_SUCCESS) {
1662         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQUEST_PARAMS);
1663         return ret;
1664     }
1665     callRet = g_devCredMgrMethod.deleteCredByParams(osAccountId, requestParams, &returnCredList);
1666     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1667     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1668     if (returnCredList != NULL) {
1669         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO_LIST, (const uint8_t *)returnCredList,
1670             HcStrlen(returnCredList) + 1);
1671     } else {
1672         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO_LIST, NULL, 0);
1673     }
1674     g_devCredMgrMethod.destroyInfo(&returnCredList);
1675     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1676     return ret;
1677 }
1678 
IpcServiceCmBatchUpdateCredentials(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1679 int32_t IpcServiceCmBatchUpdateCredentials(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1680 {
1681     int32_t callRet;
1682     int32_t ret;
1683     int32_t osAccountId;
1684     int32_t inOutLen;
1685     const char *requestParams = NULL;
1686     char *returnCredList = NULL;
1687     LOGI("starting ...");
1688     inOutLen = sizeof(int32_t);
1689     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1690     if (ret != HC_SUCCESS) {
1691         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_OS_ACCOUNT_ID);
1692         return ret;
1693     }
1694     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_REQUEST_PARAMS, (uint8_t *)&requestParams, NULL);
1695     if (ret != HC_SUCCESS) {
1696         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_REQUEST_PARAMS);
1697         return ret;
1698     }
1699     callRet = g_devCredMgrMethod.batchUpdateCredentials(osAccountId, requestParams, &returnCredList);
1700     ret = IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1701     ret += IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT_NUM, (const uint8_t *)&IPC_RESULT_NUM_1, sizeof(int32_t));
1702     if (returnCredList != NULL) {
1703         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO_LIST, (const uint8_t *)returnCredList,
1704             HcStrlen(returnCredList) + 1);
1705     } else {
1706         ret += IpcEncodeCallReply(outCache, PARAM_TYPE_CRED_INFO_LIST, NULL, 0);
1707     }
1708     g_devCredMgrMethod.destroyInfo(&returnCredList);
1709     LOGI("process done, call ret %" LOG_PUB "d, ipc ret %" LOG_PUB "d", callRet, ret);
1710     return ret;
1711 }
1712 
IpcServiceCaAuthDevice(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1713 int32_t IpcServiceCaAuthDevice(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1714 {
1715     int32_t ret;
1716     DeviceAuthCallback *caCallback = NULL;
1717     int32_t osAccountId;
1718     int64_t reqId = 0;
1719     const char *authParams = NULL;
1720     int32_t inOutLen;
1721     int32_t cbObjIdx = -1;
1722 
1723     inOutLen = sizeof(int32_t);
1724     ret = GetAndValSize32Param(ipcParams, paramNum, PARAM_TYPE_OS_ACCOUNT_ID, (uint8_t *)&osAccountId, &inOutLen);
1725     if (ret != HC_SUCCESS) {
1726         return ret;
1727     }
1728     inOutLen = sizeof(int64_t);
1729     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&reqId, &inOutLen);
1730     if (ret != HC_SUCCESS) {
1731         return ret;
1732     }
1733     ret = GetAndValNullParam(ipcParams, paramNum, PARAM_TYPE_AUTH_PARAMS, (uint8_t *)&authParams, NULL);
1734     if (ret != HC_SUCCESS) {
1735         return ret;
1736     }
1737     inOutLen = sizeof(DeviceAuthCallback);
1738     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&caCallback, &inOutLen);
1739     if (ret != HC_SUCCESS) {
1740         return ret;
1741     }
1742 
1743     /* add call back */
1744     ret = AddIpcCallBackByReqId(reqId, (const uint8_t *)caCallback, sizeof(DeviceAuthCallback), CB_TYPE_CRED_DEV_AUTH);
1745     if (ret != HC_SUCCESS) {
1746         return ret;
1747     }
1748     inOutLen = sizeof(int32_t);
1749     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1750     if (ret != HC_SUCCESS) {
1751         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1752         DelIpcCallBackByReqId(reqId, CB_TYPE_CRED_DEV_AUTH, true);
1753         return ret;
1754     }
1755     AddIpcCbObjByReqId(reqId, cbObjIdx, CB_TYPE_CRED_DEV_AUTH);
1756     InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_CRED_DEV_AUTH);
1757     ret = g_credAuthMgrMethod.authCredential(osAccountId, reqId, authParams, &g_authCbAdt);
1758     if (ret != HC_SUCCESS) {
1759         DelIpcCallBackByReqId(reqId, CB_TYPE_CRED_DEV_AUTH, true);
1760     }
1761     return IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&ret, sizeof(int32_t));
1762 }
1763 
1764 
IpcServiceCaProcessCredData(const IpcDataInfo * ipcParams,int32_t paramNum,uintptr_t outCache)1765 int32_t IpcServiceCaProcessCredData(const IpcDataInfo *ipcParams, int32_t paramNum, uintptr_t outCache)
1766 {
1767     int32_t callRet;
1768     int32_t ret;
1769     const DeviceAuthCallback *caCallback = NULL;
1770     int64_t reqId = 0;
1771     uint8_t *data = NULL;
1772     uint32_t dataLen = 0;
1773     int32_t inOutLen;
1774     int32_t cbObjIdx = -1;
1775 
1776     LOGI("starting ...");
1777     inOutLen = sizeof(int64_t);
1778     ret = GetAndValSize64Param(ipcParams, paramNum, PARAM_TYPE_REQID, (uint8_t *)&reqId, &inOutLen);
1779     if (ret != HC_SUCCESS) {
1780         return ret;
1781     }
1782     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_COMM_DATA, (uint8_t *)&data, (int32_t *)&dataLen);
1783     if ((data == NULL) || (dataLen == 0) || (ret != HC_SUCCESS)) {
1784         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_COMM_DATA);
1785         return HC_ERR_IPC_BAD_PARAM;
1786     }
1787     inOutLen = sizeof(DeviceAuthCallback);
1788     ret = GetAndValSizeCbParam(ipcParams, paramNum, PARAM_TYPE_DEV_AUTH_CB, (uint8_t *)&caCallback, &inOutLen);
1789     if (ret != HC_SUCCESS) {
1790         return ret;
1791     }
1792     /* add call back */
1793     ret = AddIpcCallBackByReqId(reqId, (const uint8_t *)caCallback, sizeof(DeviceAuthCallback), CB_TYPE_CRED_DEV_AUTH);
1794     if (ret != HC_SUCCESS) {
1795         LOGE("add ipc callback failed");
1796         return ret;
1797     }
1798     inOutLen = sizeof(int32_t);
1799     ret = GetIpcRequestParamByType(ipcParams, paramNum, PARAM_TYPE_CB_OBJECT, (uint8_t *)&cbObjIdx, &inOutLen);
1800     if (ret != HC_SUCCESS) {
1801         LOGE("get param error, type %" LOG_PUB "d", PARAM_TYPE_CB_OBJECT);
1802         DelIpcCallBackByReqId(reqId, CB_TYPE_CRED_DEV_AUTH, true);
1803         return HC_ERR_IPC_BAD_PARAM;
1804     }
1805     AddIpcCbObjByReqId(reqId, cbObjIdx, CB_TYPE_CRED_DEV_AUTH);
1806     InitDeviceAuthCbCtx(&g_authCbAdt, CB_TYPE_CRED_DEV_AUTH);
1807     callRet = g_credAuthMgrMethod.processCredData(reqId, data, dataLen, &g_authCbAdt);
1808     if (callRet != HC_SUCCESS) {
1809         DelIpcCallBackByReqId(reqId, CB_TYPE_CRED_DEV_AUTH, true);
1810     }
1811     return IpcEncodeCallReply(outCache, PARAM_TYPE_IPC_RESULT, (const uint8_t *)&callRet, sizeof(int32_t));
1812 }
1813 
ISIpcInit(void)1814 static int32_t ISIpcInit(void)
1815 {
1816     const CredManager *cmInst = NULL;
1817     const CredAuthManager *caInst = NULL;
1818     cmInst = GetCredMgrInstance();
1819     caInst = GetCredAuthInstance();
1820     if (cmInst == NULL || caInst == NULL) {
1821         DeInitIpcCallBackList();
1822         LOGE("MainInit, GetGmInstance failed");
1823         return HC_ERROR;
1824     }
1825     g_devCredMgrMethod = (CredManager)(*cmInst);
1826     g_credAuthMgrMethod = (CredAuthManager)(*caInst);
1827     InitDevAuthCredListenerCbCtx(&g_credListenCbAdt);
1828     int32_t ret = cmInst->registerChangeListener(SERVICE_APP_ID, &g_credListenCbAdt);
1829     if (ret != HC_SUCCESS) {
1830         DeInitIpcCallBackList();
1831         LOGE("MainInit, register ipc cred listener failed, ret %" LOG_PUB "d", ret);
1832         return HC_ERROR;
1833     }
1834     return HC_SUCCESS;
1835 }
1836 #endif
1837 
MainRescInit(void)1838 int32_t MainRescInit(void)
1839 {
1840     int32_t ret;
1841     LOGI("starting ...");
1842     const DeviceGroupManager *gmInst = NULL;
1843     const GroupAuthManager *gaInst = NULL;
1844     const AccountVerifier *avInst = NULL;
1845     ret = InitIpcCallBackList();
1846     if (ret != HC_SUCCESS) {
1847         return ret;
1848     }
1849     gmInst = GetGmInstance();
1850     gaInst = GetGaInstance();
1851     avInst = GetAccountVerifierInstance();
1852     if ((gmInst == NULL) || (gaInst == NULL) || (avInst == NULL)) {
1853         DeInitIpcCallBackList();
1854         LOGE("MainInit, GetGmInstance failed");
1855         return HC_ERROR;
1856     }
1857     g_devGroupMgrMethod = (DeviceGroupManager)(*gmInst);
1858     g_groupAuthMgrMethod = (GroupAuthManager)(*gaInst);
1859     g_accountVerifierMethod = (AccountVerifier)(*avInst);
1860     InitDevAuthListenerCbCtx(&g_listenCbAdt);
1861     ret = gmInst->regDataChangeListener(SERVICE_APP_ID, &g_listenCbAdt);
1862     if (ret != HC_SUCCESS) {
1863         DeInitIpcCallBackList();
1864         LOGE("MainInit, register ipc listener failed, ret %" LOG_PUB "d", ret);
1865         return HC_ERROR;
1866     }
1867 #ifdef DEV_AUTH_IS_ENABLE
1868     ret = ISIpcInit();
1869     if (ret != HC_SUCCESS) {
1870         LOGE("IS ipc init failed.");
1871         return ret;
1872     }
1873 #endif
1874     LOGI("process done");
1875     return HC_SUCCESS;
1876 }
1877 
DeMainRescInit(void)1878 void DeMainRescInit(void)
1879 {
1880     if (g_devGroupMgrMethod.unRegDataChangeListener != NULL) {
1881         (void)g_devGroupMgrMethod.unRegDataChangeListener(SERVICE_APP_ID);
1882     }
1883 #ifdef DEV_AUTH_IS_ENABLE
1884     if (g_devCredMgrMethod.unregisterChangeListener != NULL) {
1885         (void)g_devCredMgrMethod.unregisterChangeListener(SERVICE_APP_ID);
1886     }
1887 #endif
1888     DeInitIpcCallBackList();
1889 }
1890 
1891 #ifdef __cplusplus
1892 }
1893 #endif