- 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:
@ -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'
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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>
|
||||
|
||||
Reference in New Issue
Block a user