|
@@ -37,17 +37,30 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
|
|
|
|
|
|
|
|
JNIEXPORT jlong JNICALL
|
|
JNIEXPORT jlong JNICALL
|
|
|
Java_net_typeblog_lpac_1jni_LpacJni_createContext(JNIEnv *env, jobject thiz,
|
|
Java_net_typeblog_lpac_1jni_LpacJni_createContext(JNIEnv *env, jobject thiz,
|
|
|
|
|
+ jbyteArray isdr_aid,
|
|
|
jobject apdu_interface,
|
|
jobject apdu_interface,
|
|
|
jobject http_interface) {
|
|
jobject http_interface) {
|
|
|
struct lpac_jni_ctx *jni_ctx = NULL;
|
|
struct lpac_jni_ctx *jni_ctx = NULL;
|
|
|
struct euicc_ctx *ctx = NULL;
|
|
struct euicc_ctx *ctx = NULL;
|
|
|
|
|
+ jbyte *isdr_java = NULL;
|
|
|
|
|
+ uint32_t isdr_len = 0;
|
|
|
|
|
+ uint8_t *isdr_c = NULL;
|
|
|
|
|
|
|
|
ctx = calloc(1, sizeof(struct euicc_ctx));
|
|
ctx = calloc(1, sizeof(struct euicc_ctx));
|
|
|
jni_ctx = calloc(1, sizeof(struct lpac_jni_ctx));
|
|
jni_ctx = calloc(1, sizeof(struct lpac_jni_ctx));
|
|
|
|
|
+
|
|
|
|
|
+ isdr_java = (*env)->GetByteArrayElements(env, isdr_aid, JNI_FALSE);
|
|
|
|
|
+ isdr_len = (*env)->GetArrayLength(env, isdr_aid);
|
|
|
|
|
+ isdr_c = calloc(isdr_len, sizeof(uint8_t));
|
|
|
|
|
+ memcpy(isdr_c, isdr_java, isdr_len);
|
|
|
|
|
+ (*env)->ReleaseByteArrayElements(env, isdr_aid, isdr_java, JNI_ABORT);
|
|
|
|
|
+
|
|
|
ctx->apdu.interface = &lpac_jni_apdu_interface;
|
|
ctx->apdu.interface = &lpac_jni_apdu_interface;
|
|
|
ctx->http.interface = &lpac_jni_http_interface;
|
|
ctx->http.interface = &lpac_jni_http_interface;
|
|
|
jni_ctx->apdu_interface = (*env)->NewGlobalRef(env, apdu_interface);
|
|
jni_ctx->apdu_interface = (*env)->NewGlobalRef(env, apdu_interface);
|
|
|
jni_ctx->http_interface = (*env)->NewGlobalRef(env, http_interface);
|
|
jni_ctx->http_interface = (*env)->NewGlobalRef(env, http_interface);
|
|
|
|
|
+ ctx->aid = (const uint8_t *) isdr_c;
|
|
|
|
|
+ ctx->aid_len = isdr_len;
|
|
|
ctx->userdata = (void *) jni_ctx;
|
|
ctx->userdata = (void *) jni_ctx;
|
|
|
return (jlong) ctx;
|
|
return (jlong) ctx;
|
|
|
}
|
|
}
|
|
@@ -60,6 +73,7 @@ Java_net_typeblog_lpac_1jni_LpacJni_destroyContext(JNIEnv *env, jobject thiz, jl
|
|
|
(*env)->DeleteGlobalRef(env, jni_ctx->apdu_interface);
|
|
(*env)->DeleteGlobalRef(env, jni_ctx->apdu_interface);
|
|
|
(*env)->DeleteGlobalRef(env, jni_ctx->http_interface);
|
|
(*env)->DeleteGlobalRef(env, jni_ctx->http_interface);
|
|
|
free(jni_ctx);
|
|
free(jni_ctx);
|
|
|
|
|
+ free((void *) ctx->aid);
|
|
|
free(ctx);
|
|
free(ctx);
|
|
|
}
|
|
}
|
|
|
|
|
|