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 #ifndef COMMUNICATIONNETSTACK_SOCKET_MODULE_H
17 #define COMMUNICATIONNETSTACK_SOCKET_MODULE_H
18 
19 #include "napi/native_api.h"
20 
21 namespace OHOS::NetStack::Socket {
22 class SocketModuleExports {
23 public:
24     class UDPSocket {
25     public:
26         static constexpr const char *FUNCTION_BIND = "bind";
27         static constexpr const char *FUNCTION_SEND = "send";
28         static constexpr const char *FUNCTION_CLOSE = "close";
29         static constexpr const char *FUNCTION_GET_STATE = "getState";
30         static constexpr const char *FUNCTION_GET_LOCAL_ADDRESS = "getLocalAddress";
31         static constexpr const char *FUNCTION_SET_EXTRA_OPTIONS = "setExtraOptions";
32         static constexpr const char *FUNCTION_GET_SOCKET_FD = "getSocketFd";
33         static constexpr const char *FUNCTION_ON = "on";
34         static constexpr const char *FUNCTION_OFF = "off";
35 
36         static napi_value Bind(napi_env env, napi_callback_info info);
37         static napi_value Send(napi_env env, napi_callback_info info);
38         static napi_value Close(napi_env env, napi_callback_info info);
39         static napi_value GetState(napi_env env, napi_callback_info info);
40         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
41         static napi_value SetExtraOptions(napi_env env, napi_callback_info info);
42         static napi_value GetSocketFd(napi_env env, napi_callback_info info);
43         static napi_value On(napi_env env, napi_callback_info info);
44         static napi_value Off(napi_env env, napi_callback_info info);
45     };
46 
47     class MulticastSocket : public UDPSocket {
48     public:
49         static constexpr char FUNCTION_ADD_MEMBER_SHIP[] = "addMembership";
50         static constexpr char FUNCTION_DROP_MEMBER_SHIP[] = "dropMembership";
51         static constexpr char FUNCTION_SET_MULTICAST_TTL[] = "setMulticastTTL";
52         static constexpr char FUNCTION_GET_MULTICAST_TTL[] = "getMulticastTTL";
53         static constexpr char FUNCTION_SET_LOOPBACK_MODE[] = "setLoopbackMode";
54         static constexpr char FUNCTION_GET_LOOPBACK_MODE[] = "getLoopbackMode";
55 
56         static napi_value AddMembership(napi_env env, napi_callback_info info);
57         static napi_value DropMembership(napi_env env, napi_callback_info info);
58         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
59         static napi_value SetMulticastTTL(napi_env env, napi_callback_info info);
60         static napi_value GetMulticastTTL(napi_env env, napi_callback_info info);
61         static napi_value SetLoopbackMode(napi_env env, napi_callback_info info);
62         static napi_value GetLoopbackMode(napi_env env, napi_callback_info info);
63     };
64 
65     class LocalSocket {
66     public:
67         static constexpr char FUNCTION_BIND[] = "bind";
68         static constexpr char FUNCTION_CONNECT[] = "connect";
69         static constexpr char FUNCTION_SEND[] = "send";
70         static constexpr char FUNCTION_CLOSE[] = "close";
71         static constexpr char FUNCTION_GET_STATE[] = "getState";
72         static constexpr char FUNCTION_GET_LOCAL_ADDRESS[] = "getLocalAddress";
73         static constexpr char FUNCTION_GET_SOCKET_FD[] = "getSocketFd";
74         static constexpr char FUNCTION_SET_EXTRA_OPTIONS[] = "setExtraOptions";
75         static constexpr char FUNCTION_GET_EXTRA_OPTIONS[] = "getExtraOptions";
76         static constexpr char FUNCTION_ON[] = "on";
77         static constexpr char FUNCTION_OFF[] = "off";
78 
79         static napi_value Bind(napi_env env, napi_callback_info info);
80         static napi_value Connect(napi_env env, napi_callback_info info);
81         static napi_value Send(napi_env env, napi_callback_info info);
82         static napi_value Close(napi_env env, napi_callback_info info);
83         static napi_value GetState(napi_env env, napi_callback_info info);
84         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
85         static napi_value GetSocketFd(napi_env env, napi_callback_info info);
86         static napi_value SetExtraOptions(napi_env env, napi_callback_info info);
87         static napi_value GetExtraOptions(napi_env env, napi_callback_info info);
88         static napi_value On(napi_env env, napi_callback_info info);
89         static napi_value Off(napi_env env, napi_callback_info info);
90     };
91 
92     class LocalSocketServer {
93     public:
94         static constexpr char FUNCTION_LISTEN[] = "listen";
95         static constexpr char FUNCTION_CLOSE[] = "close";
96         static constexpr char FUNCTION_GET_STATE[] = "getState";
97         static constexpr char FUNCTION_GET_LOCAL_ADDRESS[] = "getLocalAddress";
98         static constexpr char FUNCTION_SET_EXTRA_OPTIONS[] = "setExtraOptions";
99         static constexpr char FUNCTION_GET_EXTRA_OPTIONS[] = "getExtraOptions";
100         static constexpr char FUNCTION_ON[] = "on";
101         static constexpr char FUNCTION_OFF[] = "off";
102 
103         static napi_value Listen(napi_env env, napi_callback_info info);
104         static napi_value Close(napi_env env, napi_callback_info info);
105         static napi_value GetState(napi_env env, napi_callback_info info);
106         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
107         static napi_value SetExtraOptions(napi_env env, napi_callback_info info);
108         static napi_value GetExtraOptions(napi_env env, napi_callback_info info);
109         static napi_value On(napi_env env, napi_callback_info info);
110         static napi_value Off(napi_env env, napi_callback_info info);
111     };
112 
113     class LocalSocketConnection {
114     public:
115         static constexpr char PROPERTY_CLIENT_ID[] = "clientId";
116         static constexpr char FUNCTION_SEND[] = "send";
117         static constexpr char FUNCTION_CLOSE[] = "close";
118         static constexpr char FUNCTION_ON[] = "on";
119         static constexpr char FUNCTION_OFF[] = "off";
120 
121         static napi_value Send(napi_env env, napi_callback_info info);
122         static napi_value Close(napi_env env, napi_callback_info info);
123         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
124         static napi_value On(napi_env env, napi_callback_info info);
125         static napi_value Off(napi_env env, napi_callback_info info);
126     };
127 
128     class TCPSocket {
129     public:
130         static constexpr const char *FUNCTION_BIND = "bind";
131         static constexpr const char *FUNCTION_CONNECT = "connect";
132         static constexpr const char *FUNCTION_SEND = "send";
133         static constexpr const char *FUNCTION_CLOSE = "close";
134         static constexpr const char *FUNCTION_GET_REMOTE_ADDRESS = "getRemoteAddress";
135         static constexpr const char *FUNCTION_GET_LOCAL_ADDRESS = "getLocalAddress";
136         static constexpr const char *FUNCTION_GET_STATE = "getState";
137         static constexpr const char *FUNCTION_SET_EXTRA_OPTIONS = "setExtraOptions";
138         static constexpr const char *FUNCTION_GET_SOCKET_FD = "getSocketFd";
139         static constexpr const char *FUNCTION_ON = "on";
140         static constexpr const char *FUNCTION_OFF = "off";
141 
142         static napi_value Bind(napi_env env, napi_callback_info info);
143         static napi_value Connect(napi_env env, napi_callback_info info);
144         static napi_value Send(napi_env env, napi_callback_info info);
145         static napi_value Close(napi_env env, napi_callback_info info);
146         static napi_value GetRemoteAddress(napi_env env, napi_callback_info info);
147         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
148         static napi_value GetState(napi_env env, napi_callback_info info);
149         static napi_value SetExtraOptions(napi_env env, napi_callback_info info);
150         static napi_value GetSocketFd(napi_env env, napi_callback_info info);
151         static napi_value On(napi_env env, napi_callback_info info);
152         static napi_value Off(napi_env env, napi_callback_info info);
153     };
154 
155     class TCPConnection {
156     public:
157         static constexpr const char *PROPERTY_CLIENT_ID = "clientId";
158         static constexpr const char *FUNCTION_SEND = "send";
159         static constexpr const char *FUNCTION_CLOSE = "close";
160         static constexpr const char *FUNCTION_GET_REMOTE_ADDRESS = "getRemoteAddress";
161         static constexpr const char *FUNCTION_GET_LOCAL_ADDRESS = "getLocalAddress";
162         static constexpr const char *FUNCTION_ON = "on";
163         static constexpr const char *FUNCTION_OFF = "off";
164 
165         static napi_value Send(napi_env env, napi_callback_info info);
166         static napi_value Close(napi_env env, napi_callback_info info);
167         static napi_value GetRemoteAddress(napi_env env, napi_callback_info info);
168         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
169         static napi_value On(napi_env env, napi_callback_info info);
170         static napi_value Off(napi_env env, napi_callback_info info);
171     };
172 
173     class TCPServerSocket {
174     public:
175         static constexpr const char *FUNCTION_LISTEN = "listen";
176         static constexpr const char *FUNCTION_GET_STATE = "getState";
177         static constexpr const char *FUNCTION_GET_LOCAL_ADDRESS = "getLocalAddress";
178         static constexpr const char *FUNCTION_SET_EXTRA_OPTIONS = "setExtraOptions";
179         static constexpr const char *FUNCTION_ON = "on";
180         static constexpr const char *FUNCTION_OFF = "off";
181 
182         static napi_value Listen(napi_env env, napi_callback_info info);
183         static napi_value GetState(napi_env env, napi_callback_info info);
184         static napi_value GetLocalAddress(napi_env env, napi_callback_info info);
185         static napi_value SetExtraOptions(napi_env env, napi_callback_info info);
186         static napi_value On(napi_env env, napi_callback_info info);
187         static napi_value Off(napi_env env, napi_callback_info info);
188     };
189 
190     static constexpr const char *FUNCTION_CONSTRUCTOR_UDP_SOCKET_INSTANCE = "constructUDPSocketInstance";
191     static constexpr const char *FUNCTION_CONSTRUCTOR_MULTICAST_SOCKET_INSTANCE = "constructMulticastSocketInstance";
192     static constexpr const char *FUNCTION_CONSTRUCTOR_TCP_SOCKET_INSTANCE = "constructTCPSocketInstance";
193     static constexpr const char *FUNCTION_CONSTRUCTOR_TCP_SOCKET_SERVER_INSTANCE = "constructTCPSocketServerInstance";
194     static constexpr const char *FUNCTION_CONSTRUCTOR_LOCAL_SOCKET_INSTANCE = "constructLocalSocketInstance";
195     static constexpr const char *FUNCTION_CONSTRUCTOR_LOCAL_SOCKET_SERVER_INSTANCE =
196         "constructLocalSocketServerInstance";
197     static constexpr const char *INTERFACE_UDP_SOCKET = "UDPSocket";
198     static constexpr const char *INTERFACE_MULTICAST_SOCKET = "MulticastSocket";
199     static constexpr const char *INTERFACE_TCP_SOCKET = "TCPSocket";
200     static constexpr const char *INTERFACE_TCP_SOCKET_SERVER = "TCPSocketServer";
201     static constexpr const char *INTERFACE_LOCAL_SOCKET = "LocalSocket";
202     static constexpr const char *INTERFACE_LOCAL_SOCKET_SERVER = "LocalSocketServer";
203 
204     static napi_value InitSocketModule(napi_env env, napi_value exports);
205 
206 private:
207     static napi_value ConstructUDPSocketInstance(napi_env env, napi_callback_info info);
208 
209     static napi_value ConstructMulticastSocketInstance(napi_env env, napi_callback_info info);
210 
211     static napi_value ConstructTCPSocketInstance(napi_env env, napi_callback_info info);
212 
213     static napi_value ConstructTCPSocketServerInstance(napi_env env, napi_callback_info info);
214 
215     static napi_value ConstructLocalSocketInstance(napi_env env, napi_callback_info info);
216 
217     static napi_value ConstructLocalSocketServerInstance(napi_env env, napi_callback_info info);
218 
219     static void DefineUDPSocketClass(napi_env env, napi_value exports);
220 
221     static void DefineMulticastSocketClass(napi_env env, napi_value exports);
222 
223     static void DefineTCPSocketClass(napi_env env, napi_value exports);
224 
225     static void DefineTCPServerSocketClass(napi_env env, napi_value exports);
226 
227     static void DefineLocalSocketClass(napi_env env, napi_value exports);
228 
229     static void DefineLocalSocketServerClass(napi_env env, napi_value exports);
230 
231     static void InitSocketProperties(napi_env env, napi_value exports);
232 };
233 } // namespace OHOS::NetStack::Socket
234 #endif // COMMUNICATIONNETSTACK_SOCKET_MODULE_H
235