summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/hashicorp/memberlist/util.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/memberlist/util.go')
-rw-r--r--vendor/github.com/hashicorp/memberlist/util.go42
1 files changed, 28 insertions, 14 deletions
diff --git a/vendor/github.com/hashicorp/memberlist/util.go b/vendor/github.com/hashicorp/memberlist/util.go
index a4f926e3a..e2381a698 100644
--- a/vendor/github.com/hashicorp/memberlist/util.go
+++ b/vendor/github.com/hashicorp/memberlist/util.go
@@ -217,20 +217,6 @@ func decodeCompoundMessage(buf []byte) (trunc int, parts [][]byte, err error) {
return
}
-// Given a string of the form "host", "host:port",
-// "ipv6::addr" or "[ipv6::address]:port",
-// return true if the string includes a port.
-func hasPort(s string) bool {
- last := strings.LastIndex(s, ":")
- if last == -1 {
- return false
- }
- if s[0] == '[' {
- return s[last-1] == ']'
- }
- return strings.Index(s, ":") == last
-}
-
// compressPayload takes an opaque input buffer, compresses it
// and wraps it in a compress{} message that is encoded.
func compressPayload(inp []byte) (*bytes.Buffer, error) {
@@ -294,3 +280,31 @@ func decompressBuffer(c *compress) ([]byte, error) {
func joinHostPort(host string, port uint16) string {
return net.JoinHostPort(host, strconv.Itoa(int(port)))
}
+
+// hasPort is given a string of the form "host", "host:port", "ipv6::address",
+// or "[ipv6::address]:port", and returns true if the string includes a port.
+func hasPort(s string) bool {
+ // IPv6 address in brackets.
+ if strings.LastIndex(s, "[") == 0 {
+ return strings.LastIndex(s, ":") > strings.LastIndex(s, "]")
+ }
+
+ // Otherwise the presence of a single colon determines if there's a port
+ // since IPv6 addresses outside of brackets (count > 1) can't have a
+ // port.
+ return strings.Count(s, ":") == 1
+}
+
+// ensurePort makes sure the given string has a port number on it, otherwise it
+// appends the given port as a default.
+func ensurePort(s string, port int) string {
+ if hasPort(s) {
+ return s
+ }
+
+ // If this is an IPv6 address, the join call will add another set of
+ // brackets, so we have to trim before we add the default port.
+ s = strings.Trim(s, "[]")
+ s = net.JoinHostPort(s, strconv.Itoa(port))
+ return s
+}