react-native-nitro-net 0.4.1 → 0.4.3
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/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/HybridHttpParser.hpp +44 -16
- package/cpp/NetBindings.hpp +192 -96
- package/cpp/NetManager.hpp +16 -10
- 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/Logger.d.ts +16 -0
- package/lib/Logger.d.ts.map +1 -0
- package/lib/Logger.js +28 -0
- package/lib/Net.nitro.d.ts +6 -2
- package/lib/Net.nitro.d.ts.map +1 -1
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +38 -23
- package/lib/net.d.ts +1 -2
- package/lib/net.d.ts.map +1 -1
- package/lib/net.js +22 -22
- package/lib/tls.d.ts.map +1 -1
- package/lib/tls.js +3 -5
- package/nitrogen/generated/android/RustCNet+autolinking.cmake +1 -1
- package/nitrogen/generated/android/RustCNet+autolinking.gradle +1 -1
- package/nitrogen/generated/android/RustCNetOnLoad.cpp +27 -22
- package/nitrogen/generated/android/RustCNetOnLoad.hpp +14 -5
- package/nitrogen/generated/android/c++/JFunc_void_double_std__shared_ptr_ArrayBuffer_.hpp +1 -1
- package/nitrogen/generated/android/c++/JHttpParsedMessage.hpp +64 -0
- package/nitrogen/generated/android/c++/JHybridHttpParserSpec.cpp +28 -23
- package/nitrogen/generated/android/c++/JHybridHttpParserSpec.hpp +21 -23
- package/nitrogen/generated/android/c++/JHybridNetDriverSpec.cpp +35 -34
- package/nitrogen/generated/android/c++/JHybridNetDriverSpec.hpp +20 -22
- package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.cpp +31 -30
- package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.hpp +20 -22
- package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.cpp +53 -52
- package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.hpp +20 -22
- package/nitrogen/generated/android/c++/JNetConfig.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/Func_void_double_std__shared_ptr_ArrayBuffer_.kt +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HttpParsedMessage.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridHttpParserSpec.kt +15 -18
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetDriverSpec.kt +16 -19
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetServerDriverSpec.kt +16 -19
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetSocketDriverSpec.kt +16 -19
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/NetConfig.kt +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/RustCNetOnLoad.kt +1 -1
- package/nitrogen/generated/ios/RustCNet+autolinking.rb +1 -1
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.cpp +1 -1
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.hpp +17 -5
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Umbrella.hpp +4 -1
- package/nitrogen/generated/ios/RustCNetAutolinking.mm +1 -1
- package/nitrogen/generated/ios/RustCNetAutolinking.swift +5 -1
- package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.hpp +12 -2
- package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.hpp +7 -1
- package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.hpp +7 -1
- package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.cpp +1 -1
- package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.hpp +7 -1
- package/nitrogen/generated/ios/swift/Func_void_double_std__shared_ptr_ArrayBuffer_.swift +1 -2
- package/nitrogen/generated/ios/swift/HttpParsedMessage.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridHttpParserSpec.swift +4 -5
- package/nitrogen/generated/ios/swift/HybridHttpParserSpec_cxx.swift +13 -6
- package/nitrogen/generated/ios/swift/HybridNetDriverSpec.swift +3 -4
- package/nitrogen/generated/ios/swift/HybridNetDriverSpec_cxx.swift +9 -2
- package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec.swift +3 -4
- package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec_cxx.swift +49 -7
- package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec.swift +3 -4
- package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec_cxx.swift +25 -4
- package/nitrogen/generated/ios/swift/NetConfig.swift +9 -3
- package/nitrogen/generated/shared/c++/HttpParsedMessage.hpp +89 -0
- package/nitrogen/generated/shared/c++/HybridHttpParserSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHttpParserSpec.hpp +5 -4
- package/nitrogen/generated/shared/c++/HybridNetDriverSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNetDriverSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/NetConfig.hpp +1 -1
- package/package.json +4 -5
- package/src/Logger.ts +31 -0
- package/src/Net.nitro.ts +6 -2
- package/src/http.ts +42 -25
- package/src/net.ts +23 -22
- package/src/tls.ts +3 -5
package/lib/http.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { Writable, Readable } from 'readable-stream';
|
|
2
2
|
import { EventEmitter } from 'eventemitter3';
|
|
3
|
+
import { Buffer } from 'react-native-nitro-buffer';
|
|
3
4
|
import { Driver } from './Driver';
|
|
4
|
-
import { Socket
|
|
5
|
+
import { Socket } from './net';
|
|
5
6
|
import { TLSSocket } from './tls';
|
|
6
|
-
import {
|
|
7
|
+
import { debugLog as loggerDebugLog } from './Logger';
|
|
7
8
|
function debugLog(message) {
|
|
8
|
-
|
|
9
|
-
const timestamp = new Date().toISOString().split('T')[1].split('Z')[0];
|
|
10
|
-
debugLog(`[HTTP DEBUG ${timestamp}] ${message}`);
|
|
11
|
-
}
|
|
9
|
+
loggerDebugLog('HTTP', message);
|
|
12
10
|
}
|
|
13
11
|
// ========== STATUS_CODES ==========
|
|
14
12
|
export const STATUS_CODES = {
|
|
@@ -125,9 +123,6 @@ export class OutgoingMessage extends Writable {
|
|
|
125
123
|
this._sendHeadersSent = false;
|
|
126
124
|
this.aborted = false;
|
|
127
125
|
this._trailers = null;
|
|
128
|
-
this.once('finish', () => {
|
|
129
|
-
this.emit('close');
|
|
130
|
-
});
|
|
131
126
|
}
|
|
132
127
|
destroy(error) {
|
|
133
128
|
super.destroy(error);
|
|
@@ -285,6 +280,15 @@ export class ServerResponse extends OutgoingMessage {
|
|
|
285
280
|
super();
|
|
286
281
|
this.statusCode = 200;
|
|
287
282
|
this.socket = socket;
|
|
283
|
+
const onClose = () => {
|
|
284
|
+
if (this.socket) {
|
|
285
|
+
this.socket.removeListener('close', onClose);
|
|
286
|
+
}
|
|
287
|
+
this.removeListener('finish', onClose);
|
|
288
|
+
this.emit('close');
|
|
289
|
+
};
|
|
290
|
+
this.once('finish', onClose);
|
|
291
|
+
this.socket.once('close', onClose);
|
|
288
292
|
}
|
|
289
293
|
writeHead(statusCode, statusMessage, headers) {
|
|
290
294
|
if (this.headersSent)
|
|
@@ -403,14 +407,18 @@ export class Server extends EventEmitter {
|
|
|
403
407
|
}
|
|
404
408
|
const onData = (data) => {
|
|
405
409
|
const handleParsedResult = (result) => {
|
|
406
|
-
|
|
410
|
+
const metadata = result.metadata;
|
|
411
|
+
if (metadata.startsWith('ERROR:')) {
|
|
407
412
|
if (headersTimer)
|
|
408
413
|
clearTimeout(headersTimer);
|
|
409
|
-
this.emit('error', new Error(
|
|
414
|
+
this.emit('error', new Error(metadata));
|
|
410
415
|
socket.destroy();
|
|
411
416
|
return;
|
|
412
417
|
}
|
|
413
|
-
const parsed = JSON.parse(
|
|
418
|
+
const parsed = JSON.parse(metadata);
|
|
419
|
+
if (result.body) {
|
|
420
|
+
parsed.body = Buffer.from(result.body);
|
|
421
|
+
}
|
|
414
422
|
if (parsed.is_headers) {
|
|
415
423
|
if (headersTimer) {
|
|
416
424
|
clearTimeout(headersTimer);
|
|
@@ -490,14 +498,15 @@ export class Server extends EventEmitter {
|
|
|
490
498
|
};
|
|
491
499
|
let input = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
492
500
|
let iterations = 0;
|
|
493
|
-
const maxIterations =
|
|
501
|
+
const maxIterations = 2000; // Safety limit
|
|
494
502
|
while (iterations < maxIterations) {
|
|
495
503
|
iterations++;
|
|
496
504
|
const result = parser.feed(input);
|
|
497
|
-
|
|
505
|
+
const metadata = result.metadata;
|
|
506
|
+
if (!metadata || metadata === '' || metadata.startsWith('ERROR:')) {
|
|
498
507
|
// Empty result (partial) or error - exit loop
|
|
499
|
-
if (
|
|
500
|
-
debugLog(`[HTTP] Server: Parser error: ${
|
|
508
|
+
if (metadata && metadata.startsWith('ERROR:')) {
|
|
509
|
+
debugLog(`[HTTP] Server: Parser error: ${metadata}`);
|
|
501
510
|
}
|
|
502
511
|
break;
|
|
503
512
|
}
|
|
@@ -884,12 +893,16 @@ export class ClientRequest extends OutgoingMessage {
|
|
|
884
893
|
const parser = Driver.createHttpParser(1); // 1 = Response mode
|
|
885
894
|
const onData = (data) => {
|
|
886
895
|
const handleParsedResult = (result) => {
|
|
887
|
-
|
|
888
|
-
|
|
896
|
+
const metadata = result.metadata;
|
|
897
|
+
if (metadata.startsWith('ERROR:')) {
|
|
898
|
+
this.emit('error', new Error(metadata));
|
|
889
899
|
this.socket.destroy();
|
|
890
900
|
return;
|
|
891
901
|
}
|
|
892
|
-
const parsed = JSON.parse(
|
|
902
|
+
const parsed = JSON.parse(metadata);
|
|
903
|
+
if (result.body) {
|
|
904
|
+
parsed.body = Buffer.from(result.body);
|
|
905
|
+
}
|
|
893
906
|
debugLog(`[HTTP] _connect: Parser result: ${parsed.is_headers ? 'HEADERS' : 'DATA'}${parsed.complete ? ' (COMPLETE)' : ''}`);
|
|
894
907
|
if (parsed.is_headers) {
|
|
895
908
|
const status = parsed.status || 0;
|
|
@@ -948,14 +961,15 @@ export class ClientRequest extends OutgoingMessage {
|
|
|
948
961
|
};
|
|
949
962
|
let input = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
950
963
|
let iterations = 0;
|
|
951
|
-
const maxIterations =
|
|
964
|
+
const maxIterations = 2000; // Safety limit
|
|
952
965
|
while (iterations < maxIterations) {
|
|
953
966
|
iterations++;
|
|
954
967
|
const result = parser.feed(input);
|
|
955
|
-
|
|
968
|
+
const metadata = result.metadata;
|
|
969
|
+
if (!metadata || metadata === '' || metadata.startsWith('ERROR:')) {
|
|
956
970
|
// Empty result (partial) or error - exit loop
|
|
957
|
-
if (
|
|
958
|
-
debugLog(`[HTTP] ClientRequest: Parser error: ${
|
|
971
|
+
if (metadata && metadata.startsWith('ERROR:')) {
|
|
972
|
+
debugLog(`[HTTP] ClientRequest: Parser error: ${metadata}`);
|
|
959
973
|
}
|
|
960
974
|
break;
|
|
961
975
|
}
|
|
@@ -998,6 +1012,7 @@ export class ClientRequest extends OutgoingMessage {
|
|
|
998
1012
|
this._cleanupSocket();
|
|
999
1013
|
if (socket)
|
|
1000
1014
|
agent.releaseSocket(socket, this._options);
|
|
1015
|
+
this.emit('close');
|
|
1001
1016
|
}
|
|
1002
1017
|
_flushPendingWrites() {
|
|
1003
1018
|
if (!this.socket)
|
package/lib/net.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { Duplex, DuplexOptions } from 'readable-stream';
|
|
2
2
|
import { EventEmitter } from 'eventemitter3';
|
|
3
3
|
import type { NetSocketDriver, NetConfig } from './Net.nitro';
|
|
4
|
+
import { isVerbose, setVerbose } from './Logger';
|
|
4
5
|
declare function isIP(input: string): number;
|
|
5
6
|
declare function isIPv4(input: string): boolean;
|
|
6
7
|
declare function isIPv6(input: string): boolean;
|
|
7
|
-
declare function isVerbose(): boolean;
|
|
8
|
-
declare function setVerbose(enabled: boolean): void;
|
|
9
8
|
declare function getDefaultAutoSelectFamily(): number;
|
|
10
9
|
declare function setDefaultAutoSelectFamily(family: number): void;
|
|
11
10
|
/**
|
package/lib/net.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../src/net.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../src/net.ts"],"names":[],"mappings":"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"}
|
package/lib/net.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Duplex } from 'readable-stream';
|
|
2
2
|
import { EventEmitter } from 'eventemitter3';
|
|
3
|
+
import { Buffer } from 'react-native-nitro-buffer';
|
|
3
4
|
import { Driver } from './Driver';
|
|
4
5
|
import { NetSocketEvent, NetServerEvent } from './Net.nitro';
|
|
5
|
-
import {
|
|
6
|
+
import { isVerbose, setVerbose, debugLog as loggerDebugLog } from './Logger';
|
|
6
7
|
// -----------------------------------------------------------------------------
|
|
7
8
|
// Utils
|
|
8
9
|
// -----------------------------------------------------------------------------
|
|
@@ -23,23 +24,25 @@ function isIPv4(input) {
|
|
|
23
24
|
function isIPv6(input) {
|
|
24
25
|
return isIP(input) === 6;
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Decodes an ArrayBuffer to a string.
|
|
29
|
+
* Prioritizes TextDecoder if available, otherwise falls back to Buffer.
|
|
30
|
+
*/
|
|
31
|
+
function decodeArrayBuffer(data) {
|
|
32
|
+
if (!data || data.byteLength === 0)
|
|
33
|
+
return '';
|
|
34
|
+
if (typeof TextDecoder !== 'undefined') {
|
|
35
|
+
return new TextDecoder().decode(data);
|
|
36
|
+
}
|
|
37
|
+
return Buffer.from(data).toString();
|
|
38
|
+
}
|
|
26
39
|
// -----------------------------------------------------------------------------
|
|
27
40
|
// Global Configuration
|
|
28
41
|
// -----------------------------------------------------------------------------
|
|
29
42
|
let _autoSelectFamilyDefault = 4; // Node default is usually 4/6 independent, but we mock it.
|
|
30
|
-
let _isVerbose = false;
|
|
31
43
|
let _isInitialized = false;
|
|
32
|
-
function isVerbose() {
|
|
33
|
-
return _isVerbose;
|
|
34
|
-
}
|
|
35
|
-
function setVerbose(enabled) {
|
|
36
|
-
_isVerbose = enabled;
|
|
37
|
-
}
|
|
38
44
|
function debugLog(message) {
|
|
39
|
-
|
|
40
|
-
const timestamp = new Date().toISOString().split('T')[1].split('Z')[0];
|
|
41
|
-
console.log(`[NET DEBUG ${timestamp}] ${message}`);
|
|
42
|
-
}
|
|
45
|
+
loggerDebugLog('NET', message);
|
|
43
46
|
}
|
|
44
47
|
function getDefaultAutoSelectFamily() {
|
|
45
48
|
return _autoSelectFamilyDefault;
|
|
@@ -280,9 +283,6 @@ export class Socket extends Duplex {
|
|
|
280
283
|
// Do NOT resume here - socket is not connected yet!
|
|
281
284
|
// resume() will be called after 'connect' event in _connect()
|
|
282
285
|
}
|
|
283
|
-
this.on('finish', () => {
|
|
284
|
-
// Writable side finished
|
|
285
|
-
});
|
|
286
286
|
}
|
|
287
287
|
on(event, listener) {
|
|
288
288
|
if (event === 'connect' && this._connected) {
|
|
@@ -302,11 +302,11 @@ export class Socket extends Duplex {
|
|
|
302
302
|
const id = this._driver.id ?? this._driver._id;
|
|
303
303
|
this._driver.onEvent = (eventType, data) => {
|
|
304
304
|
this.emit('event', eventType, data);
|
|
305
|
-
if (eventType ===
|
|
306
|
-
const msg =
|
|
305
|
+
if (eventType === NetSocketEvent.ERROR) {
|
|
306
|
+
const msg = decodeArrayBuffer(data) || 'Unknown error';
|
|
307
307
|
debugLog(`Socket (id: ${id}) NATIVE ERROR: ${msg}`);
|
|
308
308
|
}
|
|
309
|
-
if (eventType ===
|
|
309
|
+
if (eventType === NetSocketEvent.SESSION) { // SESSION/DEBUG
|
|
310
310
|
debugLog(`Socket (id: ${id}) NATIVE SESSION EVENT RECEIVED`);
|
|
311
311
|
this.emit('session', data);
|
|
312
312
|
return;
|
|
@@ -334,7 +334,7 @@ export class Socket extends Duplex {
|
|
|
334
334
|
break;
|
|
335
335
|
case NetSocketEvent.ERROR: {
|
|
336
336
|
this._hadError = true;
|
|
337
|
-
const errorMsg =
|
|
337
|
+
const errorMsg = decodeArrayBuffer(data) || 'Unknown socket error';
|
|
338
338
|
const error = new Error(errorMsg);
|
|
339
339
|
if (this.connecting && this._autoSelectFamily) {
|
|
340
340
|
// If we were connecting, this is a connection attempt failure
|
|
@@ -373,7 +373,7 @@ export class Socket extends Duplex {
|
|
|
373
373
|
break;
|
|
374
374
|
case NetSocketEvent.LOOKUP: {
|
|
375
375
|
if (data) {
|
|
376
|
-
const lookupStr =
|
|
376
|
+
const lookupStr = decodeArrayBuffer(data);
|
|
377
377
|
const parts = lookupStr.split(',');
|
|
378
378
|
if (parts.length >= 2) {
|
|
379
379
|
const [ip, family] = parts;
|
|
@@ -676,7 +676,7 @@ export class Server extends EventEmitter {
|
|
|
676
676
|
this._driver.onEvent = (eventType, data) => {
|
|
677
677
|
switch (eventType) {
|
|
678
678
|
case NetServerEvent.CONNECTION: {
|
|
679
|
-
const payload =
|
|
679
|
+
const payload = decodeArrayBuffer(data);
|
|
680
680
|
if (payload === 'success') {
|
|
681
681
|
this.emit('listening');
|
|
682
682
|
}
|
|
@@ -729,7 +729,7 @@ export class Server extends EventEmitter {
|
|
|
729
729
|
break;
|
|
730
730
|
}
|
|
731
731
|
case NetServerEvent.ERROR:
|
|
732
|
-
this.emit('error', new Error(
|
|
732
|
+
this.emit('error', new Error(decodeArrayBuffer(data) || 'Unknown server error'));
|
|
733
733
|
break;
|
|
734
734
|
case NetServerEvent.DEBUG: {
|
|
735
735
|
debugLog(`Server NATIVE SESSION/DEBUG EVENT RECEIVED`);
|
package/lib/tls.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls.d.ts","sourceRoot":"","sources":["../src/tls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"tls.d.ts","sourceRoot":"","sources":["../src/tls.ts"],"names":[],"mappings":"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"}
|
package/lib/tls.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { Socket, Server as NetServer
|
|
1
|
+
import { Socket, Server as NetServer } from './net';
|
|
2
2
|
import { Driver } from './Driver';
|
|
3
|
+
import { debugLog as loggerDebugLog } from './Logger';
|
|
3
4
|
function debugLog(message) {
|
|
4
|
-
|
|
5
|
-
const timestamp = new Date().toISOString().split('T')[1].split('Z')[0];
|
|
6
|
-
console.log(`[NET DEBUG ${timestamp}] ${message}`);
|
|
7
|
-
}
|
|
5
|
+
loggerDebugLog('TLS', message);
|
|
8
6
|
}
|
|
9
7
|
export const DEFAULT_MIN_VERSION = 'TLSv1.2';
|
|
10
8
|
export const DEFAULT_MAX_VERSION = 'TLSv1.3';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# RustCNet+autolinking.cmake
|
|
3
3
|
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
# https://github.com/mrousavy/nitro
|
|
5
|
-
# Copyright ©
|
|
5
|
+
# Copyright © Marc Rousavy @ Margelo
|
|
6
6
|
#
|
|
7
7
|
|
|
8
8
|
# This is a CMake file that adds all files generated by Nitrogen
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// RustCNet+autolinking.gradle
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
/// This is a Gradle file that adds all files generated by Nitrogen
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// RustCNetOnLoad.cpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#ifndef BUILDING_RUSTCNET_WITH_GENERATED_CMAKE_PROJECT
|
|
@@ -25,29 +25,34 @@
|
|
|
25
25
|
namespace margelo::nitro::net {
|
|
26
26
|
|
|
27
27
|
int initialize(JavaVM* vm) {
|
|
28
|
+
return facebook::jni::initialize(vm, []() {
|
|
29
|
+
::margelo::nitro::net::registerAllNatives();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
void registerAllNatives() {
|
|
28
36
|
using namespace margelo::nitro;
|
|
29
37
|
using namespace margelo::nitro::net;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
);
|
|
50
|
-
});
|
|
38
|
+
|
|
39
|
+
// Register native JNI methods
|
|
40
|
+
margelo::nitro::net::JHybridNetSocketDriverSpec::CxxPart::registerNatives();
|
|
41
|
+
margelo::nitro::net::JFunc_void_double_std__shared_ptr_ArrayBuffer__cxx::registerNatives();
|
|
42
|
+
margelo::nitro::net::JHybridNetServerDriverSpec::CxxPart::registerNatives();
|
|
43
|
+
margelo::nitro::net::JHybridHttpParserSpec::CxxPart::registerNatives();
|
|
44
|
+
margelo::nitro::net::JHybridNetDriverSpec::CxxPart::registerNatives();
|
|
45
|
+
|
|
46
|
+
// Register Nitro Hybrid Objects
|
|
47
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
48
|
+
"NetDriver",
|
|
49
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
50
|
+
static_assert(std::is_default_constructible_v<HybridNetDriver>,
|
|
51
|
+
"The HybridObject \"HybridNetDriver\" is not default-constructible! "
|
|
52
|
+
"Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
|
|
53
|
+
return std::make_shared<HybridNetDriver>();
|
|
54
|
+
}
|
|
55
|
+
);
|
|
51
56
|
}
|
|
52
57
|
|
|
53
58
|
} // namespace margelo::nitro::net
|
|
@@ -2,24 +2,33 @@
|
|
|
2
2
|
/// RustCNetOnLoad.hpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#include <jni.h>
|
|
9
|
+
#include <functional>
|
|
9
10
|
#include <NitroModules/NitroDefines.hpp>
|
|
10
11
|
|
|
11
12
|
namespace margelo::nitro::net {
|
|
12
13
|
|
|
14
|
+
[[deprecated("Use registerNatives() instead.")]]
|
|
15
|
+
int initialize(JavaVM* vm);
|
|
16
|
+
|
|
13
17
|
/**
|
|
14
|
-
*
|
|
15
|
-
* Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`)
|
|
18
|
+
* Register the native (C++) part of RustCNet, and autolinks all Hybrid Objects.
|
|
19
|
+
* Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
|
|
20
|
+
* inside a `facebook::jni::initialize(vm, ...)` call.
|
|
16
21
|
* Example:
|
|
17
22
|
* ```cpp (cpp-adapter.cpp)
|
|
18
23
|
* JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
|
|
19
|
-
* return
|
|
24
|
+
* return facebook::jni::initialize(vm, []() {
|
|
25
|
+
* // register all RustCNet HybridObjects
|
|
26
|
+
* margelo::nitro::net::registerNatives();
|
|
27
|
+
* // any other custom registrations go here.
|
|
28
|
+
* });
|
|
20
29
|
* }
|
|
21
30
|
* ```
|
|
22
31
|
*/
|
|
23
|
-
|
|
32
|
+
void registerAllNatives();
|
|
24
33
|
|
|
25
34
|
} // namespace margelo::nitro::net
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// JFunc_void_double_std__shared_ptr_ArrayBuffer_.hpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#pragma once
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JHttpParsedMessage.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "HttpParsedMessage.hpp"
|
|
12
|
+
|
|
13
|
+
#include <NitroModules/ArrayBuffer.hpp>
|
|
14
|
+
#include <NitroModules/JArrayBuffer.hpp>
|
|
15
|
+
#include <optional>
|
|
16
|
+
#include <string>
|
|
17
|
+
|
|
18
|
+
namespace margelo::nitro::net {
|
|
19
|
+
|
|
20
|
+
using namespace facebook;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The C++ JNI bridge between the C++ struct "HttpParsedMessage" and the the Kotlin data class "HttpParsedMessage".
|
|
24
|
+
*/
|
|
25
|
+
struct JHttpParsedMessage final: public jni::JavaClass<JHttpParsedMessage> {
|
|
26
|
+
public:
|
|
27
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/net/HttpParsedMessage;";
|
|
28
|
+
|
|
29
|
+
public:
|
|
30
|
+
/**
|
|
31
|
+
* Convert this Java/Kotlin-based struct to the C++ struct HttpParsedMessage by copying all values to C++.
|
|
32
|
+
*/
|
|
33
|
+
[[maybe_unused]]
|
|
34
|
+
[[nodiscard]]
|
|
35
|
+
HttpParsedMessage toCpp() const {
|
|
36
|
+
static const auto clazz = javaClassStatic();
|
|
37
|
+
static const auto fieldMetadata = clazz->getField<jni::JString>("metadata");
|
|
38
|
+
jni::local_ref<jni::JString> metadata = this->getFieldValue(fieldMetadata);
|
|
39
|
+
static const auto fieldBody = clazz->getField<JArrayBuffer::javaobject>("body");
|
|
40
|
+
jni::local_ref<JArrayBuffer::javaobject> body = this->getFieldValue(fieldBody);
|
|
41
|
+
return HttpParsedMessage(
|
|
42
|
+
metadata->toStdString(),
|
|
43
|
+
body != nullptr ? std::make_optional(body->cthis()->getArrayBuffer()) : std::nullopt
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
/**
|
|
49
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
50
|
+
*/
|
|
51
|
+
[[maybe_unused]]
|
|
52
|
+
static jni::local_ref<JHttpParsedMessage::javaobject> fromCpp(const HttpParsedMessage& value) {
|
|
53
|
+
using JSignature = JHttpParsedMessage(jni::alias_ref<jni::JString>, jni::alias_ref<JArrayBuffer::javaobject>);
|
|
54
|
+
static const auto clazz = javaClassStatic();
|
|
55
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
56
|
+
return create(
|
|
57
|
+
clazz,
|
|
58
|
+
jni::make_jstring(value.metadata),
|
|
59
|
+
value.body.has_value() ? JArrayBuffer::wrap(value.body.value()) : nullptr
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
} // namespace margelo::nitro::net
|
|
@@ -2,53 +2,58 @@
|
|
|
2
2
|
/// JHybridHttpParserSpec.cpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#include "JHybridHttpParserSpec.hpp"
|
|
9
9
|
|
|
10
|
+
// Forward declaration of `HttpParsedMessage` to properly resolve imports.
|
|
11
|
+
namespace margelo::nitro::net { struct HttpParsedMessage; }
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
#include "HttpParsedMessage.hpp"
|
|
14
|
+
#include "JHttpParsedMessage.hpp"
|
|
12
15
|
#include <string>
|
|
13
16
|
#include <NitroModules/ArrayBuffer.hpp>
|
|
17
|
+
#include <optional>
|
|
14
18
|
#include <NitroModules/JArrayBuffer.hpp>
|
|
15
19
|
|
|
16
20
|
namespace margelo::nitro::net {
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
std::shared_ptr<JHybridHttpParserSpec> JHybridHttpParserSpec::JavaPart::getJHybridHttpParserSpec() {
|
|
23
|
+
auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
|
|
24
|
+
auto castHybridObject = std::dynamic_pointer_cast<JHybridHttpParserSpec>(hybridObject);
|
|
25
|
+
if (castHybridObject == nullptr) [[unlikely]] {
|
|
26
|
+
throw std::runtime_error("Failed to downcast JHybridObject to JHybridHttpParserSpec!");
|
|
27
|
+
}
|
|
28
|
+
return castHybridObject;
|
|
20
29
|
}
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
makeNativeMethod("initHybrid", JHybridHttpParserSpec::initHybrid),
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
size_t JHybridHttpParserSpec::getExternalMemorySize() noexcept {
|
|
29
|
-
static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
|
|
30
|
-
return method(_javaPart);
|
|
31
|
+
jni::local_ref<JHybridHttpParserSpec::CxxPart::jhybriddata> JHybridHttpParserSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
|
|
32
|
+
return makeCxxInstance(jThis);
|
|
31
33
|
}
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
std::shared_ptr<JHybridObject> JHybridHttpParserSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
|
|
36
|
+
auto castJavaPart = jni::dynamic_ref_cast<JHybridHttpParserSpec::JavaPart>(javaPart);
|
|
37
|
+
if (castJavaPart == nullptr) [[unlikely]] {
|
|
38
|
+
throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridHttpParserSpec::JavaPart!");
|
|
39
|
+
}
|
|
40
|
+
return std::make_shared<JHybridHttpParserSpec>(castJavaPart);
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
void JHybridHttpParserSpec::CxxPart::registerNatives() {
|
|
44
|
+
registerHybrid({
|
|
45
|
+
makeNativeMethod("initHybrid", JHybridHttpParserSpec::CxxPart::initHybrid),
|
|
46
|
+
});
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
// Properties
|
|
45
50
|
|
|
46
51
|
|
|
47
52
|
// Methods
|
|
48
|
-
|
|
49
|
-
static const auto method = javaClassStatic()->getMethod<jni::local_ref<
|
|
53
|
+
HttpParsedMessage JHybridHttpParserSpec::feed(const std::shared_ptr<ArrayBuffer>& data) {
|
|
54
|
+
static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JHttpParsedMessage>(jni::alias_ref<JArrayBuffer::javaobject> /* data */)>("feed");
|
|
50
55
|
auto __result = method(_javaPart, JArrayBuffer::wrap(data));
|
|
51
|
-
return __result->
|
|
56
|
+
return __result->toCpp();
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
} // namespace margelo::nitro::net
|