aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/service
diff options
context:
space:
mode:
authorPacien TRAN-GIRARD2017-07-11 14:49:08 +0200
committerPacien TRAN-GIRARD2017-07-11 14:49:08 +0200
commita2bfd75dee9b4952771a66c555ba1d920a072ae9 (patch)
tree3fcf598fe4e8fe858b296089f651a198b4e5f47c /app/src/main/java/org/pacien/tincapp/service
parent336a8f9cc02b2f78796fd10ea6244e5d0bc725c7 (diff)
downloadtincapp-a2bfd75dee9b4952771a66c555ba1d920a072ae9.tar.gz
Implement create and join network dialogs + refactoring
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/service')
-rw-r--r--app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt9
-rw-r--r--app/src/main/java/org/pacien/tincapp/service/VpnInterfaceConfiguraton.kt62
-rw-r--r--app/src/main/java/org/pacien/tincapp/service/VpnServiceBuilderExtensions.kt46
3 files changed, 5 insertions, 112 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt
index 45f901b..e2eae00 100644
--- a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt
+++ b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt
@@ -9,10 +9,11 @@ import org.pacien.tincapp.commands.Tinc
9import org.pacien.tincapp.commands.Tincd 9import org.pacien.tincapp.commands.Tincd
10import org.pacien.tincapp.context.App 10import org.pacien.tincapp.context.App
11import org.pacien.tincapp.context.AppPaths 11import org.pacien.tincapp.context.AppPaths
12import org.pacien.tincapp.utils.applyIgnoringException 12import org.pacien.tincapp.data.VpnInterfaceConfiguration
13import org.pacien.tincapp.extensions.Java.applyIgnoringException
14import org.pacien.tincapp.extensions.VpnServiceBuilder.applyCfg
13import java.io.IOException 15import java.io.IOException
14 16
15
16/** 17/**
17 * @author pacien 18 * @author pacien
18 */ 19 */
@@ -46,9 +47,9 @@ class TincVpnService : VpnService() {
46 private fun startVpn(netName: String) { 47 private fun startVpn(netName: String) {
47 if (isConnected()) onDestroy() 48 if (isConnected()) onDestroy()
48 TincVpnService.netName = netName 49 TincVpnService.netName = netName
49 TincVpnService.interfaceCfg = VpnInterfaceConfiguration(AppPaths.netConfFile(netName)) 50 TincVpnService.interfaceCfg = VpnInterfaceConfiguration.fromIfaceConfiguration(AppPaths.netConfFile(netName))
50 51
51 val net = Builder().setSession(netName).apply(TincVpnService.interfaceCfg!!) 52 val net = Builder().setSession(netName).applyCfg(TincVpnService.interfaceCfg!!)
52 applyIgnoringException(net::addDisallowedApplication, BuildConfig.APPLICATION_ID) 53 applyIgnoringException(net::addDisallowedApplication, BuildConfig.APPLICATION_ID)
53 54
54 try { 55 try {
diff --git a/app/src/main/java/org/pacien/tincapp/service/VpnInterfaceConfiguraton.kt b/app/src/main/java/org/pacien/tincapp/service/VpnInterfaceConfiguraton.kt
deleted file mode 100644
index 50ccb20..0000000
--- a/app/src/main/java/org/pacien/tincapp/service/VpnInterfaceConfiguraton.kt
+++ /dev/null
@@ -1,62 +0,0 @@
1package org.pacien.tincapp.service
2
3/**
4 * @author pacien
5 */
6
7import org.apache.commons.configuration2.Configuration
8import org.apache.commons.configuration2.builder.fluent.Configurations
9import java.io.File
10
11private val KEY_ADDRESSES = "Address"
12private val KEY_ROUTES = "Route"
13private val KEY_DNS_SERVERS = "DNSServer"
14private val KEY_SEARCH_DOMAINS = "SearchDomain"
15private val KEY_ALLOWED_APPLICATIONS = "AllowApplication"
16private val KEY_DISALLOWED_APPLICATIONS = "DisallowApplication"
17private val KEY_ALLOWED_FAMILIES = "AllowFamily"
18private val KEY_ALLOW_BYPASS = "AllowBypass"
19private val KEY_BLOCKING = "Blocking"
20private val KEY_MTU = "MTU"
21
22private fun Configuration.getStringList(key: String): List<String> = getList(String::class.java, key, emptyList())
23private fun Configuration.getCidrList(key: String): List<CidrAddress> = getStringList(key).map { CidrAddress(it) }
24private fun Configuration.getIntList(key: String): List<Int> = getList(Int::class.java, key, emptyList())
25
26data class CidrAddress(val address: String, val prefix: Int) {
27 constructor(slashSeparated: String) :
28 this(slashSeparated.substringBefore(SEPARATOR), Integer.parseInt(slashSeparated.substringAfter(SEPARATOR)))
29
30 override fun toString() = address + SEPARATOR + prefix
31
32 companion object {
33 private val SEPARATOR = "/"
34 }
35}
36
37data class VpnInterfaceConfiguration(val addresses: List<CidrAddress> = emptyList(),
38 val routes: List<CidrAddress> = emptyList(),
39 val dnsServers: List<String> = emptyList(),
40 val searchDomains: List<String> = emptyList(),
41 val allowedApplications: List<String> = emptyList(),
42 val disallowedApplications: List<String> = emptyList(),
43 val allowedFamilies: List<Int> = emptyList(),
44 val allowBypass: Boolean = false,
45 val blocking: Boolean = false,
46 val mtu: Int? = null) {
47
48 constructor(cfg: Configuration) : this(
49 cfg.getCidrList(KEY_ADDRESSES),
50 cfg.getCidrList(KEY_ROUTES),
51 cfg.getStringList(KEY_DNS_SERVERS),
52 cfg.getStringList(KEY_SEARCH_DOMAINS),
53 cfg.getStringList(KEY_ALLOWED_APPLICATIONS),
54 cfg.getStringList(KEY_DISALLOWED_APPLICATIONS),
55 cfg.getIntList(KEY_ALLOWED_FAMILIES),
56 cfg.getBoolean(KEY_ALLOW_BYPASS, false),
57 cfg.getBoolean(KEY_BLOCKING, false),
58 cfg.getInteger(KEY_MTU, null))
59
60 constructor(cfgFile: File) : this(Configurations().properties(cfgFile))
61
62}
diff --git a/app/src/main/java/org/pacien/tincapp/service/VpnServiceBuilderExtensions.kt b/app/src/main/java/org/pacien/tincapp/service/VpnServiceBuilderExtensions.kt
deleted file mode 100644
index 22edff9..0000000
--- a/app/src/main/java/org/pacien/tincapp/service/VpnServiceBuilderExtensions.kt
+++ /dev/null
@@ -1,46 +0,0 @@
1package org.pacien.tincapp.service
2
3/**
4 * @author pacien
5 */
6
7import android.net.VpnService
8import org.pacien.tincapp.utils.applyIgnoringException
9
10fun VpnService.Builder.addAddress(cidr: CidrAddress): VpnService.Builder = addAddress(cidr.address, cidr.prefix)
11fun VpnService.Builder.addRoute(cidr: CidrAddress): VpnService.Builder = addRoute(cidr.address, cidr.prefix)
12fun VpnService.Builder.allowBypass(allow: Boolean): VpnService.Builder = if (allow) allowBypass() else this
13fun VpnService.Builder.overrideMtu(mtu: Int?): VpnService.Builder = if (mtu != null) setMtu(mtu) else this
14
15fun VpnService.Builder.addAddresses(cidrList: List<CidrAddress>): VpnService.Builder =
16 cidrList.fold(this, { net, cidr -> net.addAddress(cidr) })
17
18fun VpnService.Builder.addRoutes(cidrList: List<CidrAddress>): VpnService.Builder =
19 cidrList.fold(this, { net, cidr -> net.addRoute(cidr) })
20
21fun VpnService.Builder.addDnsServers(dnsList: List<String>): VpnService.Builder =
22 dnsList.fold(this, { net, dns -> net.addDnsServer(dns) })
23
24fun VpnService.Builder.addSearchDomains(domainList: List<String>): VpnService.Builder =
25 domainList.fold(this, { net, domain -> net.addSearchDomain(domain) })
26
27fun VpnService.Builder.allowFamilies(familyList: List<Int>): VpnService.Builder =
28 familyList.fold(this, { net, family -> net.allowFamily(family) })
29
30fun VpnService.Builder.addAllowedApplications(apps: List<String>): VpnService.Builder =
31 apps.fold(this, { net, app -> applyIgnoringException(net::addAllowedApplication, app, net)!! })
32
33fun VpnService.Builder.addDisallowedApplications(apps: List<String>): VpnService.Builder =
34 apps.fold(this, { net, app -> applyIgnoringException(net::addDisallowedApplication, app, net)!! })
35
36fun VpnService.Builder.apply(cfg: VpnInterfaceConfiguration): VpnService.Builder = this
37 .addAddresses(cfg.addresses)
38 .addRoutes(cfg.routes)
39 .addDnsServers(cfg.dnsServers)
40 .addSearchDomains(cfg.searchDomains)
41 .addAllowedApplications(cfg.allowedApplications)
42 .addDisallowedApplications(cfg.disallowedApplications)
43 .allowFamilies(cfg.allowedFamilies)
44 .allowBypass(cfg.allowBypass)
45 .setBlocking(cfg.blocking)
46 .overrideMtu(cfg.mtu)