react-native-nitro-net 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -4
- package/android/libs/arm64-v8a/librust_c_net.so +0 -0
- package/android/libs/armeabi-v7a/librust_c_net.so +0 -0
- package/android/libs/x86/librust_c_net.so +0 -0
- package/android/libs/x86_64/librust_c_net.so +0 -0
- package/cpp/HybridNetDriver.hpp +68 -0
- package/cpp/HybridNetServerDriver.hpp +9 -0
- package/cpp/HybridNetSocketDriver.hpp +149 -0
- package/cpp/NetBindings.hpp +52 -1
- package/ios/Frameworks/RustCNet.xcframework/Info.plist +5 -5
- package/ios/Frameworks/RustCNet.xcframework/ios-arm64/RustCNet.framework/RustCNet +0 -0
- package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/RustCNet +0 -0
- package/lib/Net.nitro.d.ts +27 -1
- package/lib/Net.nitro.js +3 -1
- package/lib/index.d.ts +4 -3
- package/lib/index.js +47 -6
- package/lib/tls.d.ts +124 -0
- package/lib/tls.js +451 -0
- package/nitrogen/generated/android/c++/JHybridNetDriverSpec.cpp +38 -1
- package/nitrogen/generated/android/c++/JHybridNetDriverSpec.hpp +8 -0
- package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.cpp +4 -0
- package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.hpp +1 -0
- package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.cpp +70 -0
- package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.hpp +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetDriverSpec.kt +33 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetServerDriverSpec.kt +4 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetSocketDriverSpec.kt +60 -0
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.hpp +95 -44
- package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.hpp +58 -0
- package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.hpp +6 -0
- package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.hpp +109 -0
- package/nitrogen/generated/ios/swift/HybridNetDriverSpec.swift +8 -0
- package/nitrogen/generated/ios/swift/HybridNetDriverSpec_cxx.swift +118 -0
- package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec_cxx.swift +25 -0
- package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec.swift +15 -0
- package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec_cxx.swift +278 -0
- package/nitrogen/generated/shared/c++/HybridNetDriverSpec.cpp +8 -0
- package/nitrogen/generated/shared/c++/HybridNetDriverSpec.hpp +9 -0
- package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.hpp +1 -0
- package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.cpp +15 -0
- package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.hpp +16 -0
- package/package.json +5 -3
- package/react-native-nitro-net.podspec +1 -3
- package/src/Net.nitro.ts +27 -1
- package/src/index.ts +18 -9
- package/src/tls.ts +532 -0
|
@@ -19,6 +19,7 @@ namespace margelo::nitro::net {
|
|
|
19
19
|
prototype.registerHybridGetter("maxConnections", &HybridNetServerDriverSpec::getMaxConnections);
|
|
20
20
|
prototype.registerHybridSetter("maxConnections", &HybridNetServerDriverSpec::setMaxConnections);
|
|
21
21
|
prototype.registerHybridMethod("listen", &HybridNetServerDriverSpec::listen);
|
|
22
|
+
prototype.registerHybridMethod("listenTLS", &HybridNetServerDriverSpec::listenTLS);
|
|
22
23
|
prototype.registerHybridMethod("listenUnix", &HybridNetServerDriverSpec::listenUnix);
|
|
23
24
|
prototype.registerHybridMethod("listenHandle", &HybridNetServerDriverSpec::listenHandle);
|
|
24
25
|
prototype.registerHybridMethod("getLocalAddress", &HybridNetServerDriverSpec::getLocalAddress);
|
|
@@ -55,6 +55,7 @@ namespace margelo::nitro::net {
|
|
|
55
55
|
public:
|
|
56
56
|
// Methods
|
|
57
57
|
virtual void listen(double port, std::optional<double> backlog, std::optional<bool> ipv6Only, std::optional<bool> reusePort) = 0;
|
|
58
|
+
virtual void listenTLS(double port, double secureContextId, std::optional<double> backlog, std::optional<bool> ipv6Only, std::optional<bool> reusePort) = 0;
|
|
58
59
|
virtual void listenUnix(const std::string& path, std::optional<double> backlog) = 0;
|
|
59
60
|
virtual void listenHandle(double fd, std::optional<double> backlog) = 0;
|
|
60
61
|
virtual std::string getLocalAddress() = 0;
|
|
@@ -18,7 +18,21 @@ namespace margelo::nitro::net {
|
|
|
18
18
|
prototype.registerHybridGetter("onEvent", &HybridNetSocketDriverSpec::getOnEvent);
|
|
19
19
|
prototype.registerHybridSetter("onEvent", &HybridNetSocketDriverSpec::setOnEvent);
|
|
20
20
|
prototype.registerHybridMethod("connect", &HybridNetSocketDriverSpec::connect);
|
|
21
|
+
prototype.registerHybridMethod("connectTLS", &HybridNetSocketDriverSpec::connectTLS);
|
|
22
|
+
prototype.registerHybridMethod("connectTLSWithContext", &HybridNetSocketDriverSpec::connectTLSWithContext);
|
|
23
|
+
prototype.registerHybridMethod("getAuthorizationError", &HybridNetSocketDriverSpec::getAuthorizationError);
|
|
24
|
+
prototype.registerHybridMethod("getProtocol", &HybridNetSocketDriverSpec::getProtocol);
|
|
25
|
+
prototype.registerHybridMethod("getCipher", &HybridNetSocketDriverSpec::getCipher);
|
|
26
|
+
prototype.registerHybridMethod("getALPN", &HybridNetSocketDriverSpec::getALPN);
|
|
27
|
+
prototype.registerHybridMethod("getPeerCertificateJSON", &HybridNetSocketDriverSpec::getPeerCertificateJSON);
|
|
28
|
+
prototype.registerHybridMethod("getEphemeralKeyInfo", &HybridNetSocketDriverSpec::getEphemeralKeyInfo);
|
|
29
|
+
prototype.registerHybridMethod("getSharedSigalgs", &HybridNetSocketDriverSpec::getSharedSigalgs);
|
|
30
|
+
prototype.registerHybridMethod("isSessionReused", &HybridNetSocketDriverSpec::isSessionReused);
|
|
31
|
+
prototype.registerHybridMethod("getSession", &HybridNetSocketDriverSpec::getSession);
|
|
32
|
+
prototype.registerHybridMethod("setSession", &HybridNetSocketDriverSpec::setSession);
|
|
21
33
|
prototype.registerHybridMethod("connectUnix", &HybridNetSocketDriverSpec::connectUnix);
|
|
34
|
+
prototype.registerHybridMethod("connectUnixTLS", &HybridNetSocketDriverSpec::connectUnixTLS);
|
|
35
|
+
prototype.registerHybridMethod("connectUnixTLSWithContext", &HybridNetSocketDriverSpec::connectUnixTLSWithContext);
|
|
22
36
|
prototype.registerHybridMethod("write", &HybridNetSocketDriverSpec::write);
|
|
23
37
|
prototype.registerHybridMethod("pause", &HybridNetSocketDriverSpec::pause);
|
|
24
38
|
prototype.registerHybridMethod("resume", &HybridNetSocketDriverSpec::resume);
|
|
@@ -26,6 +40,7 @@ namespace margelo::nitro::net {
|
|
|
26
40
|
prototype.registerHybridMethod("setTimeout", &HybridNetSocketDriverSpec::setTimeout);
|
|
27
41
|
prototype.registerHybridMethod("destroy", &HybridNetSocketDriverSpec::destroy);
|
|
28
42
|
prototype.registerHybridMethod("resetAndDestroy", &HybridNetSocketDriverSpec::resetAndDestroy);
|
|
43
|
+
prototype.registerHybridMethod("enableKeylog", &HybridNetSocketDriverSpec::enableKeylog);
|
|
29
44
|
prototype.registerHybridMethod("setNoDelay", &HybridNetSocketDriverSpec::setNoDelay);
|
|
30
45
|
prototype.registerHybridMethod("setKeepAlive", &HybridNetSocketDriverSpec::setKeepAlive);
|
|
31
46
|
prototype.registerHybridMethod("getLocalAddress", &HybridNetSocketDriverSpec::getLocalAddress);
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include <NitroModules/ArrayBuffer.hpp>
|
|
19
19
|
#include <functional>
|
|
20
20
|
#include <string>
|
|
21
|
+
#include <optional>
|
|
21
22
|
|
|
22
23
|
namespace margelo::nitro::net {
|
|
23
24
|
|
|
@@ -53,7 +54,21 @@ namespace margelo::nitro::net {
|
|
|
53
54
|
public:
|
|
54
55
|
// Methods
|
|
55
56
|
virtual void connect(const std::string& host, double port) = 0;
|
|
57
|
+
virtual void connectTLS(const std::string& host, double port, const std::optional<std::string>& serverName, std::optional<bool> rejectUnauthorized) = 0;
|
|
58
|
+
virtual void connectTLSWithContext(const std::string& host, double port, const std::optional<std::string>& serverName, std::optional<bool> rejectUnauthorized, std::optional<double> secureContextId) = 0;
|
|
59
|
+
virtual std::optional<std::string> getAuthorizationError() = 0;
|
|
60
|
+
virtual std::optional<std::string> getProtocol() = 0;
|
|
61
|
+
virtual std::optional<std::string> getCipher() = 0;
|
|
62
|
+
virtual std::optional<std::string> getALPN() = 0;
|
|
63
|
+
virtual std::optional<std::string> getPeerCertificateJSON() = 0;
|
|
64
|
+
virtual std::optional<std::string> getEphemeralKeyInfo() = 0;
|
|
65
|
+
virtual std::optional<std::string> getSharedSigalgs() = 0;
|
|
66
|
+
virtual bool isSessionReused() = 0;
|
|
67
|
+
virtual std::optional<std::shared_ptr<ArrayBuffer>> getSession() = 0;
|
|
68
|
+
virtual void setSession(const std::shared_ptr<ArrayBuffer>& session) = 0;
|
|
56
69
|
virtual void connectUnix(const std::string& path) = 0;
|
|
70
|
+
virtual void connectUnixTLS(const std::string& path, const std::optional<std::string>& serverName, std::optional<bool> rejectUnauthorized) = 0;
|
|
71
|
+
virtual void connectUnixTLSWithContext(const std::string& path, const std::optional<std::string>& serverName, std::optional<bool> rejectUnauthorized, std::optional<double> secureContextId) = 0;
|
|
57
72
|
virtual void write(const std::shared_ptr<ArrayBuffer>& data) = 0;
|
|
58
73
|
virtual void pause() = 0;
|
|
59
74
|
virtual void resume() = 0;
|
|
@@ -61,6 +76,7 @@ namespace margelo::nitro::net {
|
|
|
61
76
|
virtual void setTimeout(double timeout) = 0;
|
|
62
77
|
virtual void destroy() = 0;
|
|
63
78
|
virtual void resetAndDestroy() = 0;
|
|
79
|
+
virtual void enableKeylog() = 0;
|
|
64
80
|
virtual void setNoDelay(bool enable) = 0;
|
|
65
81
|
virtual void setKeepAlive(bool enable, double delay) = 0;
|
|
66
82
|
virtual std::string getLocalAddress() = 0;
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-net",
|
|
3
|
-
"version": "0.1.5",
|
|
4
3
|
"description": "Ultra-high-performance networking to React Native by combining a memory-safe Rust core with the zero-overhead Nitro Modules JSI bridge. Provides Node.js-compatible net API.",
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"module": "./lib/index.js",
|
|
7
7
|
"types": "./lib/index.d.ts",
|
|
8
|
+
"react-native": "src/index.ts",
|
|
8
9
|
"keywords": [
|
|
9
10
|
"react-native",
|
|
10
11
|
"ios",
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"url": "https://github.com/iwater/react-native-nitro-net/issues"
|
|
25
26
|
},
|
|
26
27
|
"scripts": {
|
|
28
|
+
"one": "yarn copy-clib && yarn build && yarn pack",
|
|
27
29
|
"build": "npx nitrogen@0.32.0 && tsc",
|
|
28
30
|
"prepare": "npm run build",
|
|
29
31
|
"copy-clib": "rm -rf ios/Frameworks/RustCNet.xcframework && cp -R ../rust_c_net/target/xcframework/RustCNet.xcframework ios/Frameworks/ && mkdir -p android/libs/arm64-v8a android/libs/armeabi-v7a android/libs/x86 android/libs/x86_64 && cp ../rust_c_net/target/aarch64-linux-android/release/librust_c_net.so android/libs/arm64-v8a/ && cp ../rust_c_net/target/armv7-linux-androideabi/release/librust_c_net.so android/libs/armeabi-v7a/ && cp ../rust_c_net/target/i686-linux-android/release/librust_c_net.so android/libs/x86/ && cp ../rust_c_net/target/x86_64-linux-android/release/librust_c_net.so android/libs/x86_64/ && cp ../rust_c_net/include/NetBindings.hpp cpp/",
|
|
@@ -32,7 +34,7 @@
|
|
|
32
34
|
},
|
|
33
35
|
"dependencies": {
|
|
34
36
|
"eventemitter3": "^5.0.1",
|
|
35
|
-
"react-native-nitro-buffer": "^0.0.
|
|
37
|
+
"react-native-nitro-buffer": "^0.0.13",
|
|
36
38
|
"readable-stream": "^4.7.0"
|
|
37
39
|
},
|
|
38
40
|
"devDependencies": {
|
|
@@ -56,4 +58,4 @@
|
|
|
56
58
|
"nitrogen/",
|
|
57
59
|
"*.podspec"
|
|
58
60
|
]
|
|
59
|
-
}
|
|
61
|
+
}
|
|
@@ -34,9 +34,7 @@ Pod::Spec.new do |s|
|
|
|
34
34
|
"\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/shared\"",
|
|
35
35
|
"\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/ios/c++\"",
|
|
36
36
|
"\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/ios\"",
|
|
37
|
-
"\"$(PODS_TARGET_SRCROOT)/cpp\""
|
|
38
|
-
"\"$(PODS_TARGET_SRCROOT)/ios/Frameworks/RustCNet.xcframework/ios-arm64/RustCNet.framework/Headers\"",
|
|
39
|
-
"\"$(PODS_TARGET_SRCROOT)/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/Headers\""
|
|
37
|
+
"\"$(PODS_TARGET_SRCROOT)/cpp\""
|
|
40
38
|
],
|
|
41
39
|
"OTHER_SWIFT_FLAGS" => "-cxx-interoperability-mode=default"
|
|
42
40
|
}
|
package/src/Net.nitro.ts
CHANGED
|
@@ -19,13 +19,29 @@ export enum NetSocketEvent {
|
|
|
19
19
|
DRAIN = 5,
|
|
20
20
|
TIMEOUT = 7,
|
|
21
21
|
LOOKUP = 8,
|
|
22
|
-
|
|
22
|
+
SESSION = 9,
|
|
23
|
+
KEYLOG = 10,
|
|
24
|
+
OCSP = 11
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
export interface NetSocketDriver extends HybridObject<{ ios: 'swift', android: 'kotlin' }> {
|
|
26
28
|
readonly id: number
|
|
27
29
|
connect(host: string, port: number): void
|
|
30
|
+
connectTLS(host: string, port: number, serverName?: string, rejectUnauthorized?: boolean): void
|
|
31
|
+
connectTLSWithContext(host: string, port: number, serverName?: string, rejectUnauthorized?: boolean, secureContextId?: number): void
|
|
32
|
+
getAuthorizationError(): string | undefined
|
|
33
|
+
getProtocol(): string | undefined
|
|
34
|
+
getCipher(): string | undefined
|
|
35
|
+
getALPN(): string | undefined
|
|
36
|
+
getPeerCertificateJSON(): string | undefined
|
|
37
|
+
getEphemeralKeyInfo(): string | undefined
|
|
38
|
+
getSharedSigalgs(): string | undefined
|
|
39
|
+
isSessionReused(): boolean
|
|
40
|
+
getSession(): ArrayBuffer | undefined
|
|
41
|
+
setSession(session: ArrayBuffer): void
|
|
28
42
|
connectUnix(path: string): void
|
|
43
|
+
connectUnixTLS(path: string, serverName?: string, rejectUnauthorized?: boolean): void
|
|
44
|
+
connectUnixTLSWithContext(path: string, serverName?: string, rejectUnauthorized?: boolean, secureContextId?: number): void
|
|
29
45
|
write(data: ArrayBuffer): void
|
|
30
46
|
pause(): void
|
|
31
47
|
resume(): void
|
|
@@ -33,6 +49,7 @@ export interface NetSocketDriver extends HybridObject<{ ios: 'swift', android: '
|
|
|
33
49
|
setTimeout(timeout: number): void
|
|
34
50
|
destroy(): void
|
|
35
51
|
resetAndDestroy(): void
|
|
52
|
+
enableKeylog(): void
|
|
36
53
|
setNoDelay(enable: boolean): void
|
|
37
54
|
setKeepAlive(enable: boolean, delay: number): void
|
|
38
55
|
getLocalAddress(): string
|
|
@@ -50,6 +67,7 @@ export enum NetServerEvent {
|
|
|
50
67
|
export interface NetServerDriver extends HybridObject<{ ios: 'swift', android: 'kotlin' }> {
|
|
51
68
|
onEvent: (event: number, data: ArrayBuffer) => void
|
|
52
69
|
listen(port: number, backlog?: number, ipv6Only?: boolean, reusePort?: boolean): void
|
|
70
|
+
listenTLS(port: number, secureContextId: number, backlog?: number, ipv6Only?: boolean, reusePort?: boolean): void
|
|
53
71
|
listenUnix(path: string, backlog?: number): void
|
|
54
72
|
/**
|
|
55
73
|
* Listen on an existing file descriptor (handle)
|
|
@@ -76,6 +94,14 @@ export interface NetConfig {
|
|
|
76
94
|
export interface NetDriver extends HybridObject<{ ios: 'swift', android: 'kotlin' }> {
|
|
77
95
|
createSocket(id?: string): NetSocketDriver
|
|
78
96
|
createServer(): NetServerDriver
|
|
97
|
+
createSecureContext(cert: string, key: string, passphrase?: string): number
|
|
98
|
+
createEmptySecureContext(): number
|
|
99
|
+
addCACertToSecureContext(scId: number, ca: string): void
|
|
100
|
+
addContextToSecureContext(scId: number, hostname: string, cert: string, key: string, passphrase?: string): void
|
|
101
|
+
setPFXToSecureContext(scId: number, pfx: ArrayBuffer, passphrase?: string): void
|
|
102
|
+
setOCSPResponseToSecureContext(scId: number, ocsp: ArrayBuffer): void
|
|
103
|
+
getTicketKeys(scId: number): ArrayBuffer | undefined
|
|
104
|
+
setTicketKeys(scId: number, keys: ArrayBuffer): void
|
|
79
105
|
/**
|
|
80
106
|
* Initialize the network module with custom configuration
|
|
81
107
|
* Must be called before any other network operations
|
package/src/index.ts
CHANGED
|
@@ -165,10 +165,10 @@ export interface SocketOptions extends DuplexOptions {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
export class Socket extends Duplex {
|
|
168
|
-
|
|
168
|
+
protected _driver: NetSocketDriver | undefined;
|
|
169
169
|
public connecting: boolean = false; // Changed from private _connecting
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
protected _connected: boolean = false;
|
|
171
|
+
protected _hadError: boolean = false; // Added
|
|
172
172
|
public remoteAddress?: string;
|
|
173
173
|
public remotePort?: number;
|
|
174
174
|
public remoteFamily?: string;
|
|
@@ -245,13 +245,14 @@ export class Socket extends Duplex {
|
|
|
245
245
|
if (!this._driver) return;
|
|
246
246
|
const id = (this._driver as any).id ?? (this._driver as any)._id;
|
|
247
247
|
this._driver.onEvent = (eventType: number, data: ArrayBuffer) => {
|
|
248
|
+
this.emit('event', eventType, data);
|
|
248
249
|
if (eventType === 3) { // ERROR
|
|
249
250
|
const msg = new TextDecoder().decode(data);
|
|
250
251
|
debugLog(`Socket (id: ${id}) NATIVE ERROR: ${msg}`);
|
|
251
252
|
}
|
|
252
|
-
if (eventType === 9) { // DEBUG
|
|
253
|
-
|
|
254
|
-
|
|
253
|
+
if (eventType === 9) { // SESSION/DEBUG
|
|
254
|
+
debugLog(`Socket (id: ${id}) NATIVE SESSION EVENT RECEIVED`);
|
|
255
|
+
this.emit('session', data);
|
|
255
256
|
return;
|
|
256
257
|
}
|
|
257
258
|
debugLog(`Socket (id: ${id}, localPort: ${this.localPort}) Event TYPE: ${eventType}, data len: ${data?.byteLength}`);
|
|
@@ -705,8 +706,8 @@ export class Server extends EventEmitter {
|
|
|
705
706
|
this.emit('error', new Error(data ? Buffer.from(data).toString() : 'Unknown server error'));
|
|
706
707
|
break;
|
|
707
708
|
case NetServerEvent.DEBUG: {
|
|
708
|
-
|
|
709
|
-
|
|
709
|
+
debugLog(`Server NATIVE SESSION/DEBUG EVENT RECEIVED`);
|
|
710
|
+
this.emit('session', data);
|
|
710
711
|
break;
|
|
711
712
|
}
|
|
712
713
|
case NetServerEvent.CLOSE:
|
|
@@ -726,7 +727,6 @@ export class Server extends EventEmitter {
|
|
|
726
727
|
this.close(() => resolve());
|
|
727
728
|
});
|
|
728
729
|
}
|
|
729
|
-
|
|
730
730
|
listen(port?: any, host?: any, backlog?: any, callback?: any): this {
|
|
731
731
|
let _port = 0;
|
|
732
732
|
let _host: string | undefined;
|
|
@@ -797,6 +797,13 @@ export class Server extends EventEmitter {
|
|
|
797
797
|
}
|
|
798
798
|
|
|
799
799
|
close(callback?: (err?: Error) => void): this {
|
|
800
|
+
// Destroy all active connections first
|
|
801
|
+
for (const socket of this._sockets) {
|
|
802
|
+
socket.destroy();
|
|
803
|
+
}
|
|
804
|
+
this._sockets.clear();
|
|
805
|
+
this._connections = 0;
|
|
806
|
+
|
|
800
807
|
this._driver.close();
|
|
801
808
|
if (callback) this.once('close', callback);
|
|
802
809
|
return this;
|
|
@@ -840,6 +847,8 @@ export function createServer(options?: any, connectionListener?: (socket: Socket
|
|
|
840
847
|
return new Server(options, connectionListener);
|
|
841
848
|
}
|
|
842
849
|
|
|
850
|
+
export * as tls from './tls'
|
|
851
|
+
|
|
843
852
|
export {
|
|
844
853
|
isIP,
|
|
845
854
|
isIPv4,
|