From 317ab669fae2801c2ff8cb771690c408ab6112af Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Sun, 29 Aug 2010 15:47:37 +0000 Subject: if no explicit host/port are given, use DNS SRV lookup --- src/QXmppOutgoingServer.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/QXmppOutgoingServer.cpp') diff --git a/src/QXmppOutgoingServer.cpp b/src/QXmppOutgoingServer.cpp index c3790cd0..d88299d2 100644 --- a/src/QXmppOutgoingServer.cpp +++ b/src/QXmppOutgoingServer.cpp @@ -28,6 +28,7 @@ #include "QXmppConstants.h" #include "QXmppDialback.h" #include "QXmppOutgoingServer.h" +#include "QXmppServiceInfo.h" #include "QXmppStreamFeatures.h" #include "QXmppUtils.h" @@ -65,6 +66,32 @@ QXmppOutgoingServer::~QXmppOutgoingServer() delete d; } +void QXmppOutgoingServer::connectToHost() +{ + const QString domain = configuration().domain(); + QString host; + quint16 port; + + // lookup server for domain + debug(QString("Looking up server for domain %1").arg(domain)); + QXmppServiceInfo serviceInfo = QXmppServiceInfo::fromName("_xmpp-server._tcp." + domain); + if (!serviceInfo.records().isEmpty()) + { + // take the first returned record + host = serviceInfo.records().first().hostName(); + port = serviceInfo.records().first().port(); + } else { + // as a fallback, use domain as the host name + warning(QString("Lookup for domain %1 failed: %2").arg(domain, serviceInfo.errorString())); + host = domain; + port = 5269; + } + + // connect to server + info(QString("Connecting to %1:%2").arg(host, QString::number(port))); + socket()->connectToHost(host, port); +} + void QXmppOutgoingServer::handleStart() { QString data = QString("