Skip to content

Commit 3b5594b

Browse files
committed
v2.5.0-beta2: VayDNS support, scanner fixes, UI improvements
- Add VayDNS tunnel type with full mobile bridge support - Fix scanner E2E result persistence race condition (emitState CAS overwrite) - Fix duplicate LazyColumn key crash in scan results - Fix scan results back navigation responsiveness (throttle UI updates) - Move DNS resolver field higher in edit profile screen - Preserve E2E data across ViewModel recreation and session restore - Open new profile bottom sheet fully expanded - Async onCleared to avoid blocking main thread on navigation - Auto-mark beta/alpha/rc tags as pre-releases in CI workflow
1 parent 670c85e commit 3b5594b

28 files changed

Lines changed: 1825 additions & 274 deletions

.github/workflows/build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,5 +173,6 @@ jobs:
173173
with:
174174
files: ./artifacts/*.apk
175175
generate_release_notes: true
176+
prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'alpha') || contains(github.ref, 'rc') }}
176177
env:
177178
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ plugins {
1414
}
1515

1616
val minSdkVersion = 24
17-
val appVersionName = "2.4.5-beta2"
18-
val appVersionCode = 64
17+
val appVersionName = "2.5.0-beta2"
18+
val appVersionCode = 66
1919
val cargoProfile = (findProperty("CARGO_PROFILE") as String?) ?: run {
2020
val isRelease = gradle.startParameter.taskNames.any { it.contains("Release", ignoreCase = true) }
2121
if (isRelease) "release" else "debug"

app/libs/golibs-full-sources.jar

4.67 KB
Binary file not shown.

app/libs/golibs-lite-sources.jar

4.67 KB
Binary file not shown.

app/src/main/java/app/slipnet/data/export/ConfigExporter.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import javax.inject.Singleton
1414
* Single profile format: slipnet://[base64-encoded-profile]
1515
* Multiple profiles: one URI per line
1616
*
17-
* Encoded profile format v18 (pipe-delimited):
18-
* v18|tunnelType|name|domain|resolvers|authMode|keepAlive|cc|port|host|gso|dnsttPublicKey|socksUsername|socksPassword|sshEnabled|sshUsername|sshPassword|sshPort|forwardDnsThroughSsh|sshHost|useServerDns|dohUrl|dnsTransport|sshAuthType|sshPrivateKey(b64)|sshKeyPassphrase(b64)|torBridgeLines(b64)|dnsttAuthoritative|naivePort|naiveUsername|naivePassword(b64)|isLocked|lockPasswordHash|expirationDate|allowSharing|boundDeviceId|resolversHidden|hiddenResolvers|noizdnsStealth|dnsPayloadSize|socks5ServerPort
17+
* Encoded profile format v20 (pipe-delimited):
18+
* v20|tunnelType|name|domain|resolvers|authMode|keepAlive|cc|port|host|gso|dnsttPublicKey|socksUsername|socksPassword|sshEnabled|sshUsername|sshPassword|sshPort|forwardDnsThroughSsh|sshHost|useServerDns|dohUrl|dnsTransport|sshAuthType|sshPrivateKey(b64)|sshKeyPassphrase(b64)|torBridgeLines(b64)|dnsttAuthoritative|naivePort|naiveUsername|naivePassword(b64)|isLocked|lockPasswordHash|expirationDate|allowSharing|boundDeviceId|resolversHidden|hiddenResolvers|noizdnsStealth|dnsPayloadSize|socks5ServerPort|vaydnsDnsttCompat|vaydnsRecordType|vaydnsMaxQnameLen|vaydnsRps|vaydnsIdleTimeout|vaydnsKeepalive|vaydnsUdpTimeout|vaydnsMaxNumLabels|vaydnsClientIdSize
1919
*
2020
* Resolvers format (comma-separated): host:port:auth,host:port:auth
2121
*/
@@ -25,7 +25,7 @@ class ConfigExporter @Inject constructor() {
2525
companion object {
2626
const val SCHEME = "slipnet://"
2727
const val ENCRYPTED_SCHEME = "slipnet-enc://"
28-
const val VERSION = "18"
28+
const val VERSION = "20"
2929
const val MODE_SLIPSTREAM = "ss"
3030
const val MODE_SLIPSTREAM_SSH = "slipstream_ssh"
3131
const val MODE_DNSTT = "dnstt"
@@ -38,6 +38,8 @@ class ConfigExporter @Inject constructor() {
3838
const val MODE_NAIVE_SSH = "naive_ssh"
3939
const val MODE_NAIVE = "naive"
4040
const val MODE_SOCKS5 = "socks5"
41+
const val MODE_VAYDNS = "vaydns"
42+
const val MODE_VAYDNS_SSH = "vaydns_ssh"
4143
private const val FIELD_DELIMITER = "|"
4244
private const val RESOLVER_DELIMITER = ","
4345
private const val RESOLVER_PART_DELIMITER = ":"
@@ -105,6 +107,8 @@ class ConfigExporter @Inject constructor() {
105107
TunnelType.NAIVE_SSH -> MODE_NAIVE_SSH
106108
TunnelType.NAIVE -> MODE_NAIVE
107109
TunnelType.SOCKS5 -> MODE_SOCKS5
110+
TunnelType.VAYDNS -> MODE_VAYDNS
111+
TunnelType.VAYDNS_SSH -> MODE_VAYDNS_SSH
108112
}
109113

110114
// When hideResolvers is true, leave position 4 empty so old versions (v1-v16)
@@ -133,7 +137,7 @@ class ConfigExporter @Inject constructor() {
133137
sanitize(profile.dnsttPublicKey),
134138
sanitize(profile.socksUsername ?: ""),
135139
sanitize(profile.socksPassword ?: ""),
136-
if (profile.tunnelType == TunnelType.SSH || profile.tunnelType == TunnelType.DNSTT_SSH || profile.tunnelType == TunnelType.SLIPSTREAM_SSH || profile.tunnelType == TunnelType.NAIVE_SSH) "1" else "0",
140+
if (profile.tunnelType == TunnelType.SSH || profile.tunnelType == TunnelType.DNSTT_SSH || profile.tunnelType == TunnelType.SLIPSTREAM_SSH || profile.tunnelType == TunnelType.NAIVE_SSH || profile.tunnelType == TunnelType.VAYDNS_SSH) "1" else "0",
137141
sanitize(profile.sshUsername),
138142
sanitize(profile.sshPassword),
139143
profile.sshPort.toString(),
@@ -159,7 +163,16 @@ class ConfigExporter @Inject constructor() {
159163
hiddenResolvers,
160164
if (profile.noizdnsStealth) "1" else "0",
161165
profile.dnsPayloadSize.toString(),
162-
profile.socks5ServerPort.toString()
166+
profile.socks5ServerPort.toString(),
167+
if (profile.vaydnsDnsttCompat) "1" else "0",
168+
sanitize(profile.vaydnsRecordType),
169+
profile.vaydnsMaxQnameLen.toString(),
170+
profile.vaydnsRps.toString(),
171+
profile.vaydnsIdleTimeout.toString(),
172+
profile.vaydnsKeepalive.toString(),
173+
profile.vaydnsUdpTimeout.toString(),
174+
profile.vaydnsMaxNumLabels.toString(),
175+
profile.vaydnsClientIdSize.toString()
163176
).joinToString(FIELD_DELIMITER)
164177
}
165178

app/src/main/java/app/slipnet/data/export/ConfigImporter.kt

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ class ConfigImporter @Inject constructor() {
103103
private const val MODE_NAIVE_SSH = "naive_ssh"
104104
private const val MODE_NAIVE = "naive"
105105
private const val MODE_SOCKS5 = "socks5"
106+
private const val MODE_VAYDNS = "vaydns"
107+
private const val MODE_VAYDNS_SSH = "vaydns_ssh"
106108
private const val FIELD_DELIMITER = "|"
107109
private const val RESOLVER_DELIMITER = ","
108110
private const val RESOLVER_PART_DELIMITER = ":"
@@ -252,12 +254,14 @@ class ConfigImporter @Inject constructor() {
252254
"16" -> parseProfileV16(fields, lineNum)
253255
"17" -> parseProfileV17(fields, lineNum)
254256
"18" -> parseProfileV18(fields, lineNum)
257+
"19" -> parseProfileV19(fields, lineNum)
258+
"20" -> parseProfileV20(fields, lineNum)
255259
else -> {
256260
// Forward compatibility: try the highest known parser for newer versions.
257261
// Extra trailing fields are safely ignored (parsers only check minimum count).
258262
val versionNum = version.toIntOrNull()
259-
if (versionNum != null && versionNum > 18) {
260-
parseProfileV18(fields, lineNum)
263+
if (versionNum != null && versionNum > 20) {
264+
parseProfileV20(fields, lineNum)
261265
} else {
262266
ProfileParseResult.Error("Line $lineNum: Unsupported version '$version'")
263267
}
@@ -342,6 +346,8 @@ class ConfigImporter @Inject constructor() {
342346
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
343347
MODE_NAIVE -> TunnelType.NAIVE
344348
MODE_SOCKS5 -> TunnelType.SOCKS5
349+
MODE_VAYDNS -> TunnelType.VAYDNS
350+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
345351

346352
else -> {
347353
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -426,6 +432,8 @@ class ConfigImporter @Inject constructor() {
426432
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
427433
MODE_NAIVE -> TunnelType.NAIVE
428434
MODE_SOCKS5 -> TunnelType.SOCKS5
435+
MODE_VAYDNS -> TunnelType.VAYDNS
436+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
429437

430438
else -> {
431439
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -515,6 +523,8 @@ class ConfigImporter @Inject constructor() {
515523
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
516524
MODE_NAIVE -> TunnelType.NAIVE
517525
MODE_SOCKS5 -> TunnelType.SOCKS5
526+
MODE_VAYDNS -> TunnelType.VAYDNS
527+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
518528

519529
else -> {
520530
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -607,6 +617,8 @@ class ConfigImporter @Inject constructor() {
607617
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
608618
MODE_NAIVE -> TunnelType.NAIVE
609619
MODE_SOCKS5 -> TunnelType.SOCKS5
620+
MODE_VAYDNS -> TunnelType.VAYDNS
621+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
610622

611623
else -> {
612624
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -711,6 +723,8 @@ class ConfigImporter @Inject constructor() {
711723
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
712724
MODE_NAIVE -> TunnelType.NAIVE
713725
MODE_SOCKS5 -> TunnelType.SOCKS5
726+
MODE_VAYDNS -> TunnelType.VAYDNS
727+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
714728

715729
else -> {
716730
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -815,6 +829,8 @@ class ConfigImporter @Inject constructor() {
815829
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
816830
MODE_NAIVE -> TunnelType.NAIVE
817831
MODE_SOCKS5 -> TunnelType.SOCKS5
832+
MODE_VAYDNS -> TunnelType.VAYDNS
833+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
818834

819835
else -> {
820836
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -915,6 +931,8 @@ class ConfigImporter @Inject constructor() {
915931
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
916932
MODE_NAIVE -> TunnelType.NAIVE
917933
MODE_SOCKS5 -> TunnelType.SOCKS5
934+
MODE_VAYDNS -> TunnelType.VAYDNS
935+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
918936

919937
else -> {
920938
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1026,6 +1044,8 @@ class ConfigImporter @Inject constructor() {
10261044
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
10271045
MODE_NAIVE -> TunnelType.NAIVE
10281046
MODE_SOCKS5 -> TunnelType.SOCKS5
1047+
MODE_VAYDNS -> TunnelType.VAYDNS
1048+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
10291049

10301050
else -> {
10311051
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1158,6 +1178,8 @@ class ConfigImporter @Inject constructor() {
11581178
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
11591179
MODE_NAIVE -> TunnelType.NAIVE
11601180
MODE_SOCKS5 -> TunnelType.SOCKS5
1181+
MODE_VAYDNS -> TunnelType.VAYDNS
1182+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
11611183

11621184
else -> {
11631185
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1292,6 +1314,8 @@ class ConfigImporter @Inject constructor() {
12921314
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
12931315
MODE_NAIVE -> TunnelType.NAIVE
12941316
MODE_SOCKS5 -> TunnelType.SOCKS5
1317+
MODE_VAYDNS -> TunnelType.VAYDNS
1318+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
12951319

12961320
else -> {
12971321
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1433,6 +1457,8 @@ class ConfigImporter @Inject constructor() {
14331457
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
14341458
MODE_NAIVE -> TunnelType.NAIVE
14351459
MODE_SOCKS5 -> TunnelType.SOCKS5
1460+
MODE_VAYDNS -> TunnelType.VAYDNS
1461+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
14361462

14371463
else -> {
14381464
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1575,6 +1601,8 @@ class ConfigImporter @Inject constructor() {
15751601
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
15761602
MODE_NAIVE -> TunnelType.NAIVE
15771603
MODE_SOCKS5 -> TunnelType.SOCKS5
1604+
MODE_VAYDNS -> TunnelType.VAYDNS
1605+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
15781606

15791607
else -> {
15801608
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1734,6 +1762,8 @@ class ConfigImporter @Inject constructor() {
17341762
MODE_NAIVE_SSH -> TunnelType.NAIVE_SSH
17351763
MODE_NAIVE -> TunnelType.NAIVE
17361764
MODE_SOCKS5 -> TunnelType.SOCKS5
1765+
MODE_VAYDNS -> TunnelType.VAYDNS
1766+
MODE_VAYDNS_SSH -> TunnelType.VAYDNS_SSH
17371767

17381768
else -> {
17391769
return ProfileParseResult.Warning("Line $lineNum: Unsupported tunnel type '$tunnelTypeStr', skipping")
@@ -1951,6 +1981,50 @@ class ConfigImporter @Inject constructor() {
19511981
return ProfileParseResult.Success(profile)
19521982
}
19531983

1984+
private fun parseProfileV19(fields: List<String>, lineNum: Int): ProfileParseResult {
1985+
// v19 extends v18 with 3 new VayDNS fields; fall back to v18 parser for the base fields
1986+
val baseResult = parseProfileV18(fields, lineNum)
1987+
if (baseResult !is ProfileParseResult.Success) return baseResult
1988+
1989+
// Extract v19 fields (positions 41-43), defaulting if absent
1990+
val vaydnsDnsttCompat = if (fields.size > 41) fields[41] == "1" else false
1991+
val vaydnsRecordType = if (fields.size > 42) fields[42].ifBlank { "txt" } else "txt"
1992+
val vaydnsMaxQnameLen = if (fields.size > 43) fields[43].toIntOrNull() ?: 101 else 101
1993+
val vaydnsRps = if (fields.size > 44) fields[44].toDoubleOrNull() ?: 0.0 else 0.0
1994+
1995+
val profile = baseResult.profile.copy(
1996+
vaydnsDnsttCompat = vaydnsDnsttCompat,
1997+
vaydnsRecordType = vaydnsRecordType,
1998+
vaydnsMaxQnameLen = vaydnsMaxQnameLen,
1999+
vaydnsRps = vaydnsRps
2000+
)
2001+
2002+
return ProfileParseResult.Success(profile)
2003+
}
2004+
2005+
private fun parseProfileV20(fields: List<String>, lineNum: Int): ProfileParseResult {
2006+
// v20 extends v19 with 5 new VayDNS advanced fields
2007+
val baseResult = parseProfileV19(fields, lineNum)
2008+
if (baseResult !is ProfileParseResult.Success) return baseResult
2009+
2010+
// Extract v20 fields (positions 45-49), defaulting if absent
2011+
val vaydnsIdleTimeout = if (fields.size > 45) fields[45].toIntOrNull() ?: 0 else 0
2012+
val vaydnsKeepalive = if (fields.size > 46) fields[46].toIntOrNull() ?: 0 else 0
2013+
val vaydnsUdpTimeout = if (fields.size > 47) fields[47].toIntOrNull() ?: 0 else 0
2014+
val vaydnsMaxNumLabels = if (fields.size > 48) fields[48].toIntOrNull() ?: 0 else 0
2015+
val vaydnsClientIdSize = if (fields.size > 49) fields[49].toIntOrNull() ?: 0 else 0
2016+
2017+
val profile = baseResult.profile.copy(
2018+
vaydnsIdleTimeout = vaydnsIdleTimeout,
2019+
vaydnsKeepalive = vaydnsKeepalive,
2020+
vaydnsUdpTimeout = vaydnsUdpTimeout,
2021+
vaydnsMaxNumLabels = vaydnsMaxNumLabels,
2022+
vaydnsClientIdSize = vaydnsClientIdSize
2023+
)
2024+
2025+
return ProfileParseResult.Success(profile)
2026+
}
2027+
19542028
private fun parseResolvers(resolversStr: String): List<DnsResolver> {
19552029
if (resolversStr.isBlank()) return emptyList()
19562030

app/src/main/java/app/slipnet/data/local/database/ProfileEntity.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,33 @@ data class ProfileEntity(
144144
@ColumnInfo(name = "socks5_server_port", defaultValue = "1080")
145145
val socks5ServerPort: Int = 1080,
146146

147+
@ColumnInfo(name = "vaydns_dnstt_compat", defaultValue = "0")
148+
val vaydnsDnsttCompat: Boolean = false,
149+
150+
@ColumnInfo(name = "vaydns_record_type", defaultValue = "txt")
151+
val vaydnsRecordType: String = "txt",
152+
153+
@ColumnInfo(name = "vaydns_max_qname_len", defaultValue = "101")
154+
val vaydnsMaxQnameLen: Int = 101,
155+
156+
@ColumnInfo(name = "vaydns_rps", defaultValue = "0.0")
157+
val vaydnsRps: Double = 0.0,
158+
159+
@ColumnInfo(name = "vaydns_idle_timeout", defaultValue = "0")
160+
val vaydnsIdleTimeout: Int = 0,
161+
162+
@ColumnInfo(name = "vaydns_keepalive", defaultValue = "0")
163+
val vaydnsKeepalive: Int = 0,
164+
165+
@ColumnInfo(name = "vaydns_udp_timeout", defaultValue = "0")
166+
val vaydnsUdpTimeout: Int = 0,
167+
168+
@ColumnInfo(name = "vaydns_max_num_labels", defaultValue = "0")
169+
val vaydnsMaxNumLabels: Int = 0,
170+
171+
@ColumnInfo(name = "vaydns_clientid_size", defaultValue = "0")
172+
val vaydnsClientIdSize: Int = 0,
173+
147174
@ColumnInfo(name = "is_pinned", defaultValue = "0")
148175
val isPinned: Boolean = false
149176
)

app/src/main/java/app/slipnet/data/local/database/SlipNetDatabase.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
77

88
@Database(
99
entities = [ProfileEntity::class, ChainEntity::class],
10-
version = 26,
10+
version = 29,
1111
exportSchema = true
1212
)
1313
abstract class SlipNetDatabase : RoomDatabase() {
@@ -335,5 +335,29 @@ abstract class SlipNetDatabase : RoomDatabase() {
335335
}
336336
}
337337

338+
val MIGRATION_26_27 = object : Migration(26, 27) {
339+
override fun migrate(db: SupportSQLiteDatabase) {
340+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_dnstt_compat INTEGER NOT NULL DEFAULT 0")
341+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_record_type TEXT NOT NULL DEFAULT 'txt'")
342+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_max_qname_len INTEGER NOT NULL DEFAULT 101")
343+
}
344+
}
345+
346+
val MIGRATION_27_28 = object : Migration(27, 28) {
347+
override fun migrate(db: SupportSQLiteDatabase) {
348+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_rps REAL NOT NULL DEFAULT 0.0")
349+
}
350+
}
351+
352+
val MIGRATION_28_29 = object : Migration(28, 29) {
353+
override fun migrate(db: SupportSQLiteDatabase) {
354+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_idle_timeout INTEGER NOT NULL DEFAULT 0")
355+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_keepalive INTEGER NOT NULL DEFAULT 0")
356+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_udp_timeout INTEGER NOT NULL DEFAULT 0")
357+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_max_num_labels INTEGER NOT NULL DEFAULT 0")
358+
db.execSQL("ALTER TABLE server_profiles ADD COLUMN vaydns_clientid_size INTEGER NOT NULL DEFAULT 0")
359+
}
360+
}
361+
338362
}
339363
}

app/src/main/java/app/slipnet/data/mapper/ProfileMapper.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ class ProfileMapper @Inject constructor(
7373
resolversHidden = entity.resolversHidden,
7474
defaultResolvers = defaultResolvers,
7575
socks5ServerPort = entity.socks5ServerPort,
76+
vaydnsDnsttCompat = entity.vaydnsDnsttCompat,
77+
vaydnsRecordType = entity.vaydnsRecordType,
78+
vaydnsMaxQnameLen = entity.vaydnsMaxQnameLen,
79+
vaydnsRps = entity.vaydnsRps,
80+
vaydnsIdleTimeout = entity.vaydnsIdleTimeout,
81+
vaydnsKeepalive = entity.vaydnsKeepalive,
82+
vaydnsUdpTimeout = entity.vaydnsUdpTimeout,
83+
vaydnsMaxNumLabels = entity.vaydnsMaxNumLabels,
84+
vaydnsClientIdSize = entity.vaydnsClientIdSize,
7685
isPinned = entity.isPinned
7786
)
7887
}
@@ -127,6 +136,15 @@ class ProfileMapper @Inject constructor(
127136
resolversHidden = profile.resolversHidden,
128137
defaultResolversJson = defaultResolversJson,
129138
socks5ServerPort = profile.socks5ServerPort,
139+
vaydnsDnsttCompat = profile.vaydnsDnsttCompat,
140+
vaydnsRecordType = profile.vaydnsRecordType,
141+
vaydnsMaxQnameLen = profile.vaydnsMaxQnameLen,
142+
vaydnsRps = profile.vaydnsRps,
143+
vaydnsIdleTimeout = profile.vaydnsIdleTimeout,
144+
vaydnsKeepalive = profile.vaydnsKeepalive,
145+
vaydnsUdpTimeout = profile.vaydnsUdpTimeout,
146+
vaydnsMaxNumLabels = profile.vaydnsMaxNumLabels,
147+
vaydnsClientIdSize = profile.vaydnsClientIdSize,
130148
isPinned = profile.isPinned
131149
)
132150
}

0 commit comments

Comments
 (0)