forked from PeterCxy/OpenEUICC
Compare commits
4 commits
0a78daee8b
...
78bf3612ee
Author | SHA1 | Date | |
---|---|---|---|
78bf3612ee | |||
afeb5c5282 | |||
f74145d0b7 | |||
c6de599db0 |
6 changed files with 50 additions and 26 deletions
12
.idea/compiler.xml
generated
12
.idea/compiler.xml
generated
|
@ -1,16 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="1.7">
|
||||
<module name="OpenEUICC.app" target="17" />
|
||||
<module name="OpenEUICC.app-common" target="17" />
|
||||
<module name="OpenEUICC.app-deps" target="17" />
|
||||
<module name="OpenEUICC.app-unpriv" target="17" />
|
||||
<module name="OpenEUICC.buildSrc" target="17" />
|
||||
<module name="OpenEUICC.buildSrc.main" target="17" />
|
||||
<module name="OpenEUICC.buildSrc.test" target="17" />
|
||||
<module name="OpenEUICC.libs.hidden-apis-shim" target="17" />
|
||||
<module name="OpenEUICC.libs.lpac-jni" target="17" />
|
||||
</bytecodeTargetLevel>
|
||||
<bytecodeTargetLevel target="1.7" />
|
||||
</component>
|
||||
</project>
|
|
@ -114,13 +114,13 @@
|
|||
<string name="developer_options_enabled">あなたは開発者になりました!</string>
|
||||
<string name="pref_settings">設定</string>
|
||||
<string name="pref_notifications">通知</string>
|
||||
<string name="pref_notifications_desc">eSIM のプロファイル操作により、通信事業者に通知が送信されます。必要に応じてこの動作を微調整できます。</string>
|
||||
<string name="pref_notifications_desc">eSIM のプロファイル操作により、通信事業者に通知が送信されます。ここでは、どのタイプの通知を送信するのかを微調整できます。</string>
|
||||
<string name="pref_notifications_download">ダウンロード</string>
|
||||
<string name="pref_notifications_download_desc">プロファイルを<i>ダウンロード中</i>の通知を送信します</string>
|
||||
<string name="pref_notifications_download_desc">プロファイルの<i>ダウンロード済み</i>の通知を送信します</string>
|
||||
<string name="pref_notifications_delete">削除</string>
|
||||
<string name="pref_notifications_delete_desc">プロファイルを<i>削除中</i>の通知を送信します</string>
|
||||
<string name="pref_notifications_switch">切り替え中</string>
|
||||
<string name="pref_notifications_switch_desc">プロファイルを<i>切り替え中</i>の通知を送信します\nこのタイプの通知は信頼できないことに注意してください。</string>
|
||||
<string name="pref_notifications_delete_desc">プロファイルの<i>削除済み</i>の通知を送信します</string>
|
||||
<string name="pref_notifications_switch">切り替え</string>
|
||||
<string name="pref_notifications_switch_desc">プロファイルの<i>切り替え済み</i>の通知を送信します\nこのタイプの通知は有効化しても必ず送信するとは限らないことに注意してください。</string>
|
||||
<string name="pref_advanced">高度な設定</string>
|
||||
<string name="pref_advanced_disable_safeguard_removable_esim">有効なプロファイルの無効化と削除を許可する</string>
|
||||
<string name="pref_advanced_disable_safeguard_removable_esim_desc">デフォルトでは、このアプリでデバイスに挿入された取り外し可能な eSIM の有効なプロファイルを無効化することを防いでいます。なぜなのかというと<i>時々</i>アクセスができなくなるからです。\nこのチェックボックスを ON にすることで、この保護機能を<i>解除</i>します。</string>
|
||||
|
@ -136,4 +136,8 @@
|
|||
<string name="pref_info">情報</string>
|
||||
<string name="pref_info_app_version">アプリバージョン</string>
|
||||
<string name="pref_info_source_code">ソースコード</string>
|
||||
<string name="pref_language">言語</string>
|
||||
<string name="pref_language_desc">アプリの言語を選択</string>
|
||||
<string name="pref_developer_unfiltered_profile_list">すべてのプロファイルを表示</string>
|
||||
<string name="pref_developer_unfiltered_profile_list_desc">プロダクション以外のプロファイルも表示する</string>
|
||||
</resources>
|
||||
|
|
|
@ -147,14 +147,14 @@
|
|||
<string name="pref_advanced_verbose_logging">Verbose Logging</string>
|
||||
<string name="pref_advanced_verbose_logging_desc">Enable verbose logs, which may contain sensitive information. Only share your logs with someone you trust after turning this on.</string>
|
||||
<string name="pref_language">Language</string>
|
||||
<string name="pref_language_desc">Select current language</string>
|
||||
<string name="pref_language_desc">Select app language</string>
|
||||
<string name="pref_advanced_logs">Logs</string>
|
||||
<string name="pref_advanced_logs_desc">View recent debug logs of the application</string>
|
||||
<string name="pref_developer">Developer Options</string>
|
||||
<string name="pref_developer_experimental_download_wizard">Experimental Download Wizard</string>
|
||||
<string name="pref_developer_experimental_download_wizard_desc">Enable the experimental new download wizard. Note that it is not fully working yet.</string>
|
||||
<string name="pref_developer_unfiltered_profile_list">Show unfiltered profile list</string>
|
||||
<string name="pref_developer_unfiltered_profile_list_desc">Display any profile class in the list</string>
|
||||
<string name="pref_developer_unfiltered_profile_list_desc">Include non-production profiles in the list</string>
|
||||
<string name="pref_developer_ignore_tls_certificate">Ignore SM-DP+ TLS certificate</string>
|
||||
<string name="pref_developer_ignore_tls_certificate_desc">Ignore SM-DP+ TLS certificate, allow any RSP</string>
|
||||
<string name="pref_info">Info</string>
|
||||
|
|
|
@ -30,6 +30,8 @@ internal object LpacJni {
|
|||
external fun downloadProfile(handle: Long, smdp: String, matchingId: String?, imei: String?,
|
||||
confirmationCode: String?, callback: ProfileDownloadCallback): Int
|
||||
external fun handleNotification(handle: Long, seqNumber: Long): Int
|
||||
// Cancel any ongoing es9p and/or es10b sessions
|
||||
external fun cancelSessions(handle: Long)
|
||||
|
||||
// es10cex (actually part of es10b)
|
||||
external fun es10cexGetEuiccInfo2(handle: Long): Long
|
||||
|
|
|
@ -212,12 +212,18 @@ class LocalProfileAssistantImpl(
|
|||
)
|
||||
|
||||
if (res != 0) {
|
||||
throw LocalProfileAssistant.ProfileDownloadException(
|
||||
// Construct the error now to store any error information we _can_ access
|
||||
val err = LocalProfileAssistant.ProfileDownloadException(
|
||||
httpInterface.lastHttpResponse,
|
||||
httpInterface.lastHttpException,
|
||||
apduInterface.lastApduResponse,
|
||||
apduInterface.lastApduException,
|
||||
)
|
||||
|
||||
// Cancel sessions if possible. This will overwrite recorded errors from HTTP and APDU interfaces.
|
||||
LpacJni.cancelSessions(contextHandle)
|
||||
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -82,42 +82,55 @@ Java_net_typeblog_lpac_1jni_LpacJni_downloadProfile(JNIEnv *env, jobject thiz, j
|
|||
(*env)->CallVoidMethod(env, callback, on_state_update, download_state_preparing);
|
||||
ret = es10b_get_euicc_challenge_and_info(ctx);
|
||||
syslog(LOG_INFO, "es10b_get_euicc_challenge_and_info %d", ret);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
ret = -ES10B_ERROR_REASON_UNDEFINED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
(*env)->CallVoidMethod(env, callback, on_state_update, download_state_connecting);
|
||||
ret = es9p_initiate_authentication(ctx);
|
||||
syslog(LOG_INFO, "es9p_initiate_authentication %d", ret);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
ret = -ES10B_ERROR_REASON_UNDEFINED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
(*env)->CallVoidMethod(env, callback, on_state_update, download_state_authenticating);
|
||||
ret = es10b_authenticate_server(ctx, _matching_id, _imei);
|
||||
syslog(LOG_INFO, "es10b_authenticate_server %d", ret);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
ret = -ES10B_ERROR_REASON_UNDEFINED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = es9p_authenticate_client(ctx);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
ret = -ES10B_ERROR_REASON_UNDEFINED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
(*env)->CallVoidMethod(env, callback, on_state_update, download_state_downloading);
|
||||
ret = es10b_prepare_download(ctx, _confirmation_code);
|
||||
syslog(LOG_INFO, "es10b_prepare_download %d", ret);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
ret = -ES10B_ERROR_REASON_UNDEFINED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = es9p_get_bound_profile_package(ctx);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
(*env)->CallVoidMethod(env, callback, on_state_update, download_state_finalizing);
|
||||
// TODO: Expose error code as Java-side exceptions?
|
||||
ret = es10b_load_bound_profile_package(ctx, &es10b_load_bound_profile_package_result);
|
||||
syslog(LOG_INFO, "es10b_load_bound_profile_package %d, reason %d", ret, es10b_load_bound_profile_package_result.errorReason);
|
||||
if (ret < 0) {
|
||||
ret = - (int) es10b_load_bound_profile_package_result.errorReason;
|
||||
}
|
||||
|
||||
out:
|
||||
euicc_http_cleanup(ctx);
|
||||
// We expect Java side to call cancelSessions after any error -- thus, `euicc_http_cleanup` is done there
|
||||
// This is so that Java side can access the last HTTP and/or APDU errors when we return.
|
||||
if (_confirmation_code != NULL)
|
||||
(*env)->ReleaseStringUTFChars(env, confirmation_code, _confirmation_code);
|
||||
if (_matching_id != NULL)
|
||||
|
@ -127,3 +140,12 @@ Java_net_typeblog_lpac_1jni_LpacJni_downloadProfile(JNIEnv *env, jobject thiz, j
|
|||
(*env)->ReleaseStringUTFChars(env, imei, _imei);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_net_typeblog_lpac_1jni_LpacJni_cancelSessions(JNIEnv *env, jobject thiz, jlong handle) {
|
||||
struct euicc_ctx *ctx = (struct euicc_ctx *) handle;
|
||||
es9p_cancel_session(ctx);
|
||||
es10b_cancel_session(ctx, ES10B_CANCEL_SESSION_REASON_UNDEFINED);
|
||||
euicc_http_cleanup(ctx);
|
||||
}
|
Loading…
Add table
Reference in a new issue