chore(config): use openvpn protocol string field instead of TCP bool

This commit is contained in:
Quentin McGaw
2024-03-23 14:56:42 +00:00
parent 62007bf1a1
commit 4d9c619b24
15 changed files with 49 additions and 81 deletions

View File

@@ -1,8 +0,0 @@
package helpers
func TCPPtrToString(tcp *bool) string {
if *tcp {
return "TCP"
}
return "UDP"
}

View File

@@ -2,8 +2,10 @@ package settings
import ( import (
"fmt" "fmt"
"strings"
"github.com/qdm12/gluetun/internal/configuration/settings/helpers" "github.com/qdm12/gluetun/internal/configuration/settings/helpers"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/constants/providers"
"github.com/qdm12/gluetun/internal/provider/privateinternetaccess/presets" "github.com/qdm12/gluetun/internal/provider/privateinternetaccess/presets"
"github.com/qdm12/gosettings" "github.com/qdm12/gosettings"
@@ -17,10 +19,10 @@ type OpenVPNSelection struct {
// NOT use a custom configuration file. // NOT use a custom configuration file.
// It cannot be nil in the internal state. // It cannot be nil in the internal state.
ConfFile *string `json:"config_file_path"` ConfFile *string `json:"config_file_path"`
// TCP is true if the OpenVPN protocol is TCP, // Protocol is the OpenVPN network protocol to use,
// and false for UDP. // and can be udp or tcp. It cannot be the empty string
// It cannot be nil in the internal state. // in the internal state.
TCP *bool `json:"tcp"` Protocol string `json:"protocol"`
// CustomPort is the OpenVPN server endpoint port. // CustomPort is the OpenVPN server endpoint port.
// It can be set to 0 to indicate no custom port should // It can be set to 0 to indicate no custom port should
// be used. It cannot be nil in the internal state. // be used. It cannot be nil in the internal state.
@@ -40,8 +42,13 @@ func (o OpenVPNSelection) validate(vpnProvider string) (err error) {
} }
} }
err = validate.IsOneOf(o.Protocol, constants.UDP, constants.TCP)
if err != nil {
return fmt.Errorf("network protocol: %w", err)
}
// Validate TCP // Validate TCP
if *o.TCP && helpers.IsOneOf(vpnProvider, if o.Protocol == constants.TCP && helpers.IsOneOf(vpnProvider,
providers.Ipvanish, providers.Ipvanish,
providers.Perfectprivacy, providers.Perfectprivacy,
providers.Privado, providers.Privado,
@@ -104,7 +111,7 @@ func (o OpenVPNSelection) validate(vpnProvider string) (err error) {
} }
allowedPorts := allowedUDP allowedPorts := allowedUDP
if *o.TCP { if o.Protocol == constants.TCP {
allowedPorts = allowedTCP allowedPorts = allowedTCP
} }
err = validate.IsOneOf(*o.CustomPort, allowedPorts...) err = validate.IsOneOf(*o.CustomPort, allowedPorts...)
@@ -133,7 +140,7 @@ func (o OpenVPNSelection) validate(vpnProvider string) (err error) {
func (o *OpenVPNSelection) copy() (copied OpenVPNSelection) { func (o *OpenVPNSelection) copy() (copied OpenVPNSelection) {
return OpenVPNSelection{ return OpenVPNSelection{
ConfFile: gosettings.CopyPointer(o.ConfFile), ConfFile: gosettings.CopyPointer(o.ConfFile),
TCP: gosettings.CopyPointer(o.TCP), Protocol: o.Protocol,
CustomPort: gosettings.CopyPointer(o.CustomPort), CustomPort: gosettings.CopyPointer(o.CustomPort),
PIAEncPreset: gosettings.CopyPointer(o.PIAEncPreset), PIAEncPreset: gosettings.CopyPointer(o.PIAEncPreset),
} }
@@ -141,21 +148,21 @@ func (o *OpenVPNSelection) copy() (copied OpenVPNSelection) {
func (o *OpenVPNSelection) mergeWith(other OpenVPNSelection) { func (o *OpenVPNSelection) mergeWith(other OpenVPNSelection) {
o.ConfFile = gosettings.MergeWithPointer(o.ConfFile, other.ConfFile) o.ConfFile = gosettings.MergeWithPointer(o.ConfFile, other.ConfFile)
o.TCP = gosettings.MergeWithPointer(o.TCP, other.TCP) o.Protocol = gosettings.MergeWithString(o.Protocol, other.Protocol)
o.CustomPort = gosettings.MergeWithPointer(o.CustomPort, other.CustomPort) o.CustomPort = gosettings.MergeWithPointer(o.CustomPort, other.CustomPort)
o.PIAEncPreset = gosettings.MergeWithPointer(o.PIAEncPreset, other.PIAEncPreset) o.PIAEncPreset = gosettings.MergeWithPointer(o.PIAEncPreset, other.PIAEncPreset)
} }
func (o *OpenVPNSelection) overrideWith(other OpenVPNSelection) { func (o *OpenVPNSelection) overrideWith(other OpenVPNSelection) {
o.ConfFile = gosettings.OverrideWithPointer(o.ConfFile, other.ConfFile) o.ConfFile = gosettings.OverrideWithPointer(o.ConfFile, other.ConfFile)
o.TCP = gosettings.OverrideWithPointer(o.TCP, other.TCP) o.Protocol = gosettings.OverrideWithString(o.Protocol, other.Protocol)
o.CustomPort = gosettings.OverrideWithPointer(o.CustomPort, other.CustomPort) o.CustomPort = gosettings.OverrideWithPointer(o.CustomPort, other.CustomPort)
o.PIAEncPreset = gosettings.OverrideWithPointer(o.PIAEncPreset, other.PIAEncPreset) o.PIAEncPreset = gosettings.OverrideWithPointer(o.PIAEncPreset, other.PIAEncPreset)
} }
func (o *OpenVPNSelection) setDefaults(vpnProvider string) { func (o *OpenVPNSelection) setDefaults(vpnProvider string) {
o.ConfFile = gosettings.DefaultPointer(o.ConfFile, "") o.ConfFile = gosettings.DefaultPointer(o.ConfFile, "")
o.TCP = gosettings.DefaultPointer(o.TCP, false) o.Protocol = gosettings.DefaultString(o.Protocol, constants.UDP)
o.CustomPort = gosettings.DefaultPointer(o.CustomPort, 0) o.CustomPort = gosettings.DefaultPointer(o.CustomPort, 0)
var defaultEncPreset string var defaultEncPreset string
@@ -171,7 +178,7 @@ func (o OpenVPNSelection) String() string {
func (o OpenVPNSelection) toLinesNode() (node *gotree.Node) { func (o OpenVPNSelection) toLinesNode() (node *gotree.Node) {
node = gotree.New("OpenVPN server selection settings:") node = gotree.New("OpenVPN server selection settings:")
node.Appendf("Protocol: %s", helpers.TCPPtrToString(o.TCP)) node.Appendf("Protocol: %s", strings.ToUpper(o.Protocol))
if *o.CustomPort != 0 { if *o.CustomPort != 0 {
node.Appendf("Custom port: %d", *o.CustomPort) node.Appendf("Custom port: %d", *o.CustomPort)

View File

@@ -1,12 +1,7 @@
package env package env
import ( import (
"errors"
"fmt"
"strings"
"github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gosettings/sources/env" "github.com/qdm12/gosettings/sources/env"
) )
@@ -14,7 +9,7 @@ func (s *Source) readOpenVPNSelection() (
selection settings.OpenVPNSelection, err error) { selection settings.OpenVPNSelection, err error) {
selection.ConfFile = s.env.Get("OPENVPN_CUSTOM_CONFIG", env.ForceLowercase(false)) selection.ConfFile = s.env.Get("OPENVPN_CUSTOM_CONFIG", env.ForceLowercase(false))
selection.TCP, err = s.readOpenVPNProtocol() selection.Protocol = s.env.String("OPENVPN_PROTOCOL", env.RetroKeys("PROTOCOL"))
if err != nil { if err != nil {
return selection, err return selection, err
} }
@@ -29,28 +24,3 @@ func (s *Source) readOpenVPNSelection() (
return selection, nil return selection, nil
} }
var ErrOpenVPNProtocolNotValid = errors.New("OpenVPN protocol is not valid")
func (s *Source) readOpenVPNProtocol() (tcp *bool, err error) {
const currentKey = "OPENVPN_PROTOCOL"
envKey := firstKeySet(s.env, "PROTOCOL", currentKey)
switch envKey {
case "":
return nil, nil //nolint:nilnil
case currentKey:
default: // Retro compatibility
s.handleDeprecatedKey(envKey, currentKey)
}
protocol := s.env.String(envKey)
switch strings.ToLower(protocol) {
case constants.UDP:
return ptrTo(false), nil
case constants.TCP:
return ptrTo(true), nil
default:
return nil, fmt.Errorf("environment variable %s: %w: %s",
envKey, ErrOpenVPNProtocolNotValid, protocol)
}
}

View File

@@ -22,7 +22,6 @@ func Test_Provider_GetConnection(t *testing.T) {
const provider = providers.Expressvpn const provider = providers.Expressvpn
errTest := errors.New("test error") errTest := errors.New("test error")
boolPtr := func(b bool) *bool { return &b }
testCases := map[string]struct { testCases := map[string]struct {
filteredServers []models.Server filteredServers []models.Server
@@ -45,7 +44,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
panicMessage: "no default OpenVPN TCP port is defined!", panicMessage: "no default OpenVPN TCP port is defined!",
@@ -56,7 +55,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{

View File

@@ -23,7 +23,6 @@ func Test_Provider_GetConnection(t *testing.T) {
const provider = providers.Ivpn const provider = providers.Ivpn
errTest := errors.New("test error") errTest := errors.New("test error")
boolPtr := func(b bool) *bool { return &b }
testCases := map[string]struct { testCases := map[string]struct {
filteredServers []models.Server filteredServers []models.Server
@@ -45,7 +44,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{
@@ -61,7 +60,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{

View File

@@ -23,7 +23,6 @@ func Test_Provider_GetConnection(t *testing.T) {
const provider = providers.Mullvad const provider = providers.Mullvad
errTest := errors.New("test error") errTest := errors.New("test error")
boolPtr := func(b bool) *bool { return &b }
testCases := map[string]struct { testCases := map[string]struct {
filteredServers []models.Server filteredServers []models.Server
@@ -45,7 +44,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{
@@ -61,7 +60,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{

View File

@@ -4,6 +4,7 @@ import (
"testing" "testing"
"github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/constants/providers"
"github.com/qdm12/gluetun/internal/constants/vpn" "github.com/qdm12/gluetun/internal/constants/vpn"
"github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/models"
@@ -50,7 +51,7 @@ func Test_FilterServers(t *testing.T) {
"filter by network protocol": { "filter by network protocol": {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}.WithDefaults(providers.Ivpn), }.WithDefaults(providers.Ivpn),
servers: []models.Server{ servers: []models.Server{

View File

@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/vpn" "github.com/qdm12/gluetun/internal/constants/vpn"
) )
@@ -22,7 +23,7 @@ func getPort(selection settings.ServerSelection,
if customPort > 0 { if customPort > 0 {
return customPort return customPort
} }
if *selection.OpenVPN.TCP { if selection.OpenVPN.Protocol == constants.TCP {
checkDefined("OpenVPN TCP", defaultOpenVPNTCP) checkDefined("OpenVPN TCP", defaultOpenVPNTCP)
return defaultOpenVPNTCP return defaultOpenVPNTCP
} }

View File

@@ -4,6 +4,7 @@ import (
"testing" "testing"
"github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/vpn" "github.com/qdm12/gluetun/internal/constants/vpn"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@@ -40,7 +41,7 @@ func Test_GetPort(t *testing.T) {
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
CustomPort: uint16Ptr(0), CustomPort: uint16Ptr(0),
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}, },
defaultOpenVPNTCP: defaultOpenVPNTCP, defaultOpenVPNTCP: defaultOpenVPNTCP,
@@ -53,7 +54,7 @@ func Test_GetPort(t *testing.T) {
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
CustomPort: uint16Ptr(0), CustomPort: uint16Ptr(0),
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}, },
panics: "no default OpenVPN UDP port is defined!", panics: "no default OpenVPN UDP port is defined!",
@@ -63,7 +64,7 @@ func Test_GetPort(t *testing.T) {
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
CustomPort: uint16Ptr(0), CustomPort: uint16Ptr(0),
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}, },
defaultOpenVPNTCP: defaultOpenVPNTCP, defaultOpenVPNTCP: defaultOpenVPNTCP,
@@ -74,7 +75,7 @@ func Test_GetPort(t *testing.T) {
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
CustomPort: uint16Ptr(0), CustomPort: uint16Ptr(0),
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}, },
panics: "no default OpenVPN TCP port is defined!", panics: "no default OpenVPN TCP port is defined!",

View File

@@ -7,7 +7,7 @@ import (
) )
func getProtocol(selection settings.ServerSelection) (protocol string) { func getProtocol(selection settings.ServerSelection) (protocol string) {
if selection.VPN == vpn.OpenVPN && *selection.OpenVPN.TCP { if selection.VPN == vpn.OpenVPN && selection.OpenVPN.Protocol == constants.TCP {
return constants.TCP return constants.TCP
} }
return constants.UDP return constants.UDP
@@ -19,7 +19,7 @@ func filterByProtocol(selection settings.ServerSelection,
case vpn.Wireguard: case vpn.Wireguard:
return !serverUDP return !serverUDP
default: // OpenVPN default: // OpenVPN
wantTCP := *selection.OpenVPN.TCP wantTCP := selection.OpenVPN.Protocol == constants.TCP
wantUDP := !wantTCP wantUDP := !wantTCP
return (wantTCP && !serverTCP) || (wantUDP && !serverUDP) return (wantTCP && !serverTCP) || (wantUDP && !serverUDP)
} }

View File

@@ -23,7 +23,7 @@ func Test_getProtocol(t *testing.T) {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}, },
protocol: constants.UDP, protocol: constants.UDP,
@@ -32,7 +32,7 @@ func Test_getProtocol(t *testing.T) {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}, },
protocol: constants.TCP, protocol: constants.TCP,
@@ -84,7 +84,7 @@ func Test_filterByProtocol(t *testing.T) {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}, },
serverUDP: true, serverUDP: true,
@@ -94,7 +94,7 @@ func Test_filterByProtocol(t *testing.T) {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}, },
serverUDP: false, serverUDP: false,
@@ -104,7 +104,7 @@ func Test_filterByProtocol(t *testing.T) {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}, },
serverTCP: true, serverTCP: true,
@@ -114,7 +114,7 @@ func Test_filterByProtocol(t *testing.T) {
selection: settings.ServerSelection{ selection: settings.ServerSelection{
VPN: vpn.OpenVPN, VPN: vpn.OpenVPN,
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}, },
serverTCP: false, serverTCP: false,

View File

@@ -22,7 +22,6 @@ func Test_Provider_GetConnection(t *testing.T) {
const provider = providers.Wevpn const provider = providers.Wevpn
errTest := errors.New("test error") errTest := errors.New("test error")
boolPtr := func(b bool) *bool { return &b }
testCases := map[string]struct { testCases := map[string]struct {
filteredServers []models.Server filteredServers []models.Server
@@ -45,7 +44,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{
@@ -61,7 +60,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{

View File

@@ -23,7 +23,6 @@ func Test_Provider_GetConnection(t *testing.T) {
const provider = providers.Windscribe const provider = providers.Windscribe
errTest := errors.New("test error") errTest := errors.New("test error")
boolPtr := func(b bool) *bool { return &b }
testCases := map[string]struct { testCases := map[string]struct {
filteredServers []models.Server filteredServers []models.Server
@@ -46,7 +45,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(true), Protocol: constants.TCP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{
@@ -62,7 +61,7 @@ func Test_Provider_GetConnection(t *testing.T) {
}, },
selection: settings.ServerSelection{ selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{ OpenVPN: settings.OpenVPNSelection{
TCP: boolPtr(false), Protocol: constants.UDP,
}, },
}.WithDefaults(provider), }.WithDefaults(provider),
connection: models.Connection{ connection: models.Connection{

View File

@@ -5,6 +5,7 @@ import (
"strings" "strings"
"github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/constants/providers"
"github.com/qdm12/gluetun/internal/constants/vpn" "github.com/qdm12/gluetun/internal/constants/vpn"
"github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/models"
@@ -147,7 +148,7 @@ func filterByProtocol(selection settings.ServerSelection,
case vpn.Wireguard: case vpn.Wireguard:
return !serverUDP return !serverUDP
default: // OpenVPN default: // OpenVPN
wantTCP := *selection.OpenVPN.TCP wantTCP := selection.OpenVPN.Protocol == constants.TCP
wantUDP := !wantTCP wantUDP := !wantTCP
return (wantTCP && !serverTCP) || (wantUDP && !serverUDP) return (wantTCP && !serverTCP) || (wantUDP && !serverUDP)
} }

View File

@@ -22,7 +22,7 @@ func noServerFoundError(selection settings.ServerSelection) (err error) {
messageParts = append(messageParts, "VPN "+selection.VPN) messageParts = append(messageParts, "VPN "+selection.VPN)
protocol := constants.UDP protocol := constants.UDP
if *selection.OpenVPN.TCP { if selection.OpenVPN.Protocol == constants.TCP {
protocol = constants.TCP protocol = constants.TCP
} }
messageParts = append(messageParts, "protocol "+protocol) messageParts = append(messageParts, "protocol "+protocol)