diff options
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt')
-rw-r--r-- | app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt b/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt new file mode 100644 index 0000000..870668a --- /dev/null +++ b/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt | |||
@@ -0,0 +1,51 @@ | |||
1 | package org.pacien.tincapp.extensions | ||
2 | |||
3 | import android.net.VpnService | ||
4 | import org.pacien.tincapp.data.CidrAddress | ||
5 | import org.pacien.tincapp.data.VpnInterfaceConfiguration | ||
6 | import org.pacien.tincapp.extensions.Java.applyIgnoringException | ||
7 | |||
8 | /** | ||
9 | * @author pacien | ||
10 | */ | ||
11 | object VpnServiceBuilder { | ||
12 | |||
13 | fun VpnService.Builder.addAddress(cidr: CidrAddress): VpnService.Builder = addAddress(cidr.address, cidr.prefix) | ||
14 | fun VpnService.Builder.addRoute(cidr: CidrAddress): VpnService.Builder = addRoute(cidr.address, cidr.prefix) | ||
15 | fun VpnService.Builder.allowBypass(allow: Boolean): VpnService.Builder = if (allow) allowBypass() else this | ||
16 | fun VpnService.Builder.overrideMtu(mtu: Int?): VpnService.Builder = if (mtu != null) setMtu(mtu) else this | ||
17 | |||
18 | fun VpnService.Builder.addAddresses(cidrList: List<CidrAddress>): VpnService.Builder = | ||
19 | cidrList.fold(this, { net, cidr -> net.addAddress(cidr) }) | ||
20 | |||
21 | fun VpnService.Builder.addRoutes(cidrList: List<CidrAddress>): VpnService.Builder = | ||
22 | cidrList.fold(this, { net, cidr -> net.addRoute(cidr) }) | ||
23 | |||
24 | fun VpnService.Builder.addDnsServers(dnsList: List<String>): VpnService.Builder = | ||
25 | dnsList.fold(this, { net, dns -> net.addDnsServer(dns) }) | ||
26 | |||
27 | fun VpnService.Builder.addSearchDomains(domainList: List<String>): VpnService.Builder = | ||
28 | domainList.fold(this, { net, domain -> net.addSearchDomain(domain) }) | ||
29 | |||
30 | fun VpnService.Builder.allowFamilies(familyList: List<Int>): VpnService.Builder = | ||
31 | familyList.fold(this, { net, family -> net.allowFamily(family) }) | ||
32 | |||
33 | fun VpnService.Builder.addAllowedApplications(apps: List<String>): VpnService.Builder = | ||
34 | apps.fold(this, { net, app -> applyIgnoringException(net::addAllowedApplication, app, net)!! }) | ||
35 | |||
36 | fun VpnService.Builder.addDisallowedApplications(apps: List<String>): VpnService.Builder = | ||
37 | apps.fold(this, { net, app -> applyIgnoringException(net::addDisallowedApplication, app, net)!! }) | ||
38 | |||
39 | fun VpnService.Builder.applyCfg(cfg: VpnInterfaceConfiguration): VpnService.Builder = this | ||
40 | .addAddresses(cfg.addresses) | ||
41 | .addRoutes(cfg.routes) | ||
42 | .addDnsServers(cfg.dnsServers) | ||
43 | .addSearchDomains(cfg.searchDomains) | ||
44 | .addAllowedApplications(cfg.allowedApplications) | ||
45 | .addDisallowedApplications(cfg.disallowedApplications) | ||
46 | .allowFamilies(cfg.allowedFamilies) | ||
47 | .allowBypass(cfg.allowBypass) | ||
48 | .setBlocking(cfg.blocking) | ||
49 | .overrideMtu(cfg.mtu) | ||
50 | |||
51 | } | ||