From 1b33b1eff0bb02fd939eb94403c1ac07dec0f861 Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 1 May 2023 10:45:34 +0200 Subject: [PATCH] Revert "chore: drop gorilla/websocket (#7751)" This reverts commit d327fe71fd23f1febb27a31149a83ac415f34f57. --- go.mod | 2 +- provider/socket.go | 17 +++++++---------- server/socket.go | 22 +++++++++++++--------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index 9a95bf303..92468fb46 100644 --- a/go.mod +++ b/go.mod @@ -42,6 +42,7 @@ require ( github.com/google/uuid v1.3.0 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 + github.com/gorilla/websocket v1.5.0 github.com/gregdel/pushover v1.1.0 github.com/grid-x/modbus v0.0.0-20230412120016-b867b6a2a633 github.com/hashicorp/go-version v1.6.0 @@ -138,7 +139,6 @@ require ( github.com/google/s2a-go v0.1.1 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.8.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect github.com/grid-x/serial v0.0.0-20211107191517-583c7356b3aa // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/holoplot/go-avahi v1.0.1 // indirect diff --git a/provider/socket.go b/provider/socket.go index ce294978d..6e57bcc54 100644 --- a/provider/socket.go +++ b/provider/socket.go @@ -1,7 +1,6 @@ package provider import ( - "context" "fmt" "math" "net/http" @@ -13,7 +12,7 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/util/transport" - "nhooyr.io/websocket" + "github.com/gorilla/websocket" ) const retryDelay = 5 * time.Second @@ -100,15 +99,13 @@ func (p *Socket) listen() { headers.Set(k, v) } - opts := &websocket.DialOptions{ - HTTPHeader: headers, + dialer := &websocket.Dialer{ + Proxy: http.ProxyFromEnvironment, + HandshakeTimeout: request.Timeout, } for { - ctx, cancel := context.WithTimeout(context.Background(), request.Timeout) - conn, _, err := websocket.Dial(ctx, p.url, opts) - cancel() - + client, _, err := dialer.Dial(p.url, headers) if err != nil { p.log.ERROR.Println(err) time.Sleep(retryDelay) @@ -116,10 +113,10 @@ func (p *Socket) listen() { } for { - _, b, err := conn.Read(context.Background()) + _, b, err := client.ReadMessage() if err != nil { p.log.TRACE.Println("read:", err) - _ = conn.Close(websocket.StatusAbnormalClosure, "done") + _ = client.Close() break } diff --git a/server/socket.go b/server/socket.go index 4a5e48040..0c9577575 100644 --- a/server/socket.go +++ b/server/socket.go @@ -1,7 +1,6 @@ package server import ( - "context" "encoding/json" "fmt" "math" @@ -11,8 +10,8 @@ import ( "time" "github.com/evcc-io/evcc/util" + "github.com/gorilla/websocket" "github.com/kr/pretty" - "nhooyr.io/websocket" ) const ( @@ -20,6 +19,12 @@ const ( socketWriteTimeout = 10 * time.Second ) +var upgrader = websocket.Upgrader{ + ReadBufferSize: 1024, + WriteBufferSize: 1024, + CheckOrigin: func(r *http.Request) bool { return true }, +} + // SocketClient is a middleman between the websocket connection and the hub. type SocketClient struct { hub *SocketHub @@ -34,16 +39,15 @@ type SocketClient struct { // writePump pumps messages from the hub to the websocket connection. func (c *SocketClient) writePump() { defer func() { - c.conn.Close(websocket.StatusNormalClosure, "done") + c.conn.Close() c.hub.unregister <- c }() for msg := range c.send { - ctx, cancel := context.WithTimeout(context.Background(), socketWriteTimeout) - err := c.conn.Write(ctx, websocket.MessageText, msg) - cancel() - - if err != nil { + if err := c.conn.SetWriteDeadline(time.Now().Add(socketWriteTimeout)); err != nil { + return + } + if err := c.conn.WriteMessage(websocket.TextMessage, msg); err != nil { return } } @@ -51,7 +55,7 @@ func (c *SocketClient) writePump() { // ServeWebsocket handles websocket requests from the peer. func ServeWebsocket(hub *SocketHub, w http.ResponseWriter, r *http.Request) { - conn, err := websocket.Accept(w, r, nil) + conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.ERROR.Println(err) return