1 /* 2 * Copyright (C) 2021-2023 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 OHOS_IPC_IPC_TYPES_H 17 #define OHOS_IPC_IPC_TYPES_H 18 19 #include <sys/types.h> 20 #include <unistd.h> 21 #include <errno.h> 22 #include "errors.h" 23 24 namespace OHOS { 25 #define ZIPC_PACK_CHARS(c1, c2, c3, c4) ((((c1) << 24)) | (((c2) << 16)) | (((c3) << 8)) | (c4)) 26 #define SOFTBUS_SUBSYSTEM 203 27 #define SOFTBUS_IPC_ERRNO(module) (-((SOFTBUS_SUBSYSTEM << 21) | ((module) << 16) | (0xFFFF))) 28 constexpr int REGISTRY_HANDLE = 0; 29 30 enum SoftBusSubModule { 31 IPCRPC_SUB_MODULE_CODE = 6, 32 }; 33 34 /** 35 * @brief Enumerates the commands and identifiers used in communication. 36 * @since 9 37 */ 38 enum { 39 FIRST_CALL_TRANSACTION = 0x00000001, 40 LAST_CALL_TRANSACTION = 0x00ffffff, 41 PING_TRANSACTION = ZIPC_PACK_CHARS('_', 'P', 'N', 'G'), 42 DUMP_TRANSACTION = ZIPC_PACK_CHARS('_', 'D', 'M', 'P'), 43 SHELL_COMMAND_TRANSACTION = ZIPC_PACK_CHARS('_', 'C', 'M', 'D'), 44 INTERFACE_TRANSACTION = ZIPC_PACK_CHARS('_', 'N', 'T', 'F'), 45 SYSPROPS_TRANSACTION = ZIPC_PACK_CHARS('_', 'S', 'P', 'R'), 46 SYNCHRONIZE_REFERENCE = ZIPC_PACK_CHARS('_', 'S', 'Y', 'C'), 47 INVOKE_LISTEN_THREAD = ZIPC_PACK_CHARS('_', 'I', 'L', 'T'), 48 GET_PID_UID = ZIPC_PACK_CHARS('_', 'G', 'P', 'U'), 49 GET_PROTO_INFO = ZIPC_PACK_CHARS('_', 'G', 'R', 'I'), 50 GET_SESSION_NAME = ZIPC_PACK_CHARS('_', 'G', 'S', 'N'), 51 GET_SESSION_NAME_PID_UID = ZIPC_PACK_CHARS('_', 'G', 'S', 'P'), 52 GET_GRANTED_SESSION_NAME = ZIPC_PACK_CHARS('_', 'G', 'G', 'S'), 53 REMOVE_SESSION_NAME = ZIPC_PACK_CHARS('_', 'R', 'S', 'N'), 54 DBINDER_OBITUARY_TRANSACTION = ZIPC_PACK_CHARS('_', 'D', 'O', 'T'), 55 DBINDER_INCREFS_TRANSACTION = ZIPC_PACK_CHARS('_', 'D', 'I', 'T'), 56 DBINDER_DECREFS_TRANSACTION = ZIPC_PACK_CHARS('_', 'D', 'D', 'T'), 57 DBINDER_ADD_COMMAUTH = ZIPC_PACK_CHARS('_', 'D', 'A', 'C'), 58 TRANS_SYNC = 0, 59 TRANS_ASYNC = 1, 60 }; 61 62 /** 63 * @brief Enumerates the error types of communication. 64 * @since 9 65 */ 66 enum { 67 NO_ERROR = 0, 68 TRANSACTION_ERR, 69 FLATTEN_ERR = 3, 70 UNKNOWN_TRANSACTION = 4, 71 INVALID_DATA = 5, 72 OBJECT_NULL = 7, 73 INVALID_OPERATION = 8, 74 DEAD_OBJECT = -EPIPE, 75 UNKNOWN_ERROR, 76 }; 77 78 constexpr int MIN_TRANSACTION_ID = 0x1; 79 constexpr int MAX_TRANSACTION_ID = 0x00ffffff; 80 constexpr int INVALID_FD = -1; 81 82 constexpr int32_t RPC_QOS_MIN_BW = 128 * 1024; 83 constexpr int32_t RPC_QOS_MAX_LATENCY = 8000; 84 constexpr int32_t RPC_QOS_MIN_LATENCY = 2000; 85 constexpr int32_t RPC_QOS_MAX_IDLE_TIME = 8000; 86 constexpr int32_t SOCKET_ID_INVALID = -1; 87 88 /** 89 * @brief Enumerate the correct error code returned. 90 * @since 9 91 */ 92 enum { 93 ERR_NONE = 0, 94 ERR_TRANSACTION_FAILED = 1, 95 ERR_UNKNOWN_OBJECT = 2, 96 ERR_FLATTEN_OBJECT = 3, 97 ERR_UNKNOWN_TRANSACTION = 4, 98 ERR_INVALID_DATA = 5, 99 ERR_NULL_OBJECT = 7, 100 ERR_UNKNOWN_REASON, 101 ERR_INVALID_REPLY, 102 ERR_INVALID_STATE, 103 ERR_ALLOC_MEMORY = 11, 104 ERR_START_UV_WORK = 12, 105 IPC_SKELETON_ERR = 100, 106 IPC_SKELETON_NULL_OBJECT_ERR, 107 IPC_PROXY_ERR = 200, 108 IPC_PROXY_DEAD_OBJECT_ERR, 109 IPC_PROXY_NULL_INVOKER_ERR, 110 IPC_PROXY_TRANSACTION_ERR, 111 IPC_PROXY_INVALID_CODE_ERR, 112 IPC_PROXY_WRITE_PARCEL_ERR, 113 IPC_STUB_ERR = 300, 114 IPC_STUB_WRITE_PARCEL_ERR, 115 IPC_STUB_INVOKE_THREAD_ERR, 116 IPC_STUB_INVALID_DATA_ERR, 117 IPC_STUB_CURRENT_NULL_ERR, 118 IPC_STUB_UNKNOW_TRANS_ERR, 119 IPC_STUB_CREATE_BUS_SERVER_ERR, 120 IPC_STUB_REMOVE_SESSION_NAME_ERR, 121 IPC_INVOKER_ERR = 400, 122 IPC_INVOKER_WRITE_TRANS_ERR, 123 IPC_INVOKER_TRANSLATE_ERR, 124 IPC_INVOKER_CONNECT_ERR, 125 IPC_INVOKER_ON_TRANSACT_ERR, 126 IPC_INVOKER_INVALID_DATA_ERR, 127 IPC_INVOKER_INVALID_REPLY_ERR, 128 IPC_TRANSLATE_DBINDER_STUB_ERR, 129 IPC_INVALID_PARAM_ERR, 130 RPC_BASE_INVOKER_ERR = 500, 131 RPC_BASE_INVOKER_INVALID_REPLY_ERR, 132 RPC_BASE_INVOKER_WAIT_REPLY_ERR, 133 RPC_BASE_INVOKER_CURRENT_NULL_ERR, 134 RPC_BASE_INVOKER_INVALID_DATA_ERR, 135 RPC_BASE_INVOKER_WRITE_TRANS_ERR, 136 RPC_BASE_INVOKER_SEND_REPLY_ERR, 137 RPC_DATABUS_INVOKER_ERR = 600, 138 RPC_DATABUS_INVOKER_INVALID_DATA_ERR, 139 RPC_DATABUS_INVOKER_CLOSED_PEER_ERR, 140 RPC_DATABUS_INVOKER_INVALID_STUB_INDEX, 141 DBINDER_SERVICE_ERR = 700, 142 DBINDER_SERVICE_INVALID_DATA_ERR, 143 DBINDER_SERVICE_NOTICE_DIE_ERR, 144 DBINDER_SERVICE_PROCESS_PROTO_ERR, 145 DBINDER_SERVICE_UNKNOW_TRANS_ERR, 146 DBINDER_SERVICE_ADD_DEATH_ERR, 147 DBINDER_SERVICE_REMOVE_DEATH_ERR, 148 DBINDER_SERVICE_WRONG_SESSION, 149 DBINDER_SERVICE_FILL_DATA_ERR, 150 DBINDER_SERVICE_MEMCPY_ERR, 151 DBINDER_SERVICE_MALLOC_ERR, 152 SESSION_WRONG_FD_ERR = 800, 153 SESSION_INVOKER_NULL_ERR, 154 SESSION_UNAUTHENTICATED_ERR, 155 SESSION_UNOPEN_ERR = -1, 156 DBINDER_CALLBACK_ERR = 900, 157 DBINDER_CALLBACK_ADD_DEATH_ERR, 158 DBINDER_CALLBACK_RMV_DEATH_ERR, 159 DBINDER_CALLBACK_READ_OBJECT_ERR, 160 DBINDER_CALLBACK_FILL_DATA_ERR, 161 DBINDER_CALLBACK_MEMCPY_ERR, 162 DBINDER_CALLBACK_MALLOC_ERR, 163 BINDER_CALLBACK_AUTHCOMM_ERR, 164 BINDER_CALLBACK_STUBINDEX_ERR 165 }; 166 167 /** 168 * @brief Enumerate the radar event error code report. 169 */ 170 enum { 171 /* IPC errno begin: -((203 << 21) | (6 << 16) | 0xFFFF) */ 172 RADAR_IPC_ERROR_CODE = SOFTBUS_IPC_ERRNO(IPCRPC_SUB_MODULE_CODE), 173 RADAR_GET_SESSION_FAIL, 174 RADAR_SEQ_INVALID, 175 RADAR_SEND_RAW_DATA_FAIL, 176 RADAR_SEND_NORMAL_DATA_FAIL, 177 RADAR_MOVE_TRANS_DATA_TO_BUFFER_FAIL, 178 RADAR_NO_NEED_REPLY, 179 RADAR_RECEIVE_BUFFER_NULL, 180 RADAR_BUFFER_NULL, 181 RADAR_CREATE_RECV_ALLOCATOR_FAIL, 182 RADAR_SET_ALLOCATOR_FAIL, 183 RADAR_TRANSLATE_OBJECT_FAIL, 184 RADAR_IPC_PROCESS_SKELETON_NULL, 185 RADAR_SEND_ALLOCATOR_FAIL, 186 RADAR_CHECK_AND_SET_CALLER_FAIL, 187 RADAR_STUB_INVALID, 188 RADAR_TRANSLATE_FAIL, 189 RADAR_SEQ_MESSAGE_NULL, 190 RADAR_SEQ_MESSAGE_BUFFER_NULL, 191 RADAR_ERR_MEMCPY_DATA, 192 RADAR_ERR_INVALID_DATA, 193 RADAR_SEND_INVALID_HANDLE, 194 RADAR_SEND_DISTRIBUTED_PROXY, 195 RADAR_GET_SESSION_NAME_FAIL, 196 RADAR_GET_BUS_SESSION_FAIL, 197 RADAR_WRITE_TO_PARCEL_FAIL, 198 RADAR_START_LISTEN_FAIL, 199 RADAR_NEW_SERVER_SESSION_FAIL, 200 RADAR_GET_REMOTE_LISTENER_FAIL, 201 RADAR_SEND_DATA_TO_REMOTE_FAIL, 202 RADAR_SEND_ENTRY_TO_REMOTE_FAIL, 203 RADAR_ATTACH_THREADLOCK_FAIL, 204 RADAR_WAIT_REPLY_TIMEOUT, 205 RADAR_QUERY_REPLY_SESSION_FAIL, 206 RADAR_ADD_DEATH_RECIPIENT_FAIL, 207 RADAR_SEND_DATA_REPLAY_FAIL, 208 RADAR_CALL_SYSTEM_ABILITY_FAIL, 209 RADAR_GRT_SESSION_NAME_FAIL, 210 RADAR_GET_SOFTBUS_SERVICE_FAIL, 211 RADAR_GRANT_PERMISSION_FAIL, 212 RADAR_GET_BUS_NAME_FAIL, 213 RADAR_WRITE_PARCEL_FAIL, 214 RADAR_INVOKE_STUB_THREAD_FAIL, 215 RADAR_SESSION_NAME_INVALID, 216 RADAR_IPC_NEW_SESSION_FAIL, 217 RADAR_GET_SERVICE_NULL, 218 RADAR_QUERY_SESSION_FAIL, 219 RADAR_GET_UID_OR_PID_FAIL, 220 RADAR_CREATE_BUS_NAME_FAIL, 221 RADAR_TYPE_INVALID, 222 RADAR_RECEIVED_PROXY_NULL, 223 RADAR_ATTACH_DEATH_RECIPIENT_FAIL, 224 RADAR_ATTACH_CALLBACK_PROXY_FAIL, 225 RADAR_DETACH_DEATH_RECIPIENT_FAIL, 226 RADAR_DETACH_CALLBACK_PROXY_FAIL, 227 RADAR_GET_SA_OBJECT_NULL, 228 RADAR_RPC_DATABUS_INVOKER_ERR, 229 RADAR_BINDER_CALLBACK_AUTHCOMM_ERR, 230 RADAR_CREATE_SOFTBUS_SERVER_FAIL, 231 RADAR_OPEN_SESSION_FAIL, 232 RADAR_SEND_BYTES_FAIL, 233 RADAR_GET_PEER_SESSION_FAIL, 234 RADAR_SERVICE_NO_START, 235 RADAR_CREATE_BUFFER_FAIL, 236 RADAR_DETACH_SESSION_FAIL, 237 RADAR_ATTACH_SESSION_FAIL, 238 RADAR_NOT_DISTEIBUTED_SA, 239 RADAR_INVALID_SAID, 240 241 }; 242 } // namespace OHOS 243 #endif // OHOS_IPC_IPC_TYPES_H 244