diff --git a/util/util.go b/util/util.go index ec700ff..117e79d 100644 --- a/util/util.go +++ b/util/util.go @@ -62,13 +62,29 @@ func BuildClientConfig(client model.Client, server model.Server, setting model.G desiredHost := setting.EndpointAddress desiredPort := server.Interface.ListenPort - if strings.Contains(desiredHost, ":") { - split := strings.Split(desiredHost, ":") - desiredHost = split[0] - if n, err := strconv.Atoi(split[1]); err == nil { - desiredPort = n + is_ipv4 := strings.Contains(desiredHost, ".") + if is_ipv4 { + if strings.Contains(desiredHost, ":") { + split := strings.Split(desiredHost, ":") + desiredHost = split[0] + if n, err := strconv.Atoi(split[1]); err == nil { + desiredPort = n + } else { + log.Error("Endpoint appears to be incorrectly formatted: ", err) + } + } + } else { + if strings.Contains(desiredHost, "]") { + // IPv6 with port + split := strings.Split(desiredHost, "]") + desiredHost = split[0] + "]" + if n, err := strconv.Atoi(split[1][1:]); err == nil { + desiredPort = n + } else { + log.Error("Endpoint appears to be incorrectly formatted: ", err) + } } else { - log.Error("Endpoint appears to be incorrectly formatted: ", err) + desiredHost = "[" + desiredHost + "]" } } peerEndpoint := fmt.Sprintf("Endpoint = %s:%d\n", desiredHost, desiredPort)