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/QXmppOutgoingClient.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/QXmppOutgoingClient.cpp') diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp index f7fc8bc3..3f9bedde 100644 --- a/src/QXmppOutgoingClient.cpp +++ b/src/QXmppOutgoingClient.cpp @@ -32,6 +32,7 @@ #include "QXmppPacket.h" #include "QXmppPresence.h" #include "QXmppOutgoingClient.h" +#include "QXmppServiceInfo.h" #include "QXmppStreamFeatures.h" #include "QXmppNonSASLAuth.h" #include "QXmppSaslAuth.h" @@ -152,12 +153,31 @@ QXmppConfiguration& QXmppOutgoingClient::configuration() void QXmppOutgoingClient::connectToHost() { - info(QString("Connecting to: %1:%2").arg(configuration(). - host()).arg(configuration().port())); + const QString domain = configuration().domain(); + QString host = configuration().host(); + quint16 port = configuration().port(); + // if we do not have no explicit host was provided, look it up + if (host.isEmpty() || !port) + { + debug(QString("Looking up server for domain %1").arg(domain)); + QXmppServiceInfo serviceInfo = QXmppServiceInfo::fromName("_xmpp-client._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; + } + } + + // connect to server + info(QString("Connecting to %1:%2").arg(host, QString::number(port))); socket()->setProxy(configuration().networkProxy()); - socket()->connectToHost(configuration().host(), - configuration().port()); + socket()->connectToHost(host, port); } /// Returns true if the socket is connected and a session has been started. -- cgit v1.2.3