fix multi-value fields

This commit is contained in:
octeep 2022-03-30 16:17:41 +01:00 committed by octeep
parent a521a861b7
commit 6f9e9d2f42
2 changed files with 27 additions and 20 deletions

View file

@ -14,7 +14,7 @@ import (
type DeviceConfig struct {
SelfSecretKey string
SelfEndpoint *netip.Addr
SelfEndpoint []netip.Addr
PeerPublicKey string
PeerEndpoint string
DNS []netip.Addr
@ -102,14 +102,14 @@ func encodeBase64ToHex(key string) (string, error) {
return hex.EncodeToString(decoded), nil
}
func parseCommaSeperatedNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) {
func parseNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) {
key := section.Key(keyName)
if key == nil {
return []netip.Addr{}, nil
}
ips := []netip.Addr{}
for _, str := range strings.Split(key.String(), ",") {
for _, str := range key.StringsWithShadows(",") {
str = strings.TrimSpace(str)
ip, err := netip.ParseAddr(str)
if err != nil {
@ -120,13 +120,15 @@ func parseCommaSeperatedNetIP(section *ini.Section, keyName string) ([]netip.Add
return ips, nil
}
func parseCIDRNetIP(section *ini.Section, keyName string) (*netip.Addr, error) {
prefixString, err := parseString(section, keyName)
if err != nil {
return nil, err
func parseCIDRNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) {
key := section.Key(keyName)
if key == nil {
return []netip.Addr{}, nil
}
prefix, err := netip.ParsePrefix(prefixString)
ips := []netip.Addr{}
for _, str := range key.StringsWithShadows(",") {
prefix, err := netip.ParsePrefix(str)
if err != nil {
return nil, err
}
@ -136,7 +138,9 @@ func parseCIDRNetIP(section *ini.Section, keyName string) (*netip.Addr, error) {
return nil, errors.New("interface address subnet should be /32 for IPv4 and /128 for IPv6")
}
return &addr, nil
ips = append(ips, addr)
}
return ips, nil
}
func resolveIP(ip string) (*net.IPAddr, error) {
@ -176,7 +180,7 @@ func ParseInterface(cfg *ini.File, device *DeviceConfig) error {
}
device.SelfSecretKey = privKey
dns, err := parseCommaSeperatedNetIP(section, "DNS")
dns, err := parseNetIP(section, "DNS")
if err != nil {
return err
}
@ -343,7 +347,10 @@ func ParseSocks5Config(cfg *ini.File) ([]Socks5Config, error) {
}
func ParseConfig(path string) (*Configuration, error) {
cfg, err := ini.InsensitiveLoad(path)
cfg, err := ini.LoadSources(ini.LoadOptions{
Insensitive: true,
AllowShadows: true,
}, path)
if err != nil {
return nil, err
}

View file

@ -12,7 +12,7 @@ import (
type DeviceSetting struct {
ipcRequest string
dns []netip.Addr
deviceAddr *netip.Addr
deviceAddr []netip.Addr
mtu int
}
@ -34,7 +34,7 @@ func StartWireguard(conf *DeviceConfig) (*netstack.Net, error) {
return nil, err
}
tun, tnet, err := netstack.CreateNetTUN([]netip.Addr{*(setting.deviceAddr)}, setting.dns, setting.mtu)
tun, tnet, err := netstack.CreateNetTUN(setting.deviceAddr, setting.dns, setting.mtu)
if err != nil {
return nil, err
}