Account STUN/TURN URI enhancements

This commit is contained in:
Juha Heinanen
2021-06-21 10:26:01 +03:00
parent 38df95f98b
commit 167a2aa421
5 changed files with 33 additions and 17 deletions

View File

@ -941,12 +941,21 @@ Java_com_tutpro_baresip_Api_account_1stun_1uri(JNIEnv *env, jobject thiz, jstrin
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);
if (stun_uri->port != 0) {
if (stun_uri->proto == IPPROTO_TCP)
sprintf(uri_str, "%s:%s:%d?transport=tcp",
stunuri_scheme_name(stun_uri->scheme), stun_uri->host, stun_uri->port);
else
sprintf(uri_str, "%s:%s:%d",
stunuri_scheme_name(stun_uri->scheme), stun_uri->host, stun_uri->port);
} else {
if (stun_uri->proto == IPPROTO_TCP)
sprintf(uri_str, "%s:%s?transport=tcp",
stunuri_scheme_name(stun_uri->scheme), stun_uri->host);
else
sprintf(uri_str, "%s:%s",
stunuri_scheme_name(stun_uri->scheme), stun_uri->host);
}
return (*env)->NewStringUTF(env, uri_str);
}
}

View File

@ -481,7 +481,8 @@ class AccountActivity : AppCompatActivity() {
if (((mediaNat == "stun") || (mediaNat == "ice")) && (newStunServer == ""))
newStunServer = resources.getString(R.string.stun_server_default)
if (!Utils.checkStunUri(newStunServer) ||
((mediaNat == "turn") && !newStunServer.startsWith("turn:"))) {
(mediaNat == "turn" &&
newStunServer.substringBefore(":") !in setOf("turn", "turns"))) {
Utils.alertView(this, getString(R.string.notice),
String.format(getString(R.string.invalid_stun_server), newStunServer))
return false

View File

@ -142,10 +142,17 @@ object Utils {
params[0] in arrayOf("transport=udp", "transport=tcp", "transport=tls"))
}
private fun checkTransport(transport: String, transports: Set<String>): Boolean {
return transport.split("=")[0] == "transport" &&
transport.split("=")[1].lowercase() in transports
}
fun checkStunUri(uri: String): Boolean {
if (!uri.startsWith("stun:") && !uri.startsWith("turn:"))
if (uri.substringBefore(":").lowercase() !in setOf("stun", "stuns", "turn", "turns"))
return false
return checkHostPort(uri.substringAfter(":"))
return checkHostPort(uri.substringAfter(":").substringBefore("?")) &&
(uri.indexOf("?") == -1 ||
checkTransport(uri.substringAfter("?"), setOf("udp", "tcp")))
}
fun isE164Number(no: String): Boolean {
@ -213,12 +220,11 @@ object Utils {
}
private fun checkParam(param: String): Boolean {
/* Todo: do proper check */
val nameValue = param.split("=")
if (nameValue.size == 1)
/* Todo: do proper check */
return true
if (nameValue.size == 2) {
/* Todo: do proper check */
if ((nameValue[0] == "transport") &&
setOf("udp", "tcp", "tls", "wss").contains(nameValue[1].lowercase()))
return true

View File

@ -167,8 +167,8 @@
for NAT, RFC 5389) ja ICE (Interactive Connectivity Establishment, RFC 5245).
</string>
<string name="stun_server">STUN/TURN-palvelin</string>
<string name="stun_server_help">STUN/TURN-palvelimen muotoa \'kaava:palvelin[:portti]\'
oleva URI, missä kaava on \'stun\' tai \'turn\'. Oletus STUN-palvelin
<string name="stun_server_help">STUN/TURN-palvelimen muotoa \'kaava:palvelin[:portti][?transport=udp|tcp]\'
oleva URI, missä kaava on \'stun\', \'stuns\', \'turn\' tai \'turns\'. Oletus STUN-palvelin
STUN- ja ICE-protokollille on \'stun:stun.l.google.com:19302\', joka osoittaa Google:n
julkiseen STUN-palvelimeen. TURN-palvelimella ei ole oletusarvoa.
</string>

View File

@ -151,10 +151,10 @@
Establishment, RFC 5245).
</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\' or \'turn\'. Factory default STUN Server for STUN and
ICE protocols is \'stun:stun.l.google.com:19302\' pointing to public Google STUN server.
There is no factory default TURN server.
<string name="stun_server_help">A STUN/TURN Server URI of form scheme:host[:port][?transport=udp|tcp],
where scheme is \'stun\', \'stuns\', \'turn\', or \'turns\'. Factory default STUN Server
for STUN and ICE protocols is \'stun:stun.l.google.com:19302\' pointing to public Google
STUN server. There is no factory default TURN server.
</string>
<string name="stun_server_uri">STUN/TURN Server URI</string>
<string name="invalid_stun_server">Invalid STUN/TURN Server URI \'%1$s\'</string>