Adding tests and always use brackets in IPV6 addresses

Code also ensures that brackets are properly added when encoding an IPV6 address.
This commit is contained in:
Mickael Remond
2019-06-26 12:29:39 +02:00
committed by Mickaël Rémond
parent fde524ef98
commit 1c792e61c6
3 changed files with 70 additions and 8 deletions

32
network.go Normal file
View File

@@ -0,0 +1,32 @@
package xmpp
import (
"strconv"
"strings"
)
// ensurePort adds a port to an address if none are provided.
// It handles both IPV4 and IPV6 addresses.
func ensurePort(addr string, port int) string {
// This is an IPV6 address literal
if strings.HasPrefix(addr, "[") {
// if address has no port (behind his ipv6 address) - add default port
if strings.LastIndex(addr, ":") <= strings.LastIndex(addr, "]") {
return addr + ":" + strconv.Itoa(port)
}
return addr
}
// This is either an IPV6 address without bracket or an IPV4 address
switch strings.Count(addr, ":") {
case 0:
// This is IPV4 without port
return addr + ":" + strconv.Itoa(port)
case 1:
// This is IPV$ with port
return addr
default:
// This is IPV6 without port, as you need to use bracket with port in IPV6
return "[" + addr + "]:" + strconv.Itoa(port)
}
}