diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-convertor.c b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-convertor.c new file mode 100644 index 0000000..920882d --- /dev/null +++ b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-convertor.c @@ -0,0 +1,57 @@ +#include "lpac-convertor.h" + +jobject profile_state_enabled; +jobject profile_state_disabled; +jobject profile_class_operational; +jobject profile_class_provisioning; +jobject profile_class_testing; + +static jobject bind_static_field(JNIEnv *env, jclass clazz, const char *name, const char *sig) { + jfieldID field = (*env)->GetStaticFieldID(env, clazz, name, sig); + jobject bound = (*env)->GetStaticObjectField(env, clazz, field); + return (*env)->NewGlobalRef(env, bound); +} + +#define BIND_PROFILE_STATE_STATIC_FIELD(NAME, FIELD) \ + profile_state_##NAME = bind_static_field(env, profile_state_class, FIELD, "L" PROFILE_STATE_CLASS ";") + +#define BIND_PROFILE_CLASS_STATIC_FIELD(NAME, FIELD) \ + profile_class_##NAME = bind_static_field(env, profile_class_class, FIELD, "L" PROFILE_CLASS_CLASS ";") + +void lpac_convertor_init(JNIEnv *env) { + jclass profile_state_class = (*env)->FindClass(env, PROFILE_STATE_CLASS); + BIND_PROFILE_STATE_STATIC_FIELD(enabled, "Enabled"); + BIND_PROFILE_STATE_STATIC_FIELD(disabled, "Disabled"); + + jclass profile_class_class = (*env)->FindClass(env, PROFILE_CLASS_CLASS); + BIND_PROFILE_CLASS_STATIC_FIELD(operational, "Operational"); + BIND_PROFILE_CLASS_STATIC_FIELD(provisioning, "Provisioning"); + BIND_PROFILE_CLASS_STATIC_FIELD(testing, "Testing"); +} + +#undef BIND_PROFILE_STATE_STATIC_FIELD +#undef BIND_PROFILE_CLASS_STATIC_FIELD + +jobject to_profile_state(enum es10c_profile_state profile_state) { + switch (profile_state) { + case ES10C_PROFILE_STATE_ENABLED: + return profile_state_enabled; + case ES10C_PROFILE_STATE_DISABLED: + return profile_state_disabled; + default: + return NULL; + } +} + +jobject to_profile_class(enum es10c_profile_class profile_class) { + switch (profile_class) { + case ES10C_PROFILE_CLASS_OPERATIONAL: + return profile_class_operational; + case ES10C_PROFILE_CLASS_PROVISIONING: + return profile_class_provisioning; + case ES10C_PROFILE_CLASS_TEST: + return profile_class_testing; + default: + return NULL; + } +} \ No newline at end of file diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-convertor.h b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-convertor.h new file mode 100644 index 0000000..e8a08be --- /dev/null +++ b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-convertor.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +jobject profile_state_enabled; +jobject profile_state_disabled; +jobject profile_class_operational; +jobject profile_class_provisioning; +jobject profile_class_testing; + +#define PROFILE_STATE_CLASS "net/typeblog/lpac_jni/ProfileState" +#define PROFILE_CLASS_CLASS "net/typeblog/lpac_jni/ProfileClass" + +void lpac_convertor_init(JNIEnv *env); + +jobject to_profile_state(enum es10c_profile_state profile_state); + +jobject to_profile_class(enum es10c_profile_class profile_class); diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c index edb51b4..33a31e5 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c @@ -9,6 +9,7 @@ #include "lpac-download.h" #include "lpac-notifications.h" #include "interface-wrapper.h" +#include "lpac-convertor.h" JavaVM *jvm = NULL; @@ -17,25 +18,18 @@ jstring empty_string; jclass string_class; jmethodID string_constructor; -jobject profile_state_enabled; -jobject profile_state_disabled; -jobject profile_class_operational; -jobject profile_class_provisioning; -jobject profile_class_testing; - #define LOCAL_PROFILE_INFO_CLASS "net/typeblog/lpac_jni/LocalProfileInfo" -#define PROFILE_STATE_CLASS "net/typeblog/lpac_jni/ProfileState" -#define PROFILE_CLASS_CLASS "net/typeblog/lpac_jni/ProfileClass" + jint JNI_OnLoad(JavaVM *vm, void *reserved) { jvm = vm; LPAC_JNI_SETUP_ENV; interface_wrapper_init(); + lpac_convertor_init(env); lpac_download_init(); lpac_profile_init(env); - string_class = (*env)->FindClass(env, "java/lang/String"); string_class = (*env)->NewGlobalRef(env, string_class); string_constructor = (*env)->GetMethodID(env, string_class, "", @@ -48,32 +42,9 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_VERSION_1_6; } -static jobject bind_static_field(JNIEnv *env, jclass clazz, const char *name, const char *sig) { - jfieldID field = (*env)->GetStaticFieldID(env, clazz, name, sig); - jobject bound = (*env)->GetStaticObjectField(env, clazz, field); - return (*env)->NewGlobalRef(env, bound); -} - -#define BIND_PROFILE_STATE_STATIC_FIELD(NAME, FIELD) \ - profile_state_##NAME = bind_static_field(env, profile_state_class, FIELD, "L" PROFILE_STATE_CLASS ";") - -#define BIND_PROFILE_CLASS_STATIC_FIELD(NAME, FIELD) \ - profile_class_##NAME = bind_static_field(env, profile_class_class, FIELD, "L" PROFILE_CLASS_CLASS ";") - void lpac_profile_init(JNIEnv *env) { - jclass profile_state_class = (*env)->FindClass(env, PROFILE_STATE_CLASS); - BIND_PROFILE_STATE_STATIC_FIELD(enabled, "Enabled"); - BIND_PROFILE_STATE_STATIC_FIELD(disabled, "Disabled"); - - jclass profile_class_class = (*env)->FindClass(env, PROFILE_CLASS_CLASS); - BIND_PROFILE_CLASS_STATIC_FIELD(operational, "Operational"); - BIND_PROFILE_CLASS_STATIC_FIELD(provisioning, "Provisioning"); - BIND_PROFILE_CLASS_STATIC_FIELD(testing, "Testing"); } -#undef BIND_PROFILE_STATE_STATIC_FIELD -#undef BIND_PROFILE_CLASS_STATIC_FIELD - JNIEXPORT jlong JNICALL Java_net_typeblog_lpac_1jni_LpacJni_createContext(JNIEnv *env, jobject thiz, jbyteArray isdr_aid, @@ -168,30 +139,6 @@ Java_net_typeblog_lpac_1jni_LpacJni_es10cGetEid(JNIEnv *env, jobject thiz, jlong return ret; } -static jobject to_profile_state(enum es10c_profile_state profile_state) { - switch (profile_state) { - case ES10C_PROFILE_STATE_ENABLED: - return profile_state_enabled; - case ES10C_PROFILE_STATE_DISABLED: - return profile_state_disabled; - default: - return NULL; - } -} - -static jobject to_profile_class(enum es10c_profile_class profile_class) { - switch (profile_class) { - case ES10C_PROFILE_CLASS_OPERATIONAL: - return profile_class_operational; - case ES10C_PROFILE_CLASS_PROVISIONING: - return profile_class_provisioning; - case ES10C_PROFILE_CLASS_TEST: - return profile_class_testing; - default: - return NULL; - } -} - JNIEXPORT jlong JNICALL Java_net_typeblog_lpac_1jni_LpacJni_es10cGetProfilesInfo( JNIEnv *env,