use highest DNS-SRV entry for client connection

This commit is contained in:
genofire 2019-07-18 01:27:11 +02:00 committed by Mickaël Rémond
parent 323de704f6
commit fe6cea870d

View File

@ -99,6 +99,20 @@ func NewClient(config Config, r *Router) (c *Client, err error) {
// fallback to jid domain // fallback to jid domain
if config.Address == "" { if config.Address == "" {
config.Address = config.parsedJid.Domain config.Address = config.parsedJid.Domain
// fetch srv DNS-Entries
_, srvEntries, err := net.LookupSRV("xmpp-client", "tcp", config.parsedJid.Domain)
if err == nil && len(srvEntries) > 0 {
// if find some use the entry with heightest weight
bestSrv := srvEntries[0]
for _, srv := range srvEntries {
if srv.Priority <= bestSrv.Priority && srv.Weight >= bestSrv.Weight {
bestSrv = srv
config.Address = ensurePort(srv.Target, srv.Port)
}
}
}
} }
config.Address = ensurePort(config.Address, 5222) config.Address = ensurePort(config.Address, 5222)