From d2625220de85b072b73682f696c4b287bedd19c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Sat, 15 Oct 2016 18:52:11 +0200 Subject: Kopete - jabber: Allow SRV lookup for server+port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Slávek Banko --- kopete/protocols/jabber/jabberconnector.cpp | 35 ++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'kopete/protocols/jabber/jabberconnector.cpp') diff --git a/kopete/protocols/jabber/jabberconnector.cpp b/kopete/protocols/jabber/jabberconnector.cpp index 6d43d305..1a2febf2 100644 --- a/kopete/protocols/jabber/jabberconnector.cpp +++ b/kopete/protocols/jabber/jabberconnector.cpp @@ -30,32 +30,33 @@ JabberConnector::JabberConnector ( TQObject *parent, const char */*name*/ ) mErrorCode = KNetwork::TDESocketBase::NoError; mByteStream = new JabberByteStream ( this ); + mSrvResolver = new SrvResolver; connect ( mByteStream, TQT_SIGNAL ( connected () ), this, TQT_SLOT ( slotConnected () ) ); connect ( mByteStream, TQT_SIGNAL ( error ( int ) ), this, TQT_SLOT ( slotError ( int ) ) ); - + connect ( mSrvResolver, TQT_SIGNAL( resultsReady() ), this, TQT_SLOT( slotSrvLookup() ) ); } JabberConnector::~JabberConnector () { - delete mByteStream; - + delete mSrvResolver; } void JabberConnector::connectToServer ( const TQString &server ) { kdDebug ( JABBER_DEBUG_GLOBAL ) << k_funcinfo << "Initiating connection to " << server << endl; - /* - * FIXME: we should use a SRV lookup to determine the - * actual server to connect to. As this is currently - * not supported yet, we're using setOptHostPort(). - * For XMPP 1.0, we need to enable this! - */ - mErrorCode = KNetwork::TDESocketBase::NoError; + if( mHost.isEmpty() ) { + if( mSrvResolver->isBusy() ) { + mSrvResolver->stop(); + } + mSrvResolver->resolve(server, "xmpp-client", "tcp"); + return; + } + if ( !mByteStream->connect ( mHost, TQString::number ( mPort ) ) ) { // Houston, we have a problem @@ -86,6 +87,20 @@ void JabberConnector::slotError ( int code ) } +void JabberConnector::slotSrvLookup() +{ + if( mSrvResolver->failed() ) { + mErrorCode = KNetwork::TDESocketBase::LookupFailure; + emit error (); + return; + } + + if( !mByteStream->connect( mSrvResolver->resultAddress().toString(), TQString::number( mSrvResolver->resultPort() ))) { + mErrorCode = mByteStream->socket()->error (); + emit error (); + } +} + int JabberConnector::errorCode () { -- cgit v1.2.1