- Used new net_set_address and net_set_af API methods for implementing
prefer_ipv6 functionality.
This commit is contained in:
@ -423,9 +423,10 @@ Java_com_tutpro_baresip_BaresipService_baresipStart(JNIEnv *env, jobject instanc
|
||||
}
|
||||
|
||||
if (strlen(ipv6_addr) > 0) {
|
||||
LOGW("setting ipv6 net address (%s)\n", ipv6_addr);
|
||||
sa_set_str(&temp_sa, ipv6_addr, 0);
|
||||
net_set_address(baresip_network(), &temp_sa, (bool)(javaPreferIpV6 == JNI_TRUE));
|
||||
net_set_address(baresip_network(), &temp_sa);
|
||||
if ((bool)(javaPreferIpV6 == JNI_TRUE))
|
||||
net_set_af(baresip_network(), AF_INET6);
|
||||
}
|
||||
|
||||
play_set_path(baresip_player(), path);
|
||||
@ -1399,14 +1400,15 @@ Java_com_tutpro_baresip_Api_net_1use_1nameserver(JNIEnv *env, jobject thiz, jstr
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_com_tutpro_baresip_Api_net_1set_1address(JNIEnv *env, jobject thiz,
|
||||
jstring javaIp, jboolean javaPrefer) {
|
||||
Java_com_tutpro_baresip_Api_net_1set_1address(JNIEnv *env, jobject thiz, jstring javaIp) {
|
||||
const char *native_ip = (*env)->GetStringUTFChars(env, javaIp, 0);
|
||||
int res = 0;
|
||||
struct sa temp_sa;
|
||||
LOGD("using address '%s'\n", native_ip);
|
||||
char buf[256];
|
||||
LOGD("setting address '%s'\n", native_ip);
|
||||
if (0 == sa_set_str(&temp_sa, native_ip, 0)) {
|
||||
net_set_address(baresip_network(), &temp_sa, (bool)(javaPrefer == JNI_TRUE));
|
||||
sa_ntop(&temp_sa, buf, 256);
|
||||
net_set_address(baresip_network(), &temp_sa);
|
||||
} else {
|
||||
LOGE("invalid ip address %s\n", native_ip);
|
||||
res = EAFNOSUPPORT;
|
||||
@ -1415,6 +1417,24 @@ Java_com_tutpro_baresip_Api_net_1set_1address(JNIEnv *env, jobject thiz,
|
||||
return res;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_com_tutpro_baresip_Api_net_1set_1af(JNIEnv *env, jobject thiz, jboolean javaIpV6) {
|
||||
int af = javaIpV6 == JNI_TRUE ? AF_INET6 : AF_INET;
|
||||
int res = 0;
|
||||
LOGD("setting af '%d'\n", af);
|
||||
if (net_af(baresip_network()) != af) {
|
||||
net_set_af(baresip_network(), af);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_tutpro_baresip_Api_net_1force_1change(JNIEnv *env, jobject thiz) {
|
||||
LOGD("forcing net change\n");
|
||||
net_force_change(baresip_network());
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_tutpro_baresip_Api_net_1debug(JNIEnv *env, jobject thiz) {
|
||||
net_debug_log();
|
||||
|
||||
@ -32,7 +32,9 @@ object Api {
|
||||
external fun contacts_remove()
|
||||
external fun log_level_set(level: Int)
|
||||
external fun net_use_nameserver(servers: String): Int
|
||||
external fun net_set_address(ip_addr: String, preferIpV6: Boolean): Int
|
||||
external fun net_set_address(ip_addr: String): Int
|
||||
external fun net_set_af(ipv6: Boolean): Boolean
|
||||
external fun net_force_change()
|
||||
external fun net_debug()
|
||||
external fun net_dns_debug()
|
||||
external fun module_load(module: String): Int
|
||||
|
||||
@ -50,8 +50,6 @@ class BaresipService: Service() {
|
||||
internal var audioFocused = false
|
||||
internal var origCallVolume = -1
|
||||
internal val btAdapter = BluetoothAdapter.getDefaultAdapter()
|
||||
internal var dnsServers = listOf<InetAddress>()
|
||||
internal var linkAddresses = listOf<LinkAddress>()
|
||||
|
||||
override fun onCreate() {
|
||||
|
||||
@ -93,27 +91,37 @@ class BaresipService: Service() {
|
||||
|
||||
override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) {
|
||||
super.onLinkPropertiesChanged(network, linkProperties)
|
||||
Log.d(LOG_TAG, "Network link properties changed: $linkProperties")
|
||||
Log.e(LOG_TAG, "Network link properties changed: $linkProperties")
|
||||
if (!isServiceRunning)
|
||||
return
|
||||
if (dynDns) {
|
||||
val dnsServers = linkProperties.dnsServers
|
||||
dnsServers = linkProperties.dnsServers
|
||||
if (Config.updateDnsServers(dnsServers) != 0)
|
||||
Log.w(LOG_TAG, "Failed to update DNS servers '$dnsServers'")
|
||||
}
|
||||
if (preferIpV6) {
|
||||
val ipV6Addr = Utils.findIpV6Address(linkProperties.linkAddresses)
|
||||
if (ipV6Addr != "") {
|
||||
if (Config.updateNetAddress(ipV6Addr, preferIpV6) != 0)
|
||||
Log.w(LOG_TAG, "Failed to update net address '$ipV6Addr'")
|
||||
|
||||
val ipV6Addr = Utils.findIpV6Address(linkProperties.linkAddresses)
|
||||
if (ipV6Addr != "") {
|
||||
Log.w(LOG_TAG, "Found IPv6 address '$ipV6Addr'")
|
||||
if (Api.net_set_address(ipV6Addr) != 0) {
|
||||
Log.w(LOG_TAG, "Failed to update net address '$ipV6Addr'")
|
||||
} else {
|
||||
val ipV4Addr = Utils.findIpV4Address(linkProperties.linkAddresses)
|
||||
if (ipV4Addr != "")
|
||||
if (Config.updateNetAddress(ipV4Addr, !preferIpV6) != 0)
|
||||
Log.w(LOG_TAG, "Failed to update net address '$ipV4Addr'")
|
||||
if (preferIpV6)
|
||||
Api.net_set_af(true)
|
||||
}
|
||||
}
|
||||
val ipV4Addr = Utils.findIpV4Address(linkProperties.linkAddresses)
|
||||
if (ipV4Addr != "") {
|
||||
Log.w(LOG_TAG, "Found IPv4 address '$ipV4Addr'")
|
||||
if (Api.net_set_address(ipV4Addr) != 0) {
|
||||
Log.w(LOG_TAG, "Failed to update net address '$ipV4Addr'")
|
||||
} else {
|
||||
if (!preferIpV6 || (ipV6Addr == ""))
|
||||
Api.net_set_af(false)
|
||||
}
|
||||
}
|
||||
Api.net_force_change()
|
||||
Api.net_debug()
|
||||
UserAgent.register()
|
||||
// UserAgent.register()
|
||||
}
|
||||
}
|
||||
)
|
||||
@ -248,7 +256,7 @@ class BaresipService: Service() {
|
||||
Log.d(LOG_TAG, "Asset '$a' already copied")
|
||||
}
|
||||
if (a == "config")
|
||||
Config.initialize(dnsServers)
|
||||
Config.initialize()
|
||||
}
|
||||
|
||||
if (File(filesDir, "history").exists())
|
||||
@ -266,6 +274,9 @@ class BaresipService: Service() {
|
||||
|
||||
showStatusNotification()
|
||||
|
||||
if (Config.variable("dyn_dns")[0] == "yes")
|
||||
Config.removeVariable("dns_server")
|
||||
|
||||
if (bindAddress != "") {
|
||||
Config.removeVariable("net_interface")
|
||||
Config.save()
|
||||
@ -1057,6 +1068,8 @@ class BaresipService: Service() {
|
||||
val contacts = ArrayList<Contact>()
|
||||
val chatTexts: MutableMap<String, String> = mutableMapOf<String, String>()
|
||||
val activities = mutableListOf<String>()
|
||||
var dnsServers = listOf<InetAddress>()
|
||||
var linkAddresses = listOf<LinkAddress>()
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ object Config {
|
||||
private val configPath = BaresipService.filesPath + "/config"
|
||||
private var config = String(Utils.getFileContents(configPath)!!, StandardCharsets.ISO_8859_1)
|
||||
|
||||
fun initialize(dnsServers: List<InetAddress>) {
|
||||
fun initialize() {
|
||||
|
||||
Log.d("Baresip", "Config is '$config'")
|
||||
|
||||
@ -57,6 +57,7 @@ object Config {
|
||||
Log.logLevelSet(ll)
|
||||
}
|
||||
|
||||
removeVariable("net_prefer_ipv6")
|
||||
val preferIpV6 = variable("prefer_ipv6")
|
||||
if (preferIpV6.size == 0) {
|
||||
BaresipService.preferIpV6 = false
|
||||
@ -74,8 +75,13 @@ object Config {
|
||||
config = "${config}dyn_dns no\n"
|
||||
} else {
|
||||
if (config.contains(Regex("dyn_dns[ ]+yes"))) {
|
||||
for (dnsServer in dnsServers)
|
||||
config = "${config}dns_server ${dnsServer.hostAddress}:53\n"
|
||||
removeVariable("dns_server")
|
||||
Log.d("Baresip", "DNS servers ${BaresipService.dnsServers}")
|
||||
for (dnsServer in BaresipService.dnsServers)
|
||||
if (Utils.checkIpV4(dnsServer.hostAddress))
|
||||
config = "${config}dns_server ${dnsServer.hostAddress}:53\n"
|
||||
else
|
||||
config = "${config}dns_server [${dnsServer.hostAddress}]:53\n"
|
||||
BaresipService.dynDns = true
|
||||
}
|
||||
}
|
||||
@ -143,9 +149,4 @@ object Config {
|
||||
return Api.net_use_nameserver(servers)
|
||||
}
|
||||
|
||||
|
||||
fun updateNetAddress(ipAddress: String, prefer: Boolean): Int {
|
||||
return Api.net_set_address(ipAddress, prefer)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ class ConfigActivity : AppCompatActivity() {
|
||||
bindAddr.setText(oldBindAddr)
|
||||
|
||||
preferIPv6 = findViewById(R.id.PreferIPv6) as CheckBox
|
||||
val piCv = Config.variable("net_prefer_ipv6")
|
||||
val piCv = Config.variable("prefer_ipv6")
|
||||
oldPreferIPv6 = if (piCv.size == 0) "no" else piCv[0]
|
||||
preferIPv6.isChecked = oldPreferIPv6 == "yes"
|
||||
|
||||
@ -238,9 +238,31 @@ class ConfigActivity : AppCompatActivity() {
|
||||
var preferIPv6String = "no"
|
||||
if (preferIPv6.isChecked) preferIPv6String = "yes"
|
||||
if (oldPreferIPv6 != preferIPv6String) {
|
||||
Config.replaceVariable("net_prefer_ipv6", preferIPv6String)
|
||||
Config.replaceVariable("prefer_ipv6", preferIPv6String)
|
||||
BaresipService.preferIpV6 = preferIPv6String == "yes"
|
||||
if (preferIPv6String == "yes") {
|
||||
val ipV6Addr = Utils.findIpV6Address(BaresipService.linkAddresses)
|
||||
if (ipV6Addr != "") {
|
||||
if (Api.net_set_address(ipV6Addr) != 0) {
|
||||
Log.w("Baresip", "Failed to update net address '$ipV6Addr'")
|
||||
} else {
|
||||
Api.net_set_af(true)
|
||||
Api.net_force_change()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
val ipV4Addr = Utils.findIpV4Address(BaresipService.linkAddresses)
|
||||
if (ipV4Addr != "") {
|
||||
if (Api.net_set_address(ipV4Addr) != 0) {
|
||||
Log.w("Baresip", "Failed to update net address '$ipV4Addr'")
|
||||
} else {
|
||||
Api.net_set_af(false)
|
||||
Api.net_force_change()
|
||||
}
|
||||
}
|
||||
}
|
||||
Api.net_debug()
|
||||
save = true
|
||||
restart = true
|
||||
}
|
||||
|
||||
val dnsServers = addMissingPorts(dnsServers.text.toString().trim().toLowerCase())
|
||||
@ -263,12 +285,7 @@ class ConfigActivity : AppCompatActivity() {
|
||||
}
|
||||
} else {
|
||||
Config.addLine("dyn_dns yes")
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||
Config.updateDnsServers(cm.getLinkProperties(cm.activeNetwork).getDnsServers())
|
||||
} else {
|
||||
restart = true
|
||||
}
|
||||
Config.updateDnsServers(BaresipService.dnsServers)
|
||||
}
|
||||
Api.net_debug()
|
||||
save = true
|
||||
|
||||
Reference in New Issue
Block a user