You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
6.9 KiB
Kotlin
169 lines
6.9 KiB
Kotlin
// Copyright (c) 2024 Tailscale Inc & AUTHORS All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package com.tailscale.ipn.ui.model
|
|
|
|
import kotlinx.serialization.*
|
|
|
|
class Ipn {
|
|
|
|
// Represents the overall state of the Tailscale engine.
|
|
enum class State(val value: Int) {
|
|
NoState(0),
|
|
InUseOtherUser(1),
|
|
NeedsLogin(2),
|
|
NeedsMachineAuth(3),
|
|
Stopped(4),
|
|
Starting(5),
|
|
Running(6),
|
|
}
|
|
|
|
// NotifyWatchOpt is a bitmask of options supplied to the notifier to specify which
|
|
// what we want to see on the Noitfy bus
|
|
enum class NotifyWatchOpt(val value: Int) {
|
|
engineUpdates(0),
|
|
initialState(1 shl 1),
|
|
prefs(1 shl 2),
|
|
netmap(1 shl 3),
|
|
noPrivateKeys(1 shl 4),
|
|
initialTailFSShares(1 shl 5)
|
|
}
|
|
|
|
// A nofitication message recieved on the Notify bus. Fields will be populated based
|
|
// on which NotifyWatchOpts were set when the Notifier was created.
|
|
@Serializable
|
|
data class Notify(
|
|
val Version: String? = null,
|
|
val ErrMessage: String? = null,
|
|
val LoginFinished: Empty.Message? = null,
|
|
val FilesWaiting: Empty.Message? = null,
|
|
val State: State? = null,
|
|
var Prefs: Prefs? = null,
|
|
var NetMap: Netmap.NetworkMap? = null,
|
|
var Engine: EngineStatus? = null,
|
|
var BrowseToURL: String? = null,
|
|
var BackendLogId: String? = null,
|
|
var LocalTCPPort: Int? = null,
|
|
var IncomingFiles: List<PartialFile>? = null,
|
|
var ClientVersion: Tailcfg.ClientVersion? = null,
|
|
var TailFSShares: Map<String, String>? = null,
|
|
)
|
|
|
|
@Serializable
|
|
data class Prefs(
|
|
var ControlURL: String = "",
|
|
var RouteAll: Boolean = false,
|
|
var AllowsSingleHosts: Boolean = false,
|
|
var CorpDNS: Boolean = false,
|
|
var WantRunning: Boolean = false,
|
|
var LoggedOut: Boolean = false,
|
|
var ShieldsUp: Boolean = false,
|
|
var AdvertiseRoutes: List<String>? = null,
|
|
var AdvertiseTags: List<String>? = null,
|
|
var ExitNodeId: StableNodeID? = null,
|
|
var ExitNodeAllowLanAccess: Boolean = false,
|
|
var Config: Persist.Persist? = null,
|
|
var ForceDaemon: Boolean = false,
|
|
var HostName: String = "",
|
|
var AutoUpdate: AutoUpdatePrefs? = AutoUpdatePrefs(true, true),
|
|
)
|
|
|
|
@Serializable
|
|
data class MaskedPrefs(
|
|
var RouteAllSet: Boolean? = null,
|
|
var CorpDNSSet: Boolean? = null,
|
|
var ExitNodeIDSet: Boolean? = null,
|
|
var ExitNodeAllowLANAccessSet: Boolean? = null,
|
|
var WantRunningSet: Boolean? = null,
|
|
var ShieldsUpSet: Boolean? = null,
|
|
var AdvertiseRoutesSet: Boolean? = null,
|
|
var ForceDaemonSet: Boolean? = null,
|
|
var HostnameSet: Boolean? = null,
|
|
) {
|
|
var RouteAll: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
RouteAllSet = true
|
|
}
|
|
var CorpDNS: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
CorpDNSSet = true
|
|
}
|
|
var ExitNodeId: StableNodeID? = null
|
|
set(value) {
|
|
field = value
|
|
ExitNodeIDSet = true
|
|
}
|
|
var ExitNodeAllowLanAccess: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
ExitNodeAllowLANAccessSet = true
|
|
}
|
|
var WantRunning: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
WantRunningSet = true
|
|
}
|
|
var ShieldsUp: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
ShieldsUpSet = true
|
|
}
|
|
var AdvertiseRoutes: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
AdvertiseRoutesSet = true
|
|
}
|
|
var ForceDaemon: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
ForceDaemonSet = true
|
|
}
|
|
var Hostname: Boolean? = null
|
|
set(value) {
|
|
field = value
|
|
HostnameSet = true
|
|
}
|
|
}
|
|
|
|
@Serializable
|
|
data class AutoUpdatePrefs(
|
|
var Check: Boolean? = null,
|
|
var Apply: Boolean? = null,
|
|
)
|
|
|
|
@Serializable
|
|
data class EngineStatus(
|
|
val RBytes: Long,
|
|
val WBytes: Long,
|
|
val NumLive: Int,
|
|
val LivePeers: Map<String, IpnState.PeerStatusLite>,
|
|
)
|
|
|
|
@Serializable
|
|
data class PartialFile(
|
|
val Name: String,
|
|
val Started: String,
|
|
val DeclaredSize: Long,
|
|
val Received: Long,
|
|
val PartialPath: String? = null,
|
|
var FinalPath: String? = null,
|
|
val Done: Boolean? = null,
|
|
)
|
|
}
|
|
|
|
class Persist {
|
|
@Serializable
|
|
data class Persist(
|
|
var PrivateMachineKey: String =
|
|
"privkey:0000000000000000000000000000000000000000000000000000000000000000",
|
|
var PrivateNodeKey: String =
|
|
"privkey:0000000000000000000000000000000000000000000000000000000000000000",
|
|
var OldPrivateNodeKey: String =
|
|
"privkey:0000000000000000000000000000000000000000000000000000000000000000",
|
|
var Provider: String = "",
|
|
)
|
|
}
|