Added setting to choose IP address family

This commit is contained in:
Juha Heinanen
2023-03-25 16:43:56 +02:00
parent a4034fca61
commit 65acc2a390
6 changed files with 93 additions and 8 deletions
@@ -194,12 +194,17 @@ class BaresipService: Service() {
hotSpotAddresses = Utils.hotSpotAddresses() hotSpotAddresses = Utils.hotSpotAddresses()
Log.d(TAG, "HotSpot addresses $hotSpotAddresses") Log.d(TAG, "HotSpot addresses $hotSpotAddresses")
if (hotSpotAddresses.isNotEmpty()) { if (hotSpotAddresses.isNotEmpty()) {
var reset = false
for ((k, v) in hotSpotAddresses) for ((k, v) in hotSpotAddresses)
if (Api.net_add_address_ifname(k, v) != 0) if (afMatch(k))
Log.e(TAG, "Failed to add $v address $k") if (Api.net_add_address_ifname(k, v) != 0)
Timer().schedule(2000) { Log.e(TAG, "Failed to add $v address $k")
Api.uag_reset_transp(register = true, reinvite = false) else
} reset = true
if (reset)
Timer().schedule(2000) {
Api.uag_reset_transp(register = true, reinvite = false)
}
} else { } else {
Log.w(TAG, "Could not get hotspot addresses") Log.w(TAG, "Could not get hotspot addresses")
} }
@@ -1396,19 +1401,29 @@ class BaresipService: Service() {
val props = cm.getLinkProperties(n) ?: continue val props = cm.getLinkProperties(n) ?: continue
for (la in props.linkAddresses) for (la in props.linkAddresses)
if (la.scope == android.system.OsConstants.RT_SCOPE_UNIVERSE && if (la.scope == android.system.OsConstants.RT_SCOPE_UNIVERSE &&
props.interfaceName != null && la.address.hostAddress != null) props.interfaceName != null && la.address.hostAddress != null &&
addresses[la.address.hostAddress!!] = props.interfaceName!! afMatch(la.address.hostAddress!!))
addresses[la.address.hostAddress!!] = props.interfaceName!!
} }
} }
if (hotSpotIsEnabled) { if (hotSpotIsEnabled) {
hotSpotAddresses = Utils.hotSpotAddresses() hotSpotAddresses = Utils.hotSpotAddresses()
Log.d(TAG, "HotSpot addresses $hotSpotAddresses") Log.d(TAG, "HotSpot addresses $hotSpotAddresses")
for ((k, v) in hotSpotAddresses) for ((k, v) in hotSpotAddresses)
addresses[k] = v if (afMatch(k))
addresses[k] = v
} }
return addresses return addresses
} }
private fun afMatch(address: String): Boolean {
return when (addressFamily) {
"" -> true
"ipv4" -> address.contains(".")
else -> address.contains(":")
}
}
private fun updateDnsServers() { private fun updateDnsServers() {
if (isServiceRunning && !dynDns) if (isServiceRunning && !dynDns)
return return
@@ -1534,6 +1549,7 @@ class BaresipService: Service() {
var contactsMode = "baresip" var contactsMode = "baresip"
val chatTexts: MutableMap<String, String> = mutableMapOf() val chatTexts: MutableMap<String, String> = mutableMapOf()
val activities = mutableListOf<String>() val activities = mutableListOf<String>()
var addressFamily = ""
var dnsServers = listOf<InetAddress>() var dnsServers = listOf<InetAddress>()
val serviceEvent = MutableLiveData<Event<Long>>() val serviceEvent = MutableLiveData<Event<Long>>()
val serviceEvents = mutableListOf<ServiceEvent>() val serviceEvents = mutableListOf<ServiceEvent>()
@@ -73,6 +73,9 @@ object Config {
BaresipService.callVolume = variable("call_volume")[0].toInt() BaresipService.callVolume = variable("call_volume")[0].toInt()
} }
if (config.contains("net_af"))
BaresipService.addressFamily = variable("net_af")[0]
if (!config.contains("dyn_dns")) { if (!config.contains("dyn_dns")) {
config = "${config}dyn_dns no\n" config = "${config}dyn_dns no\n"
} else { } else {
@@ -38,6 +38,9 @@ class ConfigActivity : AppCompatActivity() {
private lateinit var autoStart: CheckBox private lateinit var autoStart: CheckBox
private lateinit var batteryOptimizations: CheckBox private lateinit var batteryOptimizations: CheckBox
private lateinit var listenAddr: EditText private lateinit var listenAddr: EditText
private lateinit var netAfSpinner: Spinner
private lateinit var netAf: String
private lateinit var netAfKeys: ArrayList<String>
private lateinit var dnsServers: EditText private lateinit var dnsServers: EditText
private lateinit var certificateFile: CheckBox private lateinit var certificateFile: CheckBox
private lateinit var verifyServer: CheckBox private lateinit var verifyServer: CheckBox
@@ -61,6 +64,7 @@ class ConfigActivity : AppCompatActivity() {
private var oldLogLevel = "" private var oldLogLevel = ""
private var oldDisplayTheme = -1 private var oldDisplayTheme = -1
private var oldContactsMode = "" private var oldContactsMode = ""
private var oldNetAf = ""
private var save = false private var save = false
private var restart = false private var restart = false
private var menu: Menu? = null private var menu: Menu? = null
@@ -114,6 +118,28 @@ class ConfigActivity : AppCompatActivity() {
oldListenAddr = if (laCv.size == 0) "" else laCv[0] oldListenAddr = if (laCv.size == 0) "" else laCv[0]
listenAddr.setText(oldListenAddr) listenAddr.setText(oldListenAddr)
netAfSpinner = binding.NetAfSpinner
netAfKeys = arrayListOf("", "ipv4", "ipv6")
val netAfVals = arrayListOf("-", "IPv4", "IPv6")
val netAfCv = Config.variable("net_af")
oldNetAf = if (netAfCv.size == 0) "" else netAfCv[0].lowercase()
netAf = oldNetAf
val netAfIndex = netAfKeys.indexOf(oldNetAf)
val netAfValue = netAfVals.elementAt(netAfIndex)
netAfKeys.removeAt(netAfIndex)
netAfVals.removeAt(netAfIndex)
netAfKeys.add(0, oldNetAf)
netAfVals.add(0, netAfValue)
val netAfAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_item, netAfVals)
netAfAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
netAfSpinner.adapter = netAfAdapter
netAfSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
netAf = netAfKeys[position]
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
dnsServers = binding.DnsServers dnsServers = binding.DnsServers
val ddCv = Config.variable("dyn_dns") val ddCv = Config.variable("dyn_dns")
if (ddCv[0] == "yes") { if (ddCv[0] == "yes") {
@@ -488,6 +514,15 @@ class ConfigActivity : AppCompatActivity() {
restart = true restart = true
} }
if (oldNetAf != netAf) {
if (netAf == "")
Config.removeVariable("net_af")
else
Config.replaceVariable("net_af", netAf)
save = true
restart = true
}
val dnsServers = addMissingPorts( val dnsServers = addMissingPorts(
dnsServers.text.toString().trim().lowercase(Locale.ROOT)) dnsServers.text.toString().trim().lowercase(Locale.ROOT))
if (dnsServers != oldDnsServers) { if (dnsServers != oldDnsServers) {
@@ -620,6 +655,10 @@ class ConfigActivity : AppCompatActivity() {
Utils.alertView(this, getString(R.string.listen_address), Utils.alertView(this, getString(R.string.listen_address),
getString(R.string.listen_address_help)) getString(R.string.listen_address_help))
} }
binding.NetAfTitle.setOnClickListener {
Utils.alertView(this, getString(R.string.address_family),
getString(R.string.address_family_help))
}
binding.DnsServersTitle .setOnClickListener { binding.DnsServersTitle .setOnClickListener {
Utils.alertView(this, getString(R.string.dns_servers), Utils.alertView(this, getString(R.string.dns_servers),
getString(R.string.dns_servers_help)) getString(R.string.dns_servers_help))
@@ -89,6 +89,22 @@
android:importantForAutofill="no" > android:importantForAutofill="no" >
</EditText> </EditText>
<TextView
android:id="@+id/NetAfTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@string/address_family" >
</TextView>
<Spinner
android:id="@+id/NetAfSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:paddingTop="8dp" >
</Spinner>
<TextView <TextView
android:id="@+id/DnsServersTitle" android:id="@+id/DnsServersTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
+5
View File
@@ -319,6 +319,11 @@
osoitteilla. osoitteilla.
</string> </string>
<string name="invalid_listen_address">Virheellinen kuunteluosoite</string> <string name="invalid_listen_address">Virheellinen kuunteluosoite</string>
<string name="address_family">Osoiteperhe</string>
<string name="address_family_help">Valitsee, mitä IP-osoitteita baresip käyttää. Jos IPv4 tai IPv6
on valittu, baresip käyttää ainoastaan IPv4- tai IPv6-osoitteita. Jos kumpaakaan ei ole
valittu, baresip käyttää sekä IPv4- että IPv6-osoitteita.
</string>
<string name="dns_servers">DNS-palvelimet</string> <string name="dns_servers">DNS-palvelimet</string>
<string name="dns_servers_help">Pilkulla toisistaan erotettu luettelo DNS-palvelijoiden <string name="dns_servers_help">Pilkulla toisistaan erotettu luettelo DNS-palvelijoiden
osoitteita. Jos jätetään antamatta (oletus), osoitteet hankitaan dynaamisesti järjestelmästä. osoitteita. Jos jätetään antamatta (oletus), osoitteet hankitaan dynaamisesti järjestelmästä.
+6
View File
@@ -305,6 +305,11 @@
</string> </string>
<string name="invalid_listen_address">Invalid Listen Address</string> <string name="invalid_listen_address">Invalid Listen Address</string>
<string name="_0_0_0_0_5060" translatable="false">0.0.0.0:5060</string> <string name="_0_0_0_0_5060" translatable="false">0.0.0.0:5060</string>
<string name="address_family">Address Family</string>
<string name="address_family_help">Chooses which IP addresses baresip is
using. If IPv4 or IPv6 is chosen, baresip uses only IPv4 or IPv6 addresses. If neither is
chosen, baresip uses both IPv4 and IPv6 addresses.
</string>
<string name="dns_servers">DNS Servers</string> <string name="dns_servers">DNS Servers</string>
<string name="dns_servers_help">Comma separated list of addresses of DNS servers. If not given, <string name="dns_servers_help">Comma separated list of addresses of DNS servers. If not given,
DNS server addresses are obtained dynamically from the system. Each DNS address is of form DNS server addresses are obtained dynamically from the system. Each DNS address is of form
@@ -426,6 +431,7 @@
<string name="invalid_sip_or_tel_uri">Invalid SIP or tel URI \'%1$s\'</string> <string name="invalid_sip_or_tel_uri">Invalid SIP or tel URI \'%1$s\'</string>
<string name="baresip" translatable="false">baresip</string> <string name="baresip" translatable="false">baresip</string>
<string name="android" translatable="false">Android</string> <string name="android" translatable="false">Android</string>
<!-- Main Activity --> <!-- Main Activity -->
<string name="backup">Backup</string> <string name="backup">Backup</string>
<string name="restore">Restore</string> <string name="restore">Restore</string>