- Replaced 'Use ICE' in account config with 'Media NAT Traversal' that

includes STUN media NAT option.
- Some reordering in account config.
This commit is contained in:
Juha Heinanen
2019-05-06 09:11:49 +03:00
parent f2c1a0ea99
commit 086037d4a3
5 changed files with 89 additions and 68 deletions

View File

@ -8,8 +8,8 @@ android {
applicationId = 'com.tutpro.baresip'
minSdkVersion 21
targetSdkVersion 28
versionCode = 59
versionName = '7.2.0'
versionCode = 60
versionName = '7.3.0'
externalNativeBuild {
cmake {
cFlags '-DHAVE_INTTYPES_H'

View File

@ -19,7 +19,7 @@ class AccountActivity : AppCompatActivity() {
internal lateinit var authPass: EditText
internal lateinit var outbound1: EditText
internal lateinit var outbound2: EditText
internal lateinit var iceCheck: CheckBox
internal lateinit var mediaNat: String
internal lateinit var stunServer: EditText
internal lateinit var regCheck: CheckBox
internal lateinit var mediaEnc: String
@ -57,15 +57,32 @@ class AccountActivity : AppCompatActivity() {
outbound2.setText(acc.outbound[1])
}
iceCheck = findViewById(R.id.Ice) as CheckBox
iceCheck.isChecked = acc.mediaNat == "ice"
iceCheck.setOnClickListener {
stunServer.isEnabled = iceCheck.isChecked
mediaNat = acc.mediaNat
val mediaNatSpinner = findViewById(R.id.mediaNatSpinner) as Spinner
val mediaNatKeys = arrayListOf("stun", "ice", "")
val mediaNatVals = arrayListOf("STUN", "ICE", "None")
var keyIx = mediaNatKeys.indexOf(acc.mediaNat)
var keyVal = mediaNatVals.elementAt(keyIx)
mediaNatKeys.removeAt(keyIx)
mediaNatVals.removeAt(keyIx)
mediaNatKeys.add(0, acc.mediaNat)
mediaNatVals.add(0, keyVal)
val mediaNatAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,
mediaNatVals)
mediaNatAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
mediaNatSpinner.adapter = mediaNatAdapter
mediaNatSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
mediaNat = mediaNatKeys[mediaNatVals.indexOf(parent.selectedItem.toString())]
stunServer.isEnabled = mediaNat != ""
}
override fun onNothingSelected(parent: AdapterView<*>) {
}
}
stunServer = findViewById(R.id.StunServer) as EditText
stunServer.setText(acc.stunServer)
stunServer.isEnabled = iceCheck.isChecked
stunServer.isEnabled = mediaNat != ""
regCheck = findViewById(R.id.Register) as CheckBox
regCheck.isChecked = acc.regint > 0
@ -110,8 +127,8 @@ class AccountActivity : AppCompatActivity() {
val mediaEncSpinner = findViewById(R.id.mediaEncSpinner) as Spinner
val mediaEncKeys = arrayListOf("zrtp", "dtls_srtp", "srtp-mandf", "srtp-mand", "srtp", "")
val mediaEncVals = arrayListOf("ZRTP", "DTLS-SRTPF", "SRTP-MANDF", "SRTP-MAND", "SRTP", "None")
val keyIx = mediaEncKeys.indexOf(acc.mediaEnc)
val keyVal = mediaEncVals.elementAt(keyIx)
keyIx = mediaEncKeys.indexOf(acc.mediaEnc)
keyVal = mediaEncVals.elementAt(keyIx)
mediaEncKeys.removeAt(keyIx)
mediaEncVals.removeAt(keyIx)
mediaEncKeys.add(0, acc.mediaEnc)
@ -240,7 +257,9 @@ class AccountActivity : AppCompatActivity() {
if (acc.regint != 3600) newRegint = 3600
} else {
if (acc.regint != 0) {
Api.ua_unregister(UserAgent.uas()[uaIndex].uap)
val ua = UserAgent.uas()[uaIndex]
Api.ua_unregister(ua.uap)
UserAgent.updateStatus(ua, R.drawable.dot_yellow)
newRegint = 0
}
}
@ -253,18 +272,17 @@ class AccountActivity : AppCompatActivity() {
Log.e("Baresip", "Setting of regint failed")
}
var newMediaNat = ""
if (iceCheck.isChecked) newMediaNat = "ice"
if (acc.mediaNat != newMediaNat)
if (account_set_medianat(acc.accp, newMediaNat) == 0) {
if (mediaNat != acc.mediaNat) {
if (account_set_medianat(acc.accp, mediaNat) == 0) {
acc.mediaNat = account_medianat(acc.accp)
Log.d("Baresip", "New medianat is ${acc.mediaNat}")
save = true
} else {
Log.e("Baresip", "Setting of medianat failed")
}
}
if (iceCheck.isChecked) {
if (mediaNat != "") {
val newStunServer = stunServer.text.toString().trim()
if (acc.stunServer != newStunServer) {
if (!Utils.checkHostPort(newStunServer, false)) {
@ -389,8 +407,8 @@ class AccountActivity : AppCompatActivity() {
findViewById(R.id.RegTitle) as TextView -> {
Utils.alertView(this, "Register", getString(R.string.register))
}
findViewById(R.id.IceTitle) as TextView -> {
Utils.alertView(this, "Use ICE", getString(R.string.ice))
findViewById(R.id.MediaNatTitle) as TextView -> {
Utils.alertView(this, "Media NAT Traversal", getString(R.string.mediaNat))
}
findViewById(R.id.StunServerTitle) as TextView -> {
Utils.alertView(this, "STUN Server", getString(R.string.stunServer))

View File

@ -27,6 +27,13 @@ class UserAgent (val uap: String) {
}
}
fun updateStatus(ua: UserAgent, status: Int) {
val index = BaresipService.uas.indexOf(ua)
if (index != -1) {
BaresipService.status[index] = status
}
}
fun uaAlloc(uri: String): UserAgent? {
val uap = Api.ua_alloc(uri)
if (uap != "") return UserAgent(uap)

View File

@ -89,7 +89,7 @@
android:hint="SIP URI of Proxy Server"
android:textSize="18sp"
android:inputType="textEmailAddress"
android:layout_width="fill_parent">
android:layout_width="fill_parent" >
</EditText>
<EditText
@ -125,51 +125,6 @@
</CheckBox>
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/IceTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:textSize="18sp"
android:textColor="@android:color/black"
android:onClick="onClick"
android:text="Use ICE" >
</TextView>
<CheckBox
android:id="@+id/Ice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_gravity="end"
android:checked="false" >
</CheckBox>
</RelativeLayout>
<TextView
android:id="@+id/StunServerTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textSize="18sp"
android:textColor="@android:color/black"
android:text="STUN Server"
android:onClick="onClick" >
</TextView>
<EditText
android:id="@+id/StunServer"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginStart="10dp"
android:textSize="18sp"
android:scrollHorizontally="true"
android:inputType="textEmailAddress" >
</EditText>
<TextView
android:id="@+id/AudioCodecsTitle"
android:layout_width="wrap_content"
@ -183,10 +138,50 @@
<LinearLayout
android:id="@+id/CodecSpinners"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/MediaNatTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:textSize="18sp"
android:textColor="@android:color/black"
android:onClick="onClick"
android:text="Media NAT Traversal" >
</TextView>
<Spinner
android:id="@+id/mediaNatSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:popupBackground="@drawable/spinner_background" >
</Spinner>
<TextView
android:id="@+id/StunServerTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:textSize="18sp"
android:textColor="@android:color/black"
android:onClick="onClick"
android:text="STUN Server" >
</TextView>
<EditText
android:id="@+id/StunServer"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:textSize="18sp"
android:paddingTop="0dp"
android:paddingStart="10dp"
android:scrollHorizontally="true"
android:inputType="textEmailAddress" >
</EditText>
<TextView
android:id="@+id/MediaEncTitle"
android:layout_width="wrap_content"

View File

@ -28,10 +28,11 @@
<string name="register">If checked, registration is enabled and REGISTER requests are sent at
12 minute intervals.
</string>
<string name="ice">If checked, ICE (Interactive Connectivity Establishment) is enabled for NAT
traversal.
<string name="mediaNat">Selects media NAT traversal protocol (if any). Possible choices are STUN
(Session Traversal Utilities for NAT, RFC 5389) and ICE (Interactive Connectivity
Establishment, RFC 5245).
</string>
<string name="stunServer">A specific Stun Server used by ICE of form host[:port].
<string name="stunServer">A STUN Server of form host[:port].
Factory default value is \'stun.l.google.com:19302\', pointing to public Google STUN server.
Username and password are currently not supported.
</string>