From 70ee33422d8fd1c7a67217f19780c2638d7fbf3b Mon Sep 17 00:00:00 2001 From: pacien Date: Fri, 16 Feb 2018 22:14:19 +0100 Subject: Print erroneous address/route configuration line in error message --- .../java/org/pacien/tincapp/data/CidrAddress.kt | 1 + .../pacien/tincapp/extensions/VpnServiceBuilder.kt | 35 +++++++++++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/pacien/tincapp/data/CidrAddress.kt b/app/src/main/java/org/pacien/tincapp/data/CidrAddress.kt index 510ebc9..5d966c4 100644 --- a/app/src/main/java/org/pacien/tincapp/data/CidrAddress.kt +++ b/app/src/main/java/org/pacien/tincapp/data/CidrAddress.kt @@ -17,4 +17,5 @@ data class CidrAddress(val address: String, val prefix: Int) { } fun toSlashSeparated() = address + SEPARATOR + prefix + override fun toString(): String = "$address/$prefix" } diff --git a/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt b/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt index 53a0f7a..f11115e 100644 --- a/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt +++ b/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt @@ -9,30 +9,43 @@ import org.pacien.tincapp.extensions.Java.applyIgnoringException * @author pacien */ object VpnServiceBuilder { - fun VpnService.Builder.addAddress(cidr: CidrAddress): VpnService.Builder = addAddress(cidr.address, cidr.prefix) - fun VpnService.Builder.addRoute(cidr: CidrAddress): VpnService.Builder = addRoute(cidr.address, cidr.prefix) - fun VpnService.Builder.allowBypass(allow: Boolean): VpnService.Builder = if (allow) allowBypass() else this - fun VpnService.Builder.overrideMtu(mtu: Int?): VpnService.Builder = if (mtu != null) setMtu(mtu) else this + private fun exceptWithCidr(cidr: CidrAddress, func: () -> T) = try { + func() + } catch (e: IllegalArgumentException) { + throw IllegalArgumentException("${e.message}: $cidr") + } - fun VpnService.Builder.addAddresses(cidrList: List): VpnService.Builder = + private fun VpnService.Builder.addAddress(cidr: CidrAddress): VpnService.Builder = + exceptWithCidr(cidr, { addAddress(cidr.address, cidr.prefix) }) + + private fun VpnService.Builder.addRoute(cidr: CidrAddress): VpnService.Builder = + exceptWithCidr(cidr, { addRoute(cidr.address, cidr.prefix) }) + + private fun VpnService.Builder.allowBypass(allow: Boolean): VpnService.Builder = + if (allow) allowBypass() else this + + private fun VpnService.Builder.overrideMtu(mtu: Int?): VpnService.Builder = + if (mtu != null) setMtu(mtu) else this + + private fun VpnService.Builder.addAddresses(cidrList: List): VpnService.Builder = cidrList.fold(this, { net, cidr -> net.addAddress(cidr) }) - fun VpnService.Builder.addRoutes(cidrList: List): VpnService.Builder = + private fun VpnService.Builder.addRoutes(cidrList: List): VpnService.Builder = cidrList.fold(this, { net, cidr -> net.addRoute(cidr) }) - fun VpnService.Builder.addDnsServers(dnsList: List): VpnService.Builder = + private fun VpnService.Builder.addDnsServers(dnsList: List): VpnService.Builder = dnsList.fold(this, { net, dns -> net.addDnsServer(dns) }) - fun VpnService.Builder.addSearchDomains(domainList: List): VpnService.Builder = + private fun VpnService.Builder.addSearchDomains(domainList: List): VpnService.Builder = domainList.fold(this, { net, domain -> net.addSearchDomain(domain) }) - fun VpnService.Builder.allowFamilies(familyList: List): VpnService.Builder = + private fun VpnService.Builder.allowFamilies(familyList: List): VpnService.Builder = familyList.fold(this, { net, family -> net.allowFamily(family) }) - fun VpnService.Builder.addAllowedApplications(apps: List): VpnService.Builder = + private fun VpnService.Builder.addAllowedApplications(apps: List): VpnService.Builder = apps.fold(this, { net, app -> applyIgnoringException(net::addAllowedApplication, app, net)!! }) - fun VpnService.Builder.addDisallowedApplications(apps: List): VpnService.Builder = + private fun VpnService.Builder.addDisallowedApplications(apps: List): VpnService.Builder = apps.fold(this, { net, app -> applyIgnoringException(net::addDisallowedApplication, app, net)!! }) fun VpnService.Builder.applyCfg(cfg: VpnInterfaceConfiguration): VpnService.Builder = this -- cgit v1.2.3