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

@ -23,7 +23,7 @@ type obfsHTTPConn struct {
headerDrained bool
handshaked bool
handshakeMutex sync.Mutex
headers map[string]string
header http.Header
logger logger.Logger
}
@ -50,15 +50,15 @@ func (c *obfsHTTPConn) handshake() (err error) {
ProtoMajor: 1,
ProtoMinor: 1,
URL: &url.URL{Scheme: "http", Host: c.host},
Header: make(http.Header),
Header: c.header,
}
if r.Header == nil {
r.Header = http.Header{}
}
r.Header.Set("Connection", "Upgrade")
r.Header.Set("Upgrade", "websocket")
key, _ := c.generateChallengeKey()
r.Header.Set("Sec-WebSocket-Key", key)
for k, v := range c.headers {
r.Header.Set(k, v)
}
// cache the request header
if err = r.Write(&c.wbuf); err != nil {

View File

@ -56,9 +56,9 @@ func (d *obfsHTTPDialer) Handshake(ctx context.Context, conn net.Conn, options .
}
return &obfsHTTPConn{
Conn: conn,
host: host,
headers: d.md.headers,
logger: d.logger,
Conn: conn,
host: host,
header: d.md.header,
logger: d.logger,
}, nil
}

View File

@ -2,27 +2,28 @@ package http
import (
"fmt"
"net/http"
md "github.com/go-gost/gost/pkg/metadata"
)
type metadata struct {
host string
headers map[string]string
host string
header http.Header
}
func (d *obfsHTTPDialer) parseMetadata(md md.Metadata) (err error) {
const (
headers = "headers"
host = "host"
header = "header"
host = "host"
)
if mm, _ := md.Get(headers).(map[interface{}]interface{}); len(mm) > 0 {
m := make(map[string]string)
if mm, _ := md.Get(header).(map[interface{}]interface{}); len(mm) > 0 {
h := http.Header{}
for k, v := range mm {
m[fmt.Sprintf("%v", k)] = fmt.Sprintf("%v", v)
h.Add(fmt.Sprintf("%v", k), fmt.Sprintf("%v", v))
}
d.md.headers = m
d.md.header = h
}
d.md.host = md.GetString(host)
return