- Added possibility to give transport protocol for account's AoR.

- Do not show account's port or transport protocol except in Account Activity.
This commit is contained in:
Juha Heinanen
2019-11-27 10:55:46 +02:00
parent 1953325087
commit d8b26f9b64
15 changed files with 106 additions and 15 deletions

View File

@ -586,6 +586,22 @@ Java_com_tutpro_baresip_AccountKt_account_1aor(JNIEnv *env, jobject thiz, jstrin
return (*env)->NewStringUTF(env, ""); return (*env)->NewStringUTF(env, "");
} }
JNIEXPORT jstring JNICALL
Java_com_tutpro_baresip_AccountKt_account_1uri(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);
const struct sip_addr *addr = account_laddr(acc);
char uri_buf[512];
int l;
l = re_snprintf(&(uri_buf[0]), 511, "%H", uri_encode, addr->uri);
if (l != -1)
uri_buf[l] = '\0';
else
uri_buf[0] = '\0';
return (*env)->NewStringUTF(env, uri_buf);
}
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_com_tutpro_baresip_AccountKt_account_1auth_1user(JNIEnv *env, jobject thiz, jstring javaAcc) { Java_com_tutpro_baresip_AccountKt_account_1auth_1user(JNIEnv *env, jobject thiz, jstring javaAcc) {
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);

View File

@ -8,6 +8,7 @@ class Account(val accp: String) {
var displayName = account_display_name(accp) var displayName = account_display_name(accp)
val aor = account_aor(accp) val aor = account_aor(accp)
val uri = account_uri(accp)
var authUser = account_auth_user(accp) var authUser = account_auth_user(accp)
var authPass = account_auth_pass(accp) var authPass = account_auth_pass(accp)
var outbound = ArrayList<String>() var outbound = ArrayList<String>()
@ -207,12 +208,21 @@ class Account(val accp: String) {
return false return false
} }
fun aor(accp: String): String {
return account_aor(accp)
}
fun uri(accp: String): String {
return account_uri(accp)
}
} }
} }
external fun account_set_display_name(acc: String, dn: String): Int external fun account_set_display_name(acc: String, dn: String): Int
external fun account_display_name(acc: String): String external fun account_display_name(acc: String): String
external fun account_aor(acc: String): String external fun account_aor(acc: String): String
external fun account_uri(acc: String): String
external fun account_auth_user(acc: String): String external fun account_auth_user(acc: String): String
external fun account_set_auth_user(acc: String, user: String): Int external fun account_set_auth_user(acc: String, user: String): Int
external fun account_auth_pass(acc: String): String external fun account_auth_pass(acc: String): String

View File

@ -16,6 +16,7 @@ class AccountActivity : AppCompatActivity() {
internal lateinit var acc: Account internal lateinit var acc: Account
internal lateinit var ua: UserAgent internal lateinit var ua: UserAgent
internal lateinit var uri: TextView
internal lateinit var displayName: EditText internal lateinit var displayName: EditText
internal lateinit var aor: String internal lateinit var aor: String
internal lateinit var authUser: EditText internal lateinit var authUser: EditText
@ -47,7 +48,10 @@ class AccountActivity : AppCompatActivity() {
uaIndex = UserAgent.findAorIndex(aor)!! uaIndex = UserAgent.findAorIndex(aor)!!
ua = UserAgent.uas()[uaIndex] ua = UserAgent.uas()[uaIndex]
setTitle(aor.replace("sip:", "")) setTitle(aor.split(":")[1])
uri = findViewById(R.id.Uri) as TextView
uri.setText(acc.uri)
displayName = findViewById(R.id.DisplayName) as EditText displayName = findViewById(R.id.DisplayName) as EditText
displayName.setText(acc.displayName) displayName.setText(acc.displayName)

View File

@ -22,7 +22,7 @@ class AccountListAdapter(private val cxt: Context, private val rows: ArrayList<A
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rowView = inflater.inflate(R.layout.account_row, parent, false) val rowView = inflater.inflate(R.layout.account_row, parent, false)
val aorView = rowView.findViewById(R.id.aor) as TextView val aorView = rowView.findViewById(R.id.aor) as TextView
aorView.text = row.aor aorView.text = row.aor.split(":")[0]
aorView.textSize = 20f aorView.textSize = 20f
aorView.setPadding(6, 6, 0, 6) aorView.setPadding(6, 6, 0, 6)
aorView.setOnClickListener { _ -> aorView.setOnClickListener { _ ->

View File

@ -4,6 +4,7 @@ import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.widget.* import android.widget.*
@ -65,10 +66,16 @@ class AccountsActivity : AppCompatActivity() {
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.help -> {
Utils.alertView(this@AccountsActivity, "New Account",
getString(R.string.accounts_help))
}
android.R.id.home -> { android.R.id.home -> {
Log.d("Baresip", "Back array was pressed at Accounts") Log.d("Baresip", "Back array was pressed at Accounts")
BaresipService.activities.removeAt(0) BaresipService.activities.removeAt(0)
@ -76,10 +83,15 @@ class AccountsActivity : AppCompatActivity() {
setResult(RESULT_OK, i) setResult(RESULT_OK, i)
finish() finish()
} }
} }
return true return true
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.accounts_menu, menu)
return true
} }

View File

@ -35,7 +35,7 @@ class CallsActivity : AppCompatActivity() {
account = ua.account account = ua.account
val headerView = findViewById(R.id.account) as TextView val headerView = findViewById(R.id.account) as TextView
val headerText = "${getString(R.string.account)} ${aor.substringAfter(":")}" val headerText = "${getString(R.string.account)} ${aor.split(":")[1]}"
headerView.text = headerText headerView.text = headerText
val listView = findViewById(R.id.calls) as ListView val listView = findViewById(R.id.calls) as ListView

View File

@ -34,7 +34,7 @@ class ChatsActivity: AppCompatActivity() {
BaresipService.activities.add(0, "chats,$aor") BaresipService.activities.add(0, "chats,$aor")
val headerView = findViewById(R.id.account) as TextView val headerView = findViewById(R.id.account) as TextView
val headerText = "${getString(R.string.account)} ${aor.substringAfter(":")}" val headerText = "${getString(R.string.account)} ${aor.split(":")[1]}"
headerView.text = headerText headerView.text = headerText
uaMessages = uaMessages(aor) uaMessages = uaMessages(aor)

View File

@ -26,7 +26,7 @@ class UaSpinnerAdapter(private val cxt: Context, private val uas: ArrayList<User
val inflater = cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val inflater = cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val row = inflater.inflate(R.layout.account_spinner, parent, false) val row = inflater.inflate(R.layout.account_spinner, parent, false)
val textView = row.findViewById(R.id.spinnerText) as TextView val textView = row.findViewById(R.id.spinnerText) as TextView
textView.text = uas[position].account.aor.replace("sip:", "") textView.text = uas[position].account.aor.split(":")[1]
textView.textSize = 17f textView.textSize = 17f
val imageView = row.findViewById(R.id.spinnerImage) as ImageView val imageView = row.findViewById(R.id.spinnerImage) as ImageView
imageView.setImageResource(images[position]) imageView.setImageResource(images[position])

View File

@ -97,12 +97,23 @@ object Utils {
} }
fun checkAor(aor: String): Boolean { fun checkAor(aor: String): Boolean {
val parts = aor.split(":") val p = aor.split(":")
if (parts.size == 1) if (p.size == 2)
return checkUriUser(aorUser(p[0])) && checkDomain(aorDomain(p[0])) &&
checkPortTransport(p[1])
val t = aor.split(";transport=")
if (t.size == 2)
return checkUriUser(aorUser(t[0])) && checkDomain(aorDomain(t[0])) &&
t[1] in arrayOf("udp", "tcp", "tls")
return checkUriUser(aorUser(aor)) && checkDomain(aorDomain(aor)) return checkUriUser(aorUser(aor)) && checkDomain(aorDomain(aor))
}
private fun checkPortTransport(portTransport: String): Boolean {
val pt = portTransport.split(";transport=")
if (pt.count() == 1)
return checkPort(pt[0])
else else
return checkUriUser(aorUser(parts[0])) && checkDomain(aorDomain(parts[0])) && return checkPort(pt[0]) && pt[1] in arrayOf("udp", "tcp", "tls")
checkPort(parts[1])
} }
private fun checkE164Number(no: String): Boolean { private fun checkE164Number(no: String): Boolean {

View File

@ -16,6 +16,17 @@
android:paddingBottom="24dp" android:paddingBottom="24dp"
android:focusableInTouchMode="true" > android:focusableInTouchMode="true" >
<TextView
android:id="@+id/Uri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="@android:color/black"
android:paddingBottom="10dp"
android:text="" >
</TextView>
<TextView <TextView
android:id="@+id/DisplayNameTitle" android:id="@+id/DisplayNameTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@ -30,6 +30,7 @@
android:layout_toStartOf="@+id/addAccount" android:layout_toStartOf="@+id/addAccount"
android:inputType="textEmailAddress" android:inputType="textEmailAddress"
android:autofillHints="username" android:autofillHints="username"
android:scrollHorizontally="true"
android:hint="@string/user_domain" > android:hint="@string/user_domain" >
</EditText> </EditText>

View File

@ -0,0 +1,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/help"
android:title="@string/help" />
</menu>

View File

@ -104,8 +104,16 @@
</string> </string>
<!-- Accounts Activity --> <!-- Accounts Activity -->
<string name="accounts">Tilit</string> <string name="accounts">Tilit</string>
<string name="user_domain">käyttäjä@domain[:portti]</string> <string name="accounts_help">Valinnaisesti voidaan uutta tiliä luotaessa antaa myös porttinumero
<string name="invalid_aor">Virheellinen käyttäjä@domain[:portti] \'%1$s\'</string> ja tiedonsiirtoprokolla: käyttäjä@domain[:portti][;transport=udp|tcp|tls]. Jos portti on
annettu, mutta protolollaa ei ole annettu, protokolla on udp. Jos porttia ei ole annettu,
mutta protokolla on annettu, portti on joko 5060 tai 5061 (tls). Jos kumpaakaan ei ole
annettu eikä välityspalvelinta ole määritelty, tilin mahdollinen rekisteröintipalvelin
päätellään pelkästään domainin DNS-informaation perusteella.
</string>
<string name="user_domain">käyttäjä@domain</string>
<string name="invalid_aor">Virheellinen käyttäjä@domain[:portti][;transport=udp|tcp|tls] \'%1$s\'
</string>
<string name="account_exists">Tili \'%1$s\' on jo olemassa.</string> <string name="account_exists">Tili \'%1$s\' on jo olemassa.</string>
<string name="account_allocation_failure">"Uuden tilin luonti <string name="account_allocation_failure">"Uuden tilin luonti
epäonnistui. epäonnistui.
@ -262,6 +270,8 @@
<string name="send">Lähetä</string> <string name="send">Lähetä</string>
<string name="status">Tila</string> <string name="status">Tila</string>
<string name="error">Virhe</string> <string name="error">Virhe</string>
<string name="help">Apua</string>
<!-- Main Activity --> <!-- Main Activity -->
<string name="backup">Tallenna</string> <string name="backup">Tallenna</string>
<string name="restore">Palauta</string> <string name="restore">Palauta</string>

View File

@ -98,8 +98,15 @@
<!-- Accounts Activity --> <!-- Accounts Activity -->
<string name="accounts">Accounts</string> <string name="accounts">Accounts</string>
<string name="user_domain">user@domain[:port]</string> <string name="accounts_help">Account\'s port number and transport protocol may be optionally
<string name="invalid_aor">Invalid user@domain[:port] \'%1$s\'</string> given when a new account is created: username@domain[:port][;transport=udp|tcp|tls]. If port
is given and transport protocol is not given, transport protocol defaults to udp. If port is
not given and transport protocol is given, port defaults to 5060 or 5061 (tls). If neither
is given and no outbound proxy is specified, account\'s registrar (if any) is determined
solely based on domain\'s DNS information.
</string>
<string name="user_domain">user@domain</string>
<string name="invalid_aor">Invalid user@domain[:port][;transport=udp|tcp|tls] \'%1$s\'</string>
<string name="account_exists">Account \'%1$s\' already exists.</string> <string name="account_exists">Account \'%1$s\' already exists.</string>
<string name="account_allocation_failure">"Failed to allocate new account.</string> <string name="account_allocation_failure">"Failed to allocate new account.</string>
<string name="encrypt_password">Encrypt Password</string> <string name="encrypt_password">Encrypt Password</string>
@ -246,6 +253,7 @@
<string name="send">Send</string> <string name="send">Send</string>
<string name="status">Status</string> <string name="status">Status</string>
<string name="error">Error</string> <string name="error">Error</string>
<string name="help">Help</string>
<string name="dots" translatable="false"></string> <string name="dots" translatable="false"></string>
<!-- Main Activity --> <!-- Main Activity -->

View File

@ -0,0 +1,2 @@
- Added possibility to give transport protocol for account's AoR.
- Do not show account's port or transport protocol except in Account Activity.