• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "ipc_ffi.h"
17 
18 #include <string_ex.h>
19 
20 #include "ipc_skeleton_imp.h"
21 #include "message_option.h"
22 #include "napi_remote_object_holder.h"
23 #include "napi_remote_proxy_holder.h"
24 #include "napi/native_common.h"
25 #include "remote_object_impl.h"
26 #include "remote_proxy_holder_impl.h"
27 #include "securec.h"
28 
29 using namespace OHOS::FFI;
30 
31 namespace OHOS {
32 static const size_t ARGV_LENGTH_1 = 1;
33 extern "C" {
FfiRpcMessageSequenceImplCreate()34 int64_t FfiRpcMessageSequenceImplCreate()
35 {
36     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplCreate start");
37     auto rpc = FFIData::Create<MessageSequenceImpl>(nullptr);
38     if (!rpc) {
39         ZLOGE(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplCreate failed");
40         return -1;
41     }
42     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplCreate end");
43     return rpc->GetID();
44 }
45 
FfiRpcMessageSequenceImplWriteInterfaceToken(int64_t id,char * token,int32_t * errCode)46 void FfiRpcMessageSequenceImplWriteInterfaceToken(int64_t id, char* token, int32_t* errCode)
47 {
48     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteInterfaceToken start");
49     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
50     if (!rpc) {
51         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
52         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
53         return;
54     }
55     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
56     std::u16string str = converter.from_bytes(token);
57     if (str.length() >= MAX_BYTES_LENGTH) {
58         ZLOGE(LOG_LABEL, "[RPC] string length too large");
59         *errCode = errorDesc::CHECK_PARAM_ERROR;
60         return;
61     }
62     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteInterfaceToken end");
63     *errCode = rpc->CJ_WriteInterfaceToken(str);
64 }
65 
FfiRpcMessageSequenceImplReadInterfaceToken(int64_t id,int32_t * errCode)66 char* FfiRpcMessageSequenceImplReadInterfaceToken(int64_t id, int32_t* errCode)
67 {
68     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInterfaceToken start");
69     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
70     if (!rpc) {
71         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
72         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
73         return nullptr;
74     }
75     std::u16string token = rpc->CJ_ReadInterfaceToken(errCode);
76     if (*errCode != 0) {
77         return nullptr;
78     }
79     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
80     std::string str = converter.to_bytes(token);
81     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInterfaceToken end");
82     return MallocCString(str);
83 }
84 
FfiRpcMessageSequenceImplGetSize(int64_t id,int32_t * errCode)85 uint32_t FfiRpcMessageSequenceImplGetSize(int64_t id, int32_t* errCode)
86 {
87     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetSize start");
88     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
89     if (!rpc) {
90         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
91         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
92         return 0;
93     }
94     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetSize end");
95     return rpc->CJ_GetSize(errCode);
96 }
97 
FfiRpcMessageSequenceImplGetCapacity(int64_t id,int32_t * errCode)98 uint32_t FfiRpcMessageSequenceImplGetCapacity(int64_t id, int32_t* errCode)
99 {
100     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetCapacity start");
101     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
102     if (!rpc) {
103         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
104         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
105         return 0;
106     }
107     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetCapacity end");
108     return rpc->CJ_GetCapacity(errCode);
109 }
110 
FfiRpcMessageSequenceImplSetSize(int64_t id,uint32_t value,int32_t * errCode)111 void FfiRpcMessageSequenceImplSetSize(int64_t id, uint32_t value, int32_t* errCode)
112 {
113     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplSetSize start");
114     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
115     if (!rpc) {
116         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
117         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
118         return;
119     }
120     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplSetSize end");
121     *errCode = rpc->CJ_SetSize(value);
122     return;
123 }
124 
FfiRpcMessageSequenceImplSetCapacity(int64_t id,uint32_t value,int32_t * errCode)125 void FfiRpcMessageSequenceImplSetCapacity(int64_t id, uint32_t value, int32_t* errCode)
126 {
127     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplSetCapacity start");
128     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
129     if (!rpc) {
130         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
131         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
132         return;
133     }
134     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplSetCapacity end");
135     *errCode = rpc->CJ_SetCapacity(value);
136     return;
137 }
138 
FfiRpcMessageSequenceImplGetWritableBytes(int64_t id,int32_t * errCode)139 uint32_t FfiRpcMessageSequenceImplGetWritableBytes(int64_t id, int32_t* errCode)
140 {
141     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetWritableBytes start");
142     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
143     if (!rpc) {
144         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
145         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
146         return 0;
147     }
148     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetWritableBytes end");
149     return rpc->CJ_GetWritableBytes(errCode);
150 }
151 
FfiRpcMessageSequenceImplGetReadableBytes(int64_t id,int32_t * errCode)152 uint32_t FfiRpcMessageSequenceImplGetReadableBytes(int64_t id, int32_t* errCode)
153 {
154     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetReadableBytes start");
155     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
156     if (!rpc) {
157         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
158         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
159         return 0;
160     }
161     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetReadableBytes end");
162     return rpc->CJ_GetReadableBytes(errCode);
163 }
164 
FfiRpcMessageSequenceImplGetReadPosition(int64_t id,int32_t * errCode)165 uint32_t FfiRpcMessageSequenceImplGetReadPosition(int64_t id, int32_t* errCode)
166 {
167     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetReadPosition start");
168     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
169     if (!rpc) {
170         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
171         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
172         return 0;
173     }
174     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetReadPosition end");
175     return rpc->CJ_GetReadPosition(errCode);
176 }
177 
FfiRpcMessageSequenceImplGetWritePosition(int64_t id,int32_t * errCode)178 uint32_t FfiRpcMessageSequenceImplGetWritePosition(int64_t id, int32_t* errCode)
179 {
180     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetWritePosition start");
181     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
182     if (!rpc) {
183         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
184         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
185         return 0;
186     }
187     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetWritePosition end");
188     return rpc->CJ_GetWritePosition(errCode);
189 }
190 
FfiRpcMessageSequenceImplRewindWrite(int64_t id,uint32_t pos,int32_t * errCode)191 void FfiRpcMessageSequenceImplRewindWrite(int64_t id, uint32_t pos, int32_t* errCode)
192 {
193     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplRewindWrite start");
194     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
195     if (!rpc) {
196         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
197         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
198         return;
199     }
200     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplRewindWrite end");
201     *errCode = rpc->CJ_RewindWrite(pos);
202 }
203 
FfiRpcMessageSequenceImplRewindRead(int64_t id,uint32_t pos,int32_t * errCode)204 void FfiRpcMessageSequenceImplRewindRead(int64_t id, uint32_t pos, int32_t* errCode)
205 {
206     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplRewindRead start");
207     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
208     if (!rpc) {
209         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
210         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
211         return;
212     }
213     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplRewindRead end");
214     *errCode = rpc->CJ_RewindRead(pos);
215 }
216 
FfiRpcMessageSequenceImplWriteNoException(int64_t id,int32_t * errCode)217 void FfiRpcMessageSequenceImplWriteNoException(int64_t id, int32_t* errCode)
218 {
219     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteNoException start");
220     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
221     if (!rpc) {
222         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
223         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
224         return;
225     }
226     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteNoException end");
227     *errCode = rpc->CJ_WriteNoException();
228 }
229 
FfiRpcMessageSequenceImplReadException(int64_t id,int32_t * errCode)230 char* FfiRpcMessageSequenceImplReadException(int64_t id, int32_t* errCode)
231 {
232     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadException start");
233     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
234     if (!rpc) {
235         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
236         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
237         return nullptr;
238     }
239     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadException end");
240     std::string res = rpc->CJ_ReadException(errCode);
241     if (*errCode != 0) {
242         return nullptr;
243     }
244     return MallocCString(res);
245 }
246 
FfiRpcMessageSequenceImplWriteByte(int64_t id,int8_t value,int32_t * errCode)247 void FfiRpcMessageSequenceImplWriteByte(int64_t id, int8_t value, int32_t* errCode)
248 {
249     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteByte start");
250     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
251     if (!rpc) {
252         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
253         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
254         return;
255     }
256     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteByte end");
257     *errCode = rpc->CJ_WriteByte(value);
258 }
259 
FfiRpcMessageSequenceImplWriteShort(int64_t id,int16_t value,int32_t * errCode)260 void FfiRpcMessageSequenceImplWriteShort(int64_t id, int16_t value, int32_t* errCode)
261 {
262     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteShort start");
263     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
264     if (!rpc) {
265         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
266         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
267         return;
268     }
269     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteShort end");
270     *errCode = rpc->CJ_WriteShort(value);
271 }
272 
FfiRpcMessageSequenceImplWriteInt(int64_t id,int32_t value,int32_t * errCode)273 void FfiRpcMessageSequenceImplWriteInt(int64_t id, int32_t value, int32_t* errCode)
274 {
275     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteInt start");
276     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
277     if (!rpc) {
278         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
279         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
280         return;
281     }
282     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteInt end");
283     *errCode = rpc->CJ_WriteInt(value);
284 }
285 
FfiRpcMessageSequenceImplWriteLong(int64_t id,int64_t value,int32_t * errCode)286 void FfiRpcMessageSequenceImplWriteLong(int64_t id, int64_t value, int32_t* errCode)
287 {
288     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteLong start");
289     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
290     if (!rpc) {
291         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
292         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
293         return;
294     }
295     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteLong end");
296     *errCode = rpc->CJ_WriteLong(value);
297 }
298 
FfiRpcMessageSequenceImplWriteFloat(int64_t id,float value,int32_t * errCode)299 void FfiRpcMessageSequenceImplWriteFloat(int64_t id, float value, int32_t* errCode)
300 {
301     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteFloat start");
302     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
303     if (!rpc) {
304         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
305         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
306         return;
307     }
308     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteFloat end");
309     *errCode = rpc->CJ_WriteFloat(value);
310 }
311 
FfiRpcMessageSequenceImplWriteDouble(int64_t id,double value,int32_t * errCode)312 void FfiRpcMessageSequenceImplWriteDouble(int64_t id, double value, int32_t* errCode)
313 {
314     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteDouble start");
315     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
316     if (!rpc) {
317         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
318         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
319         return;
320     }
321     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteDouble end");
322     *errCode = rpc->CJ_WriteDouble(value);
323 }
324 
FfiRpcMessageSequenceImplWriteBoolean(int64_t id,int8_t value,int32_t * errCode)325 void FfiRpcMessageSequenceImplWriteBoolean(int64_t id, int8_t value, int32_t* errCode)
326 {
327     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteBoolean start");
328     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
329     if (!rpc) {
330         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
331         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
332         return;
333     }
334     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteBoolean end");
335     *errCode = rpc->CJ_WriteBoolean(value);
336 }
337 
FfiRpcMessageSequenceImplWriteChar(int64_t id,uint8_t value,int32_t * errCode)338 void FfiRpcMessageSequenceImplWriteChar(int64_t id, uint8_t value, int32_t* errCode)
339 {
340     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteChar start");
341     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
342     if (!rpc) {
343         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
344         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
345         return;
346     }
347     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteChar end");
348     *errCode = rpc->CJ_WriteChar(value);
349 }
350 
FfiRpcMessageSequenceImplWriteString(int64_t id,char * value,int32_t * errCode)351 void FfiRpcMessageSequenceImplWriteString(int64_t id, char* value, int32_t* errCode)
352 {
353     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteString start");
354     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
355     if (!rpc) {
356         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
357         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
358         return;
359     }
360     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
361     std::u16string str = converter.from_bytes(value);
362     if (str.length() >= MAX_BYTES_LENGTH) {
363         ZLOGE(LOG_LABEL, "string length too large");
364         *errCode = errorDesc::CHECK_PARAM_ERROR;
365         return;
366     }
367     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteString end");
368     *errCode = rpc->CJ_WriteString(str);
369 }
370 
FfiRpcMessageSequenceImplWriteByteArray(int64_t id,OHOS::CJByteArray value,int32_t * errCode)371 void FfiRpcMessageSequenceImplWriteByteArray(int64_t id, OHOS::CJByteArray value, int32_t* errCode)
372 {
373     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteByteArray start");
374     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
375     if (!rpc) {
376         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
377         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
378         return;
379     }
380     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteByteArray end");
381     *errCode = rpc->CJ_WriteByteArray(value);
382 }
383 
FfiRpcMessageSequenceImplWriteShortArray(int64_t id,OHOS::CJShortArray value,int32_t * errCode)384 void FfiRpcMessageSequenceImplWriteShortArray(int64_t id, OHOS::CJShortArray value, int32_t* errCode)
385 {
386     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteShortArray start");
387     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
388     if (!rpc) {
389         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
390         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
391         return;
392     }
393     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWritShortArray end");
394     *errCode = rpc->CJ_WriteShortArray(value);
395 }
396 
FfiRpcMessageSequenceImplWriteIntArray(int64_t id,OHOS::CJIntArray value,int32_t * errCode)397 void FfiRpcMessageSequenceImplWriteIntArray(int64_t id, OHOS::CJIntArray value, int32_t* errCode)
398 {
399     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteIntArray start");
400     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
401     if (!rpc) {
402         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
403         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
404         return;
405     }
406     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteIntArray end");
407     *errCode = rpc->CJ_WriteIntArray(value);
408 }
409 
FfiRpcMessageSequenceImplWriteLongArray(int64_t id,OHOS::CJLongArray value,int32_t * errCode)410 void FfiRpcMessageSequenceImplWriteLongArray(int64_t id, OHOS::CJLongArray value, int32_t* errCode)
411 {
412     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteLongArray start");
413     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
414     if (!rpc) {
415         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
416         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
417         return;
418     }
419     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteLongArray end");
420     *errCode = rpc->CJ_WriteLongArray(value);
421 }
422 
FfiRpcMessageSequenceImplWriteFloatArray(int64_t id,OHOS::CJFloatArray value,int32_t * errCode)423 void FfiRpcMessageSequenceImplWriteFloatArray(int64_t id, OHOS::CJFloatArray value, int32_t* errCode)
424 {
425     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteFloatArray start");
426     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
427     if (!rpc) {
428         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
429         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
430         return;
431     }
432     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteFloatArray end");
433     *errCode = rpc->CJ_WriteFloatArray(value);
434 }
435 
FfiRpcMessageSequenceImplWriteDoubleArray(int64_t id,OHOS::CJDoubleArray value,int32_t * errCode)436 void FfiRpcMessageSequenceImplWriteDoubleArray(int64_t id, OHOS::CJDoubleArray value, int32_t* errCode)
437 {
438     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteDoubleArray start");
439     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
440     if (!rpc) {
441         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
442         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
443         return;
444     }
445     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteDoubleArray end");
446     *errCode = rpc->CJ_WriteDoubleArray(value);
447 }
448 
FfiRpcMessageSequenceImplWriteBooleanArray(int64_t id,OHOS::CJByteArray value,int32_t * errCode)449 void FfiRpcMessageSequenceImplWriteBooleanArray(int64_t id, OHOS::CJByteArray value, int32_t* errCode)
450 {
451     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteBooleanArray start");
452     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
453     if (!rpc) {
454         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
455         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
456         return;
457     }
458     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteBooleanArray end");
459     *errCode = rpc->CJ_WriteBooleanArray(value);
460 }
461 
FfiRpcMessageSequenceImplWriteCharArray(int64_t id,OHOS::CJCharArray value,int32_t * errCode)462 void FfiRpcMessageSequenceImplWriteCharArray(int64_t id, OHOS::CJCharArray value, int32_t* errCode)
463 {
464     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteCharArray start");
465     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
466     if (!rpc) {
467         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
468         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
469         return;
470     }
471     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteCharArray end");
472     *errCode = rpc->CJ_WriteCharArray(value);
473 }
474 
FfiRpcMessageSequenceImplWriteStringArray(int64_t id,OHOS::CJStringArray value,int32_t * errCode)475 void FfiRpcMessageSequenceImplWriteStringArray(int64_t id, OHOS::CJStringArray value, int32_t* errCode)
476 {
477     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteStringArray start");
478     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
479     if (!rpc) {
480         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
481         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
482         return;
483     }
484     std::u16string stringValue[value.len];
485     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
486     for (uint32_t i = 0; i < value.len; i++) {
487         stringValue[i] = converter.from_bytes(value.data[i]);
488         if (stringValue[i].length() >= MAX_BYTES_LENGTH) {
489             ZLOGE(LOG_LABEL, "string length too large");
490             *errCode = errorDesc::CHECK_PARAM_ERROR;
491             return;
492         }
493     }
494     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteStringArray end");
495     *errCode = rpc->CJ_WriteStringArray(stringValue, value.len);
496 }
497 
FfiRpcMessageSequenceImplWriteArrayBuffer(int64_t id,int32_t typeCode,void * value,size_t byteLength,int32_t * errCode)498 void FfiRpcMessageSequenceImplWriteArrayBuffer(
499     int64_t id, int32_t typeCode, void* value, size_t byteLength, int32_t* errCode)
500 {
501     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteArrayBuffer start");
502     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
503     if (!rpc) {
504         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
505         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
506         return;
507     }
508     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteArrayBuffer end");
509     *errCode = rpc->CJ_WriteArrayBuffer(typeCode, value, byteLength);
510 }
511 
FfiRpcMessageSequenceImplWriteUint32(int64_t id,uint32_t value)512 bool FfiRpcMessageSequenceImplWriteUint32(int64_t id, uint32_t value)
513 {
514     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteUint32 start");
515     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
516     if (!rpc) {
517         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
518         return false;
519     }
520     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteUint32 end");
521     return rpc->CJ_WriteUint32(value);
522 }
523 
FfiRpcMessageSequenceImplWriteRawDataBuffer(int64_t id,uint8_t * data,int64_t size,int32_t * errCode)524 void FfiRpcMessageSequenceImplWriteRawDataBuffer(int64_t id, uint8_t* data, int64_t size, int32_t* errCode)
525 {
526     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteRawDataBuffer start");
527     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
528     if (!rpc) {
529         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
530         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
531         return;
532     }
533     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteRawDataBuffer end");
534     *errCode = rpc->CJ_WriteRawDataBuffer(data, size);
535 }
536 
FfiRpcMessageSequenceImplWriteRemoteObject(int64_t id,int64_t object,int32_t * errCode)537 void FfiRpcMessageSequenceImplWriteRemoteObject(int64_t id, int64_t object, int32_t* errCode)
538 {
539     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteRemoteObject start");
540     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
541     if (!rpc) {
542         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
543         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
544         return;
545     }
546     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteRemoteObject end");
547     *errCode = rpc->CJ_WriteRemoteObject(object);
548 }
549 
FfiRpcMessageSequenceImplWriteRemoteObjectArray(int64_t id,OHOS::CJLongArray value,int32_t * errCode)550 void FfiRpcMessageSequenceImplWriteRemoteObjectArray(int64_t id, OHOS::CJLongArray value, int32_t* errCode)
551 {
552     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteRemoteObjectArray start");
553     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
554     if (!rpc) {
555         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
556         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
557         return;
558     }
559     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteRemoteObjectArray end");
560     *errCode = rpc->CJ_WriteRemoteObjectArray(value);
561 }
562 
FfiRpcMessageSequenceImplReadByte(int64_t id,int32_t * errCode)563 int8_t FfiRpcMessageSequenceImplReadByte(int64_t id, int32_t* errCode)
564 {
565     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadByte start");
566     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
567     if (!rpc) {
568         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
569         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
570         return 0;
571     }
572     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadByte end");
573     return rpc->CJ_ReadByte(errCode);
574 }
575 
FfiRpcMessageSequenceImplReadShort(int64_t id,int32_t * errCode)576 int16_t FfiRpcMessageSequenceImplReadShort(int64_t id, int32_t* errCode)
577 {
578     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadShort start");
579     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
580     if (!rpc) {
581         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
582         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
583         return 0;
584     }
585     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadShort end");
586     return rpc->CJ_ReadShort(errCode);
587 }
588 
FfiRpcMessageSequenceImplReadInt(int64_t id,int32_t * errCode)589 int32_t FfiRpcMessageSequenceImplReadInt(int64_t id, int32_t* errCode)
590 {
591     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt start");
592     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
593     if (!rpc) {
594         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
595         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
596         return 0;
597     }
598     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt end");
599     return rpc->CJ_ReadInt(errCode);
600 }
601 
FfiRpcMessageSequenceImplReadLong(int64_t id,int32_t * errCode)602 int64_t FfiRpcMessageSequenceImplReadLong(int64_t id, int32_t* errCode)
603 {
604     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadLong start");
605     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
606     if (!rpc) {
607         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
608         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
609         return 0;
610     }
611     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadLong end");
612     return rpc->CJ_ReadLong(errCode);
613 }
614 
FfiRpcMessageSequenceImplReadFloat(int64_t id,int32_t * errCode)615 float FfiRpcMessageSequenceImplReadFloat(int64_t id, int32_t* errCode)
616 {
617     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFloat start");
618     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
619     if (!rpc) {
620         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
621         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
622         return 0;
623     }
624     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFloat end");
625     return rpc->CJ_ReadFloat(errCode);
626 }
627 
FfiRpcMessageSequenceImplReadDouble(int64_t id,int32_t * errCode)628 double FfiRpcMessageSequenceImplReadDouble(int64_t id, int32_t* errCode)
629 {
630     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadDouble start");
631     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
632     if (!rpc) {
633         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
634         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
635         return 0;
636     }
637     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadDouble end");
638     return rpc->CJ_ReadDouble(errCode);
639 }
640 
FfiRpcMessageSequenceImplReadBoolean(int64_t id,int32_t * errCode)641 int8_t FfiRpcMessageSequenceImplReadBoolean(int64_t id, int32_t* errCode)
642 {
643     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadBoolean start");
644     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
645     if (!rpc) {
646         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
647         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
648         return 0;
649     }
650     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadBoolean end");
651     return rpc->CJ_ReadBoolean(errCode);
652 }
653 
FfiRpcMessageSequenceImplReadChar(int64_t id,int32_t * errCode)654 uint8_t FfiRpcMessageSequenceImplReadChar(int64_t id, int32_t* errCode)
655 {
656     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadChar start");
657     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
658     if (!rpc) {
659         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
660         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
661         return 0;
662     }
663     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadChar end");
664     return rpc->CJ_ReadChar(errCode);
665 }
666 
FfiRpcMessageSequenceImplReadString(int64_t id,int32_t * errCode)667 char* FfiRpcMessageSequenceImplReadString(int64_t id, int32_t* errCode)
668 {
669     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadString start");
670     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
671     if (!rpc) {
672         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
673         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
674         return nullptr;
675     }
676     std::u16string token = rpc->CJ_ReadString(errCode);
677     if (*errCode != 0) {
678         return nullptr;
679     }
680     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
681     std::string str = converter.to_bytes(token);
682     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadString end");
683     return MallocCString(str);
684 }
685 
FfiRpcMessageSequenceImplReadByteArray(int64_t id,int32_t * errCode)686 OHOS::CJByteArray FfiRpcMessageSequenceImplReadByteArray(int64_t id, int32_t* errCode)
687 {
688     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadByteArray start");
689     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
690     if (!rpc) {
691         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
692         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
693         return OHOS::CJByteArray { 0 };
694     }
695     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadByteArray end");
696     return rpc->CJ_ReadByteArray(errCode);
697 }
698 
FfiRpcMessageSequenceImplReadShortArray(int64_t id,int32_t * errCode)699 OHOS::CJShortArray FfiRpcMessageSequenceImplReadShortArray(int64_t id, int32_t* errCode)
700 {
701     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadShortArray start");
702     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
703     if (!rpc) {
704         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
705         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
706         return OHOS::CJShortArray { 0 };
707     }
708     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadShortArray end");
709     return rpc->CJ_ReadShortArray(errCode);
710 }
711 
FfiRpcMessageSequenceImplReadIntArray(int64_t id,int32_t * errCode)712 OHOS::CJIntArray FfiRpcMessageSequenceImplReadIntArray(int64_t id, int32_t* errCode)
713 {
714     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadIntArray start");
715     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
716     if (!rpc) {
717         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
718         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
719         return OHOS::CJIntArray { 0 };
720     }
721     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadIntArray end");
722     return rpc->CJ_ReadIntArray(errCode);
723 }
724 
FfiRpcMessageSequenceImplReadLongArray(int64_t id,int32_t * errCode)725 OHOS::CJLongArray FfiRpcMessageSequenceImplReadLongArray(int64_t id, int32_t* errCode)
726 {
727     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadLongArray start");
728     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
729     if (!rpc) {
730         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
731         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
732         return OHOS::CJLongArray { 0 };
733     }
734     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadLongArray end");
735     return rpc->CJ_ReadLongArray(errCode);
736 }
737 
FfiRpcMessageSequenceImplReadFloatArray(int64_t id,int32_t * errCode)738 OHOS::CJFloatArray FfiRpcMessageSequenceImplReadFloatArray(int64_t id, int32_t* errCode)
739 {
740     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFloatArray start");
741     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
742     if (!rpc) {
743         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
744         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
745         return OHOS::CJFloatArray { 0 };
746     }
747     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFloatArray end");
748     return rpc->CJ_ReadFloatArray(errCode);
749 }
750 
FfiRpcMessageSequenceImplReadDoubleArray(int64_t id,int32_t * errCode)751 OHOS::CJDoubleArray FfiRpcMessageSequenceImplReadDoubleArray(int64_t id, int32_t* errCode)
752 {
753     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadDoubleArray start");
754     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
755     if (!rpc) {
756         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
757         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
758         return OHOS::CJDoubleArray { 0 };
759     }
760     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadDoubleArray end");
761     return rpc->CJ_ReadDoubleArray(errCode);
762 }
763 
FfiRpcMessageSequenceImplReadBooleanArray(int64_t id,int32_t * errCode)764 OHOS::CJByteArray FfiRpcMessageSequenceImplReadBooleanArray(int64_t id, int32_t* errCode)
765 {
766     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadBooleanArray start");
767     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
768     if (!rpc) {
769         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
770         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
771         return OHOS::CJByteArray { 0 };
772     }
773     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadBooleanArray end");
774     return rpc->CJ_ReadBooleanArray(errCode);
775 }
776 
FfiRpcMessageSequenceImplReadCharArray(int64_t id,int32_t * errCode)777 OHOS::CJCharArray FfiRpcMessageSequenceImplReadCharArray(int64_t id, int32_t* errCode)
778 {
779     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadCharArray start");
780     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
781     if (!rpc) {
782         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
783         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
784         return OHOS::CJCharArray { 0 };
785     }
786     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadCharArray end");
787     return rpc->CJ_ReadCharArray(errCode);
788 }
789 
FfiRpcMessageSequenceImplReadStringArray(int64_t id,int32_t * errCode)790 OHOS::CJStringArray FfiRpcMessageSequenceImplReadStringArray(int64_t id, int32_t* errCode)
791 {
792     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadStringArray start");
793     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
794     if (!rpc) {
795         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
796         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
797         return OHOS::CJStringArray { 0 };
798     }
799     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadStringArray end");
800     return rpc->CJ_ReadStringArray(errCode);
801 }
802 
FfiRpcMessageSequenceImplReadInt8ArrayBuffer(int64_t id,int32_t * errCode)803 OHOS::CJByteArray FfiRpcMessageSequenceImplReadInt8ArrayBuffer(int64_t id, int32_t* errCode)
804 {
805     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt8ArrayBuffer start");
806     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
807     if (!rpc) {
808         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
809         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
810         return OHOS::CJByteArray { 0 };
811     }
812     std::vector<int8_t> vector = rpc->CJ_ReadInt8ArrayBuffer(errCode);
813     if (*errCode != 0) {
814         return OHOS::CJByteArray { 0 };
815     }
816     size_t bufferSize = vector.size();
817     if (bufferSize <= 0) {
818         return OHOS::CJByteArray { 0 };
819     }
820     int8_t* arr = static_cast<int8_t*>(malloc(bufferSize));
821     if (arr == nullptr) {
822         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
823         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
824         return OHOS::CJByteArray { 0 };
825     }
826     errno_t ret = memcpy_s(arr, bufferSize, vector.data(), bufferSize);
827     if (ret != EOK) {
828         free(arr);
829         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
830         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
831         return OHOS::CJByteArray { 0 };
832     }
833     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt8ArrayBuffer end");
834     return OHOS::CJByteArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
835 }
836 
FfiRpcMessageSequenceImplReadUInt8ArrayBuffer(int64_t id,int32_t * errCode)837 OHOS::CJCharArray FfiRpcMessageSequenceImplReadUInt8ArrayBuffer(int64_t id, int32_t* errCode)
838 {
839     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt8ArrayBuffer start");
840     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
841     if (!rpc) {
842         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
843         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
844         return OHOS::CJCharArray { 0 };
845     }
846     std::vector<uint8_t> vector = rpc->CJ_ReadUInt8ArrayBuffer(errCode);
847     size_t bufferSize = vector.size();
848     if (bufferSize <= 0) {
849         return OHOS::CJCharArray { 0 };
850     }
851     uint8_t* arr = static_cast<uint8_t*>(malloc(bufferSize));
852     if (arr == nullptr) {
853         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
854         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
855         return OHOS::CJCharArray { 0 };
856     }
857     errno_t ret = memcpy_s(arr, bufferSize, vector.data(), bufferSize);
858     if (ret != EOK) {
859         free(arr);
860         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
861         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
862         return OHOS::CJCharArray { 0 };
863     }
864     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt8ArrayBuffer end");
865     return OHOS::CJCharArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
866 }
867 
FfiRpcMessageSequenceImplReadInt16ArrayBuffer(int64_t id,int32_t * errCode)868 OHOS::CJShortArray FfiRpcMessageSequenceImplReadInt16ArrayBuffer(int64_t id, int32_t* errCode)
869 {
870     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt16ArrayBuffer start");
871     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
872     if (!rpc) {
873         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
874         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
875         return OHOS::CJShortArray { 0 };
876     }
877     std::vector<int16_t> vector = rpc->CJ_ReadInt16ArrayBuffer(errCode);
878     size_t bufferSize = vector.size();
879     if (bufferSize <= 0) {
880         return OHOS::CJShortArray { 0 };
881     }
882     int16_t* arr = static_cast<int16_t*>(malloc(sizeof(int16_t) * bufferSize));
883     if (arr == nullptr) {
884         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
885         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
886         return OHOS::CJShortArray { 0 };
887     }
888     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_16, vector.data(), bufferSize * BYTE_SIZE_16);
889     if (ret != EOK) {
890         free(arr);
891         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
892         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
893         return OHOS::CJShortArray { 0 };
894     }
895     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt16ArrayBuffer end");
896     return OHOS::CJShortArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
897 }
898 
FfiRpcMessageSequenceImplReadUInt16ArrayBuffer(int64_t id,int32_t * errCode)899 OHOS::CJUInt16Array FfiRpcMessageSequenceImplReadUInt16ArrayBuffer(int64_t id, int32_t* errCode)
900 {
901     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt16ArrayBuffer start");
902     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
903     if (!rpc) {
904         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
905         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
906         return OHOS::CJUInt16Array { 0 };
907     }
908     std::vector<uint16_t> vector = rpc->CJ_ReadUInt16ArrayBuffer(errCode);
909     size_t bufferSize = vector.size();
910     if (bufferSize <= 0) {
911         return OHOS::CJUInt16Array { 0 };
912     }
913     uint16_t* arr = static_cast<uint16_t*>(malloc(sizeof(uint16_t) * bufferSize));
914     if (arr == nullptr) {
915         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
916         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
917         return OHOS::CJUInt16Array { 0 };
918     }
919     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_16, vector.data(), bufferSize * BYTE_SIZE_16);
920     if (ret != EOK) {
921         free(arr);
922         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
923         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
924         return OHOS::CJUInt16Array { 0 };
925     }
926     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt16ArrayBuffer end");
927     return OHOS::CJUInt16Array { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
928 }
929 
FfiRpcMessageSequenceImplReadInt32ArrayBuffer(int64_t id,int32_t * errCode)930 OHOS::CJIntArray FfiRpcMessageSequenceImplReadInt32ArrayBuffer(int64_t id, int32_t* errCode)
931 {
932     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt32ArrayBuffer start");
933     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
934     if (!rpc) {
935         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
936         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
937         return OHOS::CJIntArray { 0 };
938     }
939     std::vector<int32_t> vector = rpc->CJ_ReadInt32ArrayBuffer(errCode);
940     size_t bufferSize = vector.size();
941     if (bufferSize <= 0) {
942         return OHOS::CJIntArray { 0 };
943     }
944     int32_t* arr = static_cast<int32_t*>(malloc(sizeof(int32_t) * bufferSize));
945     if (arr == nullptr) {
946         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
947         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
948         return OHOS::CJIntArray { 0 };
949     }
950     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_32, vector.data(), bufferSize * BYTE_SIZE_32);
951     if (ret != EOK) {
952         free(arr);
953         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
954         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
955         return OHOS::CJIntArray { 0 };
956     }
957     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt32ArrayBuffer end");
958     return OHOS::CJIntArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
959 }
960 
FfiRpcMessageSequenceImplReadUInt32ArrayBuffer(int64_t id,int32_t * errCode)961 OHOS::CJUInt32Array FfiRpcMessageSequenceImplReadUInt32ArrayBuffer(int64_t id, int32_t* errCode)
962 {
963     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt32ArrayBuffer start");
964     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
965     if (!rpc) {
966         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
967         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
968         return OHOS::CJUInt32Array { 0 };
969     }
970     std::vector<uint32_t> vector = rpc->CJ_ReadUInt32ArrayBuffer(errCode);
971     size_t bufferSize = vector.size();
972     if (bufferSize <= 0) {
973         return OHOS::CJUInt32Array { 0 };
974     }
975     uint32_t* arr = static_cast<uint32_t*>(malloc(sizeof(uint32_t) * bufferSize));
976     if (arr == nullptr) {
977         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
978         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
979         return OHOS::CJUInt32Array { 0 };
980     }
981     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_32, vector.data(), bufferSize * BYTE_SIZE_32);
982     if (ret != EOK) {
983         free(arr);
984         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
985         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
986         return OHOS::CJUInt32Array { 0 };
987     }
988     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt32ArrayBuffer end");
989     return OHOS::CJUInt32Array { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
990 }
991 
FfiRpcMessageSequenceImplReadFloatArrayBuffer(int64_t id,int32_t * errCode)992 OHOS::CJFloatArray FfiRpcMessageSequenceImplReadFloatArrayBuffer(int64_t id, int32_t* errCode)
993 {
994     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFloatArrayBuffer start");
995     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
996     if (!rpc) {
997         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
998         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
999         return OHOS::CJFloatArray { 0 };
1000     }
1001     std::vector<float> vector = rpc->CJ_ReadFloatArrayBuffer(errCode);
1002     size_t bufferSize = vector.size();
1003     if (bufferSize <= 0) {
1004         return OHOS::CJFloatArray { 0 };
1005     }
1006     float* arr = static_cast<float*>(malloc(sizeof(float) * bufferSize));
1007     if (arr == nullptr) {
1008         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
1009         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1010         return OHOS::CJFloatArray { 0 };
1011     }
1012     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_32, vector.data(), bufferSize * BYTE_SIZE_32);
1013     if (ret != EOK) {
1014         free(arr);
1015         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
1016         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1017         return OHOS::CJFloatArray { 0 };
1018     }
1019     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFloatArrayBuffer end");
1020     return OHOS::CJFloatArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
1021 }
1022 
FfiRpcMessageSequenceImplReadDoubleArrayBuffer(int64_t id,int32_t * errCode)1023 OHOS::CJDoubleArray FfiRpcMessageSequenceImplReadDoubleArrayBuffer(int64_t id, int32_t* errCode)
1024 {
1025     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadDoubleArrayBuffer start");
1026     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1027     if (!rpc) {
1028         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1029         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1030         return OHOS::CJDoubleArray { 0 };
1031     }
1032     std::vector<double> vector = rpc->CJ_ReadDoubleArrayBuffer(errCode);
1033     size_t bufferSize = vector.size();
1034     if (bufferSize <= 0) {
1035         return OHOS::CJDoubleArray { 0 };
1036     }
1037     double* arr = static_cast<double*>(malloc(sizeof(double) * bufferSize));
1038     if (arr == nullptr) {
1039         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
1040         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1041         return OHOS::CJDoubleArray { 0 };
1042     }
1043     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_64, vector.data(), bufferSize * BYTE_SIZE_64);
1044     if (ret != EOK) {
1045         free(arr);
1046         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
1047         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1048         return OHOS::CJDoubleArray { 0 };
1049     }
1050     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadDoubleArrayBuffer end");
1051     return OHOS::CJDoubleArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
1052 }
FfiRpcMessageSequenceImplReadInt64ArrayBuffer(int64_t id,int32_t * errCode)1053 OHOS::CJLongArray FfiRpcMessageSequenceImplReadInt64ArrayBuffer(int64_t id, int32_t* errCode)
1054 {
1055     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt64ArrayBuffer start");
1056     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1057     if (!rpc) {
1058         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1059         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1060         return OHOS::CJLongArray { 0 };
1061     }
1062     std::vector<int64_t> vector = rpc->CJ_ReadInt64ArrayBuffer(errCode);
1063     size_t bufferSize = vector.size();
1064     if (bufferSize <= 0) {
1065         return OHOS::CJLongArray { 0 };
1066     }
1067     int64_t* arr = static_cast<int64_t*>(malloc(sizeof(int64_t) * bufferSize));
1068     if (arr == nullptr) {
1069         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
1070         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1071         return OHOS::CJLongArray { 0 };
1072     }
1073     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_64, vector.data(), bufferSize * BYTE_SIZE_64);
1074     if (ret != EOK) {
1075         free(arr);
1076         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
1077         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1078         return OHOS::CJLongArray { 0 };
1079     }
1080     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadInt64ArrayBuffer end");
1081     return OHOS::CJLongArray { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
1082 }
1083 
FfiRpcMessageSequenceImplReadUInt64ArrayBuffer(int64_t id,int32_t * errCode)1084 OHOS::CJUInt64Array FfiRpcMessageSequenceImplReadUInt64ArrayBuffer(int64_t id, int32_t* errCode)
1085 {
1086     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt64ArrayBuffer start");
1087     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1088     if (!rpc) {
1089         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1090         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1091         return OHOS::CJUInt64Array { 0 };
1092     }
1093     std::vector<uint64_t> vector = rpc->CJ_ReadUInt64ArrayBuffer(errCode);
1094     size_t bufferSize = vector.size();
1095     if (bufferSize <= 0) {
1096         return OHOS::CJUInt64Array { 0 };
1097     }
1098     uint64_t* arr = static_cast<uint64_t*>(malloc(sizeof(uint64_t) * bufferSize));
1099     if (arr == nullptr) {
1100         ZLOGE(LOG_LABEL, "[RPC] create arrayBuffer failed.");
1101         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1102         return OHOS::CJUInt64Array { 0 };
1103     }
1104     errno_t ret = memcpy_s(arr, bufferSize * BYTE_SIZE_64, vector.data(), bufferSize * BYTE_SIZE_64);
1105     if (ret != EOK) {
1106         free(arr);
1107         ZLOGE(LOG_LABEL, "[RPC] memcpy_s is failed.");
1108         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1109         return OHOS::CJUInt64Array { 0 };
1110     }
1111     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadUInt64ArrayBuffer end");
1112     return OHOS::CJUInt64Array { .data = arr, .len = static_cast<uint32_t>(bufferSize) };
1113 }
1114 
FfiRpcMessageSequenceImplReadRawDataBuffer(int64_t id,int64_t size,int32_t * errCode)1115 uint8_t* FfiRpcMessageSequenceImplReadRawDataBuffer(int64_t id, int64_t size, int32_t* errCode)
1116 {
1117     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadRawDataBuffer start");
1118     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1119     if (!rpc) {
1120         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1121         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1122         return nullptr;
1123     }
1124     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadRawDataBuffer end");
1125     return rpc->CJ_ReadRawDataBuffer(size, errCode);
1126 }
1127 
1128 
FfiRpcMessageSequenceImplReadRemoteObject(int64_t id,int32_t * errCode)1129 RetDataI64 FfiRpcMessageSequenceImplReadRemoteObject(int64_t id, int32_t* errCode)
1130 {
1131     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadRemoteObject start");
1132     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1133     if (!rpc) {
1134         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1135         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1136         return RetDataI64 { 0, 0 };
1137     }
1138     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadRemoteObject end");
1139     return rpc->CJ_ReadRemoteObject(errCode);
1140 }
1141 
FfiRpcMessageSequenceImplReadRemoteObjectArray(int64_t id,int32_t * errCode)1142 OHOS::RemoteObjectArray FfiRpcMessageSequenceImplReadRemoteObjectArray(int64_t id, int32_t* errCode)
1143 {
1144     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadRemoteObjectArray start");
1145     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1146     if (!rpc) {
1147         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1148         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1149         return OHOS::RemoteObjectArray { nullptr, nullptr, 0 };
1150     }
1151     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadRemoteObjectArray end");
1152     return rpc->CJ_ReadRemoteObjectArray(errCode);
1153 }
1154 
FfiRpcMessageSequenceImplCloseFileDescriptor(int32_t fd)1155 void FfiRpcMessageSequenceImplCloseFileDescriptor(int32_t fd)
1156 {
1157     return MessageSequenceImpl::CJ_CloseFileDescriptor(fd);
1158 }
1159 
FfiRpcMessageSequenceImplDupFileDescriptor(int32_t fd)1160 int32_t FfiRpcMessageSequenceImplDupFileDescriptor(int32_t fd)
1161 {
1162     return MessageSequenceImpl::CJ_DupFileDescriptor(fd);
1163 }
1164 
FfiRpcMessageSequenceImplContainFileDescriptors(int64_t id,int32_t * errCode)1165 bool FfiRpcMessageSequenceImplContainFileDescriptors(int64_t id, int32_t* errCode)
1166 {
1167     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplContainFileDescriptors start");
1168     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1169     if (!rpc) {
1170         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1171         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1172         return false;
1173     }
1174     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplContainFileDescriptors end");
1175     return rpc->CJ_ContainFileDescriptors(errCode);
1176 }
1177 
FfiRpcMessageSequenceImplWriteFileDescriptor(int64_t id,int32_t fd,int32_t * errCode)1178 void FfiRpcMessageSequenceImplWriteFileDescriptor(int64_t id, int32_t fd, int32_t* errCode)
1179 {
1180     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteFileDescriptor start");
1181     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1182     if (!rpc) {
1183         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1184         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
1185         return;
1186     }
1187     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteFileDescriptor end");
1188     *errCode = rpc->CJ_WriteFileDescriptor(fd);
1189 }
1190 
FfiRpcMessageSequenceImplReadFileDescriptor(int64_t id,int32_t * errCode)1191 int32_t FfiRpcMessageSequenceImplReadFileDescriptor(int64_t id, int32_t* errCode)
1192 {
1193     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFileDescriptor start");
1194     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1195     if (!rpc) {
1196         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1197         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1198         return 0;
1199     }
1200     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadFileDescriptor end");
1201     return rpc->CJ_ReadFileDescriptor(errCode);
1202 }
1203 
FfiRpcMessageSequenceImplWriteAshmem(int64_t mid,int64_t aid,int32_t * errCode)1204 void FfiRpcMessageSequenceImplWriteAshmem(int64_t mid, int64_t aid, int32_t* errCode)
1205 {
1206     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteAshmem start");
1207     auto rpc = FFIData::GetData<MessageSequenceImpl>(mid);
1208     if (!rpc) {
1209         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1210         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
1211         return;
1212     }
1213     auto ashmem = FFIData::GetData<AshmemImpl>(aid);
1214     if (!ashmem || ashmem->GetAshmem() == nullptr) {
1215         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1216         *errCode = errorDesc::WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR;
1217         return;
1218     }
1219     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplWriteAshmem end");
1220     *errCode = rpc->CJ_WriteAshmem(ashmem->GetAshmem());
1221 }
1222 
FfiRpcMessageSequenceImplReadAshmem(int64_t id,int32_t * errCode)1223 int64_t FfiRpcMessageSequenceImplReadAshmem(int64_t id, int32_t* errCode)
1224 {
1225     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadAshmem start");
1226     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1227     if (!rpc) {
1228         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1229         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1230         return -1;
1231     }
1232     sptr<Ashmem> nativeAshmem = rpc->CJ_ReadAshmem(errCode);
1233     if (*errCode != 0) {
1234         return -1;
1235     }
1236     auto ashmem = FFIData::Create<AshmemImpl>(nativeAshmem);
1237     if (!ashmem) {
1238         ZLOGE(LOG_LABEL, "[RPC] failed to construct cj Ashmem");
1239         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1240         return -1;
1241     }
1242     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplReadAshmem end");
1243     return ashmem->GetID();
1244 }
1245 
FfiRpcMessageSequenceImplGetRawDataCapacity(int64_t id,int32_t * errCode)1246 uint32_t FfiRpcMessageSequenceImplGetRawDataCapacity(int64_t id, int32_t* errCode)
1247 {
1248     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetRawDataCapacity start");
1249     auto rpc = FFIData::GetData<MessageSequenceImpl>(id);
1250     if (!rpc) {
1251         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1252         *errCode = errorDesc::READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR;
1253         return 0;
1254     }
1255     ZLOGD(LOG_LABEL, "[RPC] FfiRpcMessageSequenceImplGetRawDataCapacity end");
1256     return rpc->CJ_GetRawDataCapacity(errCode);
1257 }
1258 
FfiRpcAshmemImplCreate(char * ashmemName,int32_t ashmemSize)1259 int64_t FfiRpcAshmemImplCreate(char* ashmemName, int32_t ashmemSize)
1260 {
1261     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreate start");
1262     sptr<Ashmem> nativeAshmem = Ashmem::CreateAshmem(ashmemName, ashmemSize);
1263     if (nativeAshmem == nullptr) {
1264         ZLOGE(LOG_LABEL, "[RPC] instance not exist.");
1265         return -1;
1266     }
1267     auto ashmem = FFIData::Create<AshmemImpl>(nativeAshmem);
1268     if (!ashmem) {
1269         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreate failed");
1270         return -1;
1271     }
1272     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreate end");
1273     return ashmem->GetID();
1274 }
1275 
FfiRpcAshmemImplCreateFromExisting(int64_t id,int32_t * errCode)1276 int64_t FfiRpcAshmemImplCreateFromExisting(int64_t id, int32_t* errCode)
1277 {
1278     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreateFromExisting start");
1279     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1280     if (!nativeAshmem) {
1281         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreateFromExisting failed");
1282         *errCode = errorDesc::CHECK_PARAM_ERROR;
1283         return -1;
1284     }
1285     int32_t fd = nativeAshmem->GetAshmem()->GetAshmemFd();
1286     int32_t size = nativeAshmem->GetAshmem()->GetAshmemSize();
1287     if (fd <= 0 || size <= 0) {
1288         ZLOGE(LOG_LABEL, "[RPC] fd <= 0 or  size <= 0");
1289         *errCode = errorDesc::CHECK_PARAM_ERROR;
1290         return -1;
1291     }
1292     sptr<Ashmem> newAshmem(new Ashmem(dup(fd), size));
1293     if (newAshmem == nullptr) {
1294         ZLOGE(LOG_LABEL, "[RPC] newAshmem is null");
1295         *errCode = errorDesc::CHECK_PARAM_ERROR;
1296         return -1;
1297     }
1298     auto ashmem = FFIData::Create<AshmemImpl>(newAshmem);
1299     if (!ashmem) {
1300         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreateFromExisting failed");
1301         *errCode = errorDesc::CHECK_PARAM_ERROR;
1302         return -1;
1303     }
1304     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplCreateFromExisting end");
1305     return ashmem->GetID();
1306 }
1307 
FfiRpcAshmemImplCloseAshmem(int64_t id)1308 void FfiRpcAshmemImplCloseAshmem(int64_t id)
1309 {
1310     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplCloseAshmem start");
1311     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1312     if (!nativeAshmem) {
1313         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplCloseAshmem failed");
1314         return;
1315     }
1316     nativeAshmem->CloseAshmem();
1317     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplCloseAshmem end");
1318 }
1319 
FfiRpcAshmemImplUnmapAshmem(int64_t id)1320 void FfiRpcAshmemImplUnmapAshmem(int64_t id)
1321 {
1322     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplUnmapAshmem start");
1323     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1324     if (!nativeAshmem) {
1325         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplUnmapAshmem failed");
1326         return;
1327     }
1328     nativeAshmem->UnmapAshmem();
1329     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplUnmapAshmem end");
1330 }
1331 
FfiRpcAshmemImplGetAshmemSize(int64_t id,int32_t * errCode)1332 int32_t FfiRpcAshmemImplGetAshmemSize(int64_t id, int32_t* errCode)
1333 {
1334     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplGetAshmemSize start");
1335     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1336     if (!nativeAshmem) {
1337         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplGetAshmemSize failed");
1338         *errCode = errorDesc::CHECK_PARAM_ERROR;
1339         return 0;
1340     }
1341     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplGetAshmemSize end");
1342     return nativeAshmem->GetAshmemSize(errCode);
1343 }
1344 
FfiRpcAshmemImplMapTypedAshmem(int64_t id,uint32_t mapType,int32_t * errCode)1345 void FfiRpcAshmemImplMapTypedAshmem(int64_t id, uint32_t mapType, int32_t* errCode)
1346 {
1347     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapTypedAshmem start");
1348     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1349     if (!nativeAshmem) {
1350         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapTypedAshmem failed");
1351         *errCode = errorDesc::OS_MMAP_ERROR;
1352         return;
1353     }
1354     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapTypedAshmem end");
1355     *errCode = nativeAshmem->MapTypedAshmem(mapType);
1356 }
1357 
FfiRpcAshmemImplMapReadWriteAshmem(int64_t id,int32_t * errCode)1358 void FfiRpcAshmemImplMapReadWriteAshmem(int64_t id, int32_t* errCode)
1359 {
1360     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapReadWriteAshmem start");
1361     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1362     if (!nativeAshmem) {
1363         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapReadWriteAshmem failed");
1364         *errCode = errorDesc::OS_MMAP_ERROR;
1365         return;
1366     }
1367     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapReadWriteAshmem end");
1368     *errCode = nativeAshmem->MapReadWriteAshmem();
1369 }
1370 
FfiRpcAshmemImplMapReadonlyAshmem(int64_t id,int32_t * errCode)1371 void FfiRpcAshmemImplMapReadonlyAshmem(int64_t id, int32_t* errCode)
1372 {
1373     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapReadonlyAshmem start");
1374     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1375     if (!nativeAshmem) {
1376         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapReadonlyAshmem failed");
1377         *errCode = errorDesc::OS_MMAP_ERROR;
1378         return;
1379     }
1380     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplMapReadonlyAshmem end");
1381     *errCode = nativeAshmem->MapReadonlyAshmem();
1382 }
1383 
FfiRpcAshmemImplSetProtectionType(int64_t id,uint32_t protectionType,int32_t * errCode)1384 void FfiRpcAshmemImplSetProtectionType(int64_t id, uint32_t protectionType, int32_t* errCode)
1385 {
1386     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplSetProtectionType start");
1387     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1388     if (!nativeAshmem) {
1389         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplSetProtectionType failed");
1390         *errCode = errorDesc::OS_IOCTL_ERROR;
1391         return;
1392     }
1393     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplSetProtectionType end");
1394     *errCode = nativeAshmem->SetProtectionType(protectionType);
1395 }
1396 
FfiRpcAshmemImplWriteDataToAshmem(int64_t id,uint8_t * data,int64_t size,int64_t offset,int32_t * errCode)1397 void FfiRpcAshmemImplWriteDataToAshmem(int64_t id, uint8_t* data, int64_t size, int64_t offset, int32_t* errCode)
1398 {
1399     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplWriteDataToAshmem start");
1400     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1401     if (!nativeAshmem) {
1402         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplWriteDataToAshmem failed");
1403         *errCode = errorDesc::WRITE_TO_ASHMEM_ERROR;
1404         return;
1405     }
1406     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplWriteDataToAshmem end");
1407     *errCode = nativeAshmem->WriteDataToAshmem(data, size, offset);
1408 }
1409 
FfiRpcAshmemImplReadDataFromAshmem(int64_t id,int64_t size,int64_t offset,int32_t * errCode)1410 uint8_t* FfiRpcAshmemImplReadDataFromAshmem(int64_t id, int64_t size, int64_t offset, int32_t* errCode)
1411 {
1412     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplReadDataFromAshmem start");
1413     auto nativeAshmem = FFIData::GetData<AshmemImpl>(id);
1414     if (!nativeAshmem) {
1415         ZLOGE(LOG_LABEL, "[RPC] FfiRpcAshmemImplReadDataFromAshmem failed");
1416         *errCode = errorDesc::READ_FROM_ASHMEM_ERROR;
1417         return nullptr;
1418     }
1419     ZLOGD(LOG_LABEL, "[RPC] FfiRpcAshmemImplReadDataFromAshmem end");
1420     return nativeAshmem->ReadDataFromAshmem(size, offset, errCode);
1421 }
1422 
FfiRpcRemoteObjectConstructor(char * stringValue)1423 int64_t FfiRpcRemoteObjectConstructor(char* stringValue)
1424 {
1425     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectConstructor start");
1426     if (strlen(stringValue) >= MAX_BYTES_LENGTH) {
1427         ZLOGE(LOG_LABEL, "string length too large");
1428         return -1;
1429     }
1430     std::string descriptor = stringValue;
1431     RemoteObjectHolderImpl* holder = new (std::nothrow) RemoteObjectHolderImpl(Str8ToStr16(descriptor));
1432     if (holder == nullptr) {
1433         ZLOGE(LOG_LABEL, "new RemoteObjectHolderImpl failed");
1434         return -1;
1435     }
1436     auto remoteObject = FFIData::Create<CjRemoteObjectImpl>(holder);
1437     if (!remoteObject) {
1438         delete holder;
1439         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteObjectConstructor failed");
1440         return -1;
1441     }
1442     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectConstructor end");
1443     return remoteObject->GetID();
1444 }
1445 
FfiRpcRemoteObjectSendMessageRequest(int64_t id,uint32_t code,int64_t dataId,int64_t replyId,MesOption opt,int64_t funcId)1446 int32_t FfiRpcRemoteObjectSendMessageRequest(
1447     int64_t id, uint32_t code, int64_t dataId, int64_t replyId, MesOption opt, int64_t funcId)
1448 {
1449     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectSendMessageRequest start");
1450     auto remoteObject = FFIData::GetData<CjRemoteObjectImpl>(id);
1451     if (!remoteObject) {
1452         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteObjectSendMessageRequest failed");
1453         return errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1454     }
1455     MessageOption option = MessageOption(opt.flags, opt.waitTime);
1456     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectSendMessageRequest end");
1457     return remoteObject->SendMessageRequest(code, dataId, replyId, option, funcId);
1458 }
1459 
FfiRpcRemoteObjectGetCallingPid()1460 int32_t FfiRpcRemoteObjectGetCallingPid()
1461 {
1462     return GetCallingPid();
1463 }
1464 
FfiRpcRemoteObjectGetCallingUid()1465 int32_t FfiRpcRemoteObjectGetCallingUid()
1466 {
1467     return GetCallingUid();
1468 }
1469 
FfiRpcRemoteObjectGetDescriptor(int64_t id,int32_t * errCode)1470 char* FfiRpcRemoteObjectGetDescriptor(int64_t id, int32_t* errCode)
1471 {
1472     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectGetDescriptor start");
1473     auto remoteObject = FFIData::GetData<CjRemoteObjectImpl>(id);
1474     if (!remoteObject) {
1475         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteObjectGetDescriptor failed");
1476         *errCode = errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1477         return nullptr;
1478     }
1479     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectGetDescriptor end");
1480     return remoteObject->GetDescriptor(errCode);
1481 }
1482 
FfiRpcRemoteObjectModifyLocalInterface(int64_t id,char * stringValue,int32_t * errCode)1483 void FfiRpcRemoteObjectModifyLocalInterface(int64_t id, char* stringValue, int32_t* errCode)
1484 {
1485     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectModifyLocalInterface start");
1486     auto remoteObject = FFIData::GetData<CjRemoteObjectImpl>(id);
1487     if (!remoteObject) {
1488         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteObjectModifyLocalInterface failed");
1489         *errCode = errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1490         return;
1491     }
1492     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteObjectModifyLocalInterface end");
1493     *errCode = remoteObject->ModifyLocalInterface(stringValue);
1494 }
1495 
FfiRpcIPCSkeletonGetContextObject()1496 RetDataI64 FfiRpcIPCSkeletonGetContextObject()
1497 {
1498     return GetContextObject();
1499 }
1500 
FfiRpcIPCSkeletonGetCallingPid()1501 int32_t FfiRpcIPCSkeletonGetCallingPid()
1502 {
1503     return GetCallingPid();
1504 }
1505 
FfiRpcIPCSkeletonGetCallingUid()1506 int32_t FfiRpcIPCSkeletonGetCallingUid()
1507 {
1508     return GetCallingUid();
1509 }
1510 
FfiRpcIPCSkeletonGetCallingTokenId()1511 uint32_t FfiRpcIPCSkeletonGetCallingTokenId()
1512 {
1513     return GetCallingTokenId();
1514 }
1515 
FfiRpcIPCSkeletonGetCallingDeviceID()1516 char* FfiRpcIPCSkeletonGetCallingDeviceID()
1517 {
1518     return GetCallingDeviceID();
1519 }
1520 
FfiRpcIPCSkeletonGetLocalDeviceID()1521 char* FfiRpcIPCSkeletonGetLocalDeviceID()
1522 {
1523     return GetLocalDeviceID();
1524 }
1525 
FfiRpcIPCSkeletonIsLocalCalling()1526 bool FfiRpcIPCSkeletonIsLocalCalling()
1527 {
1528     return IsLocalCalling();
1529 }
1530 
FfiRpcIPCSkeletonFlushCmdBuffer(int64_t object)1531 void FfiRpcIPCSkeletonFlushCmdBuffer(int64_t object)
1532 {
1533     FlushCmdBuffer(object);
1534 }
1535 
FfiRpcRemoteProxySendMessageRequest(int64_t id,uint32_t code,int64_t dataId,int64_t replyId,MesOption opt,int64_t funcId)1536 int32_t FfiRpcRemoteProxySendMessageRequest(
1537     int64_t id, uint32_t code, int64_t dataId, int64_t replyId, MesOption opt, int64_t funcId)
1538 {
1539     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxySendMessageRequest start");
1540     auto remoteProxy = FFIData::GetData<RemoteProxyHolderImpl>(id);
1541     if (!remoteProxy) {
1542         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteProxySendMessageRequest failed");
1543         return errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1544     }
1545     MessageOption option = MessageOption(opt.flags, opt.waitTime);
1546     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxySendMessageRequest end");
1547     return remoteProxy->SendMessageRequest(code, dataId, replyId, option, funcId);
1548 }
1549 
FfiRpcRemoteProxyRegisterDeathRecipient(int64_t id,int64_t funcId,int32_t flag,int32_t * errCode)1550 void FfiRpcRemoteProxyRegisterDeathRecipient(int64_t id, int64_t funcId, int32_t flag, int32_t* errCode)
1551 {
1552     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyRegisterDeathRecipient start");
1553     auto remoteProxy = FFIData::GetData<RemoteProxyHolderImpl>(id);
1554     if (!remoteProxy) {
1555         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteProxyRegisterDeathRecipient failed");
1556         *errCode = errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1557         return;
1558     }
1559     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyRegisterDeathRecipient end");
1560     *errCode = remoteProxy->RegisterDeathRecipient(funcId, flag);
1561 }
1562 
FfiRpcRemoteProxyUnregisterDeathRecipient(int64_t id,int64_t funcId,int32_t flag,int32_t * errCode)1563 void FfiRpcRemoteProxyUnregisterDeathRecipient(int64_t id, int64_t funcId, int32_t flag, int32_t* errCode)
1564 {
1565     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyUnregisterDeathRecipient start");
1566     auto remoteProxy = FFIData::GetData<RemoteProxyHolderImpl>(id);
1567     if (!remoteProxy) {
1568         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteProxyUnregisterDeathRecipient failed");
1569         *errCode = errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1570         return;
1571     }
1572     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyUnregisterDeathRecipient end");
1573     *errCode = remoteProxy->UnregisterDeathRecipient(funcId, flag);
1574 }
1575 
FfiRpcRemoteProxyGetDescriptor(int64_t id,int32_t * errCode)1576 char* FfiRpcRemoteProxyGetDescriptor(int64_t id, int32_t* errCode)
1577 {
1578     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyGetDescriptor start");
1579     auto remoteProxy = FFIData::GetData<RemoteProxyHolderImpl>(id);
1580     if (!remoteProxy) {
1581         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteProxyGetDescriptor failed");
1582         *errCode = errorDesc::PROXY_OR_REMOTE_OBJECT_INVALID_ERROR;
1583         return nullptr;
1584     }
1585     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyGetDescriptor end");
1586     return remoteProxy->GetDescriptor(errCode);
1587 }
1588 
FfiRpcRemoteProxyIsObjectDead(int64_t id)1589 bool FfiRpcRemoteProxyIsObjectDead(int64_t id)
1590 {
1591     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyIsObjectDead start");
1592     auto remoteProxy = FFIData::GetData<RemoteProxyHolderImpl>(id);
1593     if (!remoteProxy) {
1594         ZLOGE(LOG_LABEL, "[RPC] FfiRpcRemoteProxyIsObjectDead failed");
1595         return false;
1596     }
1597     ZLOGD(LOG_LABEL, "[RPC] FfiRpcRemoteProxyIsObjectDead end");
1598     return remoteProxy->IsObjectDead();
1599 }
1600 
FfiRpcGetRemoteType(int64_t id)1601 int32_t FfiRpcGetRemoteType(int64_t id)
1602 {
1603     auto remoteObject  = FFIData::GetData<CjIRemoteObjectImpl>(id);
1604     if (!remoteObject) {
1605         ZLOGE(LOG_LABEL, "[RPC] get construct failed");
1606         return -1;
1607     }
1608     return remoteObject->IsProxyObject() ? 1 : 0;
1609 }
1610 
GetRemoteProxyHolder(napi_env env,napi_value jsRemoteProxy)1611 NAPIRemoteProxyHolder *GetRemoteProxyHolder(napi_env env, napi_value jsRemoteProxy)
1612 {
1613     NAPIRemoteProxyHolder *proxyHolder = nullptr;
1614     napi_unwrap(env, jsRemoteProxy, (void **)&proxyHolder);
1615     NAPI_ASSERT(env, proxyHolder != nullptr, "failed to get napi remote proxy holder");
1616     return proxyHolder;
1617 }
1618 
FfiCreateRemoteObjectFromNapi(napi_env env,napi_value object)1619 int64_t FfiCreateRemoteObjectFromNapi(napi_env env, napi_value object)
1620 {
1621     if (env != nullptr || object != nullptr) {
1622         napi_value global = nullptr;
1623         napi_status status = napi_get_global(env, &global);
1624         if (status != napi_ok) {
1625             ZLOGE(LOG_LABEL, "get napi global failed");
1626             return 0;
1627         }
1628         napi_value stubConstructor = nullptr;
1629         status = napi_get_named_property(env, global, "IPCStubConstructor_", &stubConstructor);
1630         if (status != napi_ok) {
1631             ZLOGE(LOG_LABEL, "get stub constructor failed");
1632             return 0;
1633         }
1634         bool instanceOfStub = false;
1635         status = napi_instanceof(env, object, stubConstructor, &instanceOfStub);
1636         if (status != napi_ok) {
1637             ZLOGE(LOG_LABEL, "failed to check js object type");
1638             return 0;
1639         }
1640         if (instanceOfStub) {
1641             NAPIRemoteObjectHolder *holder = nullptr;
1642             napi_unwrap(env, object, (void **)&holder);
1643             if (holder == nullptr) {
1644                 ZLOGE(LOG_LABEL, "failed to get napi remote object holder");
1645                 return 0;
1646             }
1647             return CreateStubRemoteObject(holder->Get());
1648         }
1649 
1650         napi_value proxyConstructor = nullptr;
1651         status = napi_get_named_property(env, global, "IPCProxyConstructor_", &proxyConstructor);
1652         if (status != napi_ok) {
1653             ZLOGE(LOG_LABEL, "get proxy constructor failed");
1654             return 0;
1655         }
1656         bool instanceOfProxy = false;
1657         status = napi_instanceof(env, object, proxyConstructor, &instanceOfProxy);
1658         if (status != napi_ok) {
1659             ZLOGE(LOG_LABEL, "failed to check js object type");
1660             return 0;
1661         }
1662         if (instanceOfProxy) {
1663             NAPIRemoteProxyHolder *proxyHolder = GetRemoteProxyHolder(env, object);
1664             return CreateProxyRemoteObject(proxyHolder->object_);
1665         }
1666     }
1667     return 0;
1668 }
1669 
CreateJsProxyRemoteObject(napi_env env,const sptr<IRemoteObject> target)1670 napi_value CreateJsProxyRemoteObject(napi_env env, const sptr<IRemoteObject> target)
1671 {
1672     napi_value global = nullptr;
1673     napi_status status = napi_get_global(env, &global);
1674     NAPI_ASSERT(env, status == napi_ok, "get napi global failed");
1675     napi_value constructor = nullptr;
1676     status = napi_get_named_property(env, global, "IPCProxyConstructor_", &constructor);
1677     NAPI_ASSERT(env, status == napi_ok, "get proxy constructor failed");
1678     napi_value jsRemoteProxy;
1679     status = napi_new_instance(env, constructor, 0, nullptr, &jsRemoteProxy);
1680     NAPI_ASSERT(env, status == napi_ok, "failed to  construct js RemoteProxy");
1681     NAPIRemoteProxyHolder *proxyHolder = NAPI_ohos_rpc_getRemoteProxyHolder(env, jsRemoteProxy);
1682     if (proxyHolder == nullptr) {
1683         ZLOGE(LOG_LABEL, "proxyHolder null");
1684         return nullptr;
1685     }
1686     proxyHolder->object_ = target;
1687     proxyHolder->list_ = new (std::nothrow) NAPIDeathRecipientList();
1688     NAPI_ASSERT(env, proxyHolder->list_ != nullptr, "new NAPIDeathRecipientList failed");
1689 
1690     return jsRemoteProxy;
1691 }
1692 
CreateJsStubRemoteObject(napi_env env,const sptr<IRemoteObject> target)1693 napi_value CreateJsStubRemoteObject(napi_env env, const sptr<IRemoteObject> target)
1694 {
1695     // retrieve js remote object constructor
1696     napi_value global = nullptr;
1697     napi_status status = napi_get_global(env, &global);
1698     NAPI_ASSERT(env, status == napi_ok, "get napi global failed");
1699     napi_value constructor = nullptr;
1700     status = napi_get_named_property(env, global, "IPCStubConstructor_", &constructor);
1701     NAPI_ASSERT(env, status == napi_ok, "set stub constructor failed");
1702     NAPI_ASSERT(env, constructor != nullptr, "failed to get js RemoteObject constructor");
1703     // retrieve descriptor and it's length
1704     std::u16string descriptor = target->GetObjectDescriptor();
1705     std::string desc = Str16ToStr8(descriptor);
1706     napi_value jsDesc = nullptr;
1707     napi_create_string_utf8(env, desc.c_str(), desc.length(), &jsDesc);
1708     // create a new js remote object
1709     size_t argc = 1;
1710     napi_value argv[ARGV_LENGTH_1] = { jsDesc };
1711     napi_value jsRemoteObject = nullptr;
1712     status = napi_new_instance(env, constructor, argc, argv, &jsRemoteObject);
1713     NAPI_ASSERT(env, status == napi_ok, "failed to  construct js RemoteObject");
1714     // retrieve holder and set object
1715     NAPIRemoteObjectHolder *holder = nullptr;
1716     napi_unwrap(env, jsRemoteObject, (void **)&holder);
1717     NAPI_ASSERT(env, holder != nullptr, "failed to get napi remote object holder");
1718     holder->Set(target);
1719     return jsRemoteObject;
1720 }
1721 
FfiConvertRemoteObject2Napi(napi_env env,int64_t object)1722 napi_value FfiConvertRemoteObject2Napi(napi_env env, int64_t object)
1723 {
1724     sptr<IRemoteObject> target = CJ_rpc_getNativeRemoteObject(object);
1725     if (target == nullptr) {
1726         return nullptr;
1727     }
1728     if (!target->IsProxyObject()) {
1729         IPCObjectStub *tmp = static_cast<IPCObjectStub *>(target.GetRefPtr());
1730         uint32_t objectType = static_cast<uint32_t>(tmp->GetObjectType());
1731         ZLOGD(LOG_LABEL, "create js object, type:%{public}d", objectType);
1732         if (objectType == IPCObjectStub::OBJECT_TYPE_JAVASCRIPT || objectType == IPCObjectStub::OBJECT_TYPE_NATIVE) {
1733             return CreateJsStubRemoteObject(env, target);
1734         }
1735     }
1736 
1737     return CreateJsProxyRemoteObject(env, target);
1738 }
1739 }
1740 } // namespace OHOS