Skip to content

Commit c13fc27

Browse files
authored
Merge pull request #54 from jerson/debug-fix
Debug fix
2 parents 424f40f + f854032 commit c13fc27

File tree

8 files changed

+169
-112
lines changed

8 files changed

+169
-112
lines changed

android/fast-rsa-adapter.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,33 +51,33 @@ extern "C"
5151
JNIEXPORT jbyteArray JNICALL
5252
Java_com_reactnativefastrsa_FastRsaModule_callJSI(JNIEnv *env, jobject thiz, jlong jsi_ptr,
5353
jstring name, jbyteArray payload) {
54-
auto runtime = reinterpret_cast<jsi::Runtime *>(jsi_ptr);
54+
auto &runtime = *reinterpret_cast<jsi::Runtime *>(jsi_ptr);
5555
auto nameConstChar = env->GetStringUTFChars(name, nullptr);
5656
auto payloadBytes = env->GetByteArrayElements(payload, nullptr);
5757
auto size = env->GetArrayLength(payload);
5858

59-
auto nameValue = jsi::String::createFromAscii(*runtime, nameConstChar);
59+
auto nameValue = jsi::String::createFromAscii(runtime, nameConstChar);
6060
env->ReleaseStringUTFChars(name, nameConstChar);
6161

6262

63-
auto arrayBuffer = runtime->global().getPropertyAsFunction(*runtime, "ArrayBuffer");
64-
jsi::Object o = arrayBuffer.callAsConstructor(*runtime, size).getObject(*runtime);
65-
jsi::ArrayBuffer payloadValue = o.getArrayBuffer(*runtime);
66-
memcpy(payloadValue.data(*runtime), payloadBytes, size);
63+
auto arrayBuffer = runtime.global().getPropertyAsFunction(runtime, "ArrayBuffer");
64+
jsi::Object o = arrayBuffer.callAsConstructor(runtime, size).getObject(runtime);
65+
jsi::ArrayBuffer payloadValue = o.getArrayBuffer(runtime);
66+
memcpy(payloadValue.data(runtime), payloadBytes, size);
6767
env->ReleaseByteArrayElements(payload, payloadBytes, 0);
6868

69-
auto response = fastRSA::call(*runtime, nameValue, payloadValue);
69+
auto response = fastRSA::call(runtime, nameValue, payloadValue);
7070

7171
if (response.isString()) {
72-
auto error = response.asString(*runtime);
72+
auto error = response.asString(runtime);
7373
jclass Exception = env->FindClass("java/lang/Exception");
74-
env->ThrowNew(Exception, error.utf8(*runtime).c_str());
74+
env->ThrowNew(Exception, error.utf8(runtime).c_str());
7575
return nullptr;
7676

7777
}
78-
auto byteResult = response.asObject(*runtime).getArrayBuffer(*runtime);
79-
auto sizeResult = byteResult.size(*runtime);
78+
auto byteResult = response.asObject(runtime).getArrayBuffer(runtime);
79+
auto sizeResult = byteResult.size(runtime);
8080
auto result = env->NewByteArray(sizeResult);
81-
env->SetByteArrayRegion(result, 0, sizeResult, (jbyte*) byteResult.data(*runtime));
81+
env->SetByteArrayRegion(result, 0, sizeResult, (jbyte*) byteResult.data(runtime));
8282
return result;
83-
}
83+
}
Lines changed: 77 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,93 @@
11
package com.reactnativefastrsa
22

3-
import androidx.annotation.NonNull
3+
import android.util.Log
44
import com.facebook.react.bridge.*
55

66
@ExperimentalUnsignedTypes
77
internal class FastRsaModule(reactContext: ReactApplicationContext) :
8-
ReactContextBaseJavaModule(reactContext) {
8+
ReactContextBaseJavaModule(reactContext) {
99

10-
external fun initialize(jsiPtr: Long);
11-
external fun destruct();
12-
external fun callJSI(jsiPtr: Long, name: String, payload: ByteArray): ByteArray;
13-
external fun callNative(name: String, payload: ByteArray): ByteArray;
10+
val TAG = "[FastRsaModule]"
1411

15-
companion object {
16-
init {
17-
System.loadLibrary("fast-rsa")
18-
}
19-
}
12+
external fun initialize(jsiPtr: Long);
13+
external fun destruct();
14+
external fun callJSI(jsiPtr: Long, name: String, payload: ByteArray): ByteArray;
15+
external fun callNative(name: String, payload: ByteArray): ByteArray;
2016

21-
@ReactMethod
22-
fun callJSI(name: String, payload: ReadableArray, promise: Promise) {
23-
Thread {
24-
try {
25-
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
26-
var result =
27-
callJSI(this.reactApplicationContext.javaScriptContextHolder.get(), name, bytes)
28-
val resultList = Arguments.createArray()
29-
for (i in result.indices) {
30-
resultList.pushInt(result[i].toInt())
31-
}
32-
result = ByteArray(0);
33-
promise.resolve(resultList)
34-
} catch (e: Exception) {
35-
promise.reject(e)
36-
}
37-
}.start()
17+
companion object {
18+
init {
19+
System.loadLibrary("fast-rsa")
3820
}
21+
}
3922

40-
@ReactMethod
41-
fun call(name: String, payload: ReadableArray, promise: Promise) {
42-
Thread {
43-
try {
44-
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
45-
var result = callNative(name, bytes)
46-
val resultList = Arguments.createArray()
47-
for (i in result.indices) {
48-
resultList.pushInt(result[i].toInt())
49-
}
50-
result = ByteArray(0);
51-
promise.resolve(resultList)
52-
} catch (e: Exception) {
53-
promise.reject(e)
54-
}
55-
}.start()
56-
}
23+
@ReactMethod
24+
fun callJSI(name: String, payload: ReadableArray, promise: Promise) {
25+
Thread {
26+
reactApplicationContext.runOnJSQueueThread {
27+
try {
28+
val contextHolder = this.reactApplicationContext.javaScriptContextHolder.get()
29+
if (contextHolder.toInt() == 0) {
30+
call(name, payload, promise)
31+
return@runOnJSQueueThread
32+
}
33+
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
34+
val result = callJSI(contextHolder, name, bytes)
35+
val resultList = Arguments.createArray()
36+
for (i in result.indices) {
37+
resultList.pushInt(result[i].toInt())
38+
}
39+
promise.resolve(resultList)
40+
} catch (e: Exception) {
41+
promise.reject(e)
42+
}
43+
}
44+
}.start()
45+
}
5746

58-
@NonNull
59-
override fun getName(): String {
60-
return "FastRSA"
61-
}
47+
@ReactMethod
48+
fun call(name: String, payload: ReadableArray, promise: Promise) {
49+
Thread {
50+
try {
51+
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
52+
val result = callNative(name, bytes)
53+
val resultList = Arguments.createArray()
54+
for (i in result.indices) {
55+
resultList.pushInt(result[i].toInt())
56+
}
57+
promise.resolve(resultList)
58+
} catch (e: Exception) {
59+
promise.reject(e)
60+
}
61+
}.start()
62+
}
6263

63-
override fun initialize() {
64-
super.initialize()
65-
reactApplicationContext.runOnJSQueueThread {
66-
initialize(this.reactApplicationContext.javaScriptContextHolder.get())
64+
@ReactMethod()
65+
fun install(promise: Promise) {
66+
Thread {
67+
reactApplicationContext.runOnJSQueueThread {
68+
Log.d(TAG, "installing")
69+
try {
70+
val contextHolder = this.reactApplicationContext.javaScriptContextHolder.get()
71+
if (contextHolder.toInt() == 0) {
72+
promise.resolve(false)
73+
return@runOnJSQueueThread
74+
}
75+
initialize(contextHolder)
76+
Log.i(TAG, "successfully installed")
77+
promise.resolve(true)
78+
} catch (exception: java.lang.Exception) {
79+
Log.e(TAG, "failed to install JSI", exception)
80+
promise.reject(exception)
6781
}
68-
}
82+
}
83+
}.start()
84+
}
6985

70-
override fun onCatalystInstanceDestroy() {
71-
destruct();
72-
}
86+
override fun getName(): String {
87+
return "FastRSA"
88+
}
89+
90+
override fun onCatalystInstanceDestroy() {
91+
destruct();
92+
}
7393
}

android/src/main/java/com/reactnativefastrsa/FastRsaPackage.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import com.facebook.react.uimanager.ViewManager
77

88

99
class FastRsaPackage : ReactPackage {
10+
@OptIn(ExperimentalUnsignedTypes::class)
1011
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
1112
return listOf(FastRsaModule(reactContext))
1213
}
1314

1415
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
1516
return emptyList()
1617
}
18+
1719
}

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ PODS:
272272
- React-jsinspector (0.66.0)
273273
- React-logger (0.66.0):
274274
- glog
275-
- react-native-fast-rsa (2.3.2):
275+
- react-native-fast-rsa (2.3.3):
276276
- React-Core
277277
- React-perflogger (0.66.0)
278278
- React-RCTActionSheet (0.66.0):
@@ -511,7 +511,7 @@ SPEC CHECKSUMS:
511511
React-jsiexecutor: 6a05173dc0142abc582bd4edd2d23146b8cc218a
512512
React-jsinspector: be95ad424ba9f7b817aff22732eb9b1b810a000a
513513
React-logger: 9a9cd87d4ea681ae929b32ef580638ff1b50fb24
514-
react-native-fast-rsa: 74c2959f6573ce45da901b634ef6ca612112ce57
514+
react-native-fast-rsa: 0e48ab5360797a31910e982437a396d8c8f6fdfd
515515
React-perflogger: 1f554c2b684e2f484f9edcdfdaeedab039fbaca8
516516
React-RCTActionSheet: 610d5a5d71ab4808734782c8bca6a12ec3563672
517517
React-RCTAnimation: ec6ed97370ace32724c253f29f0586cafcab8126

ios/FastRSA.mm

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ @implementation FastRSA
1818
[payload enumerateObjectsUsingBlock:^(NSNumber* number, NSUInteger index, BOOL* stop){
1919
bytesCopy[index] = number.integerValue;
2020
}];
21-
21+
2222
char *cname= strdup([name UTF8String]);
2323
auto response = RSABridgeCall(cname, bytesCopy, (int)payload.count);
2424
free(bytesCopy);
2525
free(cname);
26-
26+
2727
if(response->error!=nil){
2828
NSString * error = @(response->error);
2929
if(![error isEqual:@""]){
@@ -32,71 +32,87 @@ @implementation FastRSA
3232
return;
3333
}
3434
}
35-
35+
3636
auto bytesResult= (Byte*)malloc( response->size);
3737
memcpy(bytesResult, response->message, response->size);
38-
39-
38+
39+
4040
NSMutableArray* result = [[NSMutableArray alloc] init];
4141
for (int i=0; i<response->size; i++) {
4242
result[i]=[NSNumber numberWithInt:(int)bytesResult[i]];
4343
}
4444
free(response);
4545
free(bytesResult);
46-
46+
4747
resolve(result);
4848
}
4949

5050
RCT_REMAP_METHOD(callJSI,callJSI:(nonnull NSString*)name withPayload:(nonnull NSArray*)payload
5151
withResolver:(RCTPromiseResolveBlock)resolve
5252
withReject:(RCTPromiseRejectBlock)reject)
5353
{
54+
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
55+
if (!cxxBridge.runtime) {
56+
[self call:name withPayload:payload withResolver:resolve withReject:reject];
57+
return;
58+
}
59+
5460
auto bytesCopy = (Byte*)malloc(payload.count);
5561
[payload enumerateObjectsUsingBlock:^(NSNumber* number, NSUInteger index, BOOL* stop){
5662
bytesCopy[index] = number.integerValue;
5763
}];
5864
char *cname= strdup([name UTF8String]);
5965
int size = (int) payload.count;
60-
61-
62-
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
63-
if (!cxxBridge.runtime) {
64-
reject(@"E001",@"bridge not found",nil);
65-
return;
66-
}
66+
6767
jsi::Runtime * runtime = (jsi::Runtime *)cxxBridge.runtime;
68-
68+
6969
auto nameValue = jsi::String::createFromAscii(*runtime, cname);
7070
auto arrayBuffer = runtime->global().getPropertyAsFunction(*runtime, "ArrayBuffer");
7171
jsi::Object o = arrayBuffer.callAsConstructor(*runtime, size).getObject(*runtime);
7272
jsi::ArrayBuffer payloadValue = o.getArrayBuffer(*runtime);
7373
memcpy(payloadValue.data(*runtime), bytesCopy, size);
74-
74+
7575
auto response = fastRSA::call(*runtime, nameValue, payloadValue);
7676
free(bytesCopy);
7777
free(cname);
78-
79-
78+
79+
8080
if(response.isString()){
8181
NSString * error = [NSString stringWithUTF8String:response.asString(*runtime).utf8(*runtime).c_str()];
8282
if(![error isEqual:@""]){
8383
reject(@"E001",error,nil);
8484
return;
8585
}
8686
}
87-
87+
8888
auto byteResult = response.asObject(*runtime).getArrayBuffer(*runtime);
8989
auto sizeResult = byteResult.size(*runtime);
9090
auto dataResult = byteResult.data(*runtime);
91-
91+
9292
NSMutableArray* result = [[NSMutableArray alloc] init];
9393
for (int i=0; i<sizeResult; i++) {
9494
result[i]=[NSNumber numberWithInt:(int)dataResult[i]];
9595
}
96-
96+
9797
resolve(result);
9898
}
9999

100+
RCT_REMAP_METHOD(install,installWithResolver:(RCTPromiseResolveBlock)resolve
101+
withReject:(RCTPromiseRejectBlock)reject)
102+
{
103+
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
104+
if (!cxxBridge.runtime) {
105+
NSNumber * val = [NSNumber numberWithBool:NO];
106+
resolve(val);
107+
return;
108+
}
109+
jsi::Runtime * runtime = (jsi::Runtime *)cxxBridge.runtime;
110+
111+
fastRSA::install(*runtime);
112+
NSNumber * val = [NSNumber numberWithBool:TRUE];
113+
resolve(val);
114+
}
115+
100116
+ (BOOL)requiresMainQueueSetup {
101117
return YES;
102118
}
@@ -105,15 +121,6 @@ - (void)setBridge:(RCTBridge *)bridge
105121
{
106122
_bridge = bridge;
107123
_setBridgeOnMainQueue = RCTIsMainQueue();
108-
109-
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
110-
if (!cxxBridge.runtime) {
111-
return;
112-
}
113-
jsi::Runtime * runtime = (jsi::Runtime *)cxxBridge.runtime;
114-
115-
fastRSA::install(*runtime);
116-
117124
}
118125

119126
- (void)invalidate {

0 commit comments

Comments
 (0)