1 /*
2 * Copyright (c) 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 #include "hilog/log.h"
16 #include "napi/native_api.h"
17 #include "net_websocket.h"
18 #include <cstring>
19 #include <csignal>
20 #include <cstring>
21
22 #define WEBSOCKET_LOG_TAG "websocket XTS"
23 #define WEBSOCKET_LOG_DOMAIN 0xD0015B0
24
25 static const int CLOSE_RESULT_FROM_CLIENT_CODE = 1000;
26
27 static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, WEBSOCKET_LOG_DOMAIN, WEBSOCKET_LOG_TAG};
28
OnOpen(struct WebSocket * client,WebSocket_OpenResult openResult)29 static void OnOpen(struct WebSocket *client, WebSocket_OpenResult openResult)
30 {
31 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OnOpen");
32 }
33
OnMessage(struct WebSocket * client,char * data,uint32_t length)34 static void OnMessage(struct WebSocket *client, char *data, uint32_t length)
35 {
36 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OnMessage ,data=:%{public}s", data);
37 }
38
OnError(struct WebSocket * client,WebSocket_ErrorResult error)39 static void OnError(struct WebSocket *client, WebSocket_ErrorResult error)
40 {
41 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OnError");
42 }
43
OnClose(struct WebSocket * client,WebSocket_CloseResult closeResult)44 static void OnClose(struct WebSocket *client, WebSocket_CloseResult closeResult)
45 {
46 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OnClose");
47 }
48
OHWebsocketClientConstruct(napi_env env,napi_callback_info)49 static napi_value OHWebsocketClientConstruct(napi_env env, napi_callback_info)
50 {
51 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OHWebsocketClientConstruct start");
52 int ret;
53 struct WebSocket *client = new WebSocket();
54 const char *url = "www.baidu.com";
55 client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
56 ret = OH_WebSocketClient_Connect(client, url, client->requestOptions);
57 napi_value result;
58 napi_create_int32(env, ret, &result);
59 return result;
60 }
61
OHWebSocketClientAddHeader(napi_env env,napi_callback_info)62 static napi_value OHWebSocketClientAddHeader(napi_env env, napi_callback_info)
63 {
64 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OHWebSocketClientAddHeader start");
65 napi_value result = nullptr;
66 OHOS::HiviewDFX::HiLog::Debug(LABEL, "test case begin:TestConnet");
67 struct WebSocket *client = new WebSocket();
68 struct WebSocket_Header header1;
69 header1.fieldName = "Content-Type";
70 header1.fieldValue = "application/json";
71 header1.next = nullptr;
72 client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
73 int ret = OH_WebSocketClient_AddHeader(client, header1);
74 napi_create_int32(env, ret, &result);
75 return result;
76 }
77
OHWebSocketClientConnect(napi_env env,napi_callback_info info)78 static napi_value OHWebSocketClientConnect(napi_env env, napi_callback_info info)
79 {
80 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OHWebSocketClientConnect start");
81 struct WebSocket *client = new WebSocket();
82 const char *url1 = "www.baidu.com";
83 client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
84 int ret = OH_WebSocketClient_Connect(client, url1, client->requestOptions);
85 napi_value result;
86 napi_create_int32(env, ret, &result);
87 return result;
88 }
89
OHWebSocketClientSend(napi_env env,napi_callback_info info)90 static napi_value OHWebSocketClientSend(napi_env env, napi_callback_info info)
91 {
92 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OHWebSocketClientSend start");
93 napi_value result = nullptr;
94 struct WebSocket *client = new WebSocket();
95 client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
96 const char *data = "Hello, world!";
97 int sendLength = std::strlen(data);
98 int ret = OH_WebSocketClient_Send(client, const_cast<char *>(data), sendLength);
99 napi_create_int32(env, ret, &result);
100 return result;
101 }
102
OHWebSocketClientClose(napi_env env,napi_callback_info info)103 static napi_value OHWebSocketClientClose(napi_env env, napi_callback_info info)
104 {
105 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OHWebSocketClientClose start");
106 napi_value result = nullptr;
107 struct WebSocket *client = new WebSocket();
108 struct WebSocket_CloseOption CloseOption;
109 CloseOption.code = CLOSE_RESULT_FROM_CLIENT_CODE;
110 CloseOption.reason = " ";
111 int ret = OH_WebSocketClient_Close(client, CloseOption);
112 napi_create_int32(env, ret, &result);
113 return result;
114 }
115
OHWebsocketClientDestroy(napi_env env,napi_callback_info info)116 static napi_value OHWebsocketClientDestroy(napi_env env, napi_callback_info info)
117 {
118 OHOS::HiviewDFX::HiLog::Debug(LABEL, "OHWebsocketClientDestroy start");
119 napi_value result = nullptr;
120 struct WebSocket *client = new WebSocket();
121 struct WebSocket_CloseOption CloseOption;
122 CloseOption.code = CLOSE_RESULT_FROM_CLIENT_CODE;
123 CloseOption.reason = " ";
124 int ret = OH_WebSocketClient_Destroy(client);
125 napi_create_int32(env, ret, &result);
126 return result;
127 }
128
129 EXTERN_C_START
Init(napi_env env,napi_value exports)130 static napi_value Init(napi_env env, napi_value exports)
131 {
132 napi_property_descriptor desc[] = {
133 {"oHWebsocketClientConstruct", nullptr, OHWebsocketClientConstruct, nullptr, nullptr, nullptr, napi_default,
134 nullptr},
135 {"oHWebSocketClientAddHeader", nullptr, OHWebSocketClientAddHeader, nullptr, nullptr, nullptr, napi_default,
136 nullptr},
137 {"oHWebSocketClientConnect", nullptr, OHWebSocketClientConnect, nullptr, nullptr, nullptr, napi_default,
138 nullptr},
139 {"oHWebSocketClientSend", nullptr, OHWebSocketClientSend, nullptr, nullptr, nullptr, napi_default, nullptr},
140 {"oHWebSocketClientClose", nullptr, OHWebSocketClientClose, nullptr, nullptr, nullptr, napi_default, nullptr},
141 {"oHWebsocketClientDestroy", nullptr, OHWebsocketClientDestroy, nullptr, nullptr, nullptr, napi_default,
142 nullptr},
143 };
144 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
145 return exports;
146 }
147 EXTERN_C_END
148
149 static napi_module demoModule = {
150 .nm_version = 1,
151 .nm_flags = 0,
152 .nm_filename = nullptr,
153 .nm_register_func = Init,
154 .nm_modname = "entry",
155 .nm_priv = ((void *)0),
156 .reserved = {0},
157 };
158
RegisterEntryModule(void)159 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
160 {
161 napi_module_register(&demoModule);
162 }