react-native-nitro-net 0.4.2 → 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/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 +34 -17
- package/lib/net.d.ts.map +1 -1
- package/lib/net.js +19 -10
- 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/Net.nitro.ts +6 -2
- package/src/http.ts +37 -19
- package/src/net.ts +19 -10
package/lib/http.js
CHANGED
|
@@ -123,9 +123,6 @@ export class OutgoingMessage extends Writable {
|
|
|
123
123
|
this._sendHeadersSent = false;
|
|
124
124
|
this.aborted = false;
|
|
125
125
|
this._trailers = null;
|
|
126
|
-
this.once('finish', () => {
|
|
127
|
-
this.emit('close');
|
|
128
|
-
});
|
|
129
126
|
}
|
|
130
127
|
destroy(error) {
|
|
131
128
|
super.destroy(error);
|
|
@@ -283,6 +280,15 @@ export class ServerResponse extends OutgoingMessage {
|
|
|
283
280
|
super();
|
|
284
281
|
this.statusCode = 200;
|
|
285
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);
|
|
286
292
|
}
|
|
287
293
|
writeHead(statusCode, statusMessage, headers) {
|
|
288
294
|
if (this.headersSent)
|
|
@@ -401,14 +407,18 @@ export class Server extends EventEmitter {
|
|
|
401
407
|
}
|
|
402
408
|
const onData = (data) => {
|
|
403
409
|
const handleParsedResult = (result) => {
|
|
404
|
-
|
|
410
|
+
const metadata = result.metadata;
|
|
411
|
+
if (metadata.startsWith('ERROR:')) {
|
|
405
412
|
if (headersTimer)
|
|
406
413
|
clearTimeout(headersTimer);
|
|
407
|
-
this.emit('error', new Error(
|
|
414
|
+
this.emit('error', new Error(metadata));
|
|
408
415
|
socket.destroy();
|
|
409
416
|
return;
|
|
410
417
|
}
|
|
411
|
-
const parsed = JSON.parse(
|
|
418
|
+
const parsed = JSON.parse(metadata);
|
|
419
|
+
if (result.body) {
|
|
420
|
+
parsed.body = Buffer.from(result.body);
|
|
421
|
+
}
|
|
412
422
|
if (parsed.is_headers) {
|
|
413
423
|
if (headersTimer) {
|
|
414
424
|
clearTimeout(headersTimer);
|
|
@@ -488,14 +498,15 @@ export class Server extends EventEmitter {
|
|
|
488
498
|
};
|
|
489
499
|
let input = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
490
500
|
let iterations = 0;
|
|
491
|
-
const maxIterations =
|
|
501
|
+
const maxIterations = 2000; // Safety limit
|
|
492
502
|
while (iterations < maxIterations) {
|
|
493
503
|
iterations++;
|
|
494
504
|
const result = parser.feed(input);
|
|
495
|
-
|
|
505
|
+
const metadata = result.metadata;
|
|
506
|
+
if (!metadata || metadata === '' || metadata.startsWith('ERROR:')) {
|
|
496
507
|
// Empty result (partial) or error - exit loop
|
|
497
|
-
if (
|
|
498
|
-
debugLog(`[HTTP] Server: Parser error: ${
|
|
508
|
+
if (metadata && metadata.startsWith('ERROR:')) {
|
|
509
|
+
debugLog(`[HTTP] Server: Parser error: ${metadata}`);
|
|
499
510
|
}
|
|
500
511
|
break;
|
|
501
512
|
}
|
|
@@ -882,12 +893,16 @@ export class ClientRequest extends OutgoingMessage {
|
|
|
882
893
|
const parser = Driver.createHttpParser(1); // 1 = Response mode
|
|
883
894
|
const onData = (data) => {
|
|
884
895
|
const handleParsedResult = (result) => {
|
|
885
|
-
|
|
886
|
-
|
|
896
|
+
const metadata = result.metadata;
|
|
897
|
+
if (metadata.startsWith('ERROR:')) {
|
|
898
|
+
this.emit('error', new Error(metadata));
|
|
887
899
|
this.socket.destroy();
|
|
888
900
|
return;
|
|
889
901
|
}
|
|
890
|
-
const parsed = JSON.parse(
|
|
902
|
+
const parsed = JSON.parse(metadata);
|
|
903
|
+
if (result.body) {
|
|
904
|
+
parsed.body = Buffer.from(result.body);
|
|
905
|
+
}
|
|
891
906
|
debugLog(`[HTTP] _connect: Parser result: ${parsed.is_headers ? 'HEADERS' : 'DATA'}${parsed.complete ? ' (COMPLETE)' : ''}`);
|
|
892
907
|
if (parsed.is_headers) {
|
|
893
908
|
const status = parsed.status || 0;
|
|
@@ -946,14 +961,15 @@ export class ClientRequest extends OutgoingMessage {
|
|
|
946
961
|
};
|
|
947
962
|
let input = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
948
963
|
let iterations = 0;
|
|
949
|
-
const maxIterations =
|
|
964
|
+
const maxIterations = 2000; // Safety limit
|
|
950
965
|
while (iterations < maxIterations) {
|
|
951
966
|
iterations++;
|
|
952
967
|
const result = parser.feed(input);
|
|
953
|
-
|
|
968
|
+
const metadata = result.metadata;
|
|
969
|
+
if (!metadata || metadata === '' || metadata.startsWith('ERROR:')) {
|
|
954
970
|
// Empty result (partial) or error - exit loop
|
|
955
|
-
if (
|
|
956
|
-
debugLog(`[HTTP] ClientRequest: Parser error: ${
|
|
971
|
+
if (metadata && metadata.startsWith('ERROR:')) {
|
|
972
|
+
debugLog(`[HTTP] ClientRequest: Parser error: ${metadata}`);
|
|
957
973
|
}
|
|
958
974
|
break;
|
|
959
975
|
}
|
|
@@ -996,6 +1012,7 @@ export class ClientRequest extends OutgoingMessage {
|
|
|
996
1012
|
this._cleanupSocket();
|
|
997
1013
|
if (socket)
|
|
998
1014
|
agent.releaseSocket(socket, this._options);
|
|
1015
|
+
this.emit('close');
|
|
999
1016
|
}
|
|
1000
1017
|
_flushPendingWrites() {
|
|
1001
1018
|
if (!this.socket)
|
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;AAI5C,OAAO,KAAK,EAAE,eAAe,EAAmB,SAAS,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EAAE,SAAS,EAAE,UAAU,EAA8B,MAAM,UAAU,CAAA;AAM5E,iBAAS,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnC;AAED,iBAAS,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtC;AAED,iBAAS,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtC;
|
|
1
|
+
{"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../src/net.ts"],"names":[],"mappings":"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"}
|
package/lib/net.js
CHANGED
|
@@ -24,6 +24,18 @@ function isIPv4(input) {
|
|
|
24
24
|
function isIPv6(input) {
|
|
25
25
|
return isIP(input) === 6;
|
|
26
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
|
+
}
|
|
27
39
|
// -----------------------------------------------------------------------------
|
|
28
40
|
// Global Configuration
|
|
29
41
|
// -----------------------------------------------------------------------------
|
|
@@ -271,9 +283,6 @@ export class Socket extends Duplex {
|
|
|
271
283
|
// Do NOT resume here - socket is not connected yet!
|
|
272
284
|
// resume() will be called after 'connect' event in _connect()
|
|
273
285
|
}
|
|
274
|
-
this.on('finish', () => {
|
|
275
|
-
// Writable side finished
|
|
276
|
-
});
|
|
277
286
|
}
|
|
278
287
|
on(event, listener) {
|
|
279
288
|
if (event === 'connect' && this._connected) {
|
|
@@ -293,11 +302,11 @@ export class Socket extends Duplex {
|
|
|
293
302
|
const id = this._driver.id ?? this._driver._id;
|
|
294
303
|
this._driver.onEvent = (eventType, data) => {
|
|
295
304
|
this.emit('event', eventType, data);
|
|
296
|
-
if (eventType ===
|
|
297
|
-
const msg =
|
|
305
|
+
if (eventType === NetSocketEvent.ERROR) {
|
|
306
|
+
const msg = decodeArrayBuffer(data) || 'Unknown error';
|
|
298
307
|
debugLog(`Socket (id: ${id}) NATIVE ERROR: ${msg}`);
|
|
299
308
|
}
|
|
300
|
-
if (eventType ===
|
|
309
|
+
if (eventType === NetSocketEvent.SESSION) { // SESSION/DEBUG
|
|
301
310
|
debugLog(`Socket (id: ${id}) NATIVE SESSION EVENT RECEIVED`);
|
|
302
311
|
this.emit('session', data);
|
|
303
312
|
return;
|
|
@@ -325,7 +334,7 @@ export class Socket extends Duplex {
|
|
|
325
334
|
break;
|
|
326
335
|
case NetSocketEvent.ERROR: {
|
|
327
336
|
this._hadError = true;
|
|
328
|
-
const errorMsg =
|
|
337
|
+
const errorMsg = decodeArrayBuffer(data) || 'Unknown socket error';
|
|
329
338
|
const error = new Error(errorMsg);
|
|
330
339
|
if (this.connecting && this._autoSelectFamily) {
|
|
331
340
|
// If we were connecting, this is a connection attempt failure
|
|
@@ -364,7 +373,7 @@ export class Socket extends Duplex {
|
|
|
364
373
|
break;
|
|
365
374
|
case NetSocketEvent.LOOKUP: {
|
|
366
375
|
if (data) {
|
|
367
|
-
const lookupStr =
|
|
376
|
+
const lookupStr = decodeArrayBuffer(data);
|
|
368
377
|
const parts = lookupStr.split(',');
|
|
369
378
|
if (parts.length >= 2) {
|
|
370
379
|
const [ip, family] = parts;
|
|
@@ -667,7 +676,7 @@ export class Server extends EventEmitter {
|
|
|
667
676
|
this._driver.onEvent = (eventType, data) => {
|
|
668
677
|
switch (eventType) {
|
|
669
678
|
case NetServerEvent.CONNECTION: {
|
|
670
|
-
const payload =
|
|
679
|
+
const payload = decodeArrayBuffer(data);
|
|
671
680
|
if (payload === 'success') {
|
|
672
681
|
this.emit('listening');
|
|
673
682
|
}
|
|
@@ -720,7 +729,7 @@ export class Server extends EventEmitter {
|
|
|
720
729
|
break;
|
|
721
730
|
}
|
|
722
731
|
case NetServerEvent.ERROR:
|
|
723
|
-
this.emit('error', new Error(
|
|
732
|
+
this.emit('error', new Error(decodeArrayBuffer(data) || 'Unknown server error'));
|
|
724
733
|
break;
|
|
725
734
|
case NetServerEvent.DEBUG: {
|
|
726
735
|
debugLog(`Server NATIVE SESSION/DEBUG EVENT RECEIVED`);
|
|
@@ -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
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// HybridHttpParserSpec.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
|
|
@@ -18,33 +18,33 @@ namespace margelo::nitro::net {
|
|
|
18
18
|
|
|
19
19
|
using namespace facebook;
|
|
20
20
|
|
|
21
|
-
class JHybridHttpParserSpec: public
|
|
22
|
-
public virtual HybridHttpParserSpec {
|
|
21
|
+
class JHybridHttpParserSpec: public virtual HybridHttpParserSpec, public virtual JHybridObject {
|
|
23
22
|
public:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
HybridBase
|
|
33
|
-
|
|
23
|
+
struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
|
|
24
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/net/HybridHttpParserSpec;";
|
|
25
|
+
std::shared_ptr<JHybridHttpParserSpec> getJHybridHttpParserSpec();
|
|
26
|
+
};
|
|
27
|
+
struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
|
|
28
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/net/HybridHttpParserSpec$CxxPart;";
|
|
29
|
+
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
|
|
30
|
+
static void registerNatives();
|
|
31
|
+
using HybridBase::HybridBase;
|
|
32
|
+
protected:
|
|
33
|
+
std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
|
|
34
|
+
};
|
|
34
35
|
|
|
35
36
|
public:
|
|
37
|
+
explicit JHybridHttpParserSpec(const jni::local_ref<JHybridHttpParserSpec::JavaPart>& javaPart):
|
|
38
|
+
HybridObject(HybridHttpParserSpec::TAG),
|
|
39
|
+
JHybridObject(javaPart),
|
|
40
|
+
_javaPart(jni::make_global(javaPart)) {}
|
|
36
41
|
~JHybridHttpParserSpec() override {
|
|
37
42
|
// Hermes GC can destroy JS objects on a non-JNI Thread.
|
|
38
43
|
jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
public:
|
|
42
|
-
|
|
43
|
-
void dispose() noexcept override;
|
|
44
|
-
std::string toString() override;
|
|
45
|
-
|
|
46
|
-
public:
|
|
47
|
-
inline const jni::global_ref<JHybridHttpParserSpec::javaobject>& getJavaPart() const noexcept {
|
|
47
|
+
inline const jni::global_ref<JHybridHttpParserSpec::JavaPart>& getJavaPart() const noexcept {
|
|
48
48
|
return _javaPart;
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -54,12 +54,10 @@ namespace margelo::nitro::net {
|
|
|
54
54
|
|
|
55
55
|
public:
|
|
56
56
|
// Methods
|
|
57
|
-
|
|
57
|
+
HttpParsedMessage feed(const std::shared_ptr<ArrayBuffer>& data) override;
|
|
58
58
|
|
|
59
59
|
private:
|
|
60
|
-
|
|
61
|
-
using HybridBase::HybridBase;
|
|
62
|
-
jni::global_ref<JHybridHttpParserSpec::javaobject> _javaPart;
|
|
60
|
+
jni::global_ref<JHybridHttpParserSpec::JavaPart> _javaPart;
|
|
63
61
|
};
|
|
64
62
|
|
|
65
63
|
} // namespace margelo::nitro::net
|