Files
netbird/shared/relay/client/dialers_generic.go

40 lines
1.4 KiB
Go

//go:build !js
package client
import (
"github.com/netbirdio/netbird/client/iface"
"github.com/netbirdio/netbird/shared/relay/client/dialer"
"github.com/netbirdio/netbird/shared/relay/client/dialer/quic"
"github.com/netbirdio/netbird/shared/relay/client/dialer/ws"
)
// getDialers returns the ordered list of dialers for connecting to the relay
// server. For racing modes (auto) the order is irrelevant; for prefer modes the
// first entry is tried before falling back to the second.
func (c *Client) getDialers(mode TransportMode) []dialer.DialeFn {
switch mode {
case TransportModeWS:
c.log.Infof("%s=ws, using WebSocket transport", EnvRelayTransport)
return []dialer.DialeFn{ws.Dialer{}}
case TransportModeQUIC:
c.log.Infof("%s=quic, using QUIC transport", EnvRelayTransport)
return []dialer.DialeFn{quic.Dialer{}}
}
if c.mtu > 0 && c.mtu > iface.DefaultMTU {
c.log.Infof("MTU %d exceeds default (%d), forcing WebSocket transport to avoid DATAGRAM frame size issues", c.mtu, iface.DefaultMTU)
return []dialer.DialeFn{ws.Dialer{}}
}
if c.transportFallback != nil && c.transportFallback.preferWS(c.connectionURL) {
c.log.Infof("relay recently rejected QUIC datagrams, using WebSocket transport")
return []dialer.DialeFn{ws.Dialer{}}
}
if mode == TransportModePreferWS {
return []dialer.DialeFn{ws.Dialer{}, quic.Dialer{}}
}
return []dialer.DialeFn{quic.Dialer{}, ws.Dialer{}}
}