mirror of
https://github.com/bolucat/Archive.git
synced 2025-12-24 13:28:37 +08:00
Update On Tue May 27 20:37:11 CEST 2025
This commit is contained in:
@@ -483,14 +483,10 @@
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-resources.sh\"\n";
|
||||
@@ -504,14 +500,10 @@
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-frameworks.sh\"\n";
|
||||
|
||||
@@ -427,14 +427,37 @@ class ImportUri {
|
||||
|
||||
v2ray.serverTrojan = svr
|
||||
v2ray.enableMux = false
|
||||
v2ray.serverProtocol = V2rayProtocolOutbound.trojan.rawValue
|
||||
// tcp
|
||||
v2ray.streamNetwork = "tcp"
|
||||
v2ray.streamSecurity = trojan.security
|
||||
v2ray.securityTls.allowInsecure = true
|
||||
v2ray.securityTls.serverName = trojan.sni // default tls sni
|
||||
v2ray.securityTls.fingerprint = trojan.fp
|
||||
|
||||
v2ray.serverProtocol = V2rayProtocolOutbound.trojan.rawValue
|
||||
switch trojan.network {
|
||||
case "h2","http":
|
||||
v2ray.streamNetwork = trojan.network
|
||||
v2ray.streamH2.host = [trojan.netHost]
|
||||
v2ray.streamH2.path = trojan.netPath
|
||||
case "ws":
|
||||
v2ray.streamNetwork = "ws"
|
||||
v2ray.streamWs.path = trojan.netPath
|
||||
v2ray.streamWs.headers.host = trojan.netHost
|
||||
case "grpc":
|
||||
v2ray.streamNetwork = "grpc"
|
||||
v2ray.streamGrpc.serviceName = trojan.netPath
|
||||
v2ray.streamGrpc.multiMode = true // v2rayN
|
||||
default:
|
||||
v2ray.streamNetwork = "tcp"
|
||||
v2ray.streamTcp.header.type = trojan.headerType
|
||||
if v2ray.streamTcp.header.type == "http" {
|
||||
var tcpReq = TcpSettingHeaderRequest()
|
||||
tcpReq.path = [trojan.netPath]
|
||||
tcpReq.headers.host = [trojan.netHost]
|
||||
v2ray.streamTcp.header.request = tcpReq
|
||||
}
|
||||
}
|
||||
|
||||
// check is valid
|
||||
v2ray.checkManualValid()
|
||||
if v2ray.isValid {
|
||||
|
||||
@@ -206,23 +206,34 @@ class MenuController: NSObject, NSMenuDelegate {
|
||||
}
|
||||
|
||||
// subscribe items
|
||||
for (itemKey, menu) in groupMenus {
|
||||
if itemKey == "default" {
|
||||
continue
|
||||
// 超过一个分组,才使用二级菜单
|
||||
if groupMenus.count > 1 {
|
||||
for (itemKey, menu) in groupMenus {
|
||||
if itemKey == "default" {
|
||||
continue
|
||||
}
|
||||
let newGroup: NSMenuItem = NSMenuItem()
|
||||
var groupTagName = "🌏 订阅"
|
||||
if let sub = V2raySubItem.load(name: itemKey) {
|
||||
groupTagName = "🌏 " + sub.remark + " (\(menu.items.count))"
|
||||
}
|
||||
newGroup.submenu = menu
|
||||
newGroup.title = groupTagName
|
||||
newGroup.target = self
|
||||
newGroup.isEnabled = true
|
||||
if chooseGroup == itemKey {
|
||||
newGroup.state = NSControl.StateValue.on
|
||||
}
|
||||
_subMenus.addItem(newGroup)
|
||||
}
|
||||
let newGroup: NSMenuItem = NSMenuItem()
|
||||
var groupTagName = "🌏 订阅"
|
||||
if let sub = V2raySubItem.load(name: itemKey) {
|
||||
groupTagName = "🌏 " + sub.remark + " (\(menu.items.count))"
|
||||
} else {
|
||||
// only one group, add all items to the first menu
|
||||
for (_, subMenus) in groupMenus {
|
||||
for menu in subMenus.items {
|
||||
subMenus.removeItem(menu) // 必须要先移除
|
||||
_subMenus.addItem(menu)
|
||||
}
|
||||
}
|
||||
newGroup.submenu = menu
|
||||
newGroup.title = groupTagName
|
||||
newGroup.target = self
|
||||
newGroup.isEnabled = true
|
||||
if chooseGroup == itemKey {
|
||||
newGroup.state = NSControl.StateValue.on
|
||||
}
|
||||
_subMenus.addItem(newGroup)
|
||||
}
|
||||
|
||||
if validCount == 0 {
|
||||
|
||||
@@ -184,6 +184,7 @@ class ShareUri {
|
||||
ss.security = "tls"
|
||||
ss.fp = self.v2ray.securityTls.fingerprint
|
||||
ss.flow = self.v2ray.serverTrojan.flow
|
||||
ss.sni = self.v2ray.securityTls.serverName
|
||||
|
||||
self.uri = ss.encode()
|
||||
self.error = ss.error
|
||||
|
||||
@@ -418,6 +418,7 @@ class ShadowsockRUri: ShadowsockUri {
|
||||
// trojan
|
||||
class TrojanUri {
|
||||
var host: String = ""
|
||||
var path: String = ""
|
||||
var port: Int = 443
|
||||
var password: String = ""
|
||||
var remark: String = ""
|
||||
@@ -426,7 +427,11 @@ class TrojanUri {
|
||||
var security: String = "tls"
|
||||
var fp: String = ""
|
||||
var error: String = ""
|
||||
|
||||
var network: String = "tcp" // network type: tcp,ws,h2,grpc,domainsocket
|
||||
var netHost: String = "" // host for ws,h2
|
||||
var netPath: String = "" // path for ws,h2,grpc,ds,kcp
|
||||
var headerType: String = "none" // header type: none,http,wireguard,srtp,utp,wechat-video,dtls
|
||||
|
||||
// trojan://pass@remote_host:443?flow=xtls-rprx-origin&security=xtls&sni=sni&host=remote_host#trojan
|
||||
func encode() -> String {
|
||||
var uri = URLComponents()
|
||||
@@ -439,6 +444,11 @@ class TrojanUri {
|
||||
URLQueryItem(name: "security", value: self.security),
|
||||
URLQueryItem(name: "sni", value: self.sni),
|
||||
URLQueryItem(name: "fp", value: self.fp),
|
||||
URLQueryItem(name: "type", value: self.network),
|
||||
URLQueryItem(name: "host", value: self.netHost),
|
||||
URLQueryItem(name: "path", value: self.netPath),
|
||||
URLQueryItem(name: "headerType", value: self.headerType),
|
||||
URLQueryItem(name: "serviceName", value: self.netPath)
|
||||
]
|
||||
return (uri.url?.absoluteString ?? "") + "#" + self.remark
|
||||
}
|
||||
@@ -474,6 +484,21 @@ class TrojanUri {
|
||||
case "fp":
|
||||
self.fp = item.value as! String
|
||||
break
|
||||
case "type":
|
||||
self.network = item.value as! String
|
||||
break
|
||||
case "path":
|
||||
self.netPath = item.value as! String
|
||||
break
|
||||
case "host":
|
||||
self.netHost = item.value as! String
|
||||
break
|
||||
case "serviceName":
|
||||
self.netPath = item.value as! String
|
||||
break
|
||||
case "headerType":
|
||||
self.headerType = item.value as! String
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ let RoutingRuleCn = "routing.cn"
|
||||
let RoutingRuleLANAndCn = "routing.lanAndCn"
|
||||
|
||||
let defaultRuleCn = Dictionary(uniqueKeysWithValues: [
|
||||
(RoutingRuleGlobal, "🌏全局"),
|
||||
(RoutingRuleGlobal, "🌏 全局"),
|
||||
(RoutingRuleLAN, "🌏 绕过局域网"),
|
||||
(RoutingRuleCn, "🌏 绕过中国大陆"),
|
||||
(RoutingRuleLANAndCn, "🌏 绕过局域网和中国大陆")
|
||||
|
||||
Reference in New Issue
Block a user