00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <config.h>
00034
00035 #include "kmservertest.h"
00036
00037 #include <klocale.h>
00038 #include <kmessagebox.h>
00039 #include <kdebug.h>
00040 #include <kurl.h>
00041 #include <kapplication.h>
00042 #include <kio/scheduler.h>
00043 #include <kio/slave.h>
00044 #include <kio/job.h>
00045 #include <kio/global.h>
00046
00047
00048 KMServerTest::KMServerTest( const QString & protocol, const QString & host, int port )
00049 : QObject(),
00050 mProtocol( protocol ), mHost( host ),
00051 mSSL( false ), mJob( 0 ), mSlave( 0 ), mConnectionErrorCount( 0 )
00052 {
00053 KIO::Scheduler::connect(
00054 SIGNAL(slaveError(KIO::Slave *, int, const QString &)),
00055 this, SLOT(slotSlaveResult(KIO::Slave *, int, const QString &)));
00056
00057 if ( port == 993 || port == 995 || port == 465 )
00058 port = 0;
00059
00060 startOffSlave( port );
00061 }
00062
00063
00064 KMServerTest::~KMServerTest()
00065 {
00066 if (mJob) mJob->kill(TRUE);
00067 }
00068
00069
00070 KIO::MetaData KMServerTest::slaveConfig() const {
00071 KIO::MetaData md;
00072 md.insert( "nologin", "on" );
00073 return md;
00074 }
00075
00076 void KMServerTest::startOffSlave( int port ) {
00077 KURL url;
00078 url.setProtocol( mSSL ? mProtocol + 's' : mProtocol );
00079 url.setHost( mHost );
00080 if ( port )
00081 url.setPort( port );
00082
00083 mSlave = KIO::Scheduler::getConnectedSlave( url, slaveConfig() );
00084 if ( !mSlave ) {
00085 slotSlaveResult( 0, 1 );
00086 return;
00087 }
00088 connect( mSlave, SIGNAL(metaData(const KIO::MetaData&)),
00089 SLOT(slotMetaData(const KIO::MetaData&)) );
00090
00091 QByteArray packedArgs;
00092 QDataStream stream( packedArgs, IO_WriteOnly );
00093
00094 stream << (int) 'c';
00095
00096 mJob = KIO::special( url, packedArgs, false );
00097 KIO::Scheduler::assignJobToSlave( mSlave, mJob );
00098 connect( mJob, SIGNAL(result(KIO::Job*)), SLOT(slotResult(KIO::Job*)) );
00099 connect( mJob, SIGNAL(infoMessage(KIO::Job*,const QString&)),
00100 SLOT(slotData(KIO::Job*,const QString&)) );
00101 }
00102
00103
00104
00105 void KMServerTest::slotData(KIO::Job *, const QString &data)
00106 {
00107 if ( mSSL )
00108 mListSSL = QStringList::split(' ', data);
00109 else
00110 mListNormal = QStringList::split(' ', data);
00111 }
00112
00113
00114 void KMServerTest::slotMetaData( const KIO::MetaData & md ) {
00115 KIO::MetaData::const_iterator it = md.find( "PLAIN AUTH METHODS" );
00116 if ( it != md.end() ) {
00117 mAuthNone = it.data();
00118 kdDebug(5006) << "mAuthNone: " << mAuthNone << endl;
00119 }
00120 it = md.find( "TLS AUTH METHODS" );
00121 if ( it != md.end() ) {
00122 mAuthTLS = it.data();
00123 kdDebug(5006) << "mAuthTLS: " << mAuthTLS << endl;
00124 }
00125 it = md.find( "SSL AUTH METHODS" );
00126 if ( it != md.end() ) {
00127 mAuthSSL = it.data();
00128 kdDebug(5006) << "mAuthSSL: " << mAuthSSL << endl;
00129 }
00130 }
00131
00132
00133 void KMServerTest::slotResult(KIO::Job *job)
00134 {
00135 slotSlaveResult(mSlave, job->error());
00136 }
00137
00138
00139 void KMServerTest::slotSlaveResult(KIO::Slave *aSlave, int error,
00140 const QString &errorText)
00141 {
00142 if (aSlave != mSlave) return;
00143 if (error != KIO::ERR_SLAVE_DIED && mSlave)
00144 {
00145
00146 KIO::Scheduler::disconnectSlave(mSlave);
00147 mSlave = 0;
00148 }
00149 if ( error == KIO::ERR_COULD_NOT_CONNECT )
00150 {
00151
00152
00153 if ( mConnectionErrorCount == 0 )
00154 {
00155 error = 0;
00156 }
00157 ++mConnectionErrorCount;
00158 }
00159 if ( error )
00160 {
00161 mJob = 0;
00162 KMessageBox::error( kapp->activeWindow(),
00163 KIO::buildErrorString( error, errorText ),
00164 i18n("Error") );
00165 emit capabilities( mListNormal, mListSSL );
00166 emit capabilities( mListNormal, mListSSL, mAuthNone, mAuthSSL, mAuthTLS );
00167 return;
00168 }
00169 if (!mSSL) {
00170 mSSL = true;
00171 mListNormal.append("NORMAL-CONNECTION");
00172 startOffSlave();
00173 } else {
00174 mListSSL.append("SSL");
00175 mJob = 0;
00176
00177 emit capabilities( mListNormal, mListSSL );
00178 emit capabilities( mListNormal, mListSSL, mAuthNone, mAuthSSL, mAuthTLS );
00179 }
00180 }
00181
00182
00183 #include "kmservertest.moc"