From bd89d36c91fba307878da5a50298f7589173383f Mon Sep 17 00:00:00 2001 From: yanue Date: Sun, 14 Aug 2022 14:49:00 +0800 Subject: [PATCH] trojan sni --- V2rayU/ConfigWindow.swift | 1 + V2rayU/Import.swift | 3 ++- V2rayU/Uri.swift | 24 ++++++++++++++++++++++-- V2rayU/V2raySubscribe.swift | 2 +- V2rayU/v2ray/v2rayOutbound.swift | 1 + 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/V2rayU/ConfigWindow.swift b/V2rayU/ConfigWindow.swift index d0310e7..008bd3f 100644 --- a/V2rayU/ConfigWindow.swift +++ b/V2rayU/ConfigWindow.swift @@ -78,6 +78,7 @@ class ConfigWindowController: NSWindowController, NSWindowDelegate, NSTabViewDel @IBOutlet weak var trojanPort: NSTextField! @IBOutlet weak var trojanPass: NSTextField! @IBOutlet weak var trojanAlpn: NSTextField! + @IBOutlet weak var trojanSni: NSTextField! @IBOutlet weak var networkView: NSView! diff --git a/V2rayU/Import.swift b/V2rayU/Import.swift index 680862b..b17dd3e 100644 --- a/V2rayU/Import.swift +++ b/V2rayU/Import.swift @@ -294,7 +294,7 @@ class ImportUri { func importTrojanUri(uri: String) { if URL(string: uri) == nil { - self.error = "invalid ssr url" + self.error = "invalid trojan url" return } self.uri = uri @@ -313,6 +313,7 @@ class ImportUri { svr.address = trojan.host svr.port = trojan.port svr.password = trojan.password + svr.sni = trojan.sni NSLog("\(svr)") v2ray.serverTrojan = svr v2ray.enableMux = false diff --git a/V2rayU/Uri.swift b/V2rayU/Uri.swift index 3decf77..cfd3ad5 100644 --- a/V2rayU/Uri.swift +++ b/V2rayU/Uri.swift @@ -391,12 +391,19 @@ class TrojanUri { var port: Int = 443 var password: String = "" var remark: String = "" - + var sni: String = "" + var flow: String = "" + var security: String = "" + var alpn: String = "" var error: String = "" - // trojan://password@remote_host:remote_port + // trojan://pass@remote_host:443?flow=xtls-rprx-origin&security=xtls&sni=sni&host=remote_host#trojan func encode() -> String { let uri = self.password + "@" + self.host + ":" + String(self.port) + uri.queryItems = [ + URLQueryItem(name: "flow", value: self.flow), + URLQueryItem(name: "sni", value: self.sni), + ] return "trojan://" + uri + "#" + self.remark } @@ -416,6 +423,19 @@ class TrojanUri { self.host = host self.port = Int(port) self.password = password + let queryItems = url.queryParams() + for item in queryItems { + switch item.key { + case "sni": + self.sni = item.value as! String + break + case "flow": + self.flow = item.value as! String + break + default: + break + } + } self.remark = (url.fragment ?? "trojan").urlDecoded() } } diff --git a/V2rayU/V2raySubscribe.swift b/V2rayU/V2raySubscribe.swift index c5d6c05..da99026 100644 --- a/V2rayU/V2raySubscribe.swift +++ b/V2rayU/V2raySubscribe.swift @@ -297,7 +297,7 @@ class V2raySubSync: NSObject { } if URL(string: uri) == nil { - logTip(title: "fail: ", uri: uri, informativeText: "no found ss://, ssr://, vmess://") + logTip(title: "fail: ", uri: uri, informativeText: "no found ss://, ssr://, vmess://, vless://, trojan://") return } diff --git a/V2rayU/v2ray/v2rayOutbound.swift b/V2rayU/v2ray/v2rayOutbound.swift index 73acc50..ea30742 100644 --- a/V2rayU/v2ray/v2rayOutbound.swift +++ b/V2rayU/v2ray/v2rayOutbound.swift @@ -290,4 +290,5 @@ struct V2rayOutboundTrojanServer: Codable { var password: String = "" var level: Int = 0 var email: String = "" + var sni: String = "" }