• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 "socket_common.h"
17 #include "socket.h"
18 #include "accesstoken_kit.h"
19 
20 using namespace std;
21 
22 static INodeStateCb* g_nodeStateCallback = NULL;
23 static ISocketListener* g_sessionlist4SokectData  = NULL;
24 const int ONE_MINUTE = 60;
25 
26 static void SetupCallback(void);
27 static void TeardownCallback(void);
28 
SetUpTestCase()29 void SetUpTestCase()
30 {
31     LOG("SetUpTestCase");
32     AddPermission();
33     sleep(ONE_SECOND);
34     OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
35     sleep(ONE_SECOND);
36     TestSetUp();
37     SetupCallback();
38     int ret = RegNodeDeviceStateCb(DEF_PKG_NAME, g_nodeStateCallback);
39     if (SOFTBUS_OK != ret) {
40         LOG("call reg node state callback fail");
41     }
42 }
43 
TearDownTestCase()44 void TearDownTestCase()
45 {
46     LOG("TearDownTestCase");
47     int ret = UnregNodeDeviceStateCb(g_nodeStateCallback);
48     if (SOFTBUS_OK != ret) {
49         LOG("call unReg node state callback fail");
50     }
51     TeardownCallback();
52     TestTearDown();
53 }
54 
55 SocketInfo socketInfoByte = {
56     .name = (char *)SOCKET_NAME_BYTE,
57     .pkgName = (char *)DEF_PKG_NAME,
58     .dataType = DATA_TYPE_BYTES,
59 };
60 
61 SocketInfo socketInfoMessage = {
62     .name = (char *)SOCKET_NAME_MESSAGE,
63     .pkgName = (char *)DEF_PKG_NAME,
64     .dataType = DATA_TYPE_MESSAGE,
65 };
66 
67 SocketInfo socketInfoFile = {
68     .name = (char *)SOCKET_NAME_FILE,
69     .pkgName = (char *)DEF_PKG_NAME,
70     .dataType = DATA_TYPE_FILE,
71 };
72 
73 SocketInfo socketInfoStream = {
74     .name = (char *)SOCKET_NAME_STREAM,
75     .pkgName = (char *)DEF_PKG_NAME,
76     .dataType = DATA_TYPE_VIDEO_STREAM,
77 };
78 
79 /* socket callback for data */
OnNegotiate(int32_t socket,PeerSocketInfo info)80 bool OnNegotiate(int32_t socket, PeerSocketInfo info)
81 {
82     uint64_t tokenId = GetTestTokenId();
83     SetSelfTokenID(tokenId);
84     LOG("[cb][data]OnNegotiate success  {socket:%d: }", socket);
85     return true;
86 }
87 
OnBind(int32_t socket,PeerSocketInfo info)88 static void OnBind(int32_t socket, PeerSocketInfo info)
89 {
90     uint64_t tokenId = GetTestTokenId();
91     SetSelfTokenID(tokenId);
92     LOG("[cb][data]OnBind success  {socket:%d, name:%s, deviceId:%s, pkgName:%s, dataType:%d}", socket,
93         info.name, info.networkId, info.pkgName, info.dataType);
94 }
95 
OnShutdown(int32_t socket,ShutdownReason reason)96 static void OnShutdown(int32_t socket, ShutdownReason reason)
97 {
98     LOG("[cb][data] OnShutdown {socket:%d, reason:%d}", socket, reason);
99 }
100 
OnByte(int32_t socket,const void * data,unsigned int dataLen)101 static void OnByte(int32_t socket, const void* data, unsigned int dataLen)
102 {
103     if (socket < 0) {
104         LOG("[cb][data]byte received invalid socket id[%d]", socket);
105         return;
106     }
107     LOG("[cb][data]byte received   socket:%d, data-len:%d", socket, dataLen);
108     int ret = SendBytes(socket, data, dataLen);
109     LOG("[cb][data]byte received   send back:%d", ret);
110 }
111 
OnMessage(int32_t socket,const void * data,unsigned int dataLen)112 static void OnMessage(int32_t socket, const void* data, unsigned int dataLen)
113 {
114     if (socket < 0) {
115         LOG("[cb][data]mesg received   invalid socket id[%d]", socket);
116         return;
117     }
118     LOG("[cb][data]mesg received   socket:%d, data-len:%d", socket, dataLen);
119 }
120 
OnStream(int32_t socket,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)121 static void OnStream(int32_t socket, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param)
122 {
123     if (socket < 0) {
124         LOG("[cb][data]OnStream invalid socket id[%d]", socket);
125         return;
126     }
127     if (data == nullptr) {
128         LOG("[cb][data]OnStream socket id[%d], data is nullptr", socket);
129         return;
130     }
131     if (ext == nullptr) {
132         LOG("[cb][data]OnStream socket id[%d], ext is nullptr", socket);
133         return;
134     }
135     if (param == nullptr) {
136         LOG("[cb][data]OnStream socket id[%d], param is nullptr", socket);
137         return;
138     }
139     LOG("[cb][data]OnStream Success socket:%d,", socket);
140     LOG("[cb][data]OnStream Success buf:%s,", (data->buf != NULL ? data->buf : "null"));
141     LOG("[cb][data]OnStream Success buflen:%d", data->bufLen);
142     LOG("[cb][data]OnStream Success buf:%s,", (ext->buf != NULL ? ext->buf : "null"));
143 }
144 
UpdataRecvFilePath()145 static const char *UpdataRecvFilePath()
146 {
147     return "/data/";
148 }
149 
OnFile(int32_t socket,FileEvent * event)150 static void OnFile(int32_t socket, FileEvent *event)
151 {
152     if (socket < 0) {
153         LOG("[cb][data]OnFile invalid socket id[%d]", socket);
154         return;
155     }
156     if (event == nullptr) {
157         LOG("[cb][data]OnFile socket id[%d], event is nullptr", socket);
158         return;
159     }
160     if (event->type == FILE_EVENT_RECV_UPDATE_PATH) {
161         LOG("[cb][data]OnFile event type:%d,", event->type);
162         event->UpdateRecvPath = UpdataRecvFilePath;
163         return;
164     }
165     LOG("[cb][data]OnFile, event type:%d, fileCnt:%u",
166         event->type, event->fileCnt);
167     for (uint32_t i = 0; i < event->fileCnt; i++) {
168         LOG("[cb][data] %s", (event->files[i] == NULL ? "null" : event->files[i]));
169     }
170     if (event->type == FILE_EVENT_RECV_FINISH) {
171         LOG("[cb][data]OnFile recv finished");
172         return;
173     }
174     if (event->type == FILE_EVENT_RECV_PROCESS) {
175         LOG("[cb][data]OnFile recv process");
176         return;
177     }
178     if (event->type == FILE_EVENT_RECV_ERROR) {
179         LOG("[cb][data]OnFile recv error!!");
180         return;
181     }
182 }
183 
OnQos(int32_t socket,QoSEvent eventId,const QosTV * qos,uint32_t qosCunt)184 static void OnQos(int32_t socket, QoSEvent eventId, const QosTV *qos, uint32_t qosCunt)
185 {
186     LOG("[cb][data] OnQos {socket:%d, event:%d}", socket, eventId);
187 }
188 
189 /* net state callback */
OnNodeOnline(NodeBasicInfo * info)190 static void OnNodeOnline(NodeBasicInfo* info)
191 {
192     if (info == NULL) {
193         LOG("[cb]Online: info is null");
194     }
195     LOG("[cb]Online id:%s, name:%s ,type id:%u", info->networkId, info->deviceName, info->deviceTypeId);
196 }
197 
OnNodeOffline(NodeBasicInfo * info)198 static void OnNodeOffline(NodeBasicInfo* info)
199 {
200     if (info == NULL) {
201         LOG("[cb]Offline: info is null");
202         return;
203     }
204     LOG("[cb]Offline id:%s, name:%s ,type id:%u", info->networkId, info->deviceName, info->deviceTypeId);
205 }
206 
OnNodeBasicInfoChanged(NodeBasicInfoType type,NodeBasicInfo * info)207 static void OnNodeBasicInfoChanged(NodeBasicInfoType type, NodeBasicInfo* info)
208 {
209     if (info == NULL) {
210         LOG("[cb]InfoChanged: info is null, type[%d]", type);
211         return;
212     }
213     LOG("[cb]InfoChanged id: %s, name: %s", info->networkId, info->deviceName);
214 }
215 
onDefNodeStatusChanged(NodeStatusType type,NodeStatus * status)216 static void onDefNodeStatusChanged(NodeStatusType type, NodeStatus *status)
217 {
218     if (status == NULL) {
219         LOG("[cb]StatusChanged: info is null, type[%d]", type);
220         return;
221     }
222     LOG("[cb]StatusChanged id: %s,status: %d", status->basicInfo.networkId, status->authStatus);
223 }
224 
SetupCallback(void)225 static void SetupCallback(void)
226 {
227     if (g_nodeStateCallback == NULL) {
228         g_nodeStateCallback = (INodeStateCb*)calloc(1, sizeof(INodeStateCb));
229         g_nodeStateCallback->events = EVENT_NODE_STATE_MASK;
230         g_nodeStateCallback->onNodeOnline = OnNodeOnline;
231         g_nodeStateCallback->onNodeOffline = OnNodeOffline;
232         g_nodeStateCallback->onNodeBasicInfoChanged = OnNodeBasicInfoChanged;
233         g_nodeStateCallback->onNodeStatusChanged = onDefNodeStatusChanged;
234     }
235     if (g_sessionlist4SokectData == NULL) {
236         g_sessionlist4SokectData= (ISocketListener*)calloc(1, sizeof(ISocketListener));
237         g_sessionlist4SokectData->OnBind = OnBind;
238         g_sessionlist4SokectData->OnShutdown = OnShutdown;
239         g_sessionlist4SokectData->OnBytes = OnByte;
240         g_sessionlist4SokectData->OnMessage = OnMessage;
241         g_sessionlist4SokectData->OnStream = OnStream;
242         g_sessionlist4SokectData->OnFile = OnFile;
243         g_sessionlist4SokectData->OnQos = OnQos;
244         g_sessionlist4SokectData->OnNegotiate = OnNegotiate;
245     }
246 }
247 
TeardownCallback(void)248 static void TeardownCallback(void)
249 {
250     if (g_nodeStateCallback != NULL) {
251         free(g_nodeStateCallback);
252         g_nodeStateCallback = NULL;
253     }
254     if (g_sessionlist4SokectData != NULL) {
255         free(g_sessionlist4SokectData);
256         g_sessionlist4SokectData = NULL;
257     }
258 }
259 
main()260 int main()
261 {
262     SetUpTestCase();
263     int runtime = 0;
264     /*socket server*/
265     QosTV info[] = {
266         {.qos = QOS_TYPE_MIN_BW, .value = 2000}
267     };
268     int32_t socketByte = Socket(socketInfoByte);
269     LOG("Create socket [data] ret:%d", socketByte);
270     int32_t socketMessage = Socket(socketInfoMessage);
271     LOG("Create socket [data] ret:%d", socketMessage);
272     int32_t socketFile = Socket(socketInfoFile);
273     LOG("Create socket [data] ret:%d", socketFile);
274     int32_t socketStream = Socket(socketInfoStream);
275     LOG("Create socket [data] ret:%d", socketStream);
276     if (socketByte == SOFTBUS_OK && socketMessage
277         == SOFTBUS_OK && socketFile == SOFTBUS_OK && socketStream == SOFTBUS_OK) {
278         LOG("Create socket ok");
279     }
280     /*create Listener*/
281     int32_t byteListenRet = Listen(socketByte, info, sizeof(info)/sizeof(info[0]), g_sessionlist4SokectData);
282     LOG("Create Listen [data] ret:%d", byteListenRet);
283     int32_t messageListenRet = Listen(socketMessage, info, sizeof(info)/sizeof(info[0]), g_sessionlist4SokectData);
284     LOG("Create Listen [data] ret:%d", messageListenRet);
285     int32_t fileListenRet = Listen(socketFile, info, sizeof(info)/sizeof(info[0]), g_sessionlist4SokectData);
286     LOG("Create Listen [data] ret:%d", fileListenRet);
287     int32_t streamListenRet = Listen(socketStream, info, sizeof(info)/sizeof(info[0]), g_sessionlist4SokectData);
288     LOG("Create Listen [data] ret:%d", socketStream);
289     if (byteListenRet == SOFTBUS_OK && messageListenRet
290         == SOFTBUS_OK && fileListenRet == SOFTBUS_OK && streamListenRet == SOFTBUS_OK) {
291         LOG("Create socket ok");
292     }
293     while (true) {
294         sleep(ONE_SECOND);
295         runtime += 1;
296         if (runtime % ONE_MINUTE == 0) {
297             LOG("### test run:%d s", runtime);
298         }
299     }
300     TearDownTestCase();
301 }