mirror of
https://github.com/netbirdio/netbird.git
synced 2025-06-21 18:22:37 +02:00
Remove gorilla lib
This commit is contained in:
parent
085d072b17
commit
745e4f76b1
@ -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()
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user