This commit is contained in:
gospider
2024-03-30 23:01:45 +08:00
parent 18a9e2d8c2
commit 6c7848628f
7 changed files with 34 additions and 19 deletions

16
conn.go
View File

@@ -9,6 +9,7 @@ import (
"net/textproto"
"sync"
"sync/atomic"
"time"
"github.com/gospider007/net/http2"
"github.com/gospider007/tools"
@@ -68,6 +69,21 @@ func (obj *connecotr) Read(b []byte) (i int, err error) {
func (obj *connecotr) Write(b []byte) (int, error) {
return obj.rawConn.Write(b)
}
func (obj *connecotr) LocalAddr() net.Addr {
return obj.rawConn.LocalAddr()
}
func (obj *connecotr) RemoteAddr() net.Addr {
return obj.rawConn.RemoteAddr()
}
func (obj *connecotr) SetDeadline(t time.Time) error {
return obj.rawConn.SetDeadline(t)
}
func (obj *connecotr) SetReadDeadline(t time.Time) error {
return obj.rawConn.SetReadDeadline(t)
}
func (obj *connecotr) SetWriteDeadline(t time.Time) error {
return obj.rawConn.SetWriteDeadline(t)
}
func (obj *connecotr) h2Closed() bool {
if obj.h2RawConn == nil {

3
go.mod
View File

@@ -11,7 +11,7 @@ require (
github.com/gospider007/net v0.0.0-20240330101015-7f9e64d8d506
github.com/gospider007/re v0.0.0-20240227100911-e27255e48eff
github.com/gospider007/tools v0.0.0-20231202084937-8b2bc66f8198
github.com/gospider007/websocket v0.0.0-20240104034652-af938aeed446
github.com/gospider007/websocket v0.0.0-20240330145931-87c1d168b7df
github.com/refraction-networking/utls v1.6.3
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8
golang.org/x/net v0.22.0
@@ -47,5 +47,4 @@ require (
golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.19.0 // indirect
nhooyr.io/websocket v1.8.10 // indirect
)

8
go.sum
View File

@@ -20,6 +20,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20231212022811-ec68065c825e h1:bwOy7hAFd0C91URzMIEBfr6BAz29yk7Qj0cy6S7DJlU=
github.com/google/pprof v0.0.0-20231212022811-ec68065c825e/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/gospider007/bar v0.0.0-20231215084215-956cfa59ce61 h1:XS7tOVjv207CKZTR+o5mSlxjP4FLfaaTkTZ11mCHL2U=
github.com/gospider007/bar v0.0.0-20231215084215-956cfa59ce61/go.mod h1:aYPgmG9340i9x9VQZhf34/XtIj7PHDTq0wSO+7zU/8s=
github.com/gospider007/blog v0.0.0-20231121084103-59a004dafccf h1:1laTsuH/wl5pZ5QlHzacX09QzvwQw0DFENoRMpGBK8Y=
@@ -40,8 +42,8 @@ github.com/gospider007/re v0.0.0-20240227100911-e27255e48eff h1:tiTX2nKAnHZ45Jac
github.com/gospider007/re v0.0.0-20240227100911-e27255e48eff/go.mod h1:X58uk0/F3mVskuQOZng0ZKJiAt3ETn0wxuLN//rVZrE=
github.com/gospider007/tools v0.0.0-20231202084937-8b2bc66f8198 h1:phk1GNobIIQWL5/G5dtgs35hotucdYv2FScMjlHHZ+Q=
github.com/gospider007/tools v0.0.0-20231202084937-8b2bc66f8198/go.mod h1:wiILK6EotceHz/Rnb6ux8PzY3sr5OV+mYuIcbtxpkYI=
github.com/gospider007/websocket v0.0.0-20240104034652-af938aeed446 h1:JmTBH/ow7RAxM+dW3XuV3GOEnnP10s9wX6lDzN+6NtE=
github.com/gospider007/websocket v0.0.0-20240104034652-af938aeed446/go.mod h1:yFlXngTH3Vh3LMNGpYCaK41Ruv+zEScL9zZ2AmhzBbo=
github.com/gospider007/websocket v0.0.0-20240330145931-87c1d168b7df h1:w31Uls0iL5HOhp2a3YPTbmWzqD7n13wsoPhbcllsfb4=
github.com/gospider007/websocket v0.0.0-20240330145931-87c1d168b7df/go.mod h1:c3KpZ5HtL/iiIUG4CrOu0ycSPoJPUjgtNT3cdAfnKa4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
@@ -149,5 +151,3 @@ golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q=
nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=

View File

@@ -336,7 +336,7 @@ func (obj *Client) request(ctx context.Context, option *RequestOption) (response
//init ws
if ctxData.isWs {
websocket.SetClientHeadersOption(reqs.Header, option.WsOption)
websocket.SetClientHeadersWithOption(reqs.Header, option.WsOption)
}
if reqs.URL.Scheme == "file" {
@@ -382,9 +382,9 @@ func (obj *Client) request(ctx context.Context, option *RequestOption) (response
response.disUnzip = response.response.Uncompressed
}
if response.response.StatusCode == 101 {
response.webSocket, err = websocket.NewClientConn(response.rawConn.Conn(), response.response.Header, response.ForceCloseConn)
response.webSocket = websocket.NewClientConn(response.rawConn.Conn(), websocket.GetResponseHeaderOption(response.response.Header))
} else if response.response.Header.Get("Content-Type") == "text/event-stream" {
response.sse = newSse(response.response.Body, response.ForceCloseConn)
response.sse = newSse(response.response.Body)
} else if !response.disUnzip {
var unCompressionBody io.ReadCloser
unCompressionBody, err = tools.CompressionDecode(response.response.Body, response.ContentEncoding())

View File

@@ -39,8 +39,8 @@ type Response struct {
}
type Sse struct {
reader *bufio.Reader
closeFunc func()
reader *bufio.Reader
raw io.ReadCloser
}
type Event struct {
Data string //data
@@ -50,8 +50,8 @@ type Event struct {
Comment string //comment info
}
func newSse(rd io.Reader, closeFunc func()) *Sse {
return &Sse{closeFunc: closeFunc, reader: bufio.NewReader(rd)}
func newSse(rd io.ReadCloser) *Sse {
return &Sse{raw: rd, reader: bufio.NewReader(rd)}
}
// recv sse envent data
@@ -95,8 +95,8 @@ func (obj *Sse) Recv() (Event, error) {
}
// close sse
func (obj *Sse) Close() {
obj.closeFunc()
func (obj *Sse) Close() error {
return obj.raw.Close()
}
// return websocket client

View File

@@ -32,7 +32,7 @@ func TestOrderHeaders(t *testing.T) {
t.Fatal("not found akamai")
}
i := -1
// log.Print(header_order)
log.Print(header_order)
// log.Print(headers.Keys())
kks := []string{}
for _, kk := range headers.Keys() {

View File

@@ -17,14 +17,14 @@ func TestWebSocket(t *testing.T) {
defer response.CloseBody()
wsCli := response.WebSocket()
defer wsCli.Close()
if err = wsCli.Send(nil, websocket.MessageText, "test"); err != nil { // Send text message
if err = wsCli.WriteMessage(websocket.TextMessage, "test"); err != nil { // Send text message
t.Error(err)
}
msgType, con, err := wsCli.Recv(nil) // Receive message
msgType, con, err := wsCli.ReadMessage() // Receive message
if err != nil {
t.Error(err)
}
if msgType != websocket.MessageText {
if msgType != websocket.TextMessage {
t.Error("Message type is not text")
}
if string(con) != "test" {