summaryrefslogtreecommitdiffstats
path: root/kmail/kmservertest.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /kmail/kmservertest.cpp
downloadtdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz
tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmail/kmservertest.cpp')
-rw-r--r--kmail/kmservertest.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/kmail/kmservertest.cpp b/kmail/kmservertest.cpp
new file mode 100644
index 00000000..49fb0ad8
--- /dev/null
+++ b/kmail/kmservertest.cpp
@@ -0,0 +1,189 @@
+/* -*- c++ -*-
+ kmservertest.cpp
+
+ This file is part of KMail, the KDE mail client.
+ Copyright (c) 2001-2002 Michael Haeckel <haeckel@kde.org>
+ Copyright (c) 2003 Marc Mutz <mutz@kde.org>
+
+ KMail is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License, version 2, as
+ published by the Free Software Foundation.
+
+ KMail is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of this program with any edition of
+ the Qt library by Trolltech AS, Norway (or with modified versions
+ of Qt that use the same license as Qt), and distribute linked
+ combinations including the two. You must obey the GNU General
+ Public License in all respects for all of the code used other than
+ Qt. If you modify this file, you may extend this exception to
+ your version of the file, but you are not obligated to do so. If
+ you do not wish to do so, delete this exception statement from
+ your version.
+*/
+
+#include <config.h>
+
+#include "kmservertest.h"
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <kurl.h>
+#include <kapplication.h>
+#include <kio/scheduler.h>
+#include <kio/slave.h>
+#include <kio/job.h>
+#include <kio/global.h>
+
+//-----------------------------------------------------------------------------
+KMServerTest::KMServerTest( const QString & protocol, const QString & host, int port )
+ : QObject(),
+ mProtocol( protocol ), mHost( host ),
+ mSSL( false ), mJob( 0 ), mSlave( 0 ), mConnectionErrorCount( 0 )
+{
+ KIO::Scheduler::connect(
+ SIGNAL(slaveError(KIO::Slave *, int, const QString &)),
+ this, SLOT(slotSlaveResult(KIO::Slave *, int, const QString &)));
+
+ if ( port == 993 || port == 995 || port == 465 )
+ port = 0;
+
+ startOffSlave( port );
+}
+
+//-----------------------------------------------------------------------------
+KMServerTest::~KMServerTest()
+{
+ if (mJob) mJob->kill(TRUE);
+}
+
+
+KIO::MetaData KMServerTest::slaveConfig() const {
+ KIO::MetaData md;
+ md.insert( "nologin", "on" );
+ return md;
+}
+
+void KMServerTest::startOffSlave( int port ) {
+ KURL url;
+ url.setProtocol( mSSL ? mProtocol + 's' : mProtocol );
+ url.setHost( mHost );
+ if ( port )
+ url.setPort( port );
+
+ mSlave = KIO::Scheduler::getConnectedSlave( url, slaveConfig() );
+ if ( !mSlave ) {
+ slotSlaveResult( 0, 1 );
+ return;
+ }
+ connect( mSlave, SIGNAL(metaData(const KIO::MetaData&)),
+ SLOT(slotMetaData(const KIO::MetaData&)) );
+
+ QByteArray packedArgs;
+ QDataStream stream( packedArgs, IO_WriteOnly );
+
+ stream << (int) 'c';
+
+ mJob = KIO::special( url, packedArgs, false );
+ KIO::Scheduler::assignJobToSlave( mSlave, mJob );
+ connect( mJob, SIGNAL(result(KIO::Job*)), SLOT(slotResult(KIO::Job*)) );
+ connect( mJob, SIGNAL(infoMessage(KIO::Job*,const QString&)),
+ SLOT(slotData(KIO::Job*,const QString&)) );
+}
+
+
+//-----------------------------------------------------------------------------
+void KMServerTest::slotData(KIO::Job *, const QString &data)
+{
+ if ( mSSL )
+ mListSSL = QStringList::split(' ', data);
+ else
+ mListNormal = QStringList::split(' ', data);
+}
+
+
+void KMServerTest::slotMetaData( const KIO::MetaData & md ) {
+ KIO::MetaData::const_iterator it = md.find( "PLAIN AUTH METHODS" );
+ if ( it != md.end() ) {
+ mAuthNone = it.data();
+ kdDebug(5006) << "mAuthNone: " << mAuthNone << endl;
+ }
+ it = md.find( "TLS AUTH METHODS" );
+ if ( it != md.end() ) {
+ mAuthTLS = it.data();
+ kdDebug(5006) << "mAuthTLS: " << mAuthTLS << endl;
+ }
+ it = md.find( "SSL AUTH METHODS" );
+ if ( it != md.end() ) {
+ mAuthSSL = it.data();
+ kdDebug(5006) << "mAuthSSL: " << mAuthSSL << endl;
+ }
+}
+
+//-----------------------------------------------------------------------------
+void KMServerTest::slotResult(KIO::Job *job)
+{
+ slotSlaveResult(mSlave, job->error());
+}
+
+//-----------------------------------------------------------------------------
+void KMServerTest::slotSlaveResult(KIO::Slave *aSlave, int error,
+ const QString &errorText)
+{
+ if (aSlave != mSlave) return;
+ if ( mSSL && error == 0 ) {
+ // add a dummy entry to the list of SSL capabilities so that the receiver
+ // of the capabilities signal can use mListSSL.isEmpty() in order to find
+ // out whether SSL is supported
+ mListSSL.append("SSL");
+ }
+
+ if (error != KIO::ERR_SLAVE_DIED && mSlave)
+ {
+ // disconnect slave after every connect
+ KIO::Scheduler::disconnectSlave(mSlave);
+ mSlave = 0;
+ }
+ if ( error == KIO::ERR_COULD_NOT_CONNECT )
+ {
+ // if one of the two connection tests fails we ignore the error
+ // if both fail the host is probably not correct so we display the error
+ if ( mConnectionErrorCount == 0 )
+ {
+ error = 0;
+ }
+ ++mConnectionErrorCount;
+ }
+ if ( error )
+ {
+ mJob = 0;
+ KMessageBox::error( kapp->activeWindow(),
+ KIO::buildErrorString( error, errorText ),
+ i18n("Error") );
+ emit capabilities( mListNormal, mListSSL );
+ emit capabilities( mListNormal, mListSSL, mAuthNone, mAuthSSL, mAuthTLS );
+ return;
+ }
+ if (!mSSL) {
+ mSSL = true;
+ mListNormal.append("NORMAL-CONNECTION");
+ startOffSlave();
+ } else {
+ mJob = 0;
+
+ emit capabilities( mListNormal, mListSSL );
+ emit capabilities( mListNormal, mListSSL, mAuthNone, mAuthSSL, mAuthTLS );
+ }
+}
+
+
+#include "kmservertest.moc"