diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index e7894331..b17166b0 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -177,6 +177,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, case UA_EVENT_CREATE: len = re_snprintf(event_buf, sizeof event_buf, "create"); break; + case UA_EVENT_REGISTERING: case UA_EVENT_UNREGISTERING: case UA_EVENT_REGISTER_OK: case UA_EVENT_FALLBACK_OK: @@ -584,7 +585,9 @@ JNIEXPORT void JNICALL Java_com_tutpro_baresip_BaresipService_baresipStop(JNIEnv *env, jobject thiz, jboolean force) { LOGD("ua_stop_all upon baresipStop"); + re_thread_enter(); mqueue_push(mq, ID_UA_STOP_ALL, (void *)((long)force)); + re_thread_leave(); } JNIEXPORT jstring JNICALL @@ -1054,6 +1057,13 @@ Java_com_tutpro_baresip_Api_ua_1account(JNIEnv *env, jobject thiz, jlong ua) return (jlong)acc; } +JNIEXPORT jint JNICALL +Java_com_tutpro_baresip_Api_ua_1update_1account(JNIEnv *env, jobject thiz, jlong ua) +{ + LOGD("updating account of ua %ld\n", (long)ua); + return ua_update_account((struct ua *)ua); +} + JNIEXPORT void JNICALL Java_com_tutpro_baresip_Api_ua_1hangup(JNIEnv *env, jobject thiz, jlong ua, jlong call, jint code, jstring reason) { diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt index d0d5318d..f6877f4b 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt @@ -642,10 +642,12 @@ class AccountActivity : AppCompatActivity() { if (save) { AccountsActivity.saveAccounts() - if (newRegint == 0) - Api.ua_unregister(ua.uap) - else if (acc.regint != 0) - Api.ua_register(ua.uap) + if (newRegint != -1) { + if (newRegint == 0) + Api.ua_unregister(ua.uap) + else + Api.ua_register(ua.uap) + } } BaresipService.activities.remove("account,$aor") diff --git a/app/src/main/kotlin/com/tutpro/baresip/Api.kt b/app/src/main/kotlin/com/tutpro/baresip/Api.kt index 1ecc92cf..f28fe06b 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Api.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Api.kt @@ -48,6 +48,7 @@ object Api { external fun uag_enable_sip_trace(enable: Boolean) external fun ua_account(uap: Long): Long + external fun ua_update_account(uap: Long): Long external fun ua_alloc(uri: String): Long external fun ua_destroy(uap: Long) external fun ua_register(uap: Long): Int diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 202df158..dc9ca4b6 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -275,14 +275,14 @@ class MainActivity : AppCompatActivity() { } } - aorSpinner.setOnLongClickListener() { view -> + aorSpinner.setOnLongClickListener { if (aorSpinner.selectedItemPosition != -1) { val ua = UserAgent.ofAor(aorSpinner.tag.toString()) if (ua != null) { val acc = ua.account if (Api.ua_isregistered(ua.uap)) { - Api.account_set_regint(acc.accp, 0) Api.ua_unregister(ua.uap) + Api.account_set_regint(acc.accp, 0) } else { Api.account_set_regint(acc.accp, REGISTRATION_INTERVAL) Api.ua_register(ua.uap) diff --git a/app/src/main/kotlin/com/tutpro/baresip/TaskReceiver.kt b/app/src/main/kotlin/com/tutpro/baresip/TaskReceiver.kt index 35818307..a168982a 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/TaskReceiver.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/TaskReceiver.kt @@ -24,17 +24,21 @@ class TaskReceiver : BroadcastReceiver() { when (intent.action) { "com.tutpro.baresip.REGISTER" -> { Log.d(TAG, "TaskReceiver: registering $aor") - Api.account_set_regint(acc.accp, REGISTRATION_INTERVAL) - Api.ua_register(ua.uap) - acc.regint = Api.account_regint(acc.accp) - AccountsActivity.saveAccounts() + if (!Api.ua_isregistered(ua.uap)) { + Api.account_set_regint(acc.accp, REGISTRATION_INTERVAL) + Api.ua_register(ua.uap) + acc.regint = Api.account_regint(acc.accp) + AccountsActivity.saveAccounts() + } } "com.tutpro.baresip.UNREGISTER" -> { Log.d(TAG, "TaskReceiver: un-registering $aor") - Api.account_set_regint(acc.accp,0) - Api.ua_unregister(ua.uap) - acc.regint = Api.account_regint(acc.accp) - AccountsActivity.saveAccounts() + if (Api.ua_isregistered(ua.uap)) { + Api.account_set_regint(acc.accp, 0) + Api.ua_unregister(ua.uap) + acc.regint = Api.account_regint(acc.accp) + AccountsActivity.saveAccounts() + } } else -> return }