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

View File

@ -194,12 +194,17 @@ class BaresipService: Service() {
hotSpotAddresses = Utils.hotSpotAddresses()
Log.d(TAG, "HotSpot addresses $hotSpotAddresses")
if (hotSpotAddresses.isNotEmpty()) {
var reset = false
for ((k, v) in hotSpotAddresses)
if (Api.net_add_address_ifname(k, v) != 0)
Log.e(TAG, "Failed to add $v address $k")
Timer().schedule(2000) {
Api.uag_reset_transp(register = true, reinvite = false)
}
if (afMatch(k))
if (Api.net_add_address_ifname(k, v) != 0)
Log.e(TAG, "Failed to add $v address $k")
else
reset = true
if (reset)
Timer().schedule(2000) {
Api.uag_reset_transp(register = true, reinvite = false)
}
} else {
Log.w(TAG, "Could not get hotspot addresses")
}
@ -1396,19 +1401,29 @@ class BaresipService: Service() {
val props = cm.getLinkProperties(n) ?: continue
for (la in props.linkAddresses)
if (la.scope == android.system.OsConstants.RT_SCOPE_UNIVERSE &&
props.interfaceName != null && la.address.hostAddress != null)
addresses[la.address.hostAddress!!] = props.interfaceName!!
props.interfaceName != null && la.address.hostAddress != null &&
afMatch(la.address.hostAddress!!))
addresses[la.address.hostAddress!!] = props.interfaceName!!
}
}
if (hotSpotIsEnabled) {
hotSpotAddresses = Utils.hotSpotAddresses()
Log.d(TAG, "HotSpot addresses $hotSpotAddresses")
for ((k, v) in hotSpotAddresses)
addresses[k] = v
if (afMatch(k))
addresses[k] = v
}
return addresses
}
private fun afMatch(address: String): Boolean {
return when (addressFamily) {
"" -> true
"ipv4" -> address.contains(".")
else -> address.contains(":")
}
}
private fun updateDnsServers() {
if (isServiceRunning && !dynDns)
return
@ -1534,6 +1549,7 @@ class BaresipService: Service() {
var contactsMode = "baresip"
val chatTexts: MutableMap<String, String> = mutableMapOf()
val activities = mutableListOf<String>()
var addressFamily = ""
var dnsServers = listOf<InetAddress>()
val serviceEvent = MutableLiveData<Event<Long>>()
val serviceEvents = mutableListOf<ServiceEvent>()

View File

@ -73,6 +73,9 @@ object Config {
BaresipService.callVolume = variable("call_volume")[0].toInt()
}
if (config.contains("net_af"))
BaresipService.addressFamily = variable("net_af")[0]
if (!config.contains("dyn_dns")) {
config = "${config}dyn_dns no\n"
} else {

View File

@ -38,6 +38,9 @@ class ConfigActivity : AppCompatActivity() {
private lateinit var autoStart: CheckBox
private lateinit var batteryOptimizations: CheckBox
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 certificateFile: CheckBox
private lateinit var verifyServer: CheckBox
@ -61,6 +64,7 @@ class ConfigActivity : AppCompatActivity() {
private var oldLogLevel = ""
private var oldDisplayTheme = -1
private var oldContactsMode = ""
private var oldNetAf = ""
private var save = false
private var restart = false
private var menu: Menu? = null
@ -114,6 +118,28 @@ class ConfigActivity : AppCompatActivity() {
oldListenAddr = if (laCv.size == 0) "" else laCv[0]
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
val ddCv = Config.variable("dyn_dns")
if (ddCv[0] == "yes") {
@ -488,6 +514,15 @@ class ConfigActivity : AppCompatActivity() {
restart = true
}
if (oldNetAf != netAf) {
if (netAf == "")
Config.removeVariable("net_af")
else
Config.replaceVariable("net_af", netAf)
save = true
restart = true
}
val dnsServers = addMissingPorts(
dnsServers.text.toString().trim().lowercase(Locale.ROOT))
if (dnsServers != oldDnsServers) {
@ -620,6 +655,10 @@ class ConfigActivity : AppCompatActivity() {
Utils.alertView(this, getString(R.string.listen_address),
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 {
Utils.alertView(this, getString(R.string.dns_servers),
getString(R.string.dns_servers_help))

View File

@ -89,6 +89,22 @@
android:importantForAutofill="no" >
</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
android:id="@+id/DnsServersTitle"
android:layout_width="wrap_content"

View File

@ -319,6 +319,11 @@
osoitteilla.
</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_help">Pilkulla toisistaan erotettu luettelo DNS-palvelijoiden
osoitteita. Jos jätetään antamatta (oletus), osoitteet hankitaan dynaamisesti järjestelmästä.

View File

@ -305,6 +305,11 @@
</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="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_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
@ -426,6 +431,7 @@
<string name="invalid_sip_or_tel_uri">Invalid SIP or tel URI \'%1$s\'</string>
<string name="baresip" translatable="false">baresip</string>
<string name="android" translatable="false">Android</string>
<!-- Main Activity -->
<string name="backup">Backup</string>
<string name="restore">Restore</string>