From fe6cea870d4f548d92d4d7b05ecfc6fc414ca13b Mon Sep 17 00:00:00 2001 From: genofire Date: Thu, 18 Jul 2019 01:27:11 +0200 Subject: [PATCH] use highest DNS-SRV entry for client connection --- client.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/client.go b/client.go index 5f134aa..acd2ac0 100644 --- a/client.go +++ b/client.go @@ -99,6 +99,20 @@ func NewClient(config Config, r *Router) (c *Client, err error) { // fallback to jid domain if config.Address == "" { 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)