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, ®isterInfo);
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(®isterInfo);
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