From 0bd16947755b7e45c525f758f593bce9c76a854ee47adb0d625d1723b6705153 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 16 Apr 2024 21:55:29 +0300 Subject: [PATCH] Ability to prefer legacy IPv4 --- cmd/client/main.go | 3 +++ cmd/server/main.go | 3 +++ internal/resolve.go | 27 ++++++++++++++++++--------- internal/version.go | 2 +- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/cmd/client/main.go b/cmd/client/main.go index 44e5f63..c54d41d 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -87,6 +87,8 @@ func main() { vadRaw := flag.Uint("vad", 0, "VAD threshold") passwd := flag.String("passwd", "", "protected room's password") muteToggle := flag.String("mute-toggle", "", "path to FIFO to toggle mute") + prefer4 := flag.Bool("4", false, + "Prefer obsolete legacy IPv4 address during name resolution") version := flag.Bool("version", false, "print version") warranty := flag.Bool("warranty", false, "print warranty information") flag.Parse() @@ -144,6 +146,7 @@ func main() { } } + vors.PreferIPv4 = *prefer4 ctrl, err := net.DialTCP("tcp", nil, vors.MustResolveTCP(*srvAddr)) if err != nil { log.Fatalln("dial server:", err) diff --git a/cmd/server/main.go b/cmd/server/main.go index 51dd019..4764ad1 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -309,6 +309,8 @@ func main() { bind := flag.String("bind", "[::1]:"+strconv.Itoa(vors.DefaultPort), "host:TCP/UDP port to listen on") kpFile := flag.String("key", "key", "path to keypair file") + prefer4 := flag.Bool("4", false, + "Prefer obsolete legacy IPv4 address during name resolution") version := flag.Bool("version", false, "print version") warranty := flag.Bool("warranty", false, "print warranty information") flag.Parse() @@ -331,6 +333,7 @@ func main() { Prv, Pub = data[:len(data)/2], data[len(data)/2:] } + vors.PreferIPv4 = *prefer4 lnTCP, err := net.ListenTCP("tcp", net.TCPAddrFromAddrPort(netip.MustParseAddrPort(*bind))) if err != nil { diff --git a/internal/resolve.go b/internal/resolve.go index ceffc33..d64156c 100644 --- a/internal/resolve.go +++ b/internal/resolve.go @@ -1,31 +1,40 @@ package internal -import "net" +import ( + "log" + "net" +) const DefaultPort = 12978 +var PreferIPv4 bool + func MustResolveTCP(s string) (addr *net.TCPAddr) { var err error - addr, err = net.ResolveTCPAddr("tcp6", s) - if err == nil { - return addr + if !PreferIPv4 { + addr, err = net.ResolveTCPAddr("tcp6", s) + if err == nil { + return addr + } } addr, err = net.ResolveTCPAddr("tcp4", s) if err != nil { - panic(err) + log.Fatal(err) } return } func MustResolveUDP(s string) (addr *net.UDPAddr) { var err error - addr, err = net.ResolveUDPAddr("udp6", s) - if err == nil { - return addr + if !PreferIPv4 { + addr, err = net.ResolveUDPAddr("udp6", s) + if err == nil { + return addr + } } addr, err = net.ResolveUDPAddr("udp4", s) if err != nil { - panic(err) + log.Fatal(err) } return } diff --git a/internal/version.go b/internal/version.go index ecc49fb..741fb40 100644 --- a/internal/version.go +++ b/internal/version.go @@ -3,7 +3,7 @@ package internal import "runtime" const ( - Version = "2.2.0" + Version = "2.3.0" Warranty = `Copyright (C) 2024 Sergey Matveev This program is free software: you can redistribute it and/or modify -- 2.48.1