Add finalmask support (#5242)
This commit is contained in:
1 parent
ff40b53e2f
commit
8eca5fe8af
3 files changed
+53
-33
No files matched your search
@@ -162,7 +162,7 @@ data class V2rayConfig(
|
|||||||
var realitySettings: TlsSettingsBean? = null,
|
var realitySettings: TlsSettingsBean? = null,
|
||||||
var grpcSettings: GrpcSettingsBean? = null,
|
var grpcSettings: GrpcSettingsBean? = null,
|
||||||
var hysteriaSettings: HysteriaSettingsBean? = null,
|
var hysteriaSettings: HysteriaSettingsBean? = null,
|
||||||
var udpmasks: List<UdpMasksBean>? = null,
|
var finalmask: FinalMaskBean? = null,
|
||||||
val dsSettings: Any? = null,
|
val dsSettings: Any? = null,
|
||||||
var sockopt: SockoptBean? = null
|
var sockopt: SockoptBean? = null
|
||||||
) {
|
) {
|
||||||
@@ -202,15 +202,8 @@ data class V2rayConfig(
|
|||||||
var downlinkCapacity: Int = 100,
|
var downlinkCapacity: Int = 100,
|
||||||
var congestion: Boolean = false,
|
var congestion: Boolean = false,
|
||||||
var readBufferSize: Int = 1,
|
var readBufferSize: Int = 1,
|
||||||
var writeBufferSize: Int = 1,
|
var writeBufferSize: Int = 1
|
||||||
var header: HeaderBean = HeaderBean(),
|
)
|
||||||
var seed: String? = null
|
|
||||||
) {
|
|
||||||
data class HeaderBean(
|
|
||||||
var type: String = "none",
|
|
||||||
var domain: String? = null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
data class WsSettingsBean(
|
data class WsSettingsBean(
|
||||||
var path: String? = null,
|
var path: String? = null,
|
||||||
@@ -310,13 +303,19 @@ data class V2rayConfig(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
data class UdpMasksBean(
|
data class FinalMaskBean(
|
||||||
var type: String,
|
var tcp: List<MaskBean>? = null,
|
||||||
var settings: UdpMasksSettingsBean? = null
|
var udp: List<MaskBean>? = null
|
||||||
) {
|
) {
|
||||||
data class UdpMasksSettingsBean(
|
data class MaskBean(
|
||||||
var password: String? = null
|
var type: String,
|
||||||
)
|
var settings: MaskSettingsBean? = null
|
||||||
|
) {
|
||||||
|
data class MaskSettingsBean(
|
||||||
|
var password: String? = null,
|
||||||
|
var domain: String? = null
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ import com.v2ray.ang.enums.EConfigType
|
|||||||
import com.v2ray.ang.enums.NetworkType
|
import com.v2ray.ang.enums.NetworkType
|
||||||
import com.v2ray.ang.dto.ProfileItem
|
import com.v2ray.ang.dto.ProfileItem
|
||||||
import com.v2ray.ang.dto.V2rayConfig.OutboundBean
|
import com.v2ray.ang.dto.V2rayConfig.OutboundBean
|
||||||
import com.v2ray.ang.dto.V2rayConfig.OutboundBean.StreamSettingsBean
|
import com.v2ray.ang.dto.V2rayConfig.OutboundBean.StreamSettingsBean.FinalMaskBean
|
||||||
import com.v2ray.ang.dto.V2rayConfig.OutboundBean.StreamSettingsBean.UdpMasksBean.UdpMasksSettingsBean
|
|
||||||
import com.v2ray.ang.extension.idnHost
|
import com.v2ray.ang.extension.idnHost
|
||||||
import com.v2ray.ang.extension.isNotNullEmpty
|
import com.v2ray.ang.extension.isNotNullEmpty
|
||||||
import com.v2ray.ang.extension.nullIfBlank
|
import com.v2ray.ang.extension.nullIfBlank
|
||||||
@@ -109,11 +108,13 @@ object Hysteria2Fmt : FmtBase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (profileItem.obfsPassword.isNotNullEmpty()) {
|
if (profileItem.obfsPassword.isNotNullEmpty()) {
|
||||||
outboundBean.streamSettings?.udpmasks = mutableListOf(
|
outboundBean.streamSettings?.finalmask = FinalMaskBean(
|
||||||
StreamSettingsBean.UdpMasksBean(
|
udp = listOf(
|
||||||
type = "salamander",
|
FinalMaskBean.MaskBean(
|
||||||
settings = UdpMasksSettingsBean(
|
type = "salamander",
|
||||||
password = profileItem.obfsPassword
|
settings = FinalMaskBean.MaskBean.MaskSettingsBean(
|
||||||
|
password = profileItem.obfsPassword
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1183,19 +1183,39 @@ object V2rayConfigManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NetworkType.KCP.type -> {
|
NetworkType.KCP.type -> {
|
||||||
val kcpsetting = StreamSettingsBean.KcpSettingsBean()
|
streamSettings.kcpSettings = StreamSettingsBean.KcpSettingsBean()
|
||||||
kcpsetting.header.type = headerType ?: "none"
|
val udpMaskList = mutableListOf<StreamSettingsBean.FinalMaskBean.MaskBean>()
|
||||||
|
if (!headerType.isNullOrEmpty() && headerType != "none") {
|
||||||
|
val kcpHeaderType = when {
|
||||||
|
headerType == "wechat-video" -> "header-wechat"
|
||||||
|
else -> "header-$headerType"
|
||||||
|
}
|
||||||
|
udpMaskList.add(StreamSettingsBean.FinalMaskBean.MaskBean(
|
||||||
|
type = kcpHeaderType,
|
||||||
|
settings = if (headerType == "dns" && !host.isNullOrEmpty()) {
|
||||||
|
StreamSettingsBean.FinalMaskBean.MaskBean.MaskSettingsBean(
|
||||||
|
domain = host
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
if (seed.isNullOrEmpty()) {
|
if (seed.isNullOrEmpty()) {
|
||||||
kcpsetting.seed = null
|
udpMaskList.add(StreamSettingsBean.FinalMaskBean.MaskBean(
|
||||||
|
type = "mkcp-original"
|
||||||
|
))
|
||||||
} else {
|
} else {
|
||||||
kcpsetting.seed = seed
|
udpMaskList.add(StreamSettingsBean.FinalMaskBean.MaskBean(
|
||||||
|
type = "mkcp-aes128gcm",
|
||||||
|
settings = StreamSettingsBean.FinalMaskBean.MaskBean.MaskSettingsBean(
|
||||||
|
password = seed
|
||||||
|
)
|
||||||
|
))
|
||||||
}
|
}
|
||||||
if (host.isNullOrEmpty()) {
|
streamSettings.finalmask = StreamSettingsBean.FinalMaskBean(
|
||||||
kcpsetting.header.domain = null
|
udp = udpMaskList.toList()
|
||||||
} else {
|
)
|
||||||
kcpsetting.header.domain = host
|
|
||||||
}
|
|
||||||
streamSettings.kcpSettings = kcpsetting
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkType.WS.type -> {
|
NetworkType.WS.type -> {
|
||||||
|
|||||||
Reference in new issue
Block a user