@@ -30,24 +30,40 @@ func Parse(addr string, defaultPort int) (*net.TCPAddr, error) {
3030 // Convenience: set private address
3131 if strings .Contains (addr , "private" ) {
3232 private := GetPrivateOrDefault (Loopback )
33- addr = strings .Replace (addr , "private" , private .String (), 1 )
33+ if private .IP .To4 () == nil && strings .Contains (addr , ":" ) {
34+ addr = strings .Replace (addr , "private" , fmt .Sprintf ("[%v]" , private .String ()), 1 )
35+ } else {
36+ addr = strings .Replace (addr , "private" , private .String (), 1 )
37+ }
3438 }
3539
3640 // Convenience: set public address
3741 if strings .Contains (addr , "external" ) {
3842 external := GetExternalOrDefault (Loopback )
39- addr = strings .Replace (addr , "external" , external .String (), 1 )
43+ if external .IP .To4 () == nil && strings .Contains (addr , ":" ) {
44+ addr = strings .Replace (addr , "external" , fmt .Sprintf ("[%v]" , external .String ()), 1 )
45+ } else {
46+ addr = strings .Replace (addr , "external" , external .String (), 1 )
47+ }
4048 }
4149
4250 // Convenience: set public address
4351 if strings .Contains (addr , "public" ) {
4452 public := GetPublicOrDefault (Loopback )
45- addr = strings .Replace (addr , "public" , public .String (), 1 )
53+ if public .IP .To4 () == nil && strings .Contains (addr , ":" ) {
54+ addr = strings .Replace (addr , "public" , fmt .Sprintf ("[%v]" , public .String ()), 1 )
55+ } else {
56+ addr = strings .Replace (addr , "public" , public .String (), 1 )
57+ }
4658 }
4759
4860 // If we have only an IP address, use the default port
4961 if ip := net .ParseIP (addr ); ip != nil {
50- addr = fmt .Sprintf ("%s:%d" , ip , defaultPort )
62+ if ip != nil && ip .To4 () == nil {
63+ addr = fmt .Sprintf ("[%s]:%d" , ip , defaultPort )
64+ } else {
65+ addr = fmt .Sprintf ("%s:%d" , ip , defaultPort )
66+ }
5167 }
5268
5369 // Resolve the address
0 commit comments