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