• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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