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