diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/model/TunnelConfig.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/model/TunnelConfig.kt index 33bf17f4..7ab0f1f0 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/model/TunnelConfig.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/domain/model/TunnelConfig.kt @@ -106,15 +106,17 @@ data class TunnelConfig( existingConfig.`interface`.transportPacketMagicHeader.ifPresent { setTransportPacketMagicHeader(it) } - existingConfig.`interface`.i1.ifPresent { setI1(it) } - existingConfig.`interface`.i2.ifPresent { setI2(it) } - existingConfig.`interface`.i3.ifPresent { setI3(it) } - existingConfig.`interface`.i4.ifPresent { setI4(it) } - existingConfig.`interface`.i5.ifPresent { setI5(it) } - existingConfig.`interface`.j1.ifPresent { setJ1(it) } - existingConfig.`interface`.j2.ifPresent { setJ2(it) } - existingConfig.`interface`.j3.ifPresent { setJ3(it) } - existingConfig.`interface`.itime.ifPresent { setItime(it) } + existingConfig.`interface`.cookieReplyPacketJunkSize.ifPresent { + setCookieReplyPacketJunkSize(it) + } + existingConfig.`interface`.transportPacketJunkSize.ifPresent { + setTransportPacketJunkSize(it) + } + existingConfig.`interface`.specialJunkI1.ifPresent { setSpecialJunkI1(it) } + existingConfig.`interface`.specialJunkI2.ifPresent { setSpecialJunkI2(it) } + existingConfig.`interface`.specialJunkI3.ifPresent { setSpecialJunkI3(it) } + existingConfig.`interface`.specialJunkI4.ifPresent { setSpecialJunkI4(it) } + existingConfig.`interface`.specialJunkI5.ifPresent { setSpecialJunkI5(it) } setPreUp(existingConfig.`interface`.preUp) setPostUp(existingConfig.`interface`.postUp) setPreDown(existingConfig.`interface`.preDown) diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt index 3ab5a923..47ddcf16 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/config/components/InterfaceFields.kt @@ -264,6 +264,26 @@ fun InterfaceFields( hint = stringResource(R.string.range_hint, 0, 64), modifier = Modifier.fillMaxWidth(), ) + ConfigurationTextBox( + value = interfaceState.cookiePacketJunkSize, + onValueChange = { + onInterfaceChange(interfaceState.copy(cookiePacketJunkSize = it)) + }, + label = stringResource(R.string.cookie_packet_junk_size), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + hint = stringResource(R.string.range_hint, 0, 928), + modifier = Modifier.fillMaxWidth(), + ) + ConfigurationTextBox( + value = interfaceState.transportPacketJunkSize, + onValueChange = { + onInterfaceChange(interfaceState.copy(transportPacketJunkSize = it)) + }, + label = stringResource(R.string.transport_packet_junk_size), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + hint = stringResource(R.string.range_hint, 0, 928), + modifier = Modifier.fillMaxWidth(), + ) ConfigurationTextBox( value = interfaceState.initPacketMagicHeader, onValueChange = { @@ -339,39 +359,6 @@ fun InterfaceFields( hint = stringResource(R.string.hint_template, ""), modifier = Modifier.fillMaxWidth(), ) - ConfigurationTextBox( - value = interfaceState.j1, - onValueChange = { onInterfaceChange(interfaceState.copy(j1 = it)) }, - label = "J1", - hint = stringResource(R.string.hint_template, ""), - modifier = Modifier.fillMaxWidth(), - ) - ConfigurationTextBox( - value = interfaceState.j2, - onValueChange = { onInterfaceChange(interfaceState.copy(j2 = it)) }, - label = "J2", - hint = stringResource(R.string.hint_template, ""), - modifier = Modifier.fillMaxWidth(), - ) - ConfigurationTextBox( - value = interfaceState.j3, - onValueChange = { onInterfaceChange(interfaceState.copy(j3 = it)) }, - label = "J3", - hint = stringResource(R.string.hint_template, ""), - modifier = Modifier.fillMaxWidth(), - ) - ConfigurationTextBox( - value = interfaceState.itime, - onValueChange = { onInterfaceChange(interfaceState.copy(itime = it)) }, - label = "ITime", - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), - hint = - stringResource( - R.string.hint_template, - stringResource(R.string.seconds).lowercase(locale), - ), - modifier = Modifier.fillMaxWidth(), - ) } } } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/state/InterfaceProxy.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/state/InterfaceProxy.kt index 43dc1577..ce8b1a29 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/state/InterfaceProxy.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/state/InterfaceProxy.kt @@ -5,6 +5,7 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.ifNotBlank import com.zaneschepke.wireguardautotunnel.util.extensions.joinAndTrim import com.zaneschepke.wireguardautotunnel.util.extensions.toTrimmedList import java.util.* +import kotlin.jvm.optionals.getOrElse data class InterfaceProxy( val privateKey: String = "", @@ -18,6 +19,8 @@ data class InterfaceProxy( val junkPacketCount: String = "", val junkPacketMinSize: String = "", val junkPacketMaxSize: String = "", + val cookiePacketJunkSize: String = "", + val transportPacketJunkSize: String = "", val initPacketJunkSize: String = "", val responsePacketJunkSize: String = "", val initPacketMagicHeader: String = "", @@ -29,10 +32,6 @@ data class InterfaceProxy( val i3: String = "", val i4: String = "", val i5: String = "", - val j1: String = "", - val j2: String = "", - val j3: String = "", - val itime: String = "", val preUp: String = "", val postUp: String = "", val preDown: String = "", @@ -63,6 +62,8 @@ data class InterfaceProxy( junkPacketMinSize, junkPacketMaxSize, initPacketJunkSize, + transportPacketJunkSize, + cookiePacketJunkSize, responsePacketJunkSize, initPacketMagicHeader, responsePacketMagicHeader, @@ -73,10 +74,6 @@ data class InterfaceProxy( i3, i4, i5, - j1, - j2, - j3, - itime, ) .any { it.isNotBlank() } } @@ -88,6 +85,8 @@ data class InterfaceProxy( junkPacketMaxSize = "70", initPacketJunkSize = "0", responsePacketJunkSize = "0", + transportPacketJunkSize = "0", + cookiePacketJunkSize = "0", initPacketMagicHeader = "1", responsePacketMagicHeader = "2", underloadPacketMagicHeader = "3", @@ -97,10 +96,6 @@ data class InterfaceProxy( i3 = "", i4 = "", i5 = "", - j1 = "", - j2 = "", - j3 = "", - itime = "", ) } @@ -111,6 +106,8 @@ data class InterfaceProxy( junkPacketMaxSize = "", initPacketJunkSize = "", responsePacketJunkSize = "", + transportPacketJunkSize = "", + cookiePacketJunkSize = "", initPacketMagicHeader = "", responsePacketMagicHeader = "", underloadPacketMagicHeader = "", @@ -120,10 +117,6 @@ data class InterfaceProxy( i3 = "", i4 = "", i5 = "", - j1 = "", - j2 = "", - j3 = "", - itime = "", ) } @@ -158,21 +151,19 @@ data class InterfaceProxy( junkPacketCount.ifNotBlank { parseJunkPacketCount(it) } junkPacketMinSize.ifNotBlank { parseJunkPacketMinSize(it) } junkPacketMaxSize.ifNotBlank { parseJunkPacketMaxSize(it) } + transportPacketJunkSize.ifNotBlank { parseTransportPacketJunkSize(it) } + cookiePacketJunkSize.ifNotBlank { parseCookieReplyPacketJunkSize(it) } initPacketJunkSize.ifNotBlank { parseInitPacketJunkSize(it) } responsePacketJunkSize.ifNotBlank { parseResponsePacketJunkSize(it) } initPacketMagicHeader.ifNotBlank { parseInitPacketMagicHeader(it) } responsePacketMagicHeader.ifNotBlank { parseResponsePacketMagicHeader(it) } underloadPacketMagicHeader.ifNotBlank { parseUnderloadPacketMagicHeader(it) } transportPacketMagicHeader.ifNotBlank { parseTransportPacketMagicHeader(it) } - i1.ifNotBlank { parseI1(it) } - i2.ifNotBlank { parseI2(it) } - i3.ifNotBlank { parseI3(it) } - i4.ifNotBlank { parseI4(it) } - i5.ifNotBlank { parseI5(it) } - j1.ifNotBlank { parseJ1(it) } - j2.ifNotBlank { parseJ2(it) } - j3.ifNotBlank { parseJ3(it) } - itime.ifNotBlank { parseItime(it) } + i1.ifNotBlank { parseSpecialJunkI1(it) } + i2.ifNotBlank { parseSpecialJunkI2(it) } + i3.ifNotBlank { parseSpecialJunkI3(it) } + i4.ifNotBlank { parseSpecialJunkI4(it) } + i5.ifNotBlank { parseSpecialJunkI5(it) } } .build() } @@ -269,15 +260,6 @@ data class InterfaceProxy( validateHexBlob(i3, "i3") validateHexBlob(i4, "i4") validateHexBlob(i5, "i5") - validateHexBlob(j1, "j1") - validateHexBlob(j2, "j2") - validateHexBlob(j3, "j3") - - itime.ifNotBlank { - val time = it.toIntOrNull() - if (time == null) errors.add("itime must be an integer") - else if (time < 0) errors.add("itime must be non-negative") - } return errors } @@ -291,8 +273,6 @@ data class InterfaceProxy( i1 = "", i2 = "", - j1 = "", - itime = "120", ) } @@ -304,8 +284,6 @@ data class InterfaceProxy( return copy( i1 = "", i2 = "", - j1 = "", - itime = "120", ) } @@ -319,8 +297,6 @@ data class InterfaceProxy( "", i2 = "", - j1 = "", - itime = "120", ) } @@ -381,43 +357,22 @@ data class InterfaceProxy( postUp = i.postUp.joinAndTrim(), preDown = i.preDown.joinAndTrim(), postDown = i.postDown.joinAndTrim(), - junkPacketCount = - if (i.junkPacketCount.isPresent) i.junkPacketCount.get().toString() else "", - junkPacketMinSize = - if (i.junkPacketMinSize.isPresent) i.junkPacketMinSize.get().toString() else "", - junkPacketMaxSize = - if (i.junkPacketMaxSize.isPresent) i.junkPacketMaxSize.get().toString() else "", - initPacketJunkSize = - if (i.initPacketJunkSize.isPresent) i.initPacketJunkSize.get().toString() - else "", - responsePacketJunkSize = - if (i.responsePacketJunkSize.isPresent) - i.responsePacketJunkSize.get().toString() - else "", - initPacketMagicHeader = - if (i.initPacketMagicHeader.isPresent) i.initPacketMagicHeader.get().toString() - else "", - responsePacketMagicHeader = - if (i.responsePacketMagicHeader.isPresent) - i.responsePacketMagicHeader.get().toString() - else "", - underloadPacketMagicHeader = - if (i.underloadPacketMagicHeader.isPresent) - i.underloadPacketMagicHeader.get().toString() - else "", - transportPacketMagicHeader = - if (i.transportPacketMagicHeader.isPresent) - i.transportPacketMagicHeader.get().toString() - else "", - i1 = if (i.i1.isPresent) i.i1.get() else "", - i2 = if (i.i2.isPresent) i.i2.get() else "", - i3 = if (i.i3.isPresent) i.i3.get() else "", - i4 = if (i.i4.isPresent) i.i4.get() else "", - i5 = if (i.i5.isPresent) i.i5.get() else "", - j1 = if (i.j1.isPresent) i.j1.get() else "", - j2 = if (i.j2.isPresent) i.j2.get() else "", - j3 = if (i.j3.isPresent) i.j3.get() else "", - itime = if (i.itime.isPresent) i.itime.get().toString() else "", + junkPacketCount = i.junkPacketCount.getOrElse { "" }.toString(), + junkPacketMinSize = i.junkPacketMinSize.getOrElse { "" }.toString(), + junkPacketMaxSize = i.junkPacketMaxSize.getOrElse { "" }.toString(), + initPacketJunkSize = i.initPacketJunkSize.getOrElse { "" }.toString(), + transportPacketJunkSize = i.transportPacketJunkSize.getOrElse { "" }.toString(), + cookiePacketJunkSize = i.cookieReplyPacketJunkSize.getOrElse { "" }.toString(), + responsePacketJunkSize = i.responsePacketJunkSize.getOrElse { "" }.toString(), + initPacketMagicHeader = i.initPacketMagicHeader.getOrElse { "" }, + responsePacketMagicHeader = i.responsePacketMagicHeader.getOrElse { "" }, + underloadPacketMagicHeader = i.underloadPacketMagicHeader.getOrElse { "" }, + transportPacketMagicHeader = i.transportPacketMagicHeader.getOrElse { "" }, + i1 = i.specialJunkI1.getOrElse { "" }, + i2 = i.specialJunkI2.getOrElse { "" }, + i3 = i.specialJunkI3.getOrElse { "" }, + i4 = i.specialJunkI4.getOrElse { "" }, + i5 = i.specialJunkI5.getOrElse { "" }, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d081cd99..e28f3dd1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -436,4 +436,6 @@ Thanks for using WG Tunnel! If you are able, please consider supporting the project to keep it free and improving. + Cookie packet junk size + Transport packet junk size diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 778e56c6..6ebb0d61 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] accompanist = "0.37.3" activityCompose = "1.12.0" -amneziawgAndroid = "2.2.3" +amneziawgAndroid = "2.3.0" androidx-junit = "1.3.0" icmp4a = "1.0.0" ipaddress = "5.5.1"