Use new API functions account[_set]_stun_uri for STUN URI handling.

This commit is contained in:
Juha Heinanen
2020-06-19 13:11:37 +03:00
parent 9f0c261387
commit 76911788fd
6 changed files with 53 additions and 80 deletions
+29 -42
View File
@@ -945,52 +945,39 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1sipnat(JNIEnv *env, jobject thiz
} }
JNIEXPORT jstring JNICALL 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); struct account *acc = (struct account *) strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, jAcc, native_acc);
if (acc) { if (acc) {
const char *stun_host = account_stun_host(acc); const struct stun_uri *stun_uri = account_stun_uri(acc);
if (stun_host) return (*env)->NewStringUTF(env, stun_host); 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, ""); return (*env)->NewStringUTF(env, "");
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_com_tutpro_baresip_AccountKt_account_1set_1stun_1host(JNIEnv *env, jobject thiz, Java_com_tutpro_baresip_AccountKt_account_1set_1stun_1uri(JNIEnv *env, jobject thiz, jstring jAcc, jstring jUri) {
jstring javaAcc, jstring javaStunHost) { const char *native_acc = (*env)->GetStringUTFChars(env, jAcc, 0);
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, jAcc, native_acc);
const char *stun_host = (*env)->GetStringUTFChars(env, javaStunHost, 0); const char *uri = (*env)->GetStringUTFChars(env, jUri, 0);
int res; int res;
if (strlen(stun_host) > 0) if (strlen(uri) > 0)
res = account_set_stun_host(acc, stun_host); res = account_set_stun_uri(acc, uri);
else else
res = account_set_stun_host(acc, NULL); res = account_set_stun_uri(acc, NULL);
(*env)->ReleaseStringUTFChars(env, javaStunHost, stun_host); (*env)->ReleaseStringUTFChars(env, jUri, uri);
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);
return res; return res;
} }
@@ -1099,6 +1086,13 @@ Java_com_tutpro_baresip_AccountKt_account_1extra(JNIEnv *env, jobject thiz, jstr
return (*env)->NewStringUTF(env, ""); 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 JNIEXPORT jstring JNICALL
Java_com_tutpro_baresip_Api_ua_1alloc(JNIEnv *env, jobject thiz, jstring javaUri) { Java_com_tutpro_baresip_Api_ua_1alloc(JNIEnv *env, jobject thiz, jstring javaUri) {
const char *uri = (*env)->GetStringUTFChars(env, javaUri, 0); 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); 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 JNIEXPORT void JNICALL
Java_com_tutpro_baresip_Api_ua_1debug(JNIEnv *env, jobject thiz, jstring javaUA) { Java_com_tutpro_baresip_Api_ua_1debug(JNIEnv *env, jobject thiz, jstring javaUA) {
const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0);
@@ -13,7 +13,7 @@ class Account(val accp: String) {
var authPass = account_auth_pass(accp) var authPass = account_auth_pass(accp)
var outbound = ArrayList<String>() var outbound = ArrayList<String>()
var mediaNat = account_medianat(accp) var mediaNat = account_medianat(accp)
var stunServer = "" var stunServer = account_stun_uri(accp)
var stunUser = account_stun_user(accp) var stunUser = account_stun_user(accp)
var stunPass = account_stun_pass(accp) var stunPass = account_stun_pass(accp)
var audioCodec = ArrayList<String>() var audioCodec = ArrayList<String>()
@@ -31,15 +31,6 @@ class Account(val accp: String) {
init { 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 var i = 0
while (true) { while (true) {
val ob = account_outbound(accp, i) val ob = account_outbound(accp, i)
@@ -100,9 +91,9 @@ class Account(val accp: String) {
res += ";stunserver=\"${stunServer}\"" 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) { if (audioCodec.size > 0) {
var first = true 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_audio_codec(acc: String, ix: Int): String
external fun account_regint(acc: String): Int external fun account_regint(acc: String): Int
external fun account_set_regint(acc: String, regint: Int): Int external fun account_set_regint(acc: String, regint: Int): Int
external fun account_stun_host(acc: String): String external fun account_stun_uri(acc: String): String
external fun account_stun_port(acc: String): Int external fun account_set_stun_uri(acc: String, uri: 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_user(acc: String): String external fun account_stun_user(acc: String): String
external fun account_set_stun_user(acc: String, user: String): Int external fun account_set_stun_user(acc: String, user: String): Int
external fun account_stun_pass(acc: String): String 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_set_mwi(acc: String, value: String): Int
external fun account_vm_uri(acc: String): String external fun account_vm_uri(acc: String): String
external fun account_extra(acc: String): String external fun account_extra(acc: String): String
external fun account_debug(acc: String)
@@ -325,30 +325,24 @@ class AccountActivity : AppCompatActivity() {
if (mediaNat != "") { if (mediaNat != "") {
var newStunServer = stunServer.text.toString().trim() var newStunServer = stunServer.text.toString().trim()
if (newStunServer == "") 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) newStunServer = resources.getString(R.string.stun_server_default)
}
if (acc.stunServer != newStunServer) { if (acc.stunServer != newStunServer) {
if (!Utils.checkStunUri(newStunServer)) { if (!Utils.checkStunUri(newStunServer)) {
Utils.alertView(this, getString(R.string.notice), Utils.alertView(this, getString(R.string.notice),
String.format(getString(R.string.invalid_stun_server), newStunServer)) String.format(getString(R.string.invalid_stun_server), newStunServer))
return false return false
} }
val p = newStunServer.split(":") if (account_set_stun_uri(acc.accp, newStunServer) == 0) {
var host = "" acc.stunServer = account_stun_uri(acc.accp)
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()
Log.d("Baresip", "New STUN/TURN server URI is '${acc.stunServer}'") Log.d("Baresip", "New STUN/TURN server URI is '${acc.stunServer}'")
account_debug(acc.accp);
save = true save = true
} else { } else {
Log.e("Baresip", "Setting of STUN/TURN URI server failed") Log.e("Baresip", "Setting of STUN/TURN URI server failed")
@@ -210,7 +210,6 @@
android:paddingStart="10dp" android:paddingStart="10dp"
android:paddingEnd="0dp" android:paddingEnd="0dp"
android:scrollHorizontally="true" android:scrollHorizontally="true"
android:hint="@string/stun_server_default"
android:importantForAutofill="no" android:importantForAutofill="no"
android:inputType="textEmailAddress" > android:inputType="textEmailAddress" >
</EditText> </EditText>
+3 -2
View File
@@ -86,8 +86,9 @@
</string> </string>
<string name="stun_server">STUN/TURN-palvelin</string> <string name="stun_server">STUN/TURN-palvelin</string>
<string name="stun_server_help">STUN/TURN-palvelimen muotoa \'kaava:palvelin[:portti]\' <string name="stun_server_help">STUN/TURN-palvelimen muotoa \'kaava:palvelin[:portti]\'
oleva osoite, missä kaava on \'stun\', \'stuns\', \'turn\' tai \'turns\'. Oletusarvo on oleva osoite, missä kaava on \'stun\', \'stuns\', \'turn\' tai \'turns\'. STUN-palvelimen
\'stun:stun.l.google.com:19302\', joka osoittaa Google:n julkiseen STUN-palvelimeen. oletusarvo \'stun:stun.l.google.com:19302\', joka osoittaa Google:n julkiseen STUN-palvelimeen.
TURN-palvelimella ei ole oletusarvoa.
</string> </string>
<string name="invalid_stun_server">Virheellinen STUN/TURN-palvelimen URI \'%1$s\'</string> <string name="invalid_stun_server">Virheellinen STUN/TURN-palvelimen URI \'%1$s\'</string>
<string name="stun_username">STUN/TURN-käyttäjätunnus</string> <string name="stun_username">STUN/TURN-käyttäjätunnus</string>
+3 -2
View File
@@ -80,8 +80,9 @@
</string> </string>
<string name="stun_server">STUN/TURN Server</string> <string name="stun_server">STUN/TURN Server</string>
<string name="stun_server_help">A STUN/TURN Server URI of form scheme:host[:port], where scheme <string name="stun_server_help">A STUN/TURN Server URI of form scheme:host[:port], where scheme
is \'stun\', \'stuns\', \'turn\', or \'turns\'. Factory default value is is \'stun\', \'stuns\', \'turn\', or \'turns\'. Factory default STUN server is
\'stun:stun.l.google.com:19302\', pointing to public Google STUN server. \'stun:stun.l.google.com:19302\', pointing to public Google STUN server. There is no
factory default TURN server.
</string> </string>
<string name="invalid_stun_server">Invalid STUN/TURN Server URI \'%1$s\'</string> <string name="invalid_stun_server">Invalid STUN/TURN Server URI \'%1$s\'</string>
<string name="stun_server_default" translatable="false">stun:stun.l.google.com:19302</string> <string name="stun_server_default" translatable="false">stun:stun.l.google.com:19302</string>