45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package models
|
|
|
|
import (
|
|
"net"
|
|
)
|
|
|
|
type Connection struct {
|
|
// Type is the connection type and can be "openvpn" or "wireguard"
|
|
Type string `json:"type"`
|
|
// IP is the VPN server IP address.
|
|
IP net.IP `json:"ip"`
|
|
// Port is the VPN server port.
|
|
Port uint16 `json:"port"`
|
|
// Protocol can be "tcp" or "udp".
|
|
Protocol string `json:"protocol"`
|
|
// Hostname is used for IPVanish, IVPN, Privado
|
|
// and Windscribe for TLS verification.
|
|
Hostname string `json:"hostname"`
|
|
// ServerName is used for PIA for port forwarding
|
|
ServerName string `json:"server_name,omitempty"`
|
|
// PubKey is the public key of the VPN server,
|
|
// used only for Wireguard.
|
|
PubKey string `json:"pubkey"`
|
|
}
|
|
|
|
func (c *Connection) Equal(other Connection) bool {
|
|
return c.IP.Equal(other.IP) && c.Port == other.Port &&
|
|
c.Protocol == other.Protocol && c.Hostname == other.Hostname &&
|
|
c.ServerName == other.ServerName && c.PubKey == other.PubKey
|
|
}
|
|
|
|
// UpdateEmptyWith updates each field of the connection where the
|
|
// value is not set using the value given as arguments.
|
|
func (c *Connection) UpdateEmptyWith(ip net.IP, port uint16, protocol string) {
|
|
if c.IP == nil {
|
|
c.IP = ip
|
|
}
|
|
if c.Port == 0 {
|
|
c.Port = port
|
|
}
|
|
if c.Protocol == "" {
|
|
c.Protocol = protocol
|
|
}
|
|
}
|