From 745e4f76b1c59ee98f2a8ca4452078c93d695528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Papp?= Date: Wed, 26 Jun 2024 15:25:01 +0200 Subject: [PATCH] Remove gorilla lib --- relay/client/dialer/ws/client_conn.go | 59 ----------------- relay/client/dialer/ws/ws.go | 22 ------- relay/server/listener/ws/conn.go | 74 --------------------- relay/server/listener/ws/listener.go | 92 --------------------------- 4 files changed, 247 deletions(-) delete mode 100644 relay/client/dialer/ws/client_conn.go delete mode 100644 relay/client/dialer/ws/ws.go delete mode 100644 relay/server/listener/ws/conn.go delete mode 100644 relay/server/listener/ws/listener.go diff --git a/relay/client/dialer/ws/client_conn.go b/relay/client/dialer/ws/client_conn.go deleted file mode 100644 index ee3283ecd..000000000 --- a/relay/client/dialer/ws/client_conn.go +++ /dev/null @@ -1,59 +0,0 @@ -package ws - -import ( - "fmt" - "net" - "sync" - "time" - - "github.com/gorilla/websocket" -) - -type Conn struct { - *websocket.Conn - mu sync.Mutex -} - -func NewConn(wsConn *websocket.Conn) net.Conn { - return &Conn{ - Conn: wsConn, - } -} - -func (c *Conn) Read(b []byte) (n int, err error) { - t, r, err := c.NextReader() - if err != nil { - return 0, err - } - - if t != websocket.BinaryMessage { - return 0, fmt.Errorf("unexpected message type") - } - - return r.Read(b) -} - -func (c *Conn) Write(b []byte) (int, error) { - c.mu.Lock() - err := c.WriteMessage(websocket.BinaryMessage, b) - c.mu.Unlock() - return len(b), err -} - -func (c *Conn) SetDeadline(t time.Time) error { - errR := c.SetReadDeadline(t) - errW := c.SetWriteDeadline(t) - - if errR != nil { - return errR - } - - if errW != nil { - return errW - } - return nil -} - -func (c *Conn) Close() error { - return c.Conn.Close() -} diff --git a/relay/client/dialer/ws/ws.go b/relay/client/dialer/ws/ws.go deleted file mode 100644 index b526bd315..000000000 --- a/relay/client/dialer/ws/ws.go +++ /dev/null @@ -1,22 +0,0 @@ -package ws - -import ( - "fmt" - "net" - "time" - - "github.com/gorilla/websocket" -) - -func Dial(address string) (net.Conn, error) { - addr := fmt.Sprintf("ws://" + address) - wsDialer := websocket.Dialer{ - HandshakeTimeout: 3 * time.Second, - } - wsConn, _, err := wsDialer.Dial(addr, nil) - if err != nil { - return nil, err - } - conn := NewConn(wsConn) - return conn, nil -} diff --git a/relay/server/listener/ws/conn.go b/relay/server/listener/ws/conn.go deleted file mode 100644 index 8734293ac..000000000 --- a/relay/server/listener/ws/conn.go +++ /dev/null @@ -1,74 +0,0 @@ -package ws - -import ( - "errors" - "fmt" - "io" - "sync" - "time" - - "github.com/gorilla/websocket" - log "github.com/sirupsen/logrus" -) - -type Conn struct { - *websocket.Conn - - mu sync.Mutex -} - -func NewConn(wsConn *websocket.Conn) *Conn { - return &Conn{ - Conn: wsConn, - } -} - -func (c *Conn) Read(b []byte) (n int, err error) { - t, r, err := c.NextReader() - if err != nil { - return 0, ioErrHandling(err) - } - - if t != websocket.BinaryMessage { - log.Errorf("unexpected message type: %d", t) - return 0, fmt.Errorf("unexpected message type") - } - - n, err = r.Read(b) - if err != nil { - return 0, ioErrHandling(err) - } - return n, err -} - -func (c *Conn) Write(b []byte) (int, error) { - c.mu.Lock() - err := c.WriteMessage(websocket.BinaryMessage, b) - c.mu.Unlock() - return len(b), err -} - -func (c *Conn) SetDeadline(t time.Time) error { - errR := c.SetReadDeadline(t) - errW := c.SetWriteDeadline(t) - - if errR != nil { - return errR - } - - if errW != nil { - return errW - } - return nil -} - -func ioErrHandling(err error) error { - var wErr *websocket.CloseError - if !errors.As(err, &wErr) { - return err - } - if wErr.Code == websocket.CloseNormalClosure { - return io.EOF - } - return err -} diff --git a/relay/server/listener/ws/listener.go b/relay/server/listener/ws/listener.go deleted file mode 100644 index 632de153f..000000000 --- a/relay/server/listener/ws/listener.go +++ /dev/null @@ -1,92 +0,0 @@ -package ws - -import ( - "context" - "errors" - "fmt" - "net" - "net/http" - "sync" - "time" - - "github.com/gorilla/websocket" - log "github.com/sirupsen/logrus" - - "github.com/netbirdio/netbird/relay/server/listener" -) - -var ( - upgrader = websocket.Upgrader{} // use default options -) - -type Listener struct { - address string - - wg sync.WaitGroup - server *http.Server - acceptFn func(conn net.Conn) -} - -func NewListener(address string) listener.Listener { - return &Listener{ - address: address, - } -} - -func (l *Listener) Listen(acceptFn func(conn net.Conn)) error { - if l.server != nil { - return errors.New("server is already running") - } - - l.acceptFn = acceptFn - mux := http.NewServeMux() - mux.HandleFunc("/", l.onAccept) - - l.server = &http.Server{ - Addr: l.address, - Handler: mux, - } - - log.Infof("WS server is listening on address: %s", l.address) - err := l.server.ListenAndServe() - if errors.Is(err, http.ErrServerClosed) { - return nil - } - return err -} - -func (l *Listener) Close() error { - if l.server == nil { - return nil - } - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - log.Debugf("closing WS server") - if err := l.server.Shutdown(ctx); err != nil { - return fmt.Errorf("server shutdown failed: %v", err) - } - - l.wg.Wait() - return nil -} - -func (l *Listener) WaitForExitAcceptedConns() { - l.wg.Wait() -} - -func (l *Listener) onAccept(writer http.ResponseWriter, request *http.Request) { - l.wg.Add(1) - defer l.wg.Done() - - wsConn, err := upgrader.Upgrade(writer, request, nil) - if err != nil { - log.Errorf("failed to upgrade connection: %s", err) - return - } - conn := NewConn(wsConn) - log.Infof("new connection from: %s", conn.RemoteAddr()) - l.acceptFn(conn) - return -}