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