add mws dialer

This commit is contained in:
ginuerzh
2021-12-17 14:05:59 +08:00
parent bfe5eae172
commit 8e31e532e4
23 changed files with 795 additions and 137 deletions

View File

@ -22,6 +22,7 @@ type obfsHTTPConn struct {
wbuf bytes.Buffer
handshaked bool
handshakeMutex sync.Mutex
header http.Header
logger logger.Logger
}
@ -71,9 +72,11 @@ func (c *obfsHTTPConn) handshake() (err error) {
StatusCode: http.StatusOK,
ProtoMajor: 1,
ProtoMinor: 1,
Header: make(http.Header),
Header: c.header,
}
if resp.Header == nil {
resp.Header = http.Header{}
}
resp.Header.Set("Server", "nginx/1.18.0")
resp.Header.Set("Date", time.Now().Format(time.RFC1123))
if r.Method != http.MethodGet || r.Header.Get("Upgrade") != "websocket" {

View File

@ -57,6 +57,7 @@ func (l *obfsListener) Accept() (net.Conn, error) {
return &obfsHTTPConn{
Conn: c,
header: l.md.header,
logger: l.logger,
}, nil
}

View File

@ -1,17 +1,27 @@
package http
import (
"fmt"
"net/http"
md "github.com/go-gost/gost/pkg/metadata"
)
const (
keepAlive = "keepAlive"
keepAlivePeriod = "keepAlivePeriod"
)
type metadata struct {
header http.Header
}
func (l *obfsListener) parseMetadata(md md.Metadata) (err error) {
const (
header = "header"
)
if mm, _ := md.Get(header).(map[interface{}]interface{}); len(mm) > 0 {
h := http.Header{}
for k, v := range mm {
h.Add(fmt.Sprintf("%v", k), fmt.Sprintf("%v", v))
}
l.md.header = h
}
return
}