• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }