Feature: support xray's ws-0rtt path (#1558)

This commit is contained in:
gVisor bot 2021-08-22 16:03:46 +08:00
parent 4e6b7bc82b
commit d867bb3b50

View file

@ -11,6 +11,7 @@ import (
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
@ -305,6 +306,18 @@ func streamWebsocketConn(conn net.Conn, c *WebsocketConfig, earlyData *bytes.Buf
} }
func StreamWebsocketConn(conn net.Conn, c *WebsocketConfig) (net.Conn, error) { func StreamWebsocketConn(conn net.Conn, c *WebsocketConfig) (net.Conn, error) {
if u, err := url.Parse(c.Path); err == nil {
if q := u.Query(); q.Get("ed") != "" {
if ed, err := strconv.Atoi(q.Get("ed")); err == nil {
c.MaxEarlyData = ed
c.EarlyDataHeaderName = "Sec-WebSocket-Protocol"
q.Del("ed")
u.RawQuery = q.Encode()
c.Path = u.String()
}
}
}
if c.MaxEarlyData > 0 { if c.MaxEarlyData > 0 {
return streamWebsocketWithEarlyDataConn(conn, c) return streamWebsocketWithEarlyDataConn(conn, c)
} }