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

View File

@ -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);

View File

@ -13,7 +13,7 @@ class Account(val accp: String) {
var authPass = account_auth_pass(accp)
var outbound = ArrayList<String>()
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<String>()
@ -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)

View File

@ -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")

View File

@ -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" >
</EditText>

View File

@ -86,8 +86,9 @@
</string>
<string name="stun_server">STUN/TURN-palvelin</string>
<string name="stun_server_help">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.
</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>

View File

@ -80,8 +80,9 @@
</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
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.
</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>