1 /*
2 * Copyright (c) 2023-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 "softbus_adapter.h"
17
18 #include <securec.h>
19 #include <unistd.h>
20 #include "dm_log.h"
21 #include "softbus_bus_center.h"
22 #include "softbus_common.h"
23 #include "device_manager_service.h"
24 namespace OHOS {
25 namespace DistributedHardware {
26 namespace {
27 static QosTV g_qosInfo[] = {
28 { .qos = QOS_TYPE_MIN_BW, .value = 64 * 1024 },
29 { .qos = QOS_TYPE_MAX_LATENCY, .value = 10000 },
30 { .qos = QOS_TYPE_MIN_LATENCY, .value = 2500 },
31 };
32 static uint32_t g_qosTVParamIndex = static_cast<uint32_t>(sizeof(g_qosInfo) / sizeof(g_qosInfo[0]));
33 }
34 DM_IMPLEMENT_SINGLE_INSTANCE(SoftbusAdapter);
DmOnSoftbusSessionBind(int32_t socket,PeerSocketInfo info)35 static void DmOnSoftbusSessionBind(int32_t socket, PeerSocketInfo info)
36 {
37 SoftbusAdapter::GetInstance().OnSoftbusSessionOpened(socket, info);
38 }
39
DmOnSoftbusSessionClosed(int32_t socket,ShutdownReason reason)40 static void DmOnSoftbusSessionClosed(int32_t socket, ShutdownReason reason)
41 {
42 SoftbusAdapter::GetInstance().OnSoftbusSessionClosed(socket, reason);
43 }
44
DmOnBytesReceived(int32_t socket,const void * data,uint32_t dataLen)45 static void DmOnBytesReceived(int32_t socket, const void *data, uint32_t dataLen)
46 {
47 SoftbusAdapter::GetInstance().OnBytesReceived(socket, data, dataLen);
48 }
49
DmOnStreamReceived(int32_t socket,const StreamData * data,const StreamData * ext,const StreamFrameInfo * frameInfo)50 static void DmOnStreamReceived(int32_t socket, const StreamData *data, const StreamData *ext,
51 const StreamFrameInfo *frameInfo)
52 {
53 SoftbusAdapter::GetInstance().OnStreamReceived(socket, data, ext, frameInfo);
54 }
55
DmOnMessageReceived(int32_t socket,const void * data,uint32_t dataLen)56 static void DmOnMessageReceived(int32_t socket, const void *data, uint32_t dataLen)
57 {
58 SoftbusAdapter::GetInstance().OnMessageReceived(socket, data, dataLen);
59 }
60
DmOnQosEvent(int32_t socket,QoSEvent eventId,const QosTV * qos,uint32_t qosCount)61 static void DmOnQosEvent(int32_t socket, QoSEvent eventId, const QosTV *qos, uint32_t qosCount)
62 {
63 SoftbusAdapter::GetInstance().OnQosEvent(socket, eventId, qos, qosCount);
64 }
65
SoftbusAdapter()66 SoftbusAdapter::SoftbusAdapter()
67 {
68 LOGI("SoftbusAdapter");
69 (void)memset_s(&iSocketListener_, sizeof(ISocketListener), 0, sizeof(ISocketListener));
70 iSocketListener_.OnBind = DmOnSoftbusSessionBind;
71 iSocketListener_.OnShutdown = DmOnSoftbusSessionClosed;
72 iSocketListener_.OnBytes = DmOnBytesReceived;
73 iSocketListener_.OnMessage = DmOnMessageReceived;
74 iSocketListener_.OnStream = DmOnStreamReceived;
75 iSocketListener_.OnQos = DmOnQosEvent;
76 iSocketListener_.OnFile = nullptr;
77 iSocketListener_.OnError = nullptr;
78 iSocketListener_.OnNegotiate = nullptr;
79 }
80
~SoftbusAdapter()81 SoftbusAdapter::~SoftbusAdapter()
82 {
83 LOGI("~SoftbusAdapter");
84 }
85
CreateSoftbusSessionServer(const std::string & pkgname,const std::string & sessionName)86 int32_t SoftbusAdapter::CreateSoftbusSessionServer(const std::string &pkgname, const std::string &sessionName)
87 {
88 LOGI("SoftbusAdapter::CreateSoftbusSessionServer.");
89 SocketInfo info = {
90 .name = const_cast<char*>(sessionName.c_str()),
91 .pkgName = const_cast<char*>(pkgname.c_str()),
92 .dataType = DATA_TYPE_BYTES
93 };
94 int32_t socket = Socket(info);
95 if (socket <= 0) {
96 LOGE("[SOFTBUS]create socket failed, socket: %{public}d", socket);
97 return socket;
98 }
99 int32_t ret = Listen(socket, g_qosInfo, g_qosTVParamIndex, &iSocketListener_);
100 if (ret != DM_OK) {
101 LOGE("[SOFTBUS]Socket Listen failed, ret: %{public}d, socket: %{public}d.", ret, socket);
102 Shutdown(socket);
103 return ret;
104 }
105 LOGI("SoftbusAdapter::CreateSoftbusSessionServer success.");
106 return DM_OK;
107 }
108
RemoveSoftbusSessionServer(const std::string & pkgname,const std::string & sessionName)109 int32_t SoftbusAdapter::RemoveSoftbusSessionServer(const std::string &pkgname, const std::string &sessionName)
110 {
111 LOGI("SoftbusAdapter::RemoveSoftbusSessionServer");
112 int32_t ret = RemoveSessionServer(pkgname.c_str(), sessionName.c_str());
113 if (ret != DM_OK) {
114 LOGE("RemoveSoftbusSessionServer failed.");
115 return ret;
116 }
117 LOGI("SoftbusAdapter::RemoveSoftbusSessionServer success.");
118 return DM_OK;
119 }
120
OnSoftbusSessionOpened(int32_t socket,PeerSocketInfo info)121 void SoftbusAdapter::OnSoftbusSessionOpened(int32_t socket, PeerSocketInfo info)
122 {
123 LOGI("SoftbusAdapter::OnSoftbusSessionOpened socket: %{public}d", socket);
124 DeviceManagerService::GetInstance().OnUnbindSessionOpened(socket, info);
125 }
126
OnSoftbusSessionClosed(int32_t socket,ShutdownReason reason)127 void SoftbusAdapter::OnSoftbusSessionClosed(int32_t socket, ShutdownReason reason)
128 {
129 (void)reason;
130 LOGI("SoftbusAdapter::OnSoftbusSessionClosed socket: %{public}d", socket);
131 DeviceManagerService::GetInstance().OnUnbindSessionCloseed(socket);
132 }
133
OnBytesReceived(int32_t socket,const void * data,uint32_t dataLen)134 void SoftbusAdapter::OnBytesReceived(int32_t socket, const void *data, uint32_t dataLen)
135 {
136 LOGI("SoftbusAdapter::OnBytesReceived socket: %{public}d", socket);
137 DeviceManagerService::GetInstance().OnUnbindBytesReceived(socket, data, dataLen);
138 }
139
OnStreamReceived(int32_t socket,const StreamData * data,const StreamData * ext,const StreamFrameInfo * frameInfo)140 void SoftbusAdapter::OnStreamReceived(int32_t socket, const StreamData *data, const StreamData *ext,
141 const StreamFrameInfo *frameInfo)
142 {
143 (void)data;
144 (void)ext;
145 (void)frameInfo;
146 LOGI("SoftbusAdapter::OnStreamReceived, socket: %{public}d", socket);
147 }
148
OnMessageReceived(int32_t socket,const void * data,unsigned int dataLen) const149 void SoftbusAdapter::OnMessageReceived(int32_t socket, const void *data, unsigned int dataLen) const
150 {
151 (void)data;
152 (void)dataLen;
153 LOGI("SoftbusAdapter::OnMessageReceived, socket: %{public}d", socket);
154 }
155
OnQosEvent(int32_t socket,QoSEvent eventId,const QosTV * qos,uint32_t qosCount) const156 void SoftbusAdapter::OnQosEvent(int32_t socket, QoSEvent eventId, const QosTV *qos, uint32_t qosCount) const
157 {
158 (void)eventId;
159 (void)qos;
160 (void)qosCount;
161 LOGI("SoftbusAdapter::OnQosEvent, socket: %{public}d", socket);
162 }
163 } // namespace DistributedHardware
164 } // namespace OHOS