init
This commit is contained in:
13
apps/android/core/domain/build.gradle.kts
Normal file
13
apps/android/core/domain/build.gradle.kts
Normal 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
|
||||
}
|
||||
}
|
||||
1
apps/android/core/domain/src/main/AndroidManifest.xml
Normal file
1
apps/android/core/domain/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<manifest />
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user