Account STUN/TURN URI enhancements
This commit is contained in:
@@ -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);
|
const struct stun_uri *stun_uri = account_stun_uri(acc);
|
||||||
if (stun_uri) {
|
if (stun_uri) {
|
||||||
char uri_str[256];
|
char uri_str[256];
|
||||||
if (stun_uri->port != 0)
|
if (stun_uri->port != 0) {
|
||||||
sprintf(uri_str, "%s:%s:%d", stunuri_scheme_name(stun_uri->scheme),
|
if (stun_uri->proto == IPPROTO_TCP)
|
||||||
stun_uri->host, stun_uri->port);
|
sprintf(uri_str, "%s:%s:%d?transport=tcp",
|
||||||
else
|
stunuri_scheme_name(stun_uri->scheme), stun_uri->host, stun_uri->port);
|
||||||
sprintf(uri_str, "%s:%s", stunuri_scheme_name(stun_uri->scheme),
|
else
|
||||||
stun_uri->host);
|
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);
|
return (*env)->NewStringUTF(env, uri_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -481,7 +481,8 @@ class AccountActivity : AppCompatActivity() {
|
|||||||
if (((mediaNat == "stun") || (mediaNat == "ice")) && (newStunServer == ""))
|
if (((mediaNat == "stun") || (mediaNat == "ice")) && (newStunServer == ""))
|
||||||
newStunServer = resources.getString(R.string.stun_server_default)
|
newStunServer = resources.getString(R.string.stun_server_default)
|
||||||
if (!Utils.checkStunUri(newStunServer) ||
|
if (!Utils.checkStunUri(newStunServer) ||
|
||||||
((mediaNat == "turn") && !newStunServer.startsWith("turn:"))) {
|
(mediaNat == "turn" &&
|
||||||
|
newStunServer.substringBefore(":") !in setOf("turn", "turns"))) {
|
||||||
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
|
||||||
|
|||||||
@@ -142,10 +142,17 @@ object Utils {
|
|||||||
params[0] in arrayOf("transport=udp", "transport=tcp", "transport=tls"))
|
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 {
|
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 false
|
||||||
return checkHostPort(uri.substringAfter(":"))
|
return checkHostPort(uri.substringAfter(":").substringBefore("?")) &&
|
||||||
|
(uri.indexOf("?") == -1 ||
|
||||||
|
checkTransport(uri.substringAfter("?"), setOf("udp", "tcp")))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isE164Number(no: String): Boolean {
|
fun isE164Number(no: String): Boolean {
|
||||||
@@ -213,12 +220,11 @@ object Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkParam(param: String): Boolean {
|
private fun checkParam(param: String): Boolean {
|
||||||
|
/* Todo: do proper check */
|
||||||
val nameValue = param.split("=")
|
val nameValue = param.split("=")
|
||||||
if (nameValue.size == 1)
|
if (nameValue.size == 1)
|
||||||
/* Todo: do proper check */
|
|
||||||
return true
|
return true
|
||||||
if (nameValue.size == 2) {
|
if (nameValue.size == 2) {
|
||||||
/* Todo: do proper check */
|
|
||||||
if ((nameValue[0] == "transport") &&
|
if ((nameValue[0] == "transport") &&
|
||||||
setOf("udp", "tcp", "tls", "wss").contains(nameValue[1].lowercase()))
|
setOf("udp", "tcp", "tls", "wss").contains(nameValue[1].lowercase()))
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -167,8 +167,8 @@
|
|||||||
for NAT, RFC 5389) ja ICE (Interactive Connectivity Establishment, RFC 5245).
|
for NAT, RFC 5389) ja ICE (Interactive Connectivity Establishment, RFC 5245).
|
||||||
</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][?transport=udp|tcp]\'
|
||||||
oleva URI, missä kaava on \'stun\' tai \'turn\'. Oletus STUN-palvelin
|
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
|
STUN- ja ICE-protokollille on \'stun:stun.l.google.com:19302\', joka osoittaa Google:n
|
||||||
julkiseen STUN-palvelimeen. TURN-palvelimella ei ole oletusarvoa.
|
julkiseen STUN-palvelimeen. TURN-palvelimella ei ole oletusarvoa.
|
||||||
</string>
|
</string>
|
||||||
|
|||||||
@@ -151,10 +151,10 @@
|
|||||||
Establishment, RFC 5245).
|
Establishment, RFC 5245).
|
||||||
</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][?transport=udp|tcp],
|
||||||
is \'stun\' or \'turn\'. Factory default STUN Server for STUN and
|
where scheme is \'stun\', \'stuns\', \'turn\', or \'turns\'. Factory default STUN Server
|
||||||
ICE protocols is \'stun:stun.l.google.com:19302\' pointing to public Google STUN server.
|
for STUN and ICE protocols is \'stun:stun.l.google.com:19302\' pointing to public Google
|
||||||
There is no factory default TURN server.
|
STUN server. There is no factory default TURN server.
|
||||||
</string>
|
</string>
|
||||||
<string name="stun_server_uri">STUN/TURN Server URI</string>
|
<string name="stun_server_uri">STUN/TURN Server URI</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>
|
||||||
|
|||||||
Reference in New Issue
Block a user