• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "dcamera_softbus_adapter.h"
17 
18 #include <securec.h>
19 
20 #include "softbus_bus_center.h"
21 #include "softbus_common.h"
22 
23 #include "anonymous_string.h"
24 #include "dcamera_hisysevent_adapter.h"
25 #include "distributed_camera_constants.h"
26 #include "distributed_camera_errno.h"
27 #include "distributed_hardware_log.h"
28 
29 namespace OHOS {
30 namespace DistributedHardware {
31 IMPLEMENT_SINGLE_INSTANCE(DCameraSoftbusAdapter);
32 
DCameraSourceOnSessionOpend(int32_t sessionId,int32_t result)33 static int32_t DCameraSourceOnSessionOpend(int32_t sessionId, int32_t result)
34 {
35     return DCameraSoftbusAdapter::GetInstance().OnSourceSessionOpened(sessionId, result);
36 }
37 
DCameraSourceOnSessionClosed(int32_t sessionId)38 static void DCameraSourceOnSessionClosed(int32_t sessionId)
39 {
40     DCameraSoftbusAdapter::GetInstance().OnSourceSessionClosed(sessionId);
41     return;
42 }
43 
DCameraSourceOnBytesReceived(int32_t sessionId,const void * data,uint32_t dataLen)44 static void DCameraSourceOnBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen)
45 {
46     DCameraSoftbusAdapter::GetInstance().OnSourceBytesReceived(sessionId, data, dataLen);
47     return;
48 }
49 
DCameraSourceOnMessageReceived(int32_t sessionId,const void * data,uint32_t dataLen)50 static void DCameraSourceOnMessageReceived(int32_t sessionId, const void *data, uint32_t dataLen)
51 {
52     DCameraSoftbusAdapter::GetInstance().OnSourceMessageReceived(sessionId, data, dataLen);
53     return;
54 }
55 
DCameraSourceOnStreamReceived(int32_t sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)56 static void DCameraSourceOnStreamReceived(int32_t sessionId, const StreamData *data, const StreamData *ext,
57     const StreamFrameInfo *param)
58 {
59     DCameraSoftbusAdapter::GetInstance().OnSourceStreamReceived(sessionId, data, ext, param);
60     return;
61 }
62 
DCameraSinkOnSessionOpend(int32_t sessionId,int32_t result)63 static int32_t DCameraSinkOnSessionOpend(int32_t sessionId, int32_t result)
64 {
65     return DCameraSoftbusAdapter::GetInstance().OnSinkSessionOpened(sessionId, result);
66 }
67 
DCameraSinkOnSessionClosed(int32_t sessionId)68 static void DCameraSinkOnSessionClosed(int32_t sessionId)
69 {
70     DCameraSoftbusAdapter::GetInstance().OnSinkSessionClosed(sessionId);
71     return;
72 }
73 
DCameraSinkOnBytesReceived(int32_t sessionId,const void * data,uint32_t dataLen)74 static void DCameraSinkOnBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen)
75 {
76     DCameraSoftbusAdapter::GetInstance().OnSinkBytesReceived(sessionId, data, dataLen);
77     return;
78 }
79 
DCameraSinkOnMessageReceived(int32_t sessionId,const void * data,uint32_t dataLen)80 static void DCameraSinkOnMessageReceived(int32_t sessionId, const void *data, uint32_t dataLen)
81 {
82     DCameraSoftbusAdapter::GetInstance().OnSinkMessageReceived(sessionId, data, dataLen);
83     return;
84 }
85 
DCameraSinkOnStreamReceived(int32_t sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)86 static void DCameraSinkOnStreamReceived(int32_t sessionId, const StreamData *data, const StreamData *ext,
87     const StreamFrameInfo *param)
88 {
89     DCameraSoftbusAdapter::GetInstance().OnSinkStreamReceived(sessionId, data, ext, param);
90     return;
91 }
92 
DCameraSoftbusAdapter()93 DCameraSoftbusAdapter::DCameraSoftbusAdapter()
94 {
95     ISessionListener sourceListener;
96     sourceListener.OnSessionOpened = DCameraSourceOnSessionOpend;
97     sourceListener.OnSessionClosed = DCameraSourceOnSessionClosed;
98     sourceListener.OnBytesReceived = DCameraSourceOnBytesReceived;
99     sourceListener.OnMessageReceived = DCameraSourceOnMessageReceived;
100     sourceListener.OnStreamReceived = DCameraSourceOnStreamReceived;
101     sessListeners_[DCAMERA_CHANNLE_ROLE_SOURCE] = sourceListener;
102 
103     ISessionListener sinkListener;
104     sinkListener.OnSessionOpened = DCameraSinkOnSessionOpend;
105     sinkListener.OnSessionClosed = DCameraSinkOnSessionClosed;
106     sinkListener.OnBytesReceived = DCameraSinkOnBytesReceived;
107     sinkListener.OnMessageReceived = DCameraSinkOnMessageReceived;
108     sinkListener.OnStreamReceived = DCameraSinkOnStreamReceived;
109     sessListeners_[DCAMERA_CHANNLE_ROLE_SINK] = sinkListener;
110 }
111 
~DCameraSoftbusAdapter()112 DCameraSoftbusAdapter::~DCameraSoftbusAdapter()
113 {
114 }
115 
CreateSoftbusSessionServer(std::string sessionName,DCAMERA_CHANNEL_ROLE role)116 int32_t DCameraSoftbusAdapter::CreateSoftbusSessionServer(std::string sessionName, DCAMERA_CHANNEL_ROLE role)
117 {
118     std::lock_guard<std::mutex> autoLock(optLock_);
119     if (sessionTotal_.find(sessionName) != sessionTotal_.end()) {
120         sessionTotal_[sessionName]++;
121         DHLOGI("DCameraSoftbusAdapter sessionName already exist %s totalnum: %d", sessionName.c_str(),
122             sessionTotal_[sessionName]);
123         return DCAMERA_OK;
124     }
125 
126     int32_t ret = CreateSessionServer(PKG_NAME.c_str(), sessionName.c_str(), &sessListeners_[role]);
127     if (ret != DCAMERA_OK) {
128         DHLOGE("DCameraSoftbusAdapter CreateSessionServer failed, ret: %d", ret);
129         ReportDcamerOptFail(DCAMERA_OPT_FAIL, DCAMERA_CREATE_SESSIONSVR_ERROR,
130             CreateMsg("create session server failed, sessionName: %s", sessionName.c_str()));
131         return ret;
132     }
133     sessionTotal_[sessionName]++;
134     DHLOGI("DCameraSoftbusAdapter sessionName create %s totalnum: %d", sessionName.c_str(),
135         sessionTotal_[sessionName]);
136     return DCAMERA_OK;
137 }
138 
DestroySoftbusSessionServer(std::string sessionName)139 int32_t DCameraSoftbusAdapter::DestroySoftbusSessionServer(std::string sessionName)
140 {
141     std::lock_guard<std::mutex> autoLock(optLock_);
142     if (sessionTotal_.find(sessionName) == sessionTotal_.end()) {
143         DHLOGI("DCameraSoftbusAdapter sessionName already destroy %s", sessionName.c_str());
144         return DCAMERA_OK;
145     }
146 
147     sessionTotal_[sessionName]--;
148     DHLOGI("DCameraSoftbusAdapter sessionName destroy %s totalnum: %d", sessionName.c_str(),
149         sessionTotal_[sessionName]);
150     uint32_t total_ = sessionTotal_[sessionName];
151     if (total_ == 0) {
152         RemoveSessionServer(PKG_NAME.c_str(), sessionName.c_str());
153         sessionTotal_.erase(sessionName);
154     }
155     return DCAMERA_OK;
156 }
157 
OpenSoftbusSession(std::string mySessName,std::string peerSessName,int32_t sessionMode,std::string peerDevId)158 int32_t DCameraSoftbusAdapter::OpenSoftbusSession(std::string mySessName, std::string peerSessName,
159     int32_t sessionMode, std::string peerDevId)
160 {
161     uint32_t dataType = TYPE_STREAM;
162     uint32_t streamType = -1;
163     switch (sessionMode) {
164         case DCAMERA_SESSION_MODE_CTRL: {
165             dataType = TYPE_BYTES;
166             streamType = -1;
167             break;
168         }
169         case DCAMERA_SESSION_MODE_VIDEO:
170         case DCAMERA_SESSION_MODE_JPEG: {
171             dataType = TYPE_STREAM;
172             streamType = RAW_STREAM;
173             break;
174         }
175         default:
176             DHLOGE("DCameraSoftbusAdapter OpenSoftbusSession bad sessionMode %d", sessionMode);
177             return DCAMERA_BAD_VALUE;
178     }
179     SessionAttribute attr = { 0 };
180     attr.dataType = static_cast<int32_t>(dataType);
181     attr.linkTypeNum = DCAMERA_LINK_TYPE_MAX;
182     LinkType linkTypeList[DCAMERA_LINK_TYPE_MAX] = {
183         LINK_TYPE_WIFI_P2P,
184         LINK_TYPE_WIFI_WLAN_5G,
185         LINK_TYPE_WIFI_WLAN_2G,
186         LINK_TYPE_BR,
187     };
188 
189     if (dataType == TYPE_BYTES) {
190         linkTypeList[0] = LINK_TYPE_WIFI_WLAN_2G;
191         linkTypeList[DCAMERA_LINK_TYPE_INDEX_2] = LINK_TYPE_WIFI_P2P;
192     }
193     int32_t ret = memcpy_s(attr.linkType, DCAMERA_LINK_TYPE_MAX * sizeof(LinkType), linkTypeList,
194         DCAMERA_LINK_TYPE_MAX * sizeof(LinkType));
195     if (ret != EOK) {
196         DHLOGE("DCameraSoftbusAdapter OpenSoftbusSession memcpy_s failed %d", ret);
197         return DCAMERA_BAD_VALUE;
198     }
199     attr.attr.streamAttr.streamType = (StreamType)streamType;
200     int32_t sessionId = OpenSession(mySessName.c_str(), peerSessName.c_str(), peerDevId.c_str(), "0", &attr);
201     if (sessionId < 0) {
202         DHLOGE("DCameraSoftbusAdapter OpenSoftbusSession failed %d", sessionId);
203         ReportDcamerOptFail(DCAMERA_OPT_FAIL, DCAMERA_OPEN_SESSION_ERROR,
204             CreateMsg("open softbus session failed, mySessName: %s, peerSessName: %s, peerDevId: %s",
205             mySessName.c_str(), peerSessName.c_str(), peerDevId.c_str()));
206         return DCAMERA_BAD_OPERATE;
207     }
208     return DCAMERA_OK;
209 }
210 
CloseSoftbusSession(int32_t sessionId)211 int32_t DCameraSoftbusAdapter::CloseSoftbusSession(int32_t sessionId)
212 {
213     DHLOGI("close softbus sessionId: %d", sessionId);
214     CloseSession(sessionId);
215     {
216         std::lock_guard<std::mutex> autoLock(idMapLock_);
217         sessionIdMap_.erase(sessionId);
218     }
219     DHLOGI("close softbus sessionId: %d end", sessionId);
220     return DCAMERA_OK;
221 }
222 
SendSofbusBytes(int32_t sessionId,std::shared_ptr<DataBuffer> & buffer)223 int32_t DCameraSoftbusAdapter::SendSofbusBytes(int32_t sessionId, std::shared_ptr<DataBuffer>& buffer)
224 {
225     return SendBytes(sessionId, buffer->Data(), buffer->Size());
226 }
227 
SendSofbusStream(int32_t sessionId,std::shared_ptr<DataBuffer> & buffer)228 int32_t DCameraSoftbusAdapter::SendSofbusStream(int32_t sessionId, std::shared_ptr<DataBuffer>& buffer)
229 {
230     StreamData streamData = { reinterpret_cast<char *>(buffer->Data()), buffer->Size() };
231     StreamData ext = { 0 };
232     StreamFrameInfo param = { 0 };
233     return SendStream(sessionId, &streamData, &ext, &param);
234 }
235 
DCameraSoftbusGetSessionById(int32_t sessionId,std::shared_ptr<DCameraSoftbusSession> & session)236 int32_t DCameraSoftbusAdapter::DCameraSoftbusGetSessionById(int32_t sessionId,
237     std::shared_ptr<DCameraSoftbusSession>& session)
238 {
239     DHLOGI("get softbus session by sessionId: %d", sessionId);
240     std::lock_guard<std::mutex> autoLock(idMapLock_);
241     auto iter = sessionIdMap_.find(sessionId);
242     if (iter == sessionIdMap_.end()) {
243         DHLOGE("get softbus session by id not find session %d", sessionId);
244         return DCAMERA_NOT_FOUND;
245     }
246     session = iter->second;
247     return DCAMERA_OK;
248 }
249 
DCameraSoftbusSourceGetSession(int32_t sessionId,std::shared_ptr<DCameraSoftbusSession> & session)250 int32_t DCameraSoftbusAdapter::DCameraSoftbusSourceGetSession(int32_t sessionId,
251     std::shared_ptr<DCameraSoftbusSession>& session)
252 {
253     char peerSessionName[DCAMERA_SESSION_NAME_MAX_LEN] = "";
254     char peerDevId[NETWORK_ID_BUF_LEN] = "";
255     int32_t ret = GetPeerSessionName(sessionId, peerSessionName, sizeof(peerSessionName));
256     if (ret != DCAMERA_OK) {
257         DHLOGI("DCameraSoftbusAdapter DCameraSoftbusSourceGetSession sessionId: %d GetPeerSessionName failed: %d",
258             sessionId, ret);
259         return ret;
260     }
261 
262     ret = GetPeerDeviceId(sessionId, peerDevId, sizeof(peerDevId));
263     if (ret != DCAMERA_OK) {
264         DHLOGI("DCameraSoftbusAdapter DCameraSoftbusSourceGetSession sessionId: %d GetPeerDeviceId failed: %d",
265             sessionId, ret);
266         return ret;
267     }
268 
269     auto iter = sourceSessions_.find(std::string(peerDevId) + std::string(peerSessionName));
270     if (iter == sourceSessions_.end()) {
271         DHLOGE("DCameraSoftbusAdapter DCameraSoftbusSourceGetSession not find session %d", sessionId);
272         return DCAMERA_NOT_FOUND;
273     }
274     session = iter->second;
275     return DCAMERA_OK;
276 }
277 
OnSourceSessionOpened(int32_t sessionId,int32_t result)278 int32_t DCameraSoftbusAdapter::OnSourceSessionOpened(int32_t sessionId, int32_t result)
279 {
280     DHLOGI("DCameraSoftbusAdapter OnSourceSessionOpened sessionId: %d, result: %d", sessionId, result);
281     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
282     int32_t ret = DCameraSoftbusSourceGetSession(sessionId, session);
283     if (ret != DCAMERA_OK) {
284         DHLOGE("DCameraSoftbusAdapter OnSourceSessionOpened not find session %d", sessionId);
285         return DCAMERA_NOT_FOUND;
286     }
287 
288     ret = session->OnSessionOpend(sessionId, result);
289     if (ret != DCAMERA_OK) {
290         DHLOGE("DCameraSoftbusAdapter OnSourceSessionOpened failed %d sessionId: %d", ret, sessionId);
291     } else {
292         std::lock_guard<std::mutex> autoLock(idMapLock_);
293         sessionIdMap_.emplace(sessionId, session);
294     }
295     DHLOGI("DCameraSoftbusAdapter OnSourceSessionOpened sessionId: %d, result: %d end", sessionId, result);
296     return ret;
297 }
298 
OnSourceSessionClosed(int32_t sessionId)299 void DCameraSoftbusAdapter::OnSourceSessionClosed(int32_t sessionId)
300 {
301     DHLOGI("DCameraSoftbusAdapter OnSourceSessionClosed sessionId: %d", sessionId);
302     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
303     int32_t ret = DCameraSoftbusGetSessionById(sessionId, session);
304     if (ret != DCAMERA_OK) {
305         DHLOGE("DCameraSoftbusAdapter OnSourceSessionClosed not find session %d", sessionId);
306         return;
307     }
308     {
309         std::lock_guard<std::mutex> autoLock(idMapLock_);
310         sessionIdMap_.erase(sessionId);
311     }
312     session->OnSessionClose(sessionId);
313     DHLOGI("DCameraSoftbusAdapter OnSourceSessionClosed sessionId: %d end", sessionId);
314     return;
315 }
316 
OnSourceBytesReceived(int32_t sessionId,const void * data,uint32_t dataLen)317 void DCameraSoftbusAdapter::OnSourceBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen)
318 {
319     if (dataLen == 0 || dataLen > DCAMERA_MAX_RECV_DATA_LEN || data == nullptr) {
320         DHLOGE("DCameraSoftbusAdapter OnSourceBytesReceived dataLen: %d, sessionId: %d", dataLen, sessionId);
321         return;
322     }
323     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
324     int32_t ret = DCameraSoftbusSourceGetSession(sessionId, session);
325     if (ret != DCAMERA_OK) {
326         DHLOGE("DCameraSoftbusAdapter OnSourceBytesReceived not find session %d", sessionId);
327         return;
328     }
329 
330     std::shared_ptr<DataBuffer> buffer = std::make_shared<DataBuffer>(dataLen);
331     ret = memcpy_s(buffer->Data(), buffer->Capacity(), data, dataLen);
332     if (ret != EOK) {
333         DHLOGE("DCameraSoftbusAdapter OnSourceBytesReceived memcpy_s failed ret: %d", ret);
334         return;
335     }
336     session->OnDataReceived(buffer);
337     return;
338 }
339 
OnSourceMessageReceived(int32_t sessionId,const void * data,uint32_t dataLen)340 void DCameraSoftbusAdapter::OnSourceMessageReceived(int32_t sessionId, const void *data, uint32_t dataLen)
341 {
342     return;
343 }
344 
OnSourceStreamReceived(int32_t sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)345 void DCameraSoftbusAdapter::OnSourceStreamReceived(int32_t sessionId, const StreamData *data, const StreamData *ext,
346     const StreamFrameInfo *param)
347 {
348     if (data == nullptr) {
349         DHLOGE("DCameraSoftbusAdapter::OnSourceStreamReceived, data is null, sessionId: %d.", sessionId);
350         return;
351     }
352     int32_t dataLen = data->bufLen;
353     if (dataLen <= 0 || dataLen > (int32_t)DCAMERA_MAX_RECV_DATA_LEN) {
354         DHLOGE("DCameraSoftbusAdapter OnSourceStreamReceived dataLen: %d, sessionId: %d", dataLen, sessionId);
355         return;
356     }
357     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
358     int32_t ret = DCameraSoftbusSourceGetSession(sessionId, session);
359     if (ret != DCAMERA_OK) {
360         DHLOGE("DCameraSoftbusAdapter OnSourceStreamReceived not find session %d", sessionId);
361         return;
362     }
363 
364     std::shared_ptr<DataBuffer> buffer = std::make_shared<DataBuffer>(data->bufLen);
365     ret = memcpy_s(buffer->Data(), buffer->Capacity(), reinterpret_cast<uint8_t *>(data->buf), data->bufLen);
366     if (ret != EOK) {
367         DHLOGE("DCameraSoftbusAdapter OnSourceStreamReceived memcpy_s failed ret: %d", ret);
368         return;
369     }
370     session->OnDataReceived(buffer);
371     return;
372 }
373 
DCameraSoftbusSinkGetSession(int32_t sessionId,std::shared_ptr<DCameraSoftbusSession> & session)374 int32_t DCameraSoftbusAdapter::DCameraSoftbusSinkGetSession(int32_t sessionId,
375     std::shared_ptr<DCameraSoftbusSession>& session)
376 {
377     char mySessionName[DCAMERA_SESSION_NAME_MAX_LEN] = "";
378     int ret = GetMySessionName(sessionId, mySessionName, sizeof(mySessionName));
379     if (ret != DCAMERA_OK) {
380         DHLOGI("DCameraSoftbusAdapter DCameraSoftbusSinkGetSession sessionId: %d GetPeerSessionName failed: %d",
381             sessionId, ret);
382         return ret;
383     }
384 
385     auto iter = sinkSessions_.find(std::string(mySessionName));
386     if (iter == sinkSessions_.end()) {
387         DHLOGE("DCameraSoftbusAdapter DCameraSoftbusSinkGetSession not find session %d", sessionId);
388         return DCAMERA_NOT_FOUND;
389     }
390     session = iter->second;
391     return DCAMERA_OK;
392 }
393 
OnSinkSessionOpened(int32_t sessionId,int32_t result)394 int32_t DCameraSoftbusAdapter::OnSinkSessionOpened(int32_t sessionId, int32_t result)
395 {
396     DHLOGI("DCameraSoftbusAdapter OnSinkSessionOpened sessionId: %d, result: %d", sessionId, result);
397     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
398     int32_t ret = DCameraSoftbusSinkGetSession(sessionId, session);
399     if (ret != DCAMERA_OK) {
400         DHLOGE("DCameraSoftbusAdapter OnSinkSessionOpened not find session %d", sessionId);
401         return DCAMERA_NOT_FOUND;
402     }
403 
404     ret = session->OnSessionOpend(sessionId, result);
405     if (ret != DCAMERA_OK) {
406         DHLOGE("DCameraSoftbusAdapter OnSinkSessionOpened not find session %d", sessionId);
407     } else {
408         std::lock_guard<std::mutex> autoLock(idMapLock_);
409         sessionIdMap_.emplace(sessionId, session);
410     }
411     DHLOGI("DCameraSoftbusAdapter OnSinkSessionOpened sessionId: %d, result: %d end", sessionId, result);
412     return ret;
413 }
414 
OnSinkSessionClosed(int32_t sessionId)415 void DCameraSoftbusAdapter::OnSinkSessionClosed(int32_t sessionId)
416 {
417     DHLOGI("DCameraSoftbusAdapter OnSinkSessionClosed sessionId: %d", sessionId);
418     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
419     int32_t ret = DCameraSoftbusGetSessionById(sessionId, session);
420     if (ret != DCAMERA_OK) {
421         DHLOGE("DCameraSoftbusAdapter OnSinkSessionClosed not find session %d", sessionId);
422         return;
423     }
424     {
425         std::lock_guard<std::mutex> autoLock(idMapLock_);
426         sessionIdMap_.erase(sessionId);
427     }
428     session->OnSessionClose(sessionId);
429     return;
430 }
431 
OnSinkBytesReceived(int32_t sessionId,const void * data,uint32_t dataLen)432 void DCameraSoftbusAdapter::OnSinkBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen)
433 {
434     if (dataLen == 0 || dataLen > DCAMERA_MAX_RECV_DATA_LEN || data == nullptr) {
435         DHLOGE("DCameraSoftbusAdapter OnSinkBytesReceived dataLen: %d, sessionId: %d", dataLen, sessionId);
436         return;
437     }
438     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
439     int32_t ret = DCameraSoftbusSinkGetSession(sessionId, session);
440     if (ret != DCAMERA_OK) {
441         DHLOGE("DCameraSoftbusAdapter OnSinkBytesReceived not find session %d", sessionId);
442         return;
443     }
444 
445     std::shared_ptr<DataBuffer> buffer = std::make_shared<DataBuffer>(dataLen);
446     ret = memcpy_s(buffer->Data(), buffer->Capacity(), data, dataLen);
447     if (ret != EOK) {
448         DHLOGE("DCameraSoftbusAdapter OnSinkBytesReceived memcpy_s failed ret: %d", ret);
449         return;
450     }
451     session->OnDataReceived(buffer);
452     return;
453 }
454 
OnSinkMessageReceived(int32_t sessionId,const void * data,uint32_t dataLen)455 void DCameraSoftbusAdapter::OnSinkMessageReceived(int32_t sessionId, const void *data, uint32_t dataLen)
456 {
457     return;
458 }
459 
OnSinkStreamReceived(int32_t sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)460 void DCameraSoftbusAdapter::OnSinkStreamReceived(int32_t sessionId, const StreamData *data, const StreamData *ext,
461     const StreamFrameInfo *param)
462 {
463     if (data == nullptr) {
464         DHLOGE("DCameraSoftbusAdapter::OnSinkStreamReceived, data is null, sessionId: %d.", sessionId);
465         return;
466     }
467     int32_t dataLen = data->bufLen;
468     if (dataLen <= 0 || dataLen > (int32_t)DCAMERA_MAX_RECV_DATA_LEN) {
469         DHLOGE("DCameraSoftbusAdapter OnSinkStreamReceived dataLen: %d sessionId: %d", dataLen, sessionId);
470         return;
471     }
472     std::shared_ptr<DCameraSoftbusSession> session = nullptr;
473     int32_t ret = DCameraSoftbusSinkGetSession(sessionId, session);
474     if (ret != DCAMERA_OK) {
475         DHLOGE("DCameraSoftbusAdapter OnSinkStreamReceived not find session %d", sessionId);
476         return;
477     }
478 
479     std::shared_ptr<DataBuffer> buffer = std::make_shared<DataBuffer>(data->bufLen);
480     ret = memcpy_s(buffer->Data(), buffer->Capacity(), reinterpret_cast<uint8_t *>(data->buf), data->bufLen);
481     if (ret != EOK) {
482         DHLOGE("DCameraSoftbusAdapter OnSinkStreamReceived memcpy_s failed ret: %d", ret);
483         return;
484     }
485     session->OnDataReceived(buffer);
486     return;
487 }
488 
GetLocalNetworkId(std::string & myDevId)489 int32_t DCameraSoftbusAdapter::GetLocalNetworkId(std::string& myDevId)
490 {
491     NodeBasicInfo basicInfo = { { 0 } };
492     int32_t ret = GetLocalNodeDeviceInfo(PKG_NAME.c_str(), &basicInfo);
493     if (ret != DCAMERA_OK) {
494         DHLOGE("DCameraSoftbusAdapter GetLocalNodeDeviceInfo failed ret: %d", ret);
495         return ret;
496     }
497 
498     myDevId = std::string(basicInfo.networkId);
499     return DCAMERA_OK;
500 }
501 } // namespace DistributedHardware
502 } // namespace OHOS
503