diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml deleted file mode 100644 index 4a53bee..0000000 --- a/.idea/AndroidProjectSystem.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/interface-wrapper.c b/libs/lpac-jni/src/main/jni/lpac-jni/interface-wrapper.c index 47f481b..a61fc96 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/interface-wrapper.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/interface-wrapper.c @@ -13,29 +13,22 @@ jmethodID method_http_transmit; jfieldID field_resp_rcode; jfieldID field_resp_data; -#define APDU_INTERFACE "net/typeblog/lpac_jni/ApduInterface" -#define HTTP_INTERFACE "net/typeblog/lpac_jni/HttpInterface" -#define HTTP_RESPONSE_CLASS HTTP_INTERFACE "$HttpResponse" -#define JSTR "Ljava/lang/String;" - void interface_wrapper_init() { LPAC_JNI_SETUP_ENV; - jclass apdu_class = (*env)->FindClass(env, APDU_INTERFACE); - method_apdu_connect = (*env)->GetMethodID( - env, apdu_class, "connect", "()V"); - method_apdu_disconnect = (*env)->GetMethodID( - env, apdu_class, "disconnect", "()V"); - method_apdu_logical_channel_open = (*env)->GetMethodID( - env, apdu_class, "logicalChannelOpen", "([B)I"); - method_apdu_logical_channel_close = (*env)->GetMethodID( - env, apdu_class, "logicalChannelClose", "(I)V"); - method_apdu_transmit = (*env)->GetMethodID( - env, apdu_class, "transmit", "(I[B)[B"); + jclass apdu_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/ApduInterface"); + method_apdu_connect = (*env)->GetMethodID(env, apdu_class, "connect", "()V"); + method_apdu_disconnect = (*env)->GetMethodID(env, apdu_class, "disconnect", "()V"); + method_apdu_logical_channel_open = (*env)->GetMethodID(env, apdu_class, "logicalChannelOpen", + "([B)I"); + method_apdu_logical_channel_close = (*env)->GetMethodID(env, apdu_class, "logicalChannelClose", + "(I)V"); + method_apdu_transmit = (*env)->GetMethodID(env, apdu_class, "transmit", "(I[B)[B"); - jclass http_class = (*env)->FindClass(env, HTTP_INTERFACE); - method_http_transmit = (*env)->GetMethodID( - env, http_class, "transmit", "(" JSTR "[B[" JSTR ")" "L" HTTP_RESPONSE_CLASS ";"); - jclass resp_class = (*env)->FindClass(env, HTTP_RESPONSE_CLASS); + jclass http_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/HttpInterface"); + method_http_transmit = (*env)->GetMethodID(env, http_class, "transmit", + "(Ljava/lang/String;[B[Ljava/lang/String;)Lnet/typeblog/lpac_jni/HttpInterface$HttpResponse;"); + + jclass resp_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/HttpInterface$HttpResponse"); field_resp_rcode = (*env)->GetFieldID(env, resp_class, "rcode", "I"); field_resp_data = (*env)->GetFieldID(env, resp_class, "data", "[B"); } @@ -43,7 +36,7 @@ void interface_wrapper_init() { static int apdu_interface_connect(struct euicc_ctx *ctx) { LPAC_JNI_SETUP_ENV; (*env)->CallVoidMethod(env, LPAC_JNI_CTX(ctx)->apdu_interface, method_apdu_connect); - LPAC_JNI_EXCEPTION_RETURN + LPAC_JNI_EXCEPTION_RETURN; return 0; } @@ -59,7 +52,7 @@ apdu_interface_logical_channel_open(struct euicc_ctx *ctx, const uint8_t *aid, u (*env)->SetByteArrayRegion(env, jbarr, 0, aid_len, (const jbyte *) aid); jint ret = (*env)->CallIntMethod(env, LPAC_JNI_CTX(ctx)->apdu_interface, method_apdu_logical_channel_open, jbarr); - LPAC_JNI_EXCEPTION_RETURN + LPAC_JNI_EXCEPTION_RETURN; LPAC_JNI_CTX(ctx)->logical_channel_id = ret; return ret; } @@ -76,18 +69,18 @@ static void apdu_interface_logical_channel_close(struct euicc_ctx *ctx, static int apdu_interface_transmit(struct euicc_ctx *ctx, uint8_t **rx, uint32_t *rx_len, const uint8_t *tx, uint32_t tx_len) { - jint logic_channel = LPAC_JNI_CTX(ctx)->logical_channel_id; + const int logic_channel = LPAC_JNI_CTX(ctx)->logical_channel_id; LPAC_JNI_SETUP_ENV; - jbyteArray txArr = (*env)->NewByteArray(env, (jsize) tx_len); - (*env)->SetByteArrayRegion(env, txArr, 0, (jsize) tx_len, (const jbyte *) tx); + jbyteArray txArr = (*env)->NewByteArray(env, tx_len); + (*env)->SetByteArrayRegion(env, txArr, 0, tx_len, (const jbyte *) tx); jbyteArray ret = (jbyteArray) (*env)->CallObjectMethod( env, LPAC_JNI_CTX(ctx)->apdu_interface, method_apdu_transmit, logic_channel, txArr ); - LPAC_JNI_EXCEPTION_RETURN + LPAC_JNI_EXCEPTION_RETURN; *rx_len = (*env)->GetArrayLength(env, ret); *rx = calloc(*rx_len, sizeof(uint8_t)); - (*env)->GetByteArrayRegion(env, ret, 0, (jsize) *rx_len, (jbyte *) rx); + (*env)->GetByteArrayRegion(env, ret, 0, *rx_len, *rx); (*env)->DeleteLocalRef(env, txArr); (*env)->DeleteLocalRef(env, ret); return 0; @@ -99,8 +92,8 @@ http_interface_transmit(struct euicc_ctx *ctx, const char *url, uint32_t *rcode, const char **headers) { LPAC_JNI_SETUP_ENV; jstring jurl = toJString(env, url); - jbyteArray txArr = (*env)->NewByteArray(env, (jsize) tx_len); - (*env)->SetByteArrayRegion(env, txArr, 0, (jsize) tx_len, (jbyte *) tx); + jbyteArray txArr = (*env)->NewByteArray(env, tx_len); + (*env)->SetByteArrayRegion(env, txArr, 0, tx_len, (const jbyte *) tx); int num_headers = 0; while (headers[num_headers] != NULL) { @@ -115,12 +108,12 @@ http_interface_transmit(struct euicc_ctx *ctx, const char *url, uint32_t *rcode, jobject ret = (*env)->CallObjectMethod(env, LPAC_JNI_CTX(ctx)->http_interface, method_http_transmit, jurl, txArr, headersArr); - LPAC_JNI_EXCEPTION_RETURN + LPAC_JNI_EXCEPTION_RETURN; *rcode = (*env)->GetIntField(env, ret, field_resp_rcode); jbyteArray rxArr = (jbyteArray) (*env)->GetObjectField(env, ret, field_resp_data); *rx_len = (*env)->GetArrayLength(env, rxArr); *rx = calloc(*rx_len, sizeof(uint8_t)); - (*env)->GetByteArrayRegion(env, rxArr, 0, (jsize) *rx_len, (jbyte *) *rx); + (*env)->GetByteArrayRegion(env, rxArr, 0, *rx_len, *rx); (*env)->DeleteLocalRef(env, txArr); (*env)->DeleteLocalRef(env, rxArr); (*env)->DeleteLocalRef(env, headersArr); diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-download.c b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-download.c index 450a727..028e30d 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-download.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-download.c @@ -5,9 +5,6 @@ #include #include "lpac-download.h" -#pragma clang diagnostic push -#pragma ide diagnostic ignored "UnusedParameter" - jobject download_state_preparing; jobject download_state_connecting; jobject download_state_authenticating; @@ -16,34 +13,47 @@ jobject download_state_finalizing; jmethodID on_state_update; -#define DOWNLOAD_CALLBACK_CLASS "net/typeblog/lpac_jni/ProfileDownloadCallback" -#define DOWNLOAD_STATE_CLASS DOWNLOAD_CALLBACK_CLASS "$DownloadState" - -static jobject -bind_download_state_field(JNIEnv *env, const char *field_name) { - jclass download_state_class = (*env)->FindClass(env, DOWNLOAD_STATE_CLASS); - jfieldID field = (*env)->GetStaticFieldID( - env, download_state_class, field_name, "L" DOWNLOAD_STATE_CLASS ";"); - jobject bound = (*env)->GetStaticObjectField( - env, download_state_class, field); - return (*env)->NewGlobalRef(env, bound); -} - void lpac_download_init() { LPAC_JNI_SETUP_ENV; - { - download_state_preparing = bind_download_state_field(env, "Preparing"); - download_state_connecting = bind_download_state_field(env, "Connecting"); - download_state_authenticating = bind_download_state_field(env, "Authenticating"); - download_state_downloading = bind_download_state_field(env, "Downloading"); - download_state_finalizing = bind_download_state_field(env, "Finalizing"); - } - { - jclass download_callback_class = (*env)->FindClass(env, DOWNLOAD_CALLBACK_CLASS); - on_state_update = (*env)->GetMethodID(env, download_callback_class, "onStateUpdate", - "(L" DOWNLOAD_STATE_CLASS ";)V"); - } + jclass download_state_class = (*env)->FindClass(env, + "net/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState"); + jfieldID download_state_preparing_field = (*env)->GetStaticFieldID(env, download_state_class, + "Preparing", + "Lnet/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState;"); + download_state_preparing = (*env)->GetStaticObjectField(env, download_state_class, + download_state_preparing_field); + download_state_preparing = (*env)->NewGlobalRef(env, download_state_preparing); + jfieldID download_state_connecting_field = (*env)->GetStaticFieldID(env, download_state_class, + "Connecting", + "Lnet/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState;"); + download_state_connecting = (*env)->GetStaticObjectField(env, download_state_class, + download_state_connecting_field); + download_state_connecting = (*env)->NewGlobalRef(env, download_state_connecting); + jfieldID download_state_authenticating_field = (*env)->GetStaticFieldID(env, + download_state_class, + "Authenticating", + "Lnet/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState;"); + download_state_authenticating = (*env)->GetStaticObjectField(env, download_state_class, + download_state_authenticating_field); + download_state_authenticating = (*env)->NewGlobalRef(env, download_state_authenticating); + jfieldID download_state_downloading_field = (*env)->GetStaticFieldID(env, download_state_class, + "Downloading", + "Lnet/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState;"); + download_state_downloading = (*env)->GetStaticObjectField(env, download_state_class, + download_state_downloading_field); + download_state_downloading = (*env)->NewGlobalRef(env, download_state_downloading); + jfieldID download_state_finalizng_field = (*env)->GetStaticFieldID(env, download_state_class, + "Finalizing", + "Lnet/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState;"); + download_state_finalizing = (*env)->GetStaticObjectField(env, download_state_class, + download_state_finalizng_field); + download_state_finalizing = (*env)->NewGlobalRef(env, download_state_finalizing); + + jclass download_callback_class = (*env)->FindClass(env, + "net/typeblog/lpac_jni/ProfileDownloadCallback"); + on_state_update = (*env)->GetMethodID(env, download_callback_class, "onStateUpdate", + "(Lnet/typeblog/lpac_jni/ProfileDownloadCallback$DownloadState;)V"); } JNIEXPORT jint JNICALL @@ -154,16 +164,18 @@ Java_net_typeblog_lpac_1jni_LpacJni_downloadErrCodeToString(JNIEnv *env, jobject ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_UNSUPPORTED_PROFILE_CLASS); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_SCP03T_STRUCTURE_ERROR); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_SCP03T_SECURITY_ERROR); - ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_ICCID_ALREADY_EXISTS_ON_EUICC); - ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_INSUFFICIENT_MEMORY_FOR_PROFILE); + ERRCODE_ENUM_TO_STRING( + ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_ICCID_ALREADY_EXISTS_ON_EUICC); + ERRCODE_ENUM_TO_STRING( + ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_INSUFFICIENT_MEMORY_FOR_PROFILE); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_INTERRUPTION); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_PE_PROCESSING_ERROR); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_ICCID_MISMATCH); - ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_TEST_PROFILE_INSTALL_FAILED_DUE_TO_INVALID_NAA_KEY); + ERRCODE_ENUM_TO_STRING( + ES10B_ERROR_REASON_TEST_PROFILE_INSTALL_FAILED_DUE_TO_INVALID_NAA_KEY); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_PPR_NOT_ALLOWED); ERRCODE_ENUM_TO_STRING(ES10B_ERROR_REASON_INSTALL_FAILED_DUE_TO_UNKNOWN_ERROR); default: return toJString(env, "ES10B_ERROR_REASON_UNDEFINED"); } -} -#pragma clang diagnostic pop \ No newline at end of file +} \ No newline at end of file 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 2fd5323..ca319db 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 @@ -10,9 +10,6 @@ #include "lpac-notifications.h" #include "interface-wrapper.h" -#pragma clang diagnostic push -#pragma ide diagnostic ignored "UnusedParameter" - JavaVM *jvm = NULL; jstring empty_string; @@ -28,8 +25,9 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { LPAC_JNI_SETUP_ENV; string_class = (*env)->FindClass(env, "java/lang/String"); string_class = (*env)->NewGlobalRef(env, string_class); - string_constructor = (*env)->GetMethodID( - env, string_class, "", "([BLjava/lang/String;)V"); + string_constructor = (*env)->GetMethodID(env, string_class, "", + "([BLjava/lang/String;)V"); + const jchar _unused[1]; empty_string = (*env)->NewString(env, _unused, 0); empty_string = (*env)->NewGlobalRef(env, empty_string); @@ -48,18 +46,12 @@ Java_net_typeblog_lpac_1jni_LpacJni_createContext(JNIEnv *env, jobject thiz, uint32_t isdr_len = 0; uint8_t *isdr_c = NULL; -#pragma clang diagnostic push -#pragma ide diagnostic ignored "MemoryLeak" ctx = calloc(1, sizeof(struct euicc_ctx)); jni_ctx = calloc(1, sizeof(struct lpac_jni_ctx)); -#pragma clang diagnostic pop isdr_java = (*env)->GetByteArrayElements(env, isdr_aid, JNI_FALSE); isdr_len = (*env)->GetArrayLength(env, isdr_aid); -#pragma clang diagnostic push -#pragma ide diagnostic ignored "MemoryLeak" isdr_c = calloc(isdr_len, sizeof(uint8_t)); -#pragma clang diagnostic pop memcpy(isdr_c, isdr_java, isdr_len); (*env)->ReleaseByteArrayElements(env, isdr_aid, isdr_java, JNI_ABORT); @@ -108,12 +100,12 @@ jstring toJString(JNIEnv *env, const char *pat) { jbyteArray bytes = NULL; jstring encoding = NULL; jstring jstr = NULL; - jsize len; + int len; if (pat == NULL) return (*env)->NewLocalRef(env, empty_string); - len = (jsize) strlen(pat); + len = strlen(pat); bytes = (*env)->NewByteArray(env, len); (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte *) pat); encoding = (*env)->NewStringUTF(env, "utf-8"); @@ -299,5 +291,3 @@ LPAC_JNI_STRUCT_GETTER_LONG(struct es10c_ex_euiccinfo2, euiccInfo2, extCardResou LPAC_JNI_STRUCT_GETTER_LONG(struct es10c_ex_euiccinfo2, euiccInfo2, euiccCiPKIdListForSigning, EuiccCiPKIdListForSigning) LPAC_JNI_STRUCT_GETTER_LONG(struct es10c_ex_euiccinfo2, euiccInfo2, euiccCiPKIdListForVerification, EuiccCiPKIdListForVerification) - -#pragma clang diagnostic pop \ No newline at end of file diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-notifications.c b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-notifications.c index f031398..cf402cf 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-notifications.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-notifications.c @@ -4,9 +4,6 @@ #include #include -#pragma clang diagnostic push -#pragma ide diagnostic ignored "UnusedParameter" - JNIEXPORT jlong JNICALL Java_net_typeblog_lpac_1jni_LpacJni_es10bListNotification(JNIEnv *env, jobject thiz, jlong handle) { struct euicc_ctx *ctx = (struct euicc_ctx *) handle; @@ -80,5 +77,3 @@ LPAC_JNI_STRUCT_FREE(struct es10b_notification_metadata_list, notifications, es1 LPAC_JNI_STRUCT_GETTER_LONG(struct es10b_notification_metadata_list, notification, seqNumber, Seq) LPAC_JNI_STRUCT_GETTER_STRING(struct es10b_notification_metadata_list, notification, notificationAddress, Address) LPAC_JNI_STRUCT_GETTER_STRING(struct es10b_notification_metadata_list, notification, iccid, Iccid) - -#pragma clang diagnostic pop \ No newline at end of file