1 /*
2 * Copyright (c) 2021-2024 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 "trans_server_proxy_standard.h"
17
18 #include "ipc_skeleton.h"
19 #include "softbus_error_code.h"
20 #include "softbus_server_ipc_interface_code.h"
21 #include "trans_log.h"
22
23 #define WRITE_PARCEL_WITH_RET(parcel, type, data, retval) \
24 do { \
25 if (!(parcel).Write##type(data)) { \
26 TRANS_LOGE(TRANS_SDK, "write data failed."); \
27 return (retval); \
28 } \
29 } while (false)
30
31 #define CHANNEL_TYPE_UNDEFINED (-1)
32
33 namespace OHOS {
34 static uint32_t g_getSystemAbilityId = 2;
35 const std::u16string SAMANAGER_INTERFACE_TOKEN = u"ohos.samgr.accessToken";
GetSystemAbility()36 static sptr<IRemoteObject> GetSystemAbility()
37 {
38 MessageParcel data;
39
40 if (!data.WriteInterfaceToken(SAMANAGER_INTERFACE_TOKEN)) {
41 return nullptr;
42 }
43
44 data.WriteInt32(SOFTBUS_SERVER_SA_ID_INNER);
45 MessageParcel reply;
46 MessageOption option;
47 sptr<IRemoteObject> samgr = IPCSkeleton::GetContextObject();
48 if (samgr == nullptr) {
49 TRANS_LOGE(TRANS_SDK, "Get samgr failed!");
50 return nullptr;
51 }
52 int32_t err = samgr->SendRequest(g_getSystemAbilityId, data, reply, option);
53 if (err != SOFTBUS_OK) {
54 TRANS_LOGE(TRANS_SDK, "Get GetSystemAbility failed!");
55 return nullptr;
56 }
57 return reply.ReadRemoteObject();
58 }
59
SoftbusRegisterService(const char * clientPkgName,const sptr<IRemoteObject> & object)60 int32_t TransServerProxy::SoftbusRegisterService(const char *clientPkgName, const sptr<IRemoteObject> &object)
61 {
62 (void)clientPkgName;
63 (void)object;
64 return SOFTBUS_OK;
65 }
66
CreateSessionServer(const char * pkgName,const char * sessionName)67 int32_t TransServerProxy::CreateSessionServer(const char *pkgName, const char *sessionName)
68 {
69 if (pkgName == nullptr || sessionName == nullptr) {
70 return SOFTBUS_INVALID_PARAM;
71 }
72 sptr<IRemoteObject> remote = GetSystemAbility();
73 if (remote == nullptr) {
74 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
75 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
76 }
77
78 MessageParcel data;
79 if (!data.WriteInterfaceToken(GetDescriptor())) {
80 TRANS_LOGE(TRANS_SDK, "write InterfaceToken failed!");
81 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
82 }
83 if (!data.WriteCString(pkgName)) {
84 TRANS_LOGE(TRANS_SDK, "write pkg name failed!");
85 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
86 }
87 if (!data.WriteCString(sessionName)) {
88 TRANS_LOGE(TRANS_SDK, "write session name failed!");
89 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
90 }
91 MessageParcel reply;
92 MessageOption option;
93 int32_t ret = remote->SendRequest(SERVER_CREATE_SESSION_SERVER, data, reply, option);
94 if (ret != SOFTBUS_OK) {
95 TRANS_LOGE(TRANS_SDK, "send request failed! ret=%{public}d", ret);
96 return ret;
97 }
98 int32_t serverRet = 0;
99 if (!reply.ReadInt32(serverRet)) {
100 TRANS_LOGE(TRANS_SDK, "read serverRet failed!");
101 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
102 }
103 return serverRet;
104 }
105
RemoveSessionServer(const char * pkgName,const char * sessionName)106 int32_t TransServerProxy::RemoveSessionServer(const char *pkgName, const char *sessionName)
107 {
108 if (pkgName == nullptr || sessionName == nullptr) {
109 return SOFTBUS_INVALID_PARAM;
110 }
111 sptr<IRemoteObject> remote = GetSystemAbility();
112 if (remote == nullptr) {
113 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
114 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
115 }
116
117 MessageParcel data;
118 if (!data.WriteInterfaceToken(GetDescriptor())) {
119 TRANS_LOGE(TRANS_SDK, "write InterfaceToken failed!");
120 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
121 }
122 if (!data.WriteCString(pkgName)) {
123 TRANS_LOGE(TRANS_SDK, "write pkg name failed!");
124 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
125 }
126 if (!data.WriteCString(sessionName)) {
127 TRANS_LOGE(TRANS_SDK, "session name failed!");
128 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
129 }
130 MessageParcel reply;
131 MessageOption option;
132 int32_t ret = remote->SendRequest(SERVER_REMOVE_SESSION_SERVER, data, reply, option);
133 if (ret != SOFTBUS_OK) {
134 TRANS_LOGE(TRANS_SDK, "send request failed! ret=%{public}d", ret);
135 return ret;
136 }
137 int32_t serverRet = 0;
138 if (!reply.ReadInt32(serverRet)) {
139 TRANS_LOGE(TRANS_SDK, "read serverRet failed!");
140 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
141 }
142 return serverRet;
143 }
144
ReleaseResources(int32_t channelId)145 int32_t TransServerProxy::ReleaseResources(int32_t channelId)
146 {
147 sptr<IRemoteObject> remote = GetSystemAbility();
148 if (remote == nullptr) {
149 TRANS_LOGD(TRANS_SDK, "remote is nullptr!");
150 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
151 }
152 MessageParcel data;
153 if (!data.WriteInterfaceToken(GetDescriptor())) {
154 TRANS_LOGE(TRANS_SDK, "failed to write InterfaceToken");
155 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
156 }
157 if (!data.WriteInt32(channelId)) {
158 TRANS_LOGE(TRANS_SDK, "failed to write channelId");
159 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
160 }
161
162 MessageParcel reply;
163 MessageOption option;
164 int32_t ret = remote->SendRequest(SERVER_RELEASE_RESOURCES, data, reply, option);
165 if (ret != SOFTBUS_OK) {
166 TRANS_LOGE(TRANS_SDK, "failed to send request ret=%{public}d", ret);
167 return ret;
168 }
169 int32_t serverRet = 0;
170 if (!reply.ReadInt32(serverRet)) {
171 TRANS_LOGE(TRANS_SDK, "failed to read serverRet failed");
172 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
173 }
174 return SOFTBUS_OK;
175 }
176
TransWriteSessionAttrs(const SessionAttribute * attrs,MessageParcel & data)177 static bool TransWriteSessionAttrs(const SessionAttribute *attrs, MessageParcel &data)
178 {
179 if (attrs == nullptr) {
180 TRANS_LOGE(TRANS_SDK, "attrs is nullptr!");
181 return false;
182 }
183
184 if (!data.WriteInt32(attrs->dataType)) {
185 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs dataType failed!");
186 return false;
187 }
188
189 if (!data.WriteInt32(attrs->linkTypeNum)) {
190 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs linkTypeNum failed!");
191 return false;
192 }
193
194 if (attrs->linkTypeNum > 0) {
195 if (!data.WriteBuffer(attrs->linkType, sizeof(LinkType) * attrs->linkTypeNum)) {
196 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs linkType failed!");
197 return false;
198 }
199 }
200
201 if (!data.WriteInt32(attrs->attr.streamAttr.streamType)) {
202 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs streamAttr failed!");
203 return false;
204 }
205
206 if (attrs->fastTransData != nullptr) {
207 if (!data.WriteUint16(attrs->fastTransDataSize)) {
208 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs fastTransDataSize failed!");
209 return false;
210 }
211 if (!data.WriteRawData(attrs->fastTransData, attrs->fastTransDataSize)) {
212 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs fastTransData failed!");
213 return false;
214 }
215 } else {
216 if (!data.WriteUint16(0)) {
217 TRANS_LOGE(TRANS_SDK, "OpenSession write my attrs fastTransDataSize failed!");
218 return false;
219 }
220 }
221
222 return true;
223 }
224
WriteQosInfo(const SessionParam * param,MessageParcel & data)225 static bool WriteQosInfo(const SessionParam *param, MessageParcel &data)
226 {
227 if (!data.WriteBool(param->isQosLane)) {
228 TRANS_LOGE(TRANS_SDK, "OpenSession write qos flag failed!");
229 return false;
230 }
231
232 if (!param->isQosLane) {
233 return true;
234 }
235
236 if (!data.WriteUint32(param->qosCount)) {
237 TRANS_LOGE(TRANS_SDK, "OpenSession write count of qos failed!");
238 return false;
239 }
240
241 if (param->qosCount > 0) {
242 if (!data.WriteBuffer(param->qos, sizeof(QosTV) * param->qosCount)) {
243 TRANS_LOGE(TRANS_SDK, "OpenSession write qos info failed!");
244 return false;
245 }
246 }
247
248 return true;
249 }
250
OpenSession(const SessionParam * param,TransInfo * info)251 int32_t TransServerProxy::OpenSession(const SessionParam *param, TransInfo *info)
252 {
253 if (param->sessionName == nullptr || param->peerSessionName == nullptr ||
254 param->peerDeviceId == nullptr || param->groupId == nullptr) {
255 return SOFTBUS_INVALID_PARAM;
256 }
257 sptr<IRemoteObject> remote = GetSystemAbility();
258 if (remote == nullptr) {
259 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
260 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
261 }
262
263 MessageParcel data;
264 if (!data.WriteInterfaceToken(GetDescriptor())) {
265 TRANS_LOGE(TRANS_SDK, "OpenSession write InterfaceToken failed!");
266 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
267 }
268 WRITE_PARCEL_WITH_RET(data, CString, param->sessionName, SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED);
269 WRITE_PARCEL_WITH_RET(data, CString, param->peerSessionName, SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED);
270 WRITE_PARCEL_WITH_RET(data, CString, param->peerDeviceId, SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED);
271 WRITE_PARCEL_WITH_RET(data, CString, param->groupId, SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED);
272 WRITE_PARCEL_WITH_RET(data, Bool, param->isAsync, SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED);
273 WRITE_PARCEL_WITH_RET(data, Int32, param->sessionId, SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED);
274 WRITE_PARCEL_WITH_RET(data, Uint32, param->actionId, SOFTBUS_TRANS_PROXY_WRITEINT_FAILED);
275 if (!TransWriteSessionAttrs(param->attr, data)) {
276 TRANS_LOGE(TRANS_SDK, "OpenSession write attr failed!");
277 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
278 }
279
280 if (!WriteQosInfo(param, data)) {
281 TRANS_LOGE(TRANS_SDK, "OpenSession write qos failed!");
282 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
283 }
284
285 MessageParcel reply;
286 MessageOption option;
287 int32_t ret = remote->SendRequest(SERVER_OPEN_SESSION, data, reply, option);
288 if (ret != SOFTBUS_OK) {
289 TRANS_LOGE(TRANS_SDK, "OpenSession send request failed! ret=%{public}d", ret);
290 return ret;
291 }
292 TransSerializer *transSerializer = (TransSerializer *)reply.ReadRawData(sizeof(TransSerializer));
293 if (transSerializer == nullptr) {
294 TRANS_LOGE(TRANS_SDK, "OpenSession read TransSerializer failed!");
295 return SOFTBUS_TRANS_PROXY_READRAWDATA_FAILED;
296 }
297 if (param->isAsync) {
298 return transSerializer->ret;
299 }
300 info->channelId = transSerializer->transInfo.channelId;
301 info->channelType = transSerializer->transInfo.channelType;
302 return transSerializer->ret;
303 }
304
OpenAuthSession(const char * sessionName,const ConnectionAddr * addrInfo)305 int32_t TransServerProxy::OpenAuthSession(const char *sessionName, const ConnectionAddr *addrInfo)
306 {
307 if (sessionName == nullptr || addrInfo == nullptr) {
308 return SOFTBUS_INVALID_PARAM;
309 }
310 char *tmpName = nullptr;
311 Anonymize(sessionName, &tmpName);
312 TRANS_LOGI(TRANS_SDK, "ServerIpcOpenAuthSession begin. sessionName=%{public}s", AnonymizeWrapper(tmpName));
313 AnonymizeFree(tmpName);
314 sptr<IRemoteObject> remote = Remote();
315 if (remote == nullptr) {
316 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
317 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
318 }
319
320 MessageParcel data;
321 if (!data.WriteInterfaceToken(GetDescriptor())) {
322 TRANS_LOGE(TRANS_SDK, "OpenSession write InterfaceToken failed!");
323 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
324 }
325 if (!data.WriteCString(sessionName)) {
326 TRANS_LOGE(TRANS_SDK, "OpenSession write my session name failed!");
327 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
328 }
329 if (!data.WriteRawData((void *)addrInfo, sizeof(ConnectionAddr))) {
330 TRANS_LOGE(TRANS_SDK, "OpenSession write ConnectionAddr failed!");
331 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
332 }
333
334 MessageParcel reply;
335 MessageOption option;
336 int32_t ret = remote->SendRequest(SERVER_OPEN_AUTH_SESSION, data, reply, option);
337 if (ret != SOFTBUS_OK) {
338 TRANS_LOGE(TRANS_SDK, "OpenSession send request failed! ret=%{public}d", ret);
339 return ret;
340 }
341 int32_t channelId = 0;
342 if (!reply.ReadInt32(channelId)) {
343 TRANS_LOGE(TRANS_SDK, "OpenSession read channelId failed!");
344 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
345 }
346 return channelId;
347 }
348
NotifyAuthSuccess(int32_t channelId,int32_t channelType)349 int32_t TransServerProxy::NotifyAuthSuccess(int32_t channelId, int32_t channelType)
350 {
351 sptr<IRemoteObject> remote = GetSystemAbility();
352 if (remote == nullptr) {
353 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
354 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
355 }
356 MessageParcel data;
357 if (!data.WriteInterfaceToken(GetDescriptor())) {
358 TRANS_LOGE(TRANS_SDK, "ServerIpcNotifyAuthSuccess write InterfaceToken failed!");
359 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
360 }
361 if (!data.WriteInt32(channelId)) {
362 TRANS_LOGE(TRANS_SDK, "ServerIpcNotifyAuthSuccess write channel id failed!");
363 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
364 }
365 if (!data.WriteInt32(channelType)) {
366 TRANS_LOGE(TRANS_SDK, "ServerIpcNotifyAuthSuccess write channel type failed!");
367 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
368 }
369
370 MessageParcel reply;
371 MessageOption option;
372 int32_t ret = remote->SendRequest(SERVER_NOTIFY_AUTH_SUCCESS, data, reply, option);
373 if (ret != SOFTBUS_OK) {
374 TRANS_LOGE(TRANS_SDK, "ServerIpcNotifyAuthSuccess send request failed! ret=%{public}d", ret);
375 return ret;
376 }
377 int32_t serverRet = 0;
378 if (!reply.ReadInt32(serverRet)) {
379 TRANS_LOGE(TRANS_SDK, "ServerIpcNotifyAuthSuccess read serverRet failed!");
380 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
381 }
382 return serverRet;
383 }
384
CloseChannel(const char * sessionName,int32_t channelId,int32_t channelType)385 int32_t TransServerProxy::CloseChannel(const char *sessionName, int32_t channelId, int32_t channelType)
386 {
387 sptr<IRemoteObject> remote = GetSystemAbility();
388 if (remote == nullptr) {
389 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
390 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
391 }
392 MessageParcel data;
393 if (!data.WriteInterfaceToken(GetDescriptor())) {
394 TRANS_LOGE(TRANS_SDK, "CloseChannel write InterfaceToken failed!");
395 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
396 }
397 if (!data.WriteInt32(channelId)) {
398 TRANS_LOGE(TRANS_SDK, "CloseChannel write channel id failed!");
399 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
400 }
401 if (!data.WriteInt32(channelType)) {
402 TRANS_LOGE(TRANS_SDK, "CloseChannel write channel type failed!");
403 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
404 }
405 if (channelType == CHANNEL_TYPE_UNDEFINED) {
406 if (!data.WriteCString(sessionName)) {
407 TRANS_LOGE(TRANS_SDK, "CloseChannel write session name failed!");
408 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
409 }
410 }
411 MessageParcel reply;
412 MessageOption option;
413 int32_t ret = remote->SendRequest(SERVER_CLOSE_CHANNEL, data, reply, option);
414 if (ret != SOFTBUS_OK) {
415 TRANS_LOGE(TRANS_SDK, "CloseChannel send request failed! ret=%{public}d", ret);
416 return ret;
417 }
418 int32_t serverRet = 0;
419 if (!reply.ReadInt32(serverRet)) {
420 TRANS_LOGE(TRANS_SDK, "CloseChannel read serverRet failed!");
421 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
422 }
423 return serverRet;
424 }
425
CloseChannelWithStatistics(int32_t channelId,int32_t channelType,uint64_t laneId,const void * dataInfo,uint32_t len)426 int32_t TransServerProxy::CloseChannelWithStatistics(int32_t channelId, int32_t channelType, uint64_t laneId,
427 const void *dataInfo, uint32_t len)
428 {
429 if (dataInfo == nullptr) {
430 TRANS_LOGE(TRANS_SDK, "invalid param");
431 return SOFTBUS_INVALID_PARAM;
432 }
433 sptr<IRemoteObject> remote = GetSystemAbility();
434 if (remote == nullptr) {
435 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
436 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
437 }
438 MessageParcel data;
439 if (!data.WriteInterfaceToken(GetDescriptor())) {
440 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics write InterfaceToken failed!");
441 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
442 }
443 if (!data.WriteInt32(channelId)) {
444 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics write channel id failed!");
445 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
446 }
447 if (!data.WriteInt32(channelType)) {
448 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics write channel type failed!");
449 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
450 }
451 if (!data.WriteUint64(laneId)) {
452 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics write lane id failed!");
453 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
454 }
455 if (!data.WriteUint32(len)) {
456 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics write dataInfo len failed!");
457 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
458 }
459 if (!data.WriteRawData(dataInfo, len)) {
460 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics write dataInfo failed!");
461 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
462 }
463 MessageParcel reply;
464 MessageOption option;
465 int32_t ret = remote->SendRequest(SERVER_CLOSE_CHANNEL_STATISTICS, data, reply, option);
466 if (ret != SOFTBUS_OK) {
467 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics send request failed! ret=%{public}d", ret);
468 return ret;
469 }
470 int32_t serverRet = 0;
471 if (!reply.ReadInt32(serverRet)) {
472 TRANS_LOGE(TRANS_SDK, "CloseChannelWithStatistics read serverRet failed!");
473 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
474 }
475 return serverRet;
476 }
477
SendMessage(int32_t channelId,int32_t channelType,const void * dataInfo,uint32_t len,int32_t msgType)478 int32_t TransServerProxy::SendMessage(int32_t channelId, int32_t channelType, const void *dataInfo,
479 uint32_t len, int32_t msgType)
480 {
481 sptr<IRemoteObject> remote = Remote();
482 if (remote == nullptr) {
483 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
484 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
485 }
486 MessageParcel data;
487 if (!data.WriteInterfaceToken(GetDescriptor())) {
488 TRANS_LOGE(TRANS_SDK, "SendMessage write InterfaceToken failed!");
489 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
490 }
491 if (!data.WriteInt32(channelId)) {
492 TRANS_LOGE(TRANS_SDK, "SendMessage write channel id failed!");
493 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
494 }
495 if (!data.WriteInt32(channelType)) {
496 TRANS_LOGE(TRANS_SDK, "SendMessage write channel type failed!");
497 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
498 }
499 if (!data.WriteUint32(len)) {
500 TRANS_LOGE(TRANS_SDK, "SendMessage write dataInfo len failed!");
501 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
502 }
503 if (!data.WriteRawData(dataInfo, len)) {
504 TRANS_LOGE(TRANS_SDK, "SendMessage write dataInfo failed!");
505 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
506 }
507 if (!data.WriteInt32(msgType)) {
508 TRANS_LOGE(TRANS_SDK, "SendMessage msgType failed!");
509 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
510 }
511
512 MessageParcel reply;
513 MessageOption option;
514 int32_t ret = remote->SendRequest(SERVER_SESSION_SENDMSG, data, reply, option);
515 if (ret != SOFTBUS_OK) {
516 TRANS_LOGE(TRANS_SDK, "SendMessage send request failed! ret=%{public}d", ret);
517 return ret;
518 }
519 int32_t serverRet = 0;
520 if (!reply.ReadInt32(serverRet)) {
521 TRANS_LOGE(TRANS_SDK, "SendMessage read serverRet failed!");
522 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
523 }
524 return serverRet;
525 }
526
QosReport(int32_t channelId,int32_t chanType,int32_t appType,int32_t quality)527 int32_t TransServerProxy::QosReport(int32_t channelId, int32_t chanType, int32_t appType, int32_t quality)
528 {
529 sptr<IRemoteObject> remote = GetSystemAbility();
530 if (remote == nullptr) {
531 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
532 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
533 }
534 MessageParcel data;
535 if (!data.WriteInterfaceToken(GetDescriptor())) {
536 TRANS_LOGE(TRANS_SDK, "QosReport write InterfaceToken failed!");
537 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
538 }
539 if (!data.WriteInt32(channelId)) {
540 TRANS_LOGE(TRANS_SDK, "QosReport channelId failed!");
541 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
542 }
543 if (!data.WriteInt32(chanType)) {
544 TRANS_LOGE(TRANS_SDK, "QosReport chanType failed!");
545 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
546 }
547 if (!data.WriteInt32(appType)) {
548 TRANS_LOGE(TRANS_SDK, "QosReport appType failed!");
549 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
550 }
551 if (!data.WriteInt32(quality)) {
552 TRANS_LOGE(TRANS_SDK, "QosReport quality failed!");
553 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
554 }
555
556 MessageParcel reply;
557 MessageOption option;
558 int32_t ret = remote->SendRequest(SERVER_QOS_REPORT, data, reply, option);
559 if (ret != SOFTBUS_OK) {
560 TRANS_LOGE(TRANS_SDK, "QosReport send request failed! ret=%{public}d", ret);
561 return ret;
562 }
563 int32_t serverRet = 0;
564 if (!reply.ReadInt32(serverRet)) {
565 TRANS_LOGE(TRANS_SDK, "QosReport read serverRet failed!");
566 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
567 }
568 return serverRet;
569 }
570
StreamStats(int32_t channelId,int32_t channelType,const StreamSendStats * statsData)571 int32_t TransServerProxy::StreamStats(int32_t channelId, int32_t channelType, const StreamSendStats *statsData)
572 {
573 sptr<IRemoteObject> remote = GetSystemAbility();
574 if (remote == nullptr) {
575 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
576 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
577 }
578 MessageParcel data;
579 if (!data.WriteInterfaceToken(GetDescriptor())) {
580 TRANS_LOGE(TRANS_SDK, "StreamStats write InterfaceToken failed!");
581 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
582 }
583 if (!data.WriteInt32(channelId)) {
584 TRANS_LOGE(TRANS_SDK, "StreamStats channelId failed!");
585 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
586 }
587 if (!data.WriteInt32(channelType)) {
588 TRANS_LOGE(TRANS_SDK, "StreamStats channelType failed!");
589 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
590 }
591 if (!data.WriteRawData((void *)statsData, sizeof(StreamSendStats))) {
592 TRANS_LOGE(TRANS_SDK, "write streamSendStats failed!");
593 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
594 }
595 MessageParcel reply;
596 MessageOption option;
597 int32_t ret = remote->SendRequest(SERVER_STREAM_STATS, data, reply, option);
598 if (ret != SOFTBUS_OK) {
599 TRANS_LOGE(TRANS_SDK, "StreamStats send request failed, ret=%{public}d", ret);
600 return SOFTBUS_TRANS_PROXY_SEND_REQUEST_FAILED;
601 }
602 if (!reply.ReadInt32(ret)) {
603 TRANS_LOGE(TRANS_SDK, "StreamStats read serverRet failed");
604 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
605 }
606 return ret;
607 }
608
RippleStats(int32_t channelId,int32_t channelType,const TrafficStats * statsData)609 int32_t TransServerProxy::RippleStats(int32_t channelId, int32_t channelType, const TrafficStats *statsData)
610 {
611 sptr<IRemoteObject> remote = GetSystemAbility();
612 if (remote == nullptr) {
613 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
614 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
615 }
616 MessageParcel data;
617 if (!data.WriteInterfaceToken(GetDescriptor())) {
618 TRANS_LOGE(TRANS_SDK, "RippleStats write InterfaceToken failed!");
619 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
620 }
621 if (!data.WriteInt32(channelId)) {
622 TRANS_LOGE(TRANS_SDK, "RippleStats channelId failed!");
623 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
624 }
625 if (!data.WriteInt32(channelType)) {
626 TRANS_LOGE(TRANS_SDK, "RippleStats channelType failed!");
627 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
628 }
629 if (!data.WriteRawData((void *)statsData, sizeof(TrafficStats))) {
630 TRANS_LOGE(TRANS_SDK, "write RippleStats failed!");
631 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
632 }
633 MessageParcel reply;
634 MessageOption option;
635 int32_t ret = remote->SendRequest(SERVER_RIPPLE_STATS, data, reply, option);
636 if (ret != SOFTBUS_OK) {
637 TRANS_LOGE(TRANS_SDK, "RippleStats send request failed, ret=%{public}d", ret);
638 return ret;
639 }
640 if (!reply.ReadInt32(ret)) {
641 TRANS_LOGE(TRANS_SDK, "RippleStats read serverRet failed");
642 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
643 }
644 return ret;
645 }
646
GrantPermission(int32_t uid,int32_t pid,const char * sessionName)647 int32_t TransServerProxy::GrantPermission(int32_t uid, int32_t pid, const char *sessionName)
648 {
649 sptr<IRemoteObject> remote = GetSystemAbility();
650 if (remote == nullptr) {
651 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
652 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
653 }
654 MessageParcel data;
655 if (!data.WriteInterfaceToken(GetDescriptor())) {
656 TRANS_LOGE(TRANS_SDK, "GrantPermission write InterfaceToken failed!");
657 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
658 }
659 if (!data.WriteInt32(uid)) {
660 TRANS_LOGE(TRANS_SDK, "GrantPermission write uid failed!");
661 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
662 }
663 if (!data.WriteInt32(pid)) {
664 TRANS_LOGE(TRANS_SDK, "GrantPermission write pid failed!");
665 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
666 }
667 if (!data.WriteCString(sessionName)) {
668 TRANS_LOGE(TRANS_SDK, "GrantPermission write sessionName failed!");
669 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
670 }
671
672 MessageParcel reply;
673 MessageOption option;
674 int32_t ret = remote->SendRequest(SERVER_GRANT_PERMISSION, data, reply, option);
675 if (ret != ERR_NONE) {
676 TRANS_LOGE(TRANS_SDK, "GrantPermission send request failed, ret=%{public}d", ret);
677 return SOFTBUS_TRANS_PROXY_SEND_REQUEST_FAILED;
678 }
679 if (!reply.ReadInt32(ret)) {
680 TRANS_LOGE(TRANS_SDK, "GrantPermission read serverRet failed!");
681 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
682 }
683 return ret;
684 }
685
RemovePermission(const char * sessionName)686 int32_t TransServerProxy::RemovePermission(const char *sessionName)
687 {
688 sptr<IRemoteObject> remote = GetSystemAbility();
689 if (remote == nullptr) {
690 TRANS_LOGE(TRANS_SDK, "remote is nullptr!");
691 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
692 }
693 MessageParcel data;
694 if (!data.WriteInterfaceToken(GetDescriptor())) {
695 TRANS_LOGE(TRANS_SDK, "RemovePermission write InterfaceToken failed!");
696 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
697 }
698 if (!data.WriteCString(sessionName)) {
699 TRANS_LOGE(TRANS_SDK, "RemovePermission write sessionName failed!");
700 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
701 }
702
703 MessageParcel reply;
704 MessageOption option;
705 int32_t ret = remote->SendRequest(SERVER_REMOVE_PERMISSION, data, reply, option);
706 if (ret != ERR_NONE) {
707 TRANS_LOGE(TRANS_SDK, "RemovePermission send request failed, ret=%{public}d", ret);
708 return SOFTBUS_TRANS_PROXY_SEND_REQUEST_FAILED;
709 }
710 if (!reply.ReadInt32(ret)) {
711 TRANS_LOGE(TRANS_SDK, "RemovePermission read serverRet failed!");
712 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
713 }
714 return ret;
715 }
716
JoinLNN(const char * pkgName,void * addr,uint32_t addrTypeLen,bool isForceJoin)717 int32_t TransServerProxy::JoinLNN(const char *pkgName, void *addr, uint32_t addrTypeLen, bool isForceJoin)
718 {
719 (void)pkgName;
720 (void)addr;
721 (void)addrTypeLen;
722 (void)isForceJoin;
723 return SOFTBUS_OK;
724 }
725
LeaveLNN(const char * pkgName,const char * networkId)726 int32_t TransServerProxy::LeaveLNN(const char *pkgName, const char *networkId)
727 {
728 (void)pkgName;
729 (void)networkId;
730 return SOFTBUS_OK;
731 }
732
GetAllOnlineNodeInfo(const char * pkgName,void ** info,uint32_t infoTypeLen,int32_t * infoNum)733 int32_t TransServerProxy::GetAllOnlineNodeInfo(const char *pkgName, void **info, uint32_t infoTypeLen, int32_t *infoNum)
734 {
735 (void)pkgName;
736 (void)info;
737 (void)infoTypeLen;
738 (void)infoNum;
739 return SOFTBUS_OK;
740 }
741
GetLocalDeviceInfo(const char * pkgName,void * info,uint32_t infoTypeLen)742 int32_t TransServerProxy::GetLocalDeviceInfo(const char *pkgName, void *info, uint32_t infoTypeLen)
743 {
744 (void)pkgName;
745 (void)info;
746 (void)infoTypeLen;
747 return SOFTBUS_OK;
748 }
749
GetNodeKeyInfo(const char * pkgName,const char * networkId,int32_t key,unsigned char * buf,uint32_t len)750 int32_t TransServerProxy::GetNodeKeyInfo(const char *pkgName, const char *networkId, int32_t key, unsigned char *buf,
751 uint32_t len)
752 {
753 (void)pkgName;
754 (void)networkId;
755 (void)key;
756 (void)buf;
757 (void)len;
758 return SOFTBUS_OK;
759 }
760
SetNodeDataChangeFlag(const char * pkgName,const char * networkId,uint16_t dataChangeFlag)761 int32_t TransServerProxy::SetNodeDataChangeFlag(const char *pkgName, const char *networkId, uint16_t dataChangeFlag)
762 {
763 (void)pkgName;
764 (void)networkId;
765 (void)dataChangeFlag;
766 return SOFTBUS_OK;
767 }
768
RegDataLevelChangeCb(const char * pkgName)769 int32_t TransServerProxy::RegDataLevelChangeCb(const char *pkgName)
770 {
771 (void)pkgName;
772 return SOFTBUS_OK;
773 }
774
UnregDataLevelChangeCb(const char * pkgName)775 int32_t TransServerProxy::UnregDataLevelChangeCb(const char *pkgName)
776 {
777 (void)pkgName;
778 return SOFTBUS_OK;
779 }
780
SetDataLevel(const DataLevel * dataLevel)781 int32_t TransServerProxy::SetDataLevel(const DataLevel *dataLevel)
782 {
783 (void)dataLevel;
784 return SOFTBUS_OK;
785 }
786
RegBleRangeCb(const char * pkgName)787 int32_t TransServerProxy::RegBleRangeCb(const char *pkgName)
788 {
789 (void)pkgName;
790 return SOFTBUS_OK;
791 }
792
UnregBleRangeCb(const char * pkgName)793 int32_t TransServerProxy::UnregBleRangeCb(const char *pkgName)
794 {
795 (void)pkgName;
796 return SOFTBUS_OK;
797 }
798
StartTimeSync(const char * pkgName,const char * targetNetworkId,int32_t accuracy,int32_t period)799 int32_t TransServerProxy::StartTimeSync(const char *pkgName, const char *targetNetworkId, int32_t accuracy,
800 int32_t period)
801 {
802 (void)pkgName;
803 (void)targetNetworkId;
804 (void)accuracy;
805 (void)period;
806 return SOFTBUS_OK;
807 }
808
StopTimeSync(const char * pkgName,const char * targetNetworkId)809 int32_t TransServerProxy::StopTimeSync(const char *pkgName, const char *targetNetworkId)
810 {
811 (void)pkgName;
812 (void)targetNetworkId;
813 return SOFTBUS_OK;
814 }
815
GetSoftbusSpecObject(sptr<IRemoteObject> & object)816 int32_t TransServerProxy::GetSoftbusSpecObject(sptr<IRemoteObject> &object)
817 {
818 sptr<IRemoteObject> remote = GetSystemAbility();
819 if (remote == nullptr) {
820 TRANS_LOGE(TRANS_SDK, "remote is null");
821 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
822 }
823 MessageParcel data;
824 if (!data.WriteInterfaceToken(GetDescriptor())) {
825 TRANS_LOGE(TRANS_SDK, "GetSoftbusSpecObject write InterfaceToken failed!");
826 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
827 }
828 MessageParcel reply;
829 MessageOption option;
830 int32_t ret = remote->SendRequest(SERVER_GET_SOFTBUS_SPEC_OBJECT, data, reply, option);
831 if (ret != ERR_NONE) {
832 TRANS_LOGE(TRANS_SDK, "GetSoftbusSpecObject send request failed, ret=%{public}d", ret);
833 return ret;
834 }
835 if (!reply.ReadInt32(ret)) {
836 TRANS_LOGE(TRANS_SDK, "GetSoftbusSpecObject send ret failed");
837 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
838 }
839 if (ret == SOFTBUS_OK) {
840 object = reply.ReadRemoteObject();
841 }
842 return ret;
843 }
844
EvaluateQos(const char * peerNetworkId,TransDataType dataType,const QosTV * qos,uint32_t qosCount)845 int32_t TransServerProxy::EvaluateQos(const char *peerNetworkId, TransDataType dataType, const QosTV *qos,
846 uint32_t qosCount)
847 {
848 sptr<IRemoteObject> remote = GetSystemAbility();
849 if (remote == nullptr) {
850 TRANS_LOGE(TRANS_SDK, "remote is null");
851 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
852 }
853
854 MessageParcel data;
855 if (!data.WriteInterfaceToken(GetDescriptor())) {
856 TRANS_LOGE(TRANS_SDK, "EvaluateQos write InterfaceToken failed!");
857 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
858 }
859
860 if (!data.WriteCString(peerNetworkId)) {
861 TRANS_LOGE(TRANS_SDK, "EvaluateQos write peerNetworkId failed!");
862 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
863 }
864
865 if (!data.WriteInt32(dataType)) {
866 TRANS_LOGE(TRANS_SDK, "EvaluateQos write dataType failed!");
867 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
868 }
869
870 if (!data.WriteUint32(qosCount)) {
871 TRANS_LOGE(TRANS_SDK, "EvaluateQos write count of qos failed!");
872 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
873 }
874
875 if (qosCount > 0) {
876 if (!data.WriteBuffer(qos, sizeof(QosTV) * qosCount)) {
877 TRANS_LOGE(TRANS_SDK, "EvaluateQos write qos info failed!");
878 return SOFTBUS_IPC_ERR;
879 }
880 }
881
882 MessageParcel reply;
883 MessageOption option;
884 int32_t ret = remote->SendRequest(SERVER_EVALUATE_QOS, data, reply, option);
885 if (ret != ERR_NONE) {
886 TRANS_LOGE(TRANS_SDK, "EvaluateQos request failed, ret=%{public}d", ret);
887 return ret;
888 }
889
890 if (!reply.ReadInt32(ret)) {
891 TRANS_LOGE(TRANS_SDK, "EvaluateQos read ret failed");
892 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
893 }
894
895 return ret;
896 }
897
ProcessInnerEvent(int32_t eventType,uint8_t * buf,uint32_t len)898 int32_t TransServerProxy::ProcessInnerEvent(int32_t eventType, uint8_t *buf, uint32_t len)
899 {
900 sptr<IRemoteObject> remote = GetSystemAbility();
901 if (remote == nullptr) {
902 TRANS_LOGE(TRANS_SDK, "remote is null");
903 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
904 }
905
906 MessageParcel data;
907 if (!data.WriteInterfaceToken(GetDescriptor())) {
908 TRANS_LOGE(TRANS_SDK, "write InterfaceToken failed!");
909 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
910 }
911
912 if (!data.WriteInt32(eventType)) {
913 TRANS_LOGE(TRANS_SDK, "write eventType failed!");
914 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
915 }
916
917 if (!data.WriteUint32(len)) {
918 TRANS_LOGE(TRANS_SDK, "write len failed!");
919 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
920 }
921
922 if (!data.WriteRawData(buf, len)) {
923 TRANS_LOGE(TRANS_SDK, "write buf failed!");
924 return SOFTBUS_TRANS_PROXY_WRITERAWDATA_FAILED;
925 }
926
927 MessageParcel reply;
928 MessageOption option = { MessageOption::TF_ASYNC };
929 int32_t ret = remote->SendRequest(SERVER_PROCESS_INNER_EVENT, data, reply, option);
930 if (ret != SOFTBUS_OK) {
931 TRANS_LOGE(TRANS_CTRL, "send request failed, ret=%{public}d", ret);
932 return ret;
933 }
934 return SOFTBUS_OK;
935 }
936
PrivilegeCloseChannel(uint64_t tokenId,int32_t pid,const char * peerNetworkId)937 int32_t TransServerProxy::PrivilegeCloseChannel(uint64_t tokenId, int32_t pid, const char *peerNetworkId)
938 {
939 sptr<IRemoteObject> remote = GetSystemAbility();
940 if (remote == nullptr) {
941 TRANS_LOGE(TRANS_SDK, "remote is null");
942 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
943 }
944
945 MessageParcel data;
946 if (!data.WriteInterfaceToken(GetDescriptor())) {
947 TRANS_LOGE(TRANS_SDK, "write InterfaceToken failed!");
948 return SOFTBUS_TRANS_PROXY_WRITETOKEN_FAILED;
949 }
950
951 if (!data.WriteUint64(tokenId)) {
952 TRANS_LOGE(TRANS_SDK, "write tokenId failed!");
953 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
954 }
955
956 if (!data.WriteInt32(pid)) {
957 TRANS_LOGE(TRANS_SDK, "write pid failed!");
958 return SOFTBUS_TRANS_PROXY_WRITEINT_FAILED;
959 }
960
961 if (!data.WriteCString(peerNetworkId)) {
962 TRANS_LOGE(TRANS_SDK, "write peerNetworkId failed!");
963 return SOFTBUS_TRANS_PROXY_WRITECSTRING_FAILED;
964 }
965
966 MessageParcel reply;
967 MessageOption option;
968 int32_t ret = remote->SendRequest(SERVER_PRIVILEGE_CLOSE_CHANNEL, data, reply, option);
969 if (ret != SOFTBUS_OK) {
970 TRANS_LOGE(TRANS_SDK, "request failed, ret=%{public}d", ret);
971 return ret;
972 }
973
974 if (!reply.ReadInt32(ret)) {
975 TRANS_LOGE(TRANS_SDK, "EvaluateQos read ret failed");
976 return SOFTBUS_TRANS_PROXY_READINT_FAILED;
977 }
978 return ret;
979 }
980
GetRemoteObject(sptr<IRemoteObject> & object)981 int32_t TransServerProxy::GetRemoteObject(sptr<IRemoteObject> &object)
982 {
983 sptr<IRemoteObject> remote = Remote();
984 if (remote == nullptr) {
985 TRANS_LOGE(TRANS_SDK, "remote is nullptr");
986 return SOFTBUS_TRANS_PROXY_REMOTE_NULL;
987 }
988 object = remote;
989 return SOFTBUS_OK;
990 }
991 } // namespace OHOS
992