websocket.go 765 B

12345678910111213141516171819202122232425262728293031323334
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. //go:build js || ((linux || darwin) && ts_debug_websockets)
  4. package derphttp
  5. import (
  6. "context"
  7. "log"
  8. "net"
  9. "github.com/coder/websocket"
  10. "tailscale.com/net/wsconn"
  11. )
  12. const canWebsockets = true
  13. func init() {
  14. dialWebsocketFunc = dialWebsocket
  15. }
  16. func dialWebsocket(ctx context.Context, urlStr string) (net.Conn, error) {
  17. c, res, err := websocket.Dial(ctx, urlStr, &websocket.DialOptions{
  18. Subprotocols: []string{"derp"},
  19. })
  20. if err != nil {
  21. log.Printf("websocket Dial: %v, %+v", err, res)
  22. return nil, err
  23. }
  24. log.Printf("websocket: connected to %v", urlStr)
  25. netConn := wsconn.NetConn(context.Background(), c, websocket.MessageBinary, urlStr)
  26. return netConn, nil
  27. }