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