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, ¶m);
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