implement DNS SRV lookup

This commit is contained in:
Jesse Kuang 2019-01-09 13:52:43 +08:00
parent e543ad3fcd
commit 113d9c0420
2 changed files with 24 additions and 6 deletions

View File

@ -11,7 +11,7 @@ import (
"strings" "strings"
) )
var server = flag.String("server", "talk.google.com:443", "server") var server = flag.String("server", "", "server")
var username = flag.String("username", "", "username") var username = flag.String("username", "", "username")
var password = flag.String("password", "", "password") var password = flag.String("password", "", "password")
var status = flag.String("status", "xa", "status") var status = flag.String("status", "xa", "status")

28
xmpp.go
View File

@ -82,12 +82,30 @@ func connect(host, user, passwd string) (net.Conn, error) {
if strings.TrimSpace(host) == "" { if strings.TrimSpace(host) == "" {
a := strings.SplitN(user, "@", 2) a := strings.SplitN(user, "@", 2)
if len(a) == 2 { if len(a) == 2 {
addr = a[1] if cna, addrs, err := net.LookupSRV("xmpp-client", "tcp", a[1]); err == nil {
fmt.Printf("LookupSRV got: %s, %d SRVs\n", cna, len(addrs))
if len(addrs) > 0 {
// default to first record
addr = fmt.Sprintf("%s:%d", addrs[0].Target, addrs[0].Port)
defP := addrs[0].Priority
for _, adr := range addrs {
if adr.Priority < defP {
addr = fmt.Sprintf("%s:%d", adr.Target, adr.Port)
defP = adr.Priority
}
}
} else {
addr = a[1]
}
} else {
addr = a[1]
}
}
} else {
a := strings.SplitN(host, ":", 2)
if len(a) == 1 {
addr += ":5222"
} }
}
a := strings.SplitN(host, ":", 2)
if len(a) == 1 {
addr += ":5222"
} }
proxy := os.Getenv("HTTP_PROXY") proxy := os.Getenv("HTTP_PROXY")