From 76911788fdcfe190dbb727788b8b5b07087631c0 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 19 Jun 2020 13:11:37 +0300 Subject: [PATCH] Use new API functions account[_set]_stun_uri for STUN URI handling. --- app/src/main/cpp/baresip.c | 71 ++++++++----------- .../main/kotlin/com/tutpro/baresip/Account.kt | 23 ++---- .../com/tutpro/baresip/AccountActivity.kt | 28 +++----- app/src/main/res/layout/activity_account.xml | 1 - app/src/main/res/values-fi/strings.xml | 5 +- app/src/main/res/values/strings.xml | 5 +- 6 files changed, 53 insertions(+), 80 deletions(-) diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index ee702f5d..5e47e12a 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -945,52 +945,39 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1sipnat(JNIEnv *env, jobject thiz } JNIEXPORT jstring JNICALL -Java_com_tutpro_baresip_AccountKt_account_1stun_1host(JNIEnv *env, jobject thiz, jstring javaAcc) +Java_com_tutpro_baresip_AccountKt_account_1stun_1uri(JNIEnv *env, jobject thiz, jstring jAcc) { - const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); + const char *native_acc = (*env)->GetStringUTFChars(env, jAcc, 0); struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); - (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); + (*env)->ReleaseStringUTFChars(env, jAcc, native_acc); if (acc) { - const char *stun_host = account_stun_host(acc); - if (stun_host) return (*env)->NewStringUTF(env, stun_host); + const struct stun_uri *stun_uri = account_stun_uri(acc); + if (stun_uri) { + char uri_str[256]; + if (stun_uri->port != 0) + sprintf(uri_str, "%s:%s:%d", stunuri_scheme_name(stun_uri->scheme), + stun_uri->host, stun_uri->port); + else + sprintf(uri_str, "%s:%s", stunuri_scheme_name(stun_uri->scheme), + stun_uri->host); + return (*env)->NewStringUTF(env, uri_str); + } } return (*env)->NewStringUTF(env, ""); } JNIEXPORT jint JNICALL -Java_com_tutpro_baresip_AccountKt_account_1set_1stun_1host(JNIEnv *env, jobject thiz, - jstring javaAcc, jstring javaStunHost) { - const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); +Java_com_tutpro_baresip_AccountKt_account_1set_1stun_1uri(JNIEnv *env, jobject thiz, jstring jAcc, jstring jUri) { + const char *native_acc = (*env)->GetStringUTFChars(env, jAcc, 0); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); - (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); - const char *stun_host = (*env)->GetStringUTFChars(env, javaStunHost, 0); + (*env)->ReleaseStringUTFChars(env, jAcc, native_acc); + const char *uri = (*env)->GetStringUTFChars(env, jUri, 0); int res; - if (strlen(stun_host) > 0) - res = account_set_stun_host(acc, stun_host); + if (strlen(uri) > 0) + res = account_set_stun_uri(acc, uri); else - res = account_set_stun_host(acc, NULL); - (*env)->ReleaseStringUTFChars(env, javaStunHost, stun_host); - return res; -} - -JNIEXPORT jint JNICALL -Java_com_tutpro_baresip_AccountKt_account_1stun_1port(JNIEnv *env, jobject thiz, jstring javaAcc) -{ - const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); - struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); - (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); - return account_stun_port(acc); -} - -JNIEXPORT jint JNICALL -Java_com_tutpro_baresip_AccountKt_account_1set_1stun_1port(JNIEnv *env, jobject thiz, - jstring javaAcc, jint javaStunPort) { - const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); - struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); - (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); - const uint16_t native_port = javaStunPort; - int res; - res = account_set_stun_port(acc, native_port); + res = account_set_stun_uri(acc, NULL); + (*env)->ReleaseStringUTFChars(env, jUri, uri); return res; } @@ -1099,6 +1086,13 @@ Java_com_tutpro_baresip_AccountKt_account_1extra(JNIEnv *env, jobject thiz, jstr return (*env)->NewStringUTF(env, ""); } +JNIEXPORT void JNICALL +Java_com_tutpro_baresip_AccountKt_account_1debug(JNIEnv *env, jobject thiz, jstring javaAccount) { + const char *native_account = (*env)->GetStringUTFChars(env, javaAccount, 0); + struct account *acc = (struct account *)strtoul(native_account, NULL, 10); + account_debug_log(acc); +} + JNIEXPORT jstring JNICALL Java_com_tutpro_baresip_Api_ua_1alloc(JNIEnv *env, jobject thiz, jstring javaUri) { const char *uri = (*env)->GetStringUTFChars(env, javaUri, 0); @@ -1287,13 +1281,6 @@ Java_com_tutpro_baresip_Api_ua_1set_1media_1af(JNIEnv *env, jobject thiz, jstrin ua_set_media_af(ua, javaAf); } -JNIEXPORT void JNICALL -Java_com_tutpro_baresip_Api_account_1debug(JNIEnv *env, jobject thiz, jstring javaAccount) { - const char *native_account = (*env)->GetStringUTFChars(env, javaAccount, 0); - struct account *acc = (struct account *)strtoul(native_account, NULL, 10); - account_debug_log(acc); -} - JNIEXPORT void JNICALL Java_com_tutpro_baresip_Api_ua_1debug(JNIEnv *env, jobject thiz, jstring javaUA) { const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); diff --git a/app/src/main/kotlin/com/tutpro/baresip/Account.kt b/app/src/main/kotlin/com/tutpro/baresip/Account.kt index 6b540565..50b70d13 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Account.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Account.kt @@ -13,7 +13,7 @@ class Account(val accp: String) { var authPass = account_auth_pass(accp) var outbound = ArrayList() var mediaNat = account_medianat(accp) - var stunServer = "" + var stunServer = account_stun_uri(accp) var stunUser = account_stun_user(accp) var stunPass = account_stun_pass(accp) var audioCodec = ArrayList() @@ -31,15 +31,6 @@ class Account(val accp: String) { init { - val stunHost = account_stun_host(accp) - if (stunHost != "") { - val stunPort = account_stun_port(accp) - if (stunPort == 0) - stunServer = stunHost - else - stunServer = "$stunHost:$stunPort" - } - var i = 0 while (true) { val ob = account_outbound(accp, i) @@ -100,9 +91,9 @@ class Account(val accp: String) { res += ";stunserver=\"${stunServer}\"" } - if (stunUser != "") res = res + ";stunuser=\"${stunUser}\"" + res += ";stunuser=\"${stunUser}\"" - if (stunPass != "") res = res + ";stunpass=\"${stunPass}\"" + if (stunPass != "") res += ";stunpass=\"${stunPass}\"" if (audioCodec.size > 0) { var first = true @@ -249,10 +240,8 @@ external fun account_set_sipnat(acc: String, sipnat: String): Int external fun account_audio_codec(acc: String, ix: Int): String external fun account_regint(acc: String): Int external fun account_set_regint(acc: String, regint: Int): Int -external fun account_stun_host(acc: String): String -external fun account_stun_port(acc: String): Int -external fun account_set_stun_host(acc: String, host: String): Int -external fun account_set_stun_port(acc: String, port: Int): Int +external fun account_stun_uri(acc: String): String +external fun account_set_stun_uri(acc: String, uri: String): Int external fun account_stun_user(acc: String): String external fun account_set_stun_user(acc: String, user: String): Int external fun account_stun_pass(acc: String): String @@ -266,3 +255,5 @@ external fun account_set_video_codecs(acc: String, codecs: String): Int external fun account_set_mwi(acc: String, value: String): Int external fun account_vm_uri(acc: String): String external fun account_extra(acc: String): String +external fun account_debug(acc: String) + diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt index 00a495fa..fcb8c173 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt @@ -325,30 +325,24 @@ class AccountActivity : AppCompatActivity() { if (mediaNat != "") { var newStunServer = stunServer.text.toString().trim() - if (newStunServer == "") - newStunServer = resources.getString(R.string.stun_server_default) + if (newStunServer == "") { + if (mediaNat.startsWith("turn")) { + Utils.alertView(this, getString(R.string.notice), + String.format(getString(R.string.invalid_stun_server), newStunServer)) + return false + } else + newStunServer = resources.getString(R.string.stun_server_default) + } if (acc.stunServer != newStunServer) { if (!Utils.checkStunUri(newStunServer)) { Utils.alertView(this, getString(R.string.notice), String.format(getString(R.string.invalid_stun_server), newStunServer)) return false } - val p = newStunServer.split(":") - var host = "" - val port: Int - if (p.size == 2) { - host = newStunServer - port = 0 - } else { - host = newStunServer.substringBeforeLast(":") - port = newStunServer.substringAfterLast(":").toInt() - } - if ((account_set_stun_host(acc.accp, host) == 0) && - (account_set_stun_port(acc.accp, port) == 0)) { - acc.stunServer = account_stun_host(acc.accp) - if (port != 0) - acc.stunServer += ":" + account_stun_port(acc.accp).toString() + if (account_set_stun_uri(acc.accp, newStunServer) == 0) { + acc.stunServer = account_stun_uri(acc.accp) Log.d("Baresip", "New STUN/TURN server URI is '${acc.stunServer}'") + account_debug(acc.accp); save = true } else { Log.e("Baresip", "Setting of STUN/TURN URI server failed") diff --git a/app/src/main/res/layout/activity_account.xml b/app/src/main/res/layout/activity_account.xml index 52c49724..f513e873 100644 --- a/app/src/main/res/layout/activity_account.xml +++ b/app/src/main/res/layout/activity_account.xml @@ -210,7 +210,6 @@ android:paddingStart="10dp" android:paddingEnd="0dp" android:scrollHorizontally="true" - android:hint="@string/stun_server_default" android:importantForAutofill="no" android:inputType="textEmailAddress" > diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 4dbeb2c7..987c5066 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -86,8 +86,9 @@ STUN/TURN-palvelin STUN/TURN-palvelimen muotoa \'kaava:palvelin[:portti]\' - oleva osoite, missä kaava on \'stun\', \'stuns\', \'turn\' tai \'turns\'. Oletusarvo on - \'stun:stun.l.google.com:19302\', joka osoittaa Google:n julkiseen STUN-palvelimeen. + oleva osoite, missä kaava on \'stun\', \'stuns\', \'turn\' tai \'turns\'. STUN-palvelimen + oletusarvo \'stun:stun.l.google.com:19302\', joka osoittaa Google:n julkiseen STUN-palvelimeen. + TURN-palvelimella ei ole oletusarvoa. Virheellinen STUN/TURN-palvelimen URI \'%1$s\' STUN/TURN-käyttäjätunnus diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 37c011e0..3f423170 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,8 +80,9 @@ STUN/TURN Server A STUN/TURN Server URI of form scheme:host[:port], where scheme - is \'stun\', \'stuns\', \'turn\', or \'turns\'. Factory default value is - \'stun:stun.l.google.com:19302\', pointing to public Google STUN server. + is \'stun\', \'stuns\', \'turn\', or \'turns\'. Factory default STUN server is + \'stun:stun.l.google.com:19302\', pointing to public Google STUN server. There is no + factory default TURN server. Invalid STUN/TURN Server URI \'%1$s\' stun:stun.l.google.com:19302