init
Some checks failed
CI / Rust (push) Successful in 20s
CI / Android (push) Failing after 8m35s

This commit is contained in:
2026-05-31 15:36:07 +03:30
commit 4ffbc3bffe
61 changed files with 2760 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {
namespace = "org.vpnshare.domain"
compileSdk = 36
defaultConfig {
minSdk = 26
}
}

View File

@@ -0,0 +1 @@
<manifest />

View File

@@ -0,0 +1,83 @@
package org.vpnshare.domain.model
import java.time.Instant
@JvmInline
value class PeerId(val value: String)
enum class ShareTransport {
Usb,
Wifi,
Hotspot
}
enum class ClientPlatform {
Windows,
Linux,
MacOs,
Android,
Ios,
Unknown
}
data class GatewayConfig(
val preferredTransport: ShareTransport = ShareTransport.Usb,
val allowWifiFallback: Boolean = true,
val allowHotspot: Boolean = false,
val maxPeers: Int = 4,
val defaultMtu: Int = 1280
)
data class VpnStatus(
val active: Boolean,
val networkName: String?,
val supportsIpv4: Boolean,
val supportsIpv6: Boolean
)
data class PairingRequest(
val requestId: String,
val displayName: String,
val platform: ClientPlatform,
val transport: ShareTransport,
val createdAt: Instant,
val expiresAt: Instant
) {
fun isExpired(now: Instant): Boolean = !expiresAt.isAfter(now)
}
data class PeerDevice(
val id: PeerId,
val displayName: String,
val platform: ClientPlatform,
val trustedAt: Instant,
val lastSeenAt: Instant?,
val revoked: Boolean = false
)
data class TunnelLease(
val peerId: PeerId,
val ipv4Address: String,
val ipv6Address: String?,
val dnsGateway: String,
val mtu: Int,
val routes: List<String>,
val expiresAt: Instant
)
data class GatewayStats(
val connectedPeers: Int = 0,
val bytesFromClients: Long = 0,
val bytesToClients: Long = 0
)
sealed interface ShareState {
data object Stopped : ShareState
data class Starting(val config: GatewayConfig) : ShareState
data class Running(
val config: GatewayConfig,
val vpnStatus: VpnStatus,
val stats: GatewayStats
) : ShareState
data class Failed(val reason: String) : ShareState
}