1 /* 2 * Copyright (C) 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 #ifndef IPC_SDK_DEFINES_H 17 #define IPC_SDK_DEFINES_H 18 19 #include <stdint.h> 20 #include "device_auth.h" 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 typedef struct { 26 char *appId; 27 uint8_t callbackType; // 1 DevAuthCallback, 2 groupListener, 3 credListener 28 union { 29 DeviceAuthCallback *deviceAuthCallback; 30 DataChangeListener *dataChangeListener; 31 CredChangeListener *credChangeListener; 32 } callback; 33 } DevAuthCallbackInfo; 34 35 typedef void (*SaStatusChangeCallbackFunc)(void); 36 typedef struct { 37 SaStatusChangeCallbackFunc onReceivedSaAdd; 38 SaStatusChangeCallbackFunc onReceivedSaRemoved; 39 } SaStatusChangeCallback; 40 41 #define IPC_CALL_BACK_STUB_AUTH_ID 0 42 #define IPC_CALL_BACK_STUB_BIND_ID 1 43 #define IPC_CALL_BACK_STUB_DIRECT_AUTH_ID 2 44 #define IPC_CALL_BACK_STUB_LIGHT_AUTH_ID 3 45 46 #define DEVICE_AUTH_SA_LOAD_TIME (4 * 1000) 47 48 #define IPC_CALL_CONTEXT_INIT 0x0 49 50 #define DEVAUTH_CALLBACK 1 51 #define GROUP_CHANGE_LISTENER 2 52 #define CRED_CHANGE_LISTENER 3 53 54 /* params type for ipc call */ 55 #define PARAM_TYPE_APPID 1 56 #define PARAM_TYPE_DEV_AUTH_CB 2 57 #define PARAM_TYPE_LISTENER 3 58 #define PARAM_TYPE_REQID 4 59 #define PARAM_TYPE_CREATE_PARAMS 5 60 #define PARAM_TYPE_GROUPID 6 61 #define PARAM_TYPE_UDID 7 62 #define PARAM_TYPE_ADD_PARAMS 8 63 #define PARAM_TYPE_DEL_PARAMS 9 64 #define PARAM_TYPE_COMM_DATA 10 65 #define PARAM_TYPE_GROUP_TYPE 14 66 #define PARAM_TYPE_QUERY_PARAMS 18 67 #define PARAM_TYPE_REG_INFO 19 68 #define PARAM_TYPE_DATA_NUM 20 69 #define PARAM_TYPE_SESS_KEY 21 70 #define PARAM_TYPE_OPCODE 22 71 #define PARAM_TYPE_IPC_RESULT 23 72 #define PARAM_TYPE_IPC_RESULT_NUM 24 73 #define PARAM_TYPE_ERRCODE 25 74 #define PARAM_TYPE_ERR_INFO 26 75 #define PARAM_TYPE_REQ_INFO 27 76 #define PARAM_TYPE_GROUP_INFO 28 77 #define PARAM_TYPE_DEVICE_INFO 29 78 #define PARAM_TYPE_AUTH_PARAMS 30 79 #define PARAM_TYPE_CB_OBJECT 31 80 #define PARAM_TYPE_OS_ACCOUNT_ID 32 81 #define PARAM_TYPE_RETURN_DATA 33 82 #define PARAM_TYPE_REQ_JSON 34 83 #define PARAM_TYPE_PSEUDONYM_ID 35 84 #define PARAM_TYPE_INDEX_KEY 36 85 #define PARAM_TYPE_CRED_ID 37 86 #define PARAM_TYPE_CRED_INFO 38 87 #define PARAM_TYPE_CRED_INFO_LIST 39 88 #define PARAM_TYPE_REQUEST_PARAMS 40 89 #define PARAM_TYPE_CRED_VAL 41 90 #define PARAM_TYPE_SERVICE_ID 42 91 #define PARAM_TYPE_PK_WITH_SIG 43 92 #define PARAM_TYPE_SHARED_KEY_VAL 44 93 #define PARAM_TYPE_SHARED_KEY_LEN 45 94 #define PARAM_TYPE_RANDOM 46 95 #define PARAM_TYPE_RANDOM_VAL 47 96 #define PARAM_TYPE_RANDOM_LEN 48 97 98 enum { 99 IPC_CALL_ID_REG_CB = 1, 100 IPC_CALL_ID_UNREG_CB, 101 IPC_CALL_ID_REG_LISTENER, 102 IPC_CALL_ID_UNREG_LISTENER, 103 IPC_CALL_ID_CREATE_GROUP, 104 IPC_CALL_ID_DEL_GROUP, 105 IPC_CALL_ID_ADD_GROUP_MEMBER, 106 IPC_CALL_ID_DEL_GROUP_MEMBER, 107 IPC_CALL_ID_GM_PROC_DATA, 108 IPC_CALL_ID_APPLY_REG_INFO, 109 IPC_CALL_ID_CHECK_ACCESS_TO_GROUP, 110 IPC_CALL_ID_GET_PK_INFO_LIST, 111 IPC_CALL_ID_GET_GROUP_INFO, 112 IPC_CALL_ID_SEARCH_GROUPS, 113 IPC_CALL_ID_GET_JOINED_GROUPS, 114 IPC_CALL_ID_GET_RELATED_GROUPS, 115 IPC_CALL_ID_GET_DEV_INFO_BY_ID, 116 IPC_CALL_ID_GET_TRUST_DEVICES, 117 IPC_CALL_ID_IS_DEV_IN_GROUP, 118 IPC_CALL_ID_DESTROY_INFO, 119 IPC_CALL_ID_GA_PROC_DATA, 120 IPC_CALL_ID_AUTH_DEVICE, 121 IPC_CALL_ID_ADD_MULTI_GROUP_MEMBERS, 122 IPC_CALL_ID_DEL_MULTI_GROUP_MEMBERS, 123 IPC_CALL_GM_CANCEL_REQUEST, 124 IPC_CALL_GA_CANCEL_REQUEST, 125 IPC_CALL_ID_GET_REAL_INFO, 126 IPC_CALL_ID_GET_PSEUDONYM_ID, 127 IPC_CALL_ID_PROCESS_CREDENTIAL, 128 IPC_CALL_ID_DA_PROC_DATA, 129 IPC_CALL_ID_DA_AUTH_DEVICE, 130 IPC_CALL_ID_DA_CANCEL_REQUEST, 131 IPC_CALL_ID_CM_ADD_CREDENTIAL, 132 IPC_CALL_ID_CM_AGREE_CREDENTIAL, 133 IPC_CALL_ID_CM_DEL_CRED_BY_PARAMS, 134 IPC_CALL_ID_CM_BATCH_UPDATE_CREDENTIALS, 135 IPC_CALL_ID_CM_REG_LISTENER, 136 IPC_CALL_ID_CM_UNREG_LISTENER, 137 IPC_CALL_ID_CM_EXPORT_CREDENTIAL, 138 IPC_CALL_ID_CM_QUERY_CREDENTIAL_BY_PARAMS, 139 IPC_CALL_ID_CM_QUERY_CREDENTIAL_BY_CRED_ID, 140 IPC_CALL_ID_CM_DEL_CREDENTIAL, 141 IPC_CALL_ID_CM_UPDATE_CRED_INFO, 142 IPC_CALL_ID_CA_AUTH_CREDENTIAL, 143 IPC_CALL_ID_CA_PROCESS_CRED_DATA, 144 IPC_CALL_ID_AV_GET_CLIENT_SHARED_KEY, 145 IPC_CALL_ID_AV_GET_SERVER_SHARED_KEY, 146 IPC_CALL_ID_LA_START_LIGHT_ACCOUNT_AUTH, 147 IPC_CALL_ID_LA_PROCESS_LIGHT_ACCOUNT_AUTH, 148 }; 149 150 #define RETURN_INT_IF_CHECK_IPC_PARAMS_FAILED(cond) do { \ 151 if ((cond)) { \ 152 LOGE("Invalid params"); \ 153 return HC_ERR_INVALID_PARAMS; \ 154 } \ 155 } while (0) 156 157 #define RETURN_VOID_IF_CHECK_IPC_PARAMS_FAILED(cond) do { \ 158 if ((cond)) { \ 159 LOGE("Invalid params"); \ 160 return; \ 161 } \ 162 } while (0) 163 164 #define RETURN_BOOL_IF_CHECK_IPC_PARAMS_FAILED(cond) do { \ 165 if ((cond)) { \ 166 LOGE("Invalid params"); \ 167 return false; \ 168 } \ 169 } while (0) 170 171 #define RETURN_INT_IF_CREATE_IPC_CTX_FAILED(callCtx) \ 172 ret = CreateCallCtx(&(callCtx)); \ 173 if (ret != HC_SUCCESS) { \ 174 LOGE("CreateCallCtx failed, ret %" LOG_PUB "d", ret); \ 175 return HC_ERR_IPC_INIT; \ 176 } 177 178 #define RETURN_VOID_IF_CREATE_IPC_CTX_FAILED(callCtx) \ 179 ret = CreateCallCtx(&(callCtx)); \ 180 if (ret != HC_SUCCESS) { \ 181 LOGE("CreateCallCtx failed, ret %" LOG_PUB "d", ret); \ 182 return; \ 183 } 184 185 #define RETURN_BOOL_IF_CREATE_IPC_CTX_FAILED(callCtx) \ 186 ret = CreateCallCtx(&(callCtx)); \ 187 if (ret != HC_SUCCESS) { \ 188 LOGE("CreateCallCtx failed, ret %" LOG_PUB "d", ret); \ 189 return false; \ 190 } 191 192 #define BREAK_IF_SET_IPC_PARAM_FAILED(callCtx, paramType, paramValue, valueSize) \ 193 ret = SetCallRequestParamInfo((callCtx), (paramType), (const uint8_t *)(paramValue), (valueSize)); \ 194 if (ret != HC_SUCCESS) { \ 195 LOGE("set request param failed, ret %" LOG_PUB "d, param id %" LOG_PUB "d", ret, paramType); \ 196 ret = HC_ERR_IPC_BUILD_PARAM; \ 197 break; \ 198 } 199 200 #define BREAK_IF_DO_IPC_CALL_FAILED(callCtx, callFunc, isSync) \ 201 ret = DoBinderCall((callCtx), (callFunc), (isSync)); \ 202 if (ret != HC_SUCCESS) { \ 203 LOGE("ipc call failed, ret: %" LOG_PUB "d", ret); \ 204 break; \ 205 } 206 207 #define BREAK_IF_CHECK_IPC_RESULT_FAILED(cache, ret) \ 208 (ret) = HC_ERR_IPC_UNKNOW_REPLY; \ 209 inOutLen = sizeof(int32_t); \ 210 GetIpcReplyByType((cache), REPLAY_CACHE_NUM((cache)), PARAM_TYPE_IPC_RESULT, (uint8_t *)&(ret), &inOutLen); \ 211 if ((inOutLen != sizeof(int32_t)) || (ret) != HC_SUCCESS) { \ 212 break; \ 213 } 214 215 #define BREAK_IF_GET_IPC_REPLY_STR_FAILED(cache, paramType, outVar) \ 216 GetIpcReplyByType((cache), REPLAY_CACHE_NUM(cache), (paramType), (uint8_t *)&(outVar), NULL); \ 217 if ((outVar) == NULL) { \ 218 ret = HC_ERR_IPC_OUT_DATA; \ 219 break; \ 220 } 221 222 #define GET_IPC_REPLY_INT(cache, paramType, outVar) \ 223 inOutLen = sizeof(int32_t); \ 224 GetIpcReplyByType((cache), REPLAY_CACHE_NUM(cache), (paramType), (uint8_t *)(outVar), &inOutLen) \ 225 226 #define BREAK_IF_GET_IPC_RESULT_NUM_FAILED(cache, paramType, ipcResultNum) \ 227 inOutLen = sizeof(int32_t); \ 228 int32_t resultNum = 0; \ 229 GetIpcReplyByType((cache), REPLAY_CACHE_NUM(cache), (paramType), (uint8_t *)(&resultNum), &inOutLen); \ 230 if ((resultNum < (ipcResultNum)) || (inOutLen != sizeof(int32_t))) { \ 231 ret = HC_ERR_IPC_OUT_DATA_NUM; \ 232 break; \ 233 } 234 235 #define DESTROY_IPC_CTX(callCtx) DestroyCallCtx(&(callCtx)) 236 237 #ifdef __cplusplus 238 } 239 #endif 240 #endif 241