Skip to content

Commit d9744a3

Browse files
committed
parse trojan ws option
1 parent 35cb30a commit d9744a3

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

config/parser.go

+11
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,17 @@ func ParseProxy(mapping map[string]interface{}, namePrefix string) (string, erro
127127
if len(trojanOption.SNI) > 0 {
128128
query = append(query, fmt.Sprintf("sni=%s", trojanOption.SNI))
129129
}
130+
// ws query
131+
if trojanOption.Network == "ws" {
132+
query = append(query, "type=ws")
133+
if len(trojanOption.WSOpts.Path) > 0 {
134+
query = append(query, fmt.Sprintf("path=%s", trojanOption.WSOpts.Path))
135+
for k, v := range trojanOption.WSOpts.Headers {
136+
query = append(query, fmt.Sprintf("%s=%s", k, v))
137+
}
138+
}
139+
}
140+
130141
if len(query) > 0 {
131142
link = fmt.Sprintf("%s?%s", link, strings.Join(query, "&"))
132143
}

config/trojan.go

+19
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,25 @@ func TrojanLinkToTrojanOption(link string) (*outbound.TrojanOption, error) {
4444
if rawQuery, err := url.ParseQuery(u.RawQuery); err == nil {
4545
trojanOption.SNI = rawQuery.Get("sni")
4646
trojanOption.SkipCertVerify = rawQuery.Get("allowInsecure") == "1"
47+
network := rawQuery.Get("type")
48+
if network == "ws" {
49+
trojanOption.Network = "ws"
50+
p := rawQuery.Get("path")
51+
if len(p) > 0 {
52+
wsOption := outbound.WSOptions{Path: p}
53+
wsOption.Headers = map[string]string{}
54+
host := rawQuery.Get("host")
55+
if len(host) > 0 {
56+
wsOption.Headers["host"] = host
57+
}
58+
Host := rawQuery.Get("Host")
59+
if len(Host) > 0 {
60+
wsOption.Headers["Host"] = Host
61+
}
62+
trojanOption.WSOpts = wsOption
63+
}
64+
}
65+
4766
}
4867
return &trojanOption, nil
4968
}

0 commit comments

Comments
 (0)