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.
Files changed (80) hide show
  1. package/android/libs/arm64-v8a/librust_c_net.so +0 -0
  2. package/android/libs/armeabi-v7a/librust_c_net.so +0 -0
  3. package/android/libs/x86/librust_c_net.so +0 -0
  4. package/android/libs/x86_64/librust_c_net.so +0 -0
  5. package/cpp/HybridHttpParser.hpp +44 -16
  6. package/cpp/NetBindings.hpp +192 -96
  7. package/cpp/NetManager.hpp +16 -10
  8. package/ios/Frameworks/RustCNet.xcframework/Info.plist +5 -5
  9. package/ios/Frameworks/RustCNet.xcframework/ios-arm64/RustCNet.framework/RustCNet +0 -0
  10. package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/RustCNet +0 -0
  11. package/lib/Net.nitro.d.ts +6 -2
  12. package/lib/Net.nitro.d.ts.map +1 -1
  13. package/lib/http.d.ts.map +1 -1
  14. package/lib/http.js +34 -17
  15. package/lib/net.d.ts.map +1 -1
  16. package/lib/net.js +19 -10
  17. package/nitrogen/generated/android/RustCNet+autolinking.cmake +1 -1
  18. package/nitrogen/generated/android/RustCNet+autolinking.gradle +1 -1
  19. package/nitrogen/generated/android/RustCNetOnLoad.cpp +27 -22
  20. package/nitrogen/generated/android/RustCNetOnLoad.hpp +14 -5
  21. package/nitrogen/generated/android/c++/JFunc_void_double_std__shared_ptr_ArrayBuffer_.hpp +1 -1
  22. package/nitrogen/generated/android/c++/JHttpParsedMessage.hpp +64 -0
  23. package/nitrogen/generated/android/c++/JHybridHttpParserSpec.cpp +28 -23
  24. package/nitrogen/generated/android/c++/JHybridHttpParserSpec.hpp +21 -23
  25. package/nitrogen/generated/android/c++/JHybridNetDriverSpec.cpp +35 -34
  26. package/nitrogen/generated/android/c++/JHybridNetDriverSpec.hpp +20 -22
  27. package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.cpp +31 -30
  28. package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.hpp +20 -22
  29. package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.cpp +53 -52
  30. package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.hpp +20 -22
  31. package/nitrogen/generated/android/c++/JNetConfig.hpp +1 -1
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/Func_void_double_std__shared_ptr_ArrayBuffer_.kt +1 -1
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HttpParsedMessage.kt +41 -0
  34. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridHttpParserSpec.kt +15 -18
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetDriverSpec.kt +16 -19
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetServerDriverSpec.kt +16 -19
  37. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetSocketDriverSpec.kt +16 -19
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/NetConfig.kt +1 -1
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/RustCNetOnLoad.kt +1 -1
  40. package/nitrogen/generated/ios/RustCNet+autolinking.rb +1 -1
  41. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.cpp +1 -1
  42. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.hpp +17 -5
  43. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Umbrella.hpp +4 -1
  44. package/nitrogen/generated/ios/RustCNetAutolinking.mm +1 -1
  45. package/nitrogen/generated/ios/RustCNetAutolinking.swift +5 -1
  46. package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.cpp +1 -1
  47. package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.hpp +12 -2
  48. package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.cpp +1 -1
  49. package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.hpp +7 -1
  50. package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.cpp +1 -1
  51. package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.hpp +7 -1
  52. package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.cpp +1 -1
  53. package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.hpp +7 -1
  54. package/nitrogen/generated/ios/swift/Func_void_double_std__shared_ptr_ArrayBuffer_.swift +1 -2
  55. package/nitrogen/generated/ios/swift/HttpParsedMessage.swift +47 -0
  56. package/nitrogen/generated/ios/swift/HybridHttpParserSpec.swift +4 -5
  57. package/nitrogen/generated/ios/swift/HybridHttpParserSpec_cxx.swift +13 -6
  58. package/nitrogen/generated/ios/swift/HybridNetDriverSpec.swift +3 -4
  59. package/nitrogen/generated/ios/swift/HybridNetDriverSpec_cxx.swift +9 -2
  60. package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec.swift +3 -4
  61. package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec_cxx.swift +49 -7
  62. package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec.swift +3 -4
  63. package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec_cxx.swift +25 -4
  64. package/nitrogen/generated/ios/swift/NetConfig.swift +9 -3
  65. package/nitrogen/generated/shared/c++/HttpParsedMessage.hpp +89 -0
  66. package/nitrogen/generated/shared/c++/HybridHttpParserSpec.cpp +1 -1
  67. package/nitrogen/generated/shared/c++/HybridHttpParserSpec.hpp +5 -4
  68. package/nitrogen/generated/shared/c++/HybridNetDriverSpec.cpp +1 -1
  69. package/nitrogen/generated/shared/c++/HybridNetDriverSpec.hpp +1 -1
  70. package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.cpp +1 -1
  71. package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.hpp +1 -1
  72. package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.cpp +1 -1
  73. package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.hpp +1 -1
  74. package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.cpp +1 -1
  75. package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.hpp +1 -1
  76. package/nitrogen/generated/shared/c++/NetConfig.hpp +1 -1
  77. package/package.json +4 -5
  78. package/src/Net.nitro.ts +6 -2
  79. package/src/http.ts +37 -19
  80. 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
- if (result.startsWith('ERROR:')) {
410
+ const metadata = result.metadata;
411
+ if (metadata.startsWith('ERROR:')) {
405
412
  if (headersTimer)
406
413
  clearTimeout(headersTimer);
407
- this.emit('error', new Error(result));
414
+ this.emit('error', new Error(metadata));
408
415
  socket.destroy();
409
416
  return;
410
417
  }
411
- const parsed = JSON.parse(result);
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 = 100; // Safety limit
501
+ const maxIterations = 2000; // Safety limit
492
502
  while (iterations < maxIterations) {
493
503
  iterations++;
494
504
  const result = parser.feed(input);
495
- if (!result || result === '' || result.startsWith('ERROR:')) {
505
+ const metadata = result.metadata;
506
+ if (!metadata || metadata === '' || metadata.startsWith('ERROR:')) {
496
507
  // Empty result (partial) or error - exit loop
497
- if (result && result.startsWith('ERROR:')) {
498
- debugLog(`[HTTP] Server: Parser error: ${result}`);
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
- if (result.startsWith('ERROR:')) {
886
- this.emit('error', new Error(result));
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(result);
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 = 100; // Safety limit
964
+ const maxIterations = 2000; // Safety limit
950
965
  while (iterations < maxIterations) {
951
966
  iterations++;
952
967
  const result = parser.feed(input);
953
- if (!result || result === '' || result.startsWith('ERROR:')) {
968
+ const metadata = result.metadata;
969
+ if (!metadata || metadata === '' || metadata.startsWith('ERROR:')) {
954
970
  // Empty result (partial) or error - exit loop
955
- if (result && result.startsWith('ERROR:')) {
956
- debugLog(`[HTTP] ClientRequest: Parser error: ${result}`);
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":"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"}
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 === 3) { // ERROR
297
- const msg = new TextDecoder().decode(data);
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 === 9) { // SESSION/DEBUG
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 = data ? Buffer.from(data).toString() : 'Unknown socket error';
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 = Buffer.from(data).toString();
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 = data ? Buffer.from(data).toString() : '';
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(data ? Buffer.from(data).toString() : 'Unknown server 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 © 2026 Marc Rousavy @ Margelo
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 © 2026 Marc Rousavy @ Margelo
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 © 2026 Marc Rousavy @ Margelo
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
- using namespace facebook;
31
-
32
- return facebook::jni::initialize(vm, [] {
33
- // Register native JNI methods
34
- margelo::nitro::net::JHybridNetSocketDriverSpec::registerNatives();
35
- margelo::nitro::net::JFunc_void_double_std__shared_ptr_ArrayBuffer__cxx::registerNatives();
36
- margelo::nitro::net::JHybridNetServerDriverSpec::registerNatives();
37
- margelo::nitro::net::JHybridHttpParserSpec::registerNatives();
38
- margelo::nitro::net::JHybridNetDriverSpec::registerNatives();
39
-
40
- // Register Nitro Hybrid Objects
41
- HybridObjectRegistry::registerHybridObjectConstructor(
42
- "NetDriver",
43
- []() -> std::shared_ptr<HybridObject> {
44
- static_assert(std::is_default_constructible_v<HybridNetDriver>,
45
- "The HybridObject \"HybridNetDriver\" is not default-constructible! "
46
- "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
47
- return std::make_shared<HybridNetDriver>();
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 © 2026 Marc Rousavy @ Margelo
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
- * Initializes the native (C++) part of RustCNet, and autolinks all Hybrid Objects.
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 margelo::nitro::net::initialize(vm);
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
- int initialize(JavaVM* vm);
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 © 2026 Marc Rousavy @ Margelo
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 © 2026 Marc Rousavy @ Margelo
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
- jni::local_ref<JHybridHttpParserSpec::jhybriddata> JHybridHttpParserSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
19
- return makeCxxInstance(jThis);
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
- void JHybridHttpParserSpec::registerNatives() {
23
- registerHybrid({
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
- void JHybridHttpParserSpec::dispose() noexcept {
34
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
35
- method(_javaPart);
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
- std::string JHybridHttpParserSpec::toString() {
39
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
40
- auto javaString = method(_javaPart);
41
- return javaString->toStdString();
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
- std::string JHybridHttpParserSpec::feed(const std::shared_ptr<ArrayBuffer>& data) {
49
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<JArrayBuffer::javaobject> /* data */)>("feed");
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->toStdString();
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 © 2026 Marc Rousavy @ Margelo
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 jni::HybridClass<JHybridHttpParserSpec, JHybridObject>,
22
- public virtual HybridHttpParserSpec {
21
+ class JHybridHttpParserSpec: public virtual HybridHttpParserSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/net/HybridHttpParserSpec;";
25
- static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
- static void registerNatives();
27
-
28
- protected:
29
- // C++ constructor (called from Java via `initHybrid()`)
30
- explicit JHybridHttpParserSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridHttpParserSpec::TAG),
32
- HybridBase(jThis),
33
- _javaPart(jni::make_global(jThis)) {}
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
- size_t getExternalMemorySize() noexcept override;
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
- std::string feed(const std::shared_ptr<ArrayBuffer>& data) override;
57
+ HttpParsedMessage feed(const std::shared_ptr<ArrayBuffer>& data) override;
58
58
 
59
59
  private:
60
- friend HybridBase;
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