• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 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_session.h"
17 
18 #include <securec.h>
19 
20 #include "anonymous_string.h"
21 #include "dcamera_softbus_adapter.h"
22 #include "dcamera_utils_tools.h"
23 #include "distributed_camera_constants.h"
24 #include "distributed_camera_errno.h"
25 #include "distributed_hardware_log.h"
26 
27 namespace OHOS {
28 namespace DistributedHardware {
DCameraSoftbusSession()29 DCameraSoftbusSession::DCameraSoftbusSession()
30 {
31     sessionId_ = -1;
32     state_ = DCAMERA_SOFTBUS_STATE_CLOSED;
33     mode_ = DCAMERA_SESSION_MODE_CTRL;
34     ResetAssembleFrag();
35 }
36 
DCameraSoftbusSession(std::string myDevId,std::string mySessionName,std::string peerDevId,std::string peerSessionName,std::shared_ptr<ICameraChannelListener> listener,DCameraSessionMode mode)37 DCameraSoftbusSession::DCameraSoftbusSession(std::string myDevId, std::string mySessionName, std::string peerDevId,
38     std::string peerSessionName, std::shared_ptr<ICameraChannelListener> listener, DCameraSessionMode mode)
39     : myDevId_(myDevId), mySessionName_(mySessionName), peerDevId_(peerDevId), peerSessionName_(peerSessionName),
40     listener_(listener), sessionId_(-1), state_(DCAMERA_SOFTBUS_STATE_CLOSED), mode_(mode)
41 {
42     sendFuncMap_[DCAMERA_SESSION_MODE_CTRL] = &DCameraSoftbusSession::SendBytes;
43     sendFuncMap_[DCAMERA_SESSION_MODE_VIDEO] = &DCameraSoftbusSession::SendStream;
44     sendFuncMap_[DCAMERA_SESSION_MODE_JPEG] = &DCameraSoftbusSession::SendBytes;
45     auto runner = AppExecFwk::EventRunner::Create(mySessionName);
46     eventHandler_ = std::make_shared<AppExecFwk::EventHandler>(runner);
47     ResetAssembleFrag();
48 }
49 
~DCameraSoftbusSession()50 DCameraSoftbusSession::~DCameraSoftbusSession()
51 {
52     if (sessionId_ != -1) {
53         int32_t ret = DCameraSoftbusAdapter::GetInstance().CloseSoftbusSession(sessionId_);
54         if (ret != DCAMERA_OK) {
55             DHLOGE("DCameraSoftbusSession delete failed, ret: %d, sessId: %d peerDevId: %s peerSessionName: %s", ret,
56                 sessionId_, GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
57         }
58     }
59     sendFuncMap_.clear();
60     eventHandler_ = nullptr;
61 }
62 
CloseSession()63 int32_t DCameraSoftbusSession::CloseSession()
64 {
65     DHLOGI("close session sessionId: %d peerDevId: %s peerSessionName: %s", sessionId_,
66         GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
67     if (sessionId_ == -1) {
68         DHLOGI("current session has already close peerDevId: %s peerSessionName: %s",
69             GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
70         return DCAMERA_OK;
71     }
72     int32_t ret = DCameraSoftbusAdapter::GetInstance().CloseSoftbusSession(sessionId_);
73     if (ret != DCAMERA_OK) {
74         DHLOGE("close session failed, ret: %d, peerDevId: %s peerSessionName: %s", ret,
75             GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
76         return ret;
77     }
78 
79     sessionId_ = -1;
80     state_ = DCAMERA_SOFTBUS_STATE_CLOSED;
81     return DCAMERA_OK;
82 }
83 
OnSessionOpened(int32_t socket)84 int32_t DCameraSoftbusSession::OnSessionOpened(int32_t socket)
85 {
86     DHLOGI("open current session start, socket: %d", socket);
87     sessionId_ = socket;
88     state_ = DCAMERA_SOFTBUS_STATE_OPENED;
89     listener_->OnSessionState(DCAMERA_CHANNEL_STATE_CONNECTED);
90     DHLOGI("open current session end, socket: %d", socket);
91     return DCAMERA_OK;
92 }
93 
OnSessionClose(int32_t sessionId)94 int32_t DCameraSoftbusSession::OnSessionClose(int32_t sessionId)
95 {
96     DHLOGI("OnSessionClose sessionId: %d peerDevId: %s peerSessionName: %s", sessionId,
97         GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
98     sessionId_ = -1;
99     state_ = DCAMERA_SOFTBUS_STATE_CLOSED;
100     listener_->OnSessionState(DCAMERA_CHANNEL_STATE_DISCONNECTED);
101     return DCAMERA_OK;
102 }
103 
OnDataReceived(std::shared_ptr<DataBuffer> & buffer)104 int32_t DCameraSoftbusSession::OnDataReceived(std::shared_ptr<DataBuffer>& buffer)
105 {
106     auto recvDataFunc = [this, buffer]() mutable {
107         DealRecvData(buffer);
108     };
109     if (eventHandler_ != nullptr) {
110         eventHandler_->PostTask(recvDataFunc);
111     }
112     return DCAMERA_OK;
113 }
114 
DealRecvData(std::shared_ptr<DataBuffer> & buffer)115 void DCameraSoftbusSession::DealRecvData(std::shared_ptr<DataBuffer>& buffer)
116 {
117     if (mode_ == DCAMERA_SESSION_MODE_VIDEO) {
118         PostData(buffer);
119         return;
120     }
121     PackRecvData(buffer);
122     return;
123 }
124 
PackRecvData(std::shared_ptr<DataBuffer> & buffer)125 void DCameraSoftbusSession::PackRecvData(std::shared_ptr<DataBuffer>& buffer)
126 {
127     if (buffer->Size() < BINARY_HEADER_FRAG_LEN) {
128         DHLOGE("pack recv data error, size: %d, sess: %s peerSess: %s",
129             buffer->Size(), mySessionName_.c_str(), peerSessionName_.c_str());
130         return;
131     }
132     uint8_t *ptrPacket = buffer->Data();
133     SessionDataHeader headerPara;
134     GetFragDataLen(ptrPacket, headerPara);
135     if (buffer->Size() != (headerPara.dataLen + BINARY_HEADER_FRAG_LEN) || headerPara.dataLen > headerPara.totalLen ||
136         headerPara.dataLen > BINARY_DATA_MAX_LEN || headerPara.totalLen > BINARY_DATA_MAX_TOTAL_LEN) {
137         DHLOGE("pack recv data failed, size: %d, dataLen: %d, totalLen: %d sess: %s peerSess: %s",
138             buffer->Size(), headerPara.dataLen, headerPara.totalLen, mySessionName_.c_str(), peerSessionName_.c_str());
139         return;
140     }
141     DHLOGD("pack recv data Assemble, size: %d, dataLen: %d, totalLen: %d, nowTime: %lld start",
142         buffer->Size(), headerPara.dataLen, headerPara.totalLen, GetNowTimeStampUs());
143     if (headerPara.fragFlag == FRAG_START_END) {
144         AssembleNoFrag(buffer, headerPara);
145     } else {
146         AssembleFrag(buffer, headerPara);
147     }
148     DHLOGD("pack recv data Assemble, size: %d, dataLen: %d, totalLen: %d, nowTime: %lld end",
149         buffer->Size(), headerPara.dataLen, headerPara.totalLen, GetNowTimeStampUs());
150 }
151 
AssembleNoFrag(std::shared_ptr<DataBuffer> & buffer,SessionDataHeader & headerPara)152 void DCameraSoftbusSession::AssembleNoFrag(std::shared_ptr<DataBuffer>& buffer, SessionDataHeader& headerPara)
153 {
154     if (headerPara.dataLen != headerPara.totalLen) {
155         DHLOGE("DCameraSoftbusSession PackRecvData failed, dataLen: %d, totalLen: %d, sess: %s peerSess: %s",
156             headerPara.dataLen, headerPara.totalLen, mySessionName_.c_str(), peerSessionName_.c_str());
157         return;
158     }
159     std::shared_ptr<DataBuffer> postData = std::make_shared<DataBuffer>(headerPara.dataLen);
160     int32_t ret = memcpy_s(postData->Data(), postData->Size(), buffer->Data() + BINARY_HEADER_FRAG_LEN,
161         buffer->Size() - BINARY_HEADER_FRAG_LEN);
162     if (ret != EOK) {
163         DHLOGE("DCameraSoftbusSession PackRecvData failed, ret: %d, sess: %s peerSess: %s",
164             ret, mySessionName_.c_str(), peerSessionName_.c_str());
165         return;
166     }
167     PostData(postData);
168 }
169 
AssembleFrag(std::shared_ptr<DataBuffer> & buffer,SessionDataHeader & headerPara)170 void DCameraSoftbusSession::AssembleFrag(std::shared_ptr<DataBuffer>& buffer, SessionDataHeader& headerPara)
171 {
172     if (headerPara.fragFlag == FRAG_START) {
173         isWaiting_ = true;
174         nowSeq_ = headerPara.seqNum;
175         nowSubSeq_ = headerPara.subSeq;
176         offset_ = 0;
177         totalLen_ = headerPara.totalLen;
178         packBuffer_ = std::make_shared<DataBuffer>(headerPara.totalLen);
179         int32_t ret = memcpy_s(packBuffer_->Data(), packBuffer_->Size(), buffer->Data() + BINARY_HEADER_FRAG_LEN,
180             buffer->Size() - BINARY_HEADER_FRAG_LEN);
181         if (ret != EOK) {
182             DHLOGE("DCameraSoftbusSession AssembleFrag failed, ret: %d, sess: %s peerSess: %s",
183                 ret, mySessionName_.c_str(), peerSessionName_.c_str());
184             ResetAssembleFrag();
185             return;
186         }
187         offset_ += headerPara.dataLen;
188     }
189 
190     if (headerPara.fragFlag == FRAG_MID || headerPara.fragFlag == FRAG_END) {
191         int32_t ret = CheckUnPackBuffer(headerPara);
192         if (ret != DCAMERA_OK) {
193             ResetAssembleFrag();
194             return;
195         }
196 
197         nowSubSeq_ = headerPara.subSeq;
198         ret = memcpy_s(packBuffer_->Data() + offset_, packBuffer_->Size() - offset_,
199             buffer->Data() + BINARY_HEADER_FRAG_LEN, buffer->Size() - BINARY_HEADER_FRAG_LEN);
200         if (ret != EOK) {
201             DHLOGE("DCameraSoftbusSession AssembleFrag failed, memcpy_s ret: %d, sess: %s peerSess: %s",
202                 ret, mySessionName_.c_str(), peerSessionName_.c_str());
203             ResetAssembleFrag();
204             return;
205         }
206         offset_ += headerPara.dataLen;
207     }
208 
209     if (headerPara.fragFlag == FRAG_END) {
210         PostData(packBuffer_);
211         ResetAssembleFrag();
212     }
213 }
214 
CheckUnPackBuffer(SessionDataHeader & headerPara)215 int32_t DCameraSoftbusSession::CheckUnPackBuffer(SessionDataHeader& headerPara)
216 {
217     if (!isWaiting_) {
218         DHLOGE("DCameraSoftbusSession AssembleFrag failed, not start one, sess: %s peerSess: %s",
219             mySessionName_.c_str(), peerSessionName_.c_str());
220         return DCAMERA_BAD_VALUE;
221     }
222 
223     if (nowSeq_ != headerPara.seqNum) {
224         DHLOGE("DCameraSoftbusSession AssembleFrag seq error nowSeq: %d actualSeq: %d, sess: %s peerSess: %s",
225             nowSeq_, headerPara.seqNum, mySessionName_.c_str(), peerSessionName_.c_str());
226         return DCAMERA_BAD_VALUE;
227     }
228 
229     if (nowSubSeq_ + 1 != headerPara.subSeq) {
230         DHLOGE("DCameraSoftbusSession AssembleFrag subSeq error nowSeq: %d actualSeq: %d, sess: %s peerSess: %s",
231             nowSubSeq_, headerPara.subSeq, mySessionName_.c_str(), peerSessionName_.c_str());
232         return DCAMERA_BAD_VALUE;
233     }
234 
235     if (totalLen_ < headerPara.dataLen + offset_) {
236         DHLOGE("DCameraSoftbusSession AssembleFrag len error cap: %d size: %d, dataLen: %d sess: %s peerSess: %s",
237             totalLen_, offset_, headerPara.dataLen, mySessionName_.c_str(),
238             peerSessionName_.c_str());
239         return DCAMERA_BAD_VALUE;
240     }
241     return DCAMERA_OK;
242 }
243 
ResetAssembleFrag()244 void DCameraSoftbusSession::ResetAssembleFrag()
245 {
246     isWaiting_ = false;
247     nowSeq_ = 0;
248     nowSubSeq_ = 0;
249     offset_ = 0;
250     totalLen_ = 0;
251     packBuffer_ = nullptr;
252 }
253 
PostData(std::shared_ptr<DataBuffer> & buffer)254 void DCameraSoftbusSession::PostData(std::shared_ptr<DataBuffer>& buffer)
255 {
256     std::vector<std::shared_ptr<DataBuffer>> buffers;
257     buffers.push_back(buffer);
258     listener_->OnDataReceived(buffers);
259 }
260 
GetFragDataLen(uint8_t * ptrPacket,SessionDataHeader & headerPara)261 void DCameraSoftbusSession::GetFragDataLen(uint8_t *ptrPacket, SessionDataHeader& headerPara)
262 {
263     headerPara.version = U16Get(ptrPacket);
264     headerPara.fragFlag = ptrPacket[BINARY_HEADER_FRAG_OFFSET];
265     headerPara.dataType = U32Get(ptrPacket + BINARY_HEADER_DATATYPE_OFFSET);
266     headerPara.seqNum = U32Get(ptrPacket + BINARY_HEADER_SEQNUM_OFFSET);
267     headerPara.totalLen = U32Get(ptrPacket + BINARY_HEADER_TOTALLEN_OFFSET);
268     headerPara.subSeq = U16Get(ptrPacket + BINARY_HEADER_SUBSEQ_OFFSET);
269     headerPara.dataLen = U32Get(ptrPacket + BINARY_HEADER_DATALEN_OFFSET);
270 }
271 
U16Get(const uint8_t * ptr)272 uint16_t DCameraSoftbusSession::U16Get(const uint8_t *ptr)
273 {
274     return (ptr[0] << DCAMERA_SHIFT_8) | ptr[1];
275 }
276 
U32Get(const uint8_t * ptr)277 uint32_t DCameraSoftbusSession::U32Get(const uint8_t *ptr)
278 {
279     return (ptr[0] << DCAMERA_SHIFT_24) | (ptr[1] << DCAMERA_SHIFT_16) | (ptr[2] << DCAMERA_SHIFT_8) | ptr[3];
280 }
281 
SendData(DCameraSessionMode mode,std::shared_ptr<DataBuffer> & buffer)282 int32_t DCameraSoftbusSession::SendData(DCameraSessionMode mode, std::shared_ptr<DataBuffer>& buffer)
283 {
284     auto itFunc = sendFuncMap_.find(mode);
285     if (itFunc == sendFuncMap_.end()) {
286         return DCAMERA_NOT_FOUND;
287     }
288     auto memberFunc = itFunc->second;
289     if (mode == DCAMERA_SESSION_MODE_VIDEO) {
290         return (this->*memberFunc)(buffer);
291     }
292 
293     return UnPackSendData(buffer, memberFunc);
294 }
295 
UnPackSendData(std::shared_ptr<DataBuffer> & buffer,DCameraSendFuc memberFunc)296 int32_t DCameraSoftbusSession::UnPackSendData(std::shared_ptr<DataBuffer>& buffer, DCameraSendFuc memberFunc)
297 {
298     uint16_t subSeq = 0;
299     uint32_t seq = 0;
300     uint32_t totalLen = buffer->Size();
301     SessionDataHeader headPara = { PROTOCOL_VERSION, FRAG_START, mode_, seq, totalLen, subSeq };
302 
303     if (buffer->Size() <= BINARY_DATA_PACKET_MAX_LEN) {
304         headPara.fragFlag = FRAG_START_END;
305         headPara.dataLen = buffer->Size();
306         std::shared_ptr<DataBuffer> unpackData = std::make_shared<DataBuffer>(buffer->Size() + BINARY_HEADER_FRAG_LEN);
307         MakeFragDataHeader(headPara, unpackData->Data(), BINARY_HEADER_FRAG_LEN);
308         int32_t ret = memcpy_s(unpackData->Data() + BINARY_HEADER_FRAG_LEN, unpackData->Size() - BINARY_HEADER_FRAG_LEN,
309             buffer->Data(), buffer->Size());
310         if (ret != EOK) {
311             DHLOGE("DCameraSoftbusSession UnPackSendData START_END memcpy_s failed, ret: %d, sess: %s peerSess: %s",
312                 ret, mySessionName_.c_str(), peerSessionName_.c_str());
313             return ret;
314         }
315         return (this->*memberFunc)(unpackData);
316     }
317 
318     uint32_t offset = 0;
319     while (totalLen > offset) {
320         SetHeadParaDataLen(headPara, totalLen, offset);
321         DHLOGD("DCameraSoftbusSession UnPackSendData, size: %d, dataLen: %d, totalLen: %d, nowTime: %lld start:",
322             buffer->Size(), headPara.dataLen, headPara.totalLen, GetNowTimeStampUs());
323         std::shared_ptr<DataBuffer> unpackData =
324             std::make_shared<DataBuffer>(headPara.dataLen + BINARY_HEADER_FRAG_LEN);
325         MakeFragDataHeader(headPara, unpackData->Data(), BINARY_HEADER_FRAG_LEN);
326         int ret = memcpy_s(unpackData->Data() + BINARY_HEADER_FRAG_LEN, unpackData->Size() - BINARY_HEADER_FRAG_LEN,
327             buffer->Data() + offset, headPara.dataLen);
328         if (ret != EOK) {
329             DHLOGE("DCameraSoftbusSession UnPackSendData memcpy_s failed, ret: %d, sess: %s peerSess: %s",
330                 ret, mySessionName_.c_str(), peerSessionName_.c_str());
331             return ret;
332         }
333         ret = (this->*memberFunc)(unpackData);
334         if (ret != DCAMERA_OK) {
335             DHLOGE("DCameraSoftbusSession sendData failed, ret: %d, sess: %s peerSess: %s",
336                 ret, mySessionName_.c_str(), peerSessionName_.c_str());
337             return ret;
338         }
339         DHLOGD("DCameraSoftbusSession UnPackSendData, size: %d, dataLen: %d, totalLen: %d, nowTime: %lld end:",
340             buffer->Size(), headPara.dataLen, headPara.totalLen, GetNowTimeStampUs());
341         headPara.subSeq++;
342         headPara.fragFlag = FRAG_MID;
343         offset += headPara.dataLen;
344     }
345     return DCAMERA_OK;
346 }
347 
SetHeadParaDataLen(SessionDataHeader & headPara,const uint32_t totalLen,const uint32_t offset)348 void DCameraSoftbusSession::SetHeadParaDataLen(SessionDataHeader& headPara, const uint32_t totalLen,
349     const uint32_t offset)
350 {
351     if (totalLen - offset > BINARY_DATA_PACKET_MAX_LEN) {
352         headPara.dataLen = BINARY_DATA_PACKET_MAX_LEN - BINARY_DATA_PACKET_RESERVED_BUFFER;
353     } else {
354         headPara.fragFlag = FRAG_END;
355         headPara.dataLen = totalLen - offset;
356     }
357 }
358 
MakeFragDataHeader(const SessionDataHeader & headPara,uint8_t * header,uint32_t len)359 void DCameraSoftbusSession::MakeFragDataHeader(const SessionDataHeader& headPara, uint8_t *header, uint32_t len)
360 {
361     uint32_t headerLen = sizeof(uint8_t) * HEADER_UINT8_NUM + sizeof(uint16_t) * HEADER_UINT16_NUM +
362         sizeof(uint32_t) * HEADER_UINT32_NUM;
363     if (headerLen > len) {
364         DHLOGE("MakeFragDataHeader %d over len %d", headerLen, len);
365         return;
366     }
367     uint32_t i = 0;
368     header[i++] = headPara.version >> DCAMERA_SHIFT_8;
369     header[i++] = headPara.version & UINT16_SHIFT_MASK_0;
370     header[i++] = headPara.fragFlag;
371     header[i++] = (headPara.dataType & UINT32_SHIFT_MASK_24) >> DCAMERA_SHIFT_24;
372     header[i++] = (headPara.dataType & UINT32_SHIFT_MASK_16) >> DCAMERA_SHIFT_16;
373     header[i++] = (headPara.dataType & UINT32_SHIFT_MASK_8) >> DCAMERA_SHIFT_8;
374     header[i++] = (headPara.dataType & UINT32_SHIFT_MASK_0);
375     header[i++] = (headPara.seqNum & UINT32_SHIFT_MASK_24) >> DCAMERA_SHIFT_24;
376     header[i++] = (headPara.seqNum & UINT32_SHIFT_MASK_16) >> DCAMERA_SHIFT_16;
377     header[i++] = (headPara.seqNum & UINT32_SHIFT_MASK_8) >> DCAMERA_SHIFT_8;
378     header[i++] = (headPara.seqNum & UINT32_SHIFT_MASK_0);
379     header[i++] = (headPara.totalLen & UINT32_SHIFT_MASK_24) >> DCAMERA_SHIFT_24;
380     header[i++] = (headPara.totalLen & UINT32_SHIFT_MASK_16) >> DCAMERA_SHIFT_16;
381     header[i++] = (headPara.totalLen & UINT32_SHIFT_MASK_8) >> DCAMERA_SHIFT_8;
382     header[i++] = (headPara.totalLen & UINT32_SHIFT_MASK_0);
383     header[i++] = headPara.subSeq >> DCAMERA_SHIFT_8;
384     header[i++] = headPara.subSeq & UINT16_SHIFT_MASK_0;
385     header[i++] = (headPara.dataLen & UINT32_SHIFT_MASK_24) >> DCAMERA_SHIFT_24;
386     header[i++] = (headPara.dataLen & UINT32_SHIFT_MASK_16) >> DCAMERA_SHIFT_16;
387     header[i++] = (headPara.dataLen & UINT32_SHIFT_MASK_8) >> DCAMERA_SHIFT_8;
388     header[i++] = (headPara.dataLen & UINT32_SHIFT_MASK_0);
389 }
390 
SendBytes(std::shared_ptr<DataBuffer> & buffer)391 int32_t DCameraSoftbusSession::SendBytes(std::shared_ptr<DataBuffer>& buffer)
392 {
393     if (state_ != DCAMERA_SOFTBUS_STATE_OPENED) {
394         DHLOGE("DCameraSoftbusSession SendBytes session state %d is not opened sessionId: %d peerDev: %s peerName: %s",
395             state_, sessionId_, GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
396         return DCAMERA_WRONG_STATE;
397     }
398 
399     int32_t ret = DCameraSoftbusAdapter::GetInstance().SendSofbusBytes(sessionId_, buffer);
400     if (ret != DCAMERA_OK) {
401         DHLOGE("DCameraSoftbusSession SendBytes sessionId: %d failed: %d peerDevId: %s peerSessionName: %s", sessionId_,
402             ret, GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
403     }
404     return ret;
405 }
406 
SendStream(std::shared_ptr<DataBuffer> & buffer)407 int32_t DCameraSoftbusSession::SendStream(std::shared_ptr<DataBuffer>& buffer)
408 {
409     if (state_ != DCAMERA_SOFTBUS_STATE_OPENED) {
410         DHLOGE("DCameraSoftbusSession SendStream session state %d is not opened sessionId: %d peerDev: %s peerName: %s",
411             state_, sessionId_, GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
412         return DCAMERA_WRONG_STATE;
413     }
414 
415     int32_t ret = DCameraSoftbusAdapter::GetInstance().SendSofbusStream(sessionId_, buffer);
416     if (ret != DCAMERA_OK) {
417         DHLOGE("DCameraSoftbusSession SendStream sessionId: %d failed: %d peerDevId: %s peerSessionName: %s",
418             sessionId_, ret, GetAnonyString(peerDevId_).c_str(), GetAnonyString(peerSessionName_).c_str());
419     }
420     return ret;
421 }
422 
GetPeerDevId()423 std::string DCameraSoftbusSession::GetPeerDevId()
424 {
425     return peerDevId_;
426 }
427 
GetPeerSessionName()428 std::string DCameraSoftbusSession::GetPeerSessionName()
429 {
430     return peerSessionName_;
431 }
432 
GetMySessionName()433 std::string DCameraSoftbusSession::GetMySessionName()
434 {
435     return mySessionName_;
436 }
437 
GetSessionId()438 int32_t DCameraSoftbusSession::GetSessionId()
439 {
440     return sessionId_;
441 }
442 } // namespace DistributedHardware
443 } // namespace OHOS
444