mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
kio: drop multi-get support
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
2f217c0823
commit
300458f720
11 changed files with 243 additions and 563 deletions
|
@ -423,7 +423,6 @@ install(
|
|||
KIO/ListJob
|
||||
KIO/MetaData
|
||||
KIO/MimetypeJob
|
||||
KIO/MultiGetJob
|
||||
KIO/NetAccess
|
||||
KIO/NetRC
|
||||
KIO/PreviewJob
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
#include "../../kio/jobclasses.h"
|
|
@ -49,8 +49,6 @@ Charsets string Charset(s) send in the "Accept-Charset:" HTTP Re
|
|||
|
||||
Languages string Language(s) send in the "Accept-Language:" HTTP Request Header.
|
||||
|
||||
request-id number Sequence number to identify requests in a MultiGet command.
|
||||
|
||||
no-auth bool Flag that indicates that no authentication (neither WWW nor proxy)
|
||||
attempts should be made.
|
||||
no-www-auth bool Flag that indicates that no HTTP WWW authentication attempts should
|
||||
|
|
|
@ -378,8 +378,6 @@ KIO_EXPORT QString KIO::unsupportedActionErrorString(const QString &protocol, in
|
|||
return i18n("Changing the ownership of files is not supported with protocol %1.", protocol);
|
||||
case CMD_SUBURL:
|
||||
return i18n("Using sub-URLs with %1 is not supported.", protocol);
|
||||
case CMD_MULTI_GET:
|
||||
return i18n("Multiple get is not supported with protocol %1.", protocol);
|
||||
case CMD_OPEN:
|
||||
return i18n("Opening files is not supported with protocol %1.", protocol);
|
||||
default:
|
||||
|
|
|
@ -163,14 +163,13 @@ namespace KIO
|
|||
CMD_MESSAGEBOXANSWER = 'S', // 83
|
||||
CMD_RESUMEANSWER = 'T', // 84
|
||||
CMD_CONFIG = 'U', // 85
|
||||
CMD_MULTI_GET = 'V', // 86
|
||||
CMD_SETLINKDEST = 'W', // 87
|
||||
CMD_OPEN = 'X', // 88
|
||||
CMD_CHOWN = 'Y', // 89
|
||||
CMD_READ = 'Z', // 90
|
||||
CMD_WRITE = 91,
|
||||
CMD_SEEK = 92,
|
||||
CMD_CLOSE = 93
|
||||
CMD_SETLINKDEST = 'V', // 86
|
||||
CMD_OPEN = 'W', // 87
|
||||
CMD_CHOWN = 'X', // 88
|
||||
CMD_READ = 'Y', // 89
|
||||
CMD_WRITE = 'Z',
|
||||
CMD_SEEK = 91,
|
||||
CMD_CLOSE = 92
|
||||
// Add new ones here once a release is done, to avoid breaking binary compatibility.
|
||||
// Note that protocol-specific commands shouldn't be added here, but should use special.
|
||||
};
|
||||
|
|
241
kio/kio/job.cpp
241
kio/kio/job.cpp
|
@ -582,12 +582,6 @@ void SimpleJob::slotMetaData( const KIO::MetaData &_metaData )
|
|||
}
|
||||
}
|
||||
|
||||
void SimpleJob::storeSSLSessionFromJob(const KUrl &redirectionURL)
|
||||
{
|
||||
Q_UNUSED(redirectionURL);
|
||||
}
|
||||
|
||||
|
||||
//////////
|
||||
class KIO::MkdirJobPrivate: public SimpleJobPrivate
|
||||
{
|
||||
|
@ -893,7 +887,6 @@ void StatJob::slotMetaData( const KIO::MetaData &_metaData)
|
|||
{
|
||||
Q_D(StatJob);
|
||||
SimpleJob::slotMetaData(_metaData);
|
||||
storeSSLSessionFromJob(d->m_redirectionURL);
|
||||
}
|
||||
|
||||
StatJob *KIO::stat(const KUrl& url, JobFlags flags)
|
||||
|
@ -1224,7 +1217,6 @@ void TransferJob::slotMetaData( const KIO::MetaData &_metaData)
|
|||
{
|
||||
Q_D(TransferJob);
|
||||
SimpleJob::slotMetaData(_metaData);
|
||||
storeSSLSessionFromJob(d->m_redirectionURL);
|
||||
}
|
||||
|
||||
void TransferJobPrivate::slotCanResume( KIO::filesize_t offset )
|
||||
|
@ -2349,7 +2341,6 @@ void ListJob::slotMetaData( const KIO::MetaData &_metaData)
|
|||
{
|
||||
Q_D(ListJob);
|
||||
SimpleJob::slotMetaData(_metaData);
|
||||
storeSSLSessionFromJob(d->m_redirectionURL);
|
||||
}
|
||||
|
||||
ListJob *KIO::listDir( const KUrl& url, JobFlags flags, bool includeHidden )
|
||||
|
@ -2397,237 +2388,7 @@ const KUrl& ListJob::redirectionUrl() const
|
|||
return d_func()->m_redirectionURL;
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
class KIO::MultiGetJobPrivate: public KIO::TransferJobPrivate
|
||||
{
|
||||
public:
|
||||
MultiGetJobPrivate(const KUrl& url)
|
||||
: TransferJobPrivate(url, 0, QByteArray(), QByteArray()),
|
||||
m_currentEntry( 0, KUrl(), MetaData() )
|
||||
{}
|
||||
struct GetRequest {
|
||||
GetRequest(long _id, const KUrl &_url, const MetaData &_metaData)
|
||||
: id(_id), url(_url), metaData(_metaData) { }
|
||||
long id;
|
||||
KUrl url;
|
||||
MetaData metaData;
|
||||
|
||||
inline bool operator==( const GetRequest& req ) const
|
||||
{ return req.id == id; }
|
||||
};
|
||||
typedef QList<GetRequest> RequestQueue;
|
||||
|
||||
RequestQueue m_waitQueue;
|
||||
RequestQueue m_activeQueue;
|
||||
GetRequest m_currentEntry;
|
||||
bool b_multiGetActive;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Called by the scheduler when a @p slave gets to
|
||||
* work on this job.
|
||||
* @param slave the slave that starts working on this job
|
||||
*/
|
||||
virtual void start(Slave *slave);
|
||||
|
||||
bool findCurrentEntry();
|
||||
void flushQueue(QList<GetRequest> &queue);
|
||||
|
||||
Q_DECLARE_PUBLIC(MultiGetJob)
|
||||
|
||||
static inline MultiGetJob *newJob(const KUrl &url)
|
||||
{
|
||||
MultiGetJob *job = new MultiGetJob(*new MultiGetJobPrivate(url));
|
||||
job->setUiDelegate(new JobUiDelegate);
|
||||
return job;
|
||||
}
|
||||
};
|
||||
|
||||
MultiGetJob::MultiGetJob(MultiGetJobPrivate &dd)
|
||||
: TransferJob(dd)
|
||||
{
|
||||
}
|
||||
|
||||
MultiGetJob::~MultiGetJob()
|
||||
{
|
||||
}
|
||||
|
||||
void MultiGetJob::get(long id, const KUrl &url, const MetaData &metaData)
|
||||
{
|
||||
Q_D(MultiGetJob);
|
||||
MultiGetJobPrivate::GetRequest entry(id, url, metaData);
|
||||
entry.metaData["request-id"] = QString::number(id);
|
||||
d->m_waitQueue.append(entry);
|
||||
}
|
||||
|
||||
void MultiGetJobPrivate::flushQueue(RequestQueue &queue)
|
||||
{
|
||||
// Use multi-get
|
||||
// Scan all jobs in m_waitQueue
|
||||
RequestQueue::iterator wqit = m_waitQueue.begin();
|
||||
const RequestQueue::iterator wqend = m_waitQueue.end();
|
||||
while ( wqit != wqend )
|
||||
{
|
||||
const GetRequest& entry = *wqit;
|
||||
if ((m_url.protocol() == entry.url.protocol()) &&
|
||||
(m_url.host() == entry.url.host()) &&
|
||||
(m_url.port() == entry.url.port()) &&
|
||||
(m_url.user() == entry.url.user()))
|
||||
{
|
||||
queue.append( entry );
|
||||
wqit = m_waitQueue.erase( wqit );
|
||||
}
|
||||
else
|
||||
{
|
||||
++wqit;
|
||||
}
|
||||
}
|
||||
// Send number of URLs, (URL, metadata)*
|
||||
KIO_ARGS << (qint32) queue.count();
|
||||
RequestQueue::const_iterator qit = queue.begin();
|
||||
const RequestQueue::const_iterator qend = queue.end();
|
||||
for( ; qit != qend; ++qit )
|
||||
{
|
||||
stream << (*qit).url << (*qit).metaData;
|
||||
}
|
||||
m_packedArgs = packedArgs;
|
||||
m_command = CMD_MULTI_GET;
|
||||
m_outgoingMetaData.clear();
|
||||
}
|
||||
|
||||
void MultiGetJobPrivate::start(Slave *slave)
|
||||
{
|
||||
// Add first job from m_waitQueue and add it to m_activeQueue
|
||||
GetRequest entry = m_waitQueue.takeFirst();
|
||||
m_activeQueue.append(entry);
|
||||
|
||||
m_url = entry.url;
|
||||
|
||||
if (!entry.url.protocol().startsWith(QLatin1String("http")))
|
||||
{
|
||||
// Use normal get
|
||||
KIO_ARGS << entry.url;
|
||||
m_packedArgs = packedArgs;
|
||||
m_outgoingMetaData = entry.metaData;
|
||||
m_command = CMD_GET;
|
||||
b_multiGetActive = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
flushQueue(m_activeQueue);
|
||||
b_multiGetActive = true;
|
||||
}
|
||||
|
||||
TransferJobPrivate::start(slave); // Anything else to do??
|
||||
}
|
||||
|
||||
bool MultiGetJobPrivate::findCurrentEntry()
|
||||
{
|
||||
if (b_multiGetActive)
|
||||
{
|
||||
long id = m_incomingMetaData["request-id"].toLong();
|
||||
RequestQueue::const_iterator qit = m_activeQueue.begin();
|
||||
const RequestQueue::const_iterator qend = m_activeQueue.end();
|
||||
for( ; qit != qend; ++qit )
|
||||
{
|
||||
if ((*qit).id == id)
|
||||
{
|
||||
m_currentEntry = *qit;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
m_currentEntry.id = 0;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_activeQueue.isEmpty() )
|
||||
return false;
|
||||
m_currentEntry = m_activeQueue.first();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void MultiGetJob::slotRedirection( const KUrl &url)
|
||||
{
|
||||
Q_D(MultiGetJob);
|
||||
if (!d->findCurrentEntry()) return; // Error
|
||||
if (!KAuthorized::authorizeUrlAction("redirect", d->m_url, url))
|
||||
{
|
||||
kWarning(7007) << "MultiGetJob: Redirection from " << d->m_currentEntry.url << " to " << url << " REJECTED!";
|
||||
return;
|
||||
}
|
||||
d->m_redirectionURL = url;
|
||||
get(d->m_currentEntry.id, d->m_redirectionURL, d->m_currentEntry.metaData); // Try again
|
||||
}
|
||||
|
||||
|
||||
void MultiGetJob::slotFinished()
|
||||
{
|
||||
Q_D(MultiGetJob);
|
||||
if (!d->findCurrentEntry()) return;
|
||||
if (d->m_redirectionURL.isEmpty())
|
||||
{
|
||||
// No redirection, tell the world that we are finished.
|
||||
emit result(d->m_currentEntry.id);
|
||||
}
|
||||
d->m_redirectionURL = KUrl();
|
||||
setError( 0 );
|
||||
d->m_incomingMetaData.clear();
|
||||
d->m_activeQueue.removeAll(d->m_currentEntry);
|
||||
if (d->m_activeQueue.count() == 0)
|
||||
{
|
||||
if (d->m_waitQueue.count() == 0)
|
||||
{
|
||||
// All done
|
||||
TransferJob::slotFinished();
|
||||
}
|
||||
else
|
||||
{
|
||||
// return slave to pool
|
||||
// fetch new slave for first entry in d->m_waitQueue and call start
|
||||
// again.
|
||||
d->slaveDone();
|
||||
|
||||
d->m_url = d->m_waitQueue.first().url;
|
||||
if ((d->m_extraFlags & JobPrivate::EF_KillCalled) == 0) {
|
||||
Scheduler::doJob(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MultiGetJob::slotData( const QByteArray &_data)
|
||||
{
|
||||
Q_D(MultiGetJob);
|
||||
if(d->m_redirectionURL.isEmpty() || !d->m_redirectionURL.isValid() || error())
|
||||
emit data(d->m_currentEntry.id, _data);
|
||||
}
|
||||
|
||||
void MultiGetJob::slotMimetype( const QString &_mimetype )
|
||||
{
|
||||
Q_D(MultiGetJob);
|
||||
if (d->b_multiGetActive)
|
||||
{
|
||||
MultiGetJobPrivate::RequestQueue newQueue;
|
||||
d->flushQueue(newQueue);
|
||||
if (!newQueue.isEmpty())
|
||||
{
|
||||
d->m_activeQueue += newQueue;
|
||||
d->m_slave->send( d->m_command, d->m_packedArgs );
|
||||
}
|
||||
}
|
||||
if (!d->findCurrentEntry()) return; // Error, unknown request!
|
||||
emit mimetype(d->m_currentEntry.id, _mimetype);
|
||||
}
|
||||
|
||||
MultiGetJob *KIO::multi_get(long id, const KUrl &url, const MetaData &metaData)
|
||||
{
|
||||
MultiGetJob * job = MultiGetJobPrivate::newJob(url);
|
||||
job->get(id, url, metaData);
|
||||
return job;
|
||||
}
|
||||
//
|
||||
|
||||
class KIO::SpecialJobPrivate: public TransferJobPrivate
|
||||
{
|
||||
|
|
|
@ -231,7 +231,7 @@ namespace KIO {
|
|||
* @param flags Can be HideProgressInfo, Overwrite and Resume here. WARNING:
|
||||
* Setting Resume means that the data will be appended to @p dest if @p dest exists.
|
||||
* @return the job handling the operation.
|
||||
* @see multi_get()
|
||||
* @see get()
|
||||
*/
|
||||
KIO_EXPORT TransferJob *put( const KUrl& url, int permissions,
|
||||
JobFlags flags = DefaultFlags );
|
||||
|
@ -261,18 +261,6 @@ namespace KIO {
|
|||
KIO_EXPORT StoredTransferJob *storedPut( const QByteArray& arr, const KUrl& url, int permissions,
|
||||
JobFlags flags = DefaultFlags );
|
||||
|
||||
/**
|
||||
* Creates a new multiple get job.
|
||||
*
|
||||
* @param id the id of the get operation
|
||||
* @param url the URL of the file
|
||||
* @param metaData the MetaData associated with the file
|
||||
*
|
||||
* @return the job handling the operation.
|
||||
* @see get()
|
||||
*/
|
||||
KIO_EXPORT MultiGetJob *multi_get( long id, const KUrl &url, const MetaData &metaData);
|
||||
|
||||
/**
|
||||
* Find mimetype for one file or directory.
|
||||
*
|
||||
|
|
|
@ -390,15 +390,6 @@ namespace KIO {
|
|||
virtual void slotMetaData( const KIO::MetaData &_metaData);
|
||||
|
||||
protected:
|
||||
/*
|
||||
* Allow jobs that inherit SimpleJob and are aware
|
||||
* of redirections to store the SSL session used.
|
||||
* Retrieval is handled by SimpleJob::start
|
||||
* @param m_redirectionURL Reference to redirection URL,
|
||||
* used instead of m_url if not empty
|
||||
*/
|
||||
void storeSSLSessionFromJob(const KUrl &m_redirectionURL);
|
||||
|
||||
/**
|
||||
* Creates a new simple job. You don't need to use this constructor,
|
||||
* unless you create a new job that inherits from SimpleJob.
|
||||
|
@ -695,65 +686,6 @@ namespace KIO {
|
|||
Q_DECLARE_PRIVATE(StoredTransferJob)
|
||||
};
|
||||
|
||||
class MultiGetJobPrivate;
|
||||
/**
|
||||
* The MultiGetJob is a TransferJob that allows you to get
|
||||
* several files from a single server. Don't create directly,
|
||||
* but use KIO::multi_get() instead.
|
||||
* @see KIO::multi_get()
|
||||
*/
|
||||
class KIO_EXPORT MultiGetJob : public TransferJob {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
virtual ~MultiGetJob();
|
||||
|
||||
/**
|
||||
* Get an additional file.
|
||||
*
|
||||
* @param id the id of the file
|
||||
* @param url the url of the file to get
|
||||
* @param metaData the meta data for this request
|
||||
*/
|
||||
void get(long id, const KUrl &url, const MetaData &metaData);
|
||||
|
||||
Q_SIGNALS:
|
||||
/**
|
||||
* Data from the slave has arrived.
|
||||
* @param id the id of the request
|
||||
* @param data data received from the slave.
|
||||
* End of data (EOD) has been reached if data.size() == 0
|
||||
*/
|
||||
void data( long id, const QByteArray &data);
|
||||
|
||||
/**
|
||||
* Mimetype determined
|
||||
* @param id the id of the request
|
||||
* @param type the mime type
|
||||
*/
|
||||
void mimetype( long id, const QString &type );
|
||||
|
||||
/**
|
||||
* File transfer completed.
|
||||
*
|
||||
* When all files have been processed, result(KJob *) gets
|
||||
* emitted.
|
||||
* @param id the id of the request
|
||||
*/
|
||||
void result( long id);
|
||||
|
||||
protected Q_SLOTS:
|
||||
virtual void slotRedirection( const KUrl &url);
|
||||
virtual void slotFinished();
|
||||
virtual void slotData( const QByteArray &data);
|
||||
virtual void slotMimetype( const QString &mimetype );
|
||||
|
||||
protected:
|
||||
MultiGetJob(MultiGetJobPrivate &dd);
|
||||
private:
|
||||
Q_DECLARE_PRIVATE(MultiGetJob)
|
||||
};
|
||||
|
||||
class MimetypeJobPrivate;
|
||||
/**
|
||||
* A MimetypeJob is a TransferJob that allows you to get
|
||||
|
|
|
@ -979,9 +979,6 @@ static bool mayReturnContent(int cmd, const QString& protocol)
|
|||
if (cmd == CMD_GET)
|
||||
return true;
|
||||
|
||||
if (cmd == CMD_MULTI_GET)
|
||||
return true;
|
||||
|
||||
if (cmd == CMD_SPECIAL && protocol.startsWith(QLatin1String("http"), Qt::CaseInsensitive))
|
||||
return true;
|
||||
|
||||
|
@ -1219,7 +1216,7 @@ Slave *SchedulerPrivate::heldSlaveForJob(SimpleJob *job)
|
|||
if (!slave && m_slaveOnHold) {
|
||||
// Make sure that the job wants to do a GET or a POST, and with no offset
|
||||
const int cmd = jobPriv->m_command;
|
||||
bool canJobReuse = (cmd == CMD_GET || cmd == CMD_MULTI_GET);
|
||||
bool canJobReuse = (cmd == CMD_GET);
|
||||
|
||||
if (KIO::TransferJob *tJob = qobject_cast<KIO::TransferJob *>(job)) {
|
||||
canJobReuse = ( canJobReuse || cmd == CMD_SPECIAL );
|
||||
|
|
|
@ -601,8 +601,7 @@ static bool isSubCommand(int cmd)
|
|||
(cmd == CMD_SUBURL) ||
|
||||
(cmd == CMD_SLAVE_STATUS) ||
|
||||
(cmd == CMD_SLAVE_CONNECT) ||
|
||||
(cmd == CMD_SLAVE_HOLD) ||
|
||||
(cmd == CMD_MULTI_GET));
|
||||
(cmd == CMD_SLAVE_HOLD));
|
||||
}
|
||||
|
||||
void SlaveBase::mimeType( const QString &_type)
|
||||
|
@ -820,8 +819,6 @@ void SlaveBase::chown(KUrl const &, const QString &, const QString &)
|
|||
{ error( ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(mProtocol, CMD_CHOWN)); }
|
||||
void SlaveBase::setSubUrl(KUrl const &)
|
||||
{ error( ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(mProtocol, CMD_SUBURL)); }
|
||||
void SlaveBase::multiGet(const QByteArray &)
|
||||
{ error( ERR_UNSUPPORTED_ACTION, unsupportedActionErrorString(mProtocol, CMD_MULTI_GET)); }
|
||||
|
||||
|
||||
void SlaveBase::slave_status()
|
||||
|
@ -1026,221 +1023,242 @@ void SlaveBase::dispatch( int command, const QByteArray &data )
|
|||
int i;
|
||||
|
||||
switch( command ) {
|
||||
case CMD_HOST: {
|
||||
QString passwd;
|
||||
QString host, user;
|
||||
quint16 port;
|
||||
stream >> host >> port >> user >> passwd;
|
||||
d->m_state = d->InsideMethod;
|
||||
setHost( host, port, user, passwd );
|
||||
d->verifyErrorFinishedNotCalled("setHost()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_CONNECT: {
|
||||
openConnection( );
|
||||
} break;
|
||||
case CMD_DISCONNECT: {
|
||||
closeConnection( );
|
||||
} break;
|
||||
case CMD_SLAVE_STATUS: {
|
||||
d->m_state = d->InsideMethod;
|
||||
slave_status();
|
||||
// TODO verify that the slave has called slaveStatus()?
|
||||
d->verifyErrorFinishedNotCalled("slave_status()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_SLAVE_CONNECT: {
|
||||
d->onHold = false;
|
||||
QString app_socket;
|
||||
QDataStream stream( data );
|
||||
stream >> app_socket;
|
||||
d->appConnection.send( MSG_SLAVE_ACK );
|
||||
disconnectSlave();
|
||||
d->isConnectedToApp = true;
|
||||
connectSlave(app_socket);
|
||||
} break;
|
||||
case CMD_SLAVE_HOLD: {
|
||||
KUrl url;
|
||||
QDataStream stream( data );
|
||||
stream >> url;
|
||||
d->onHoldUrl = url;
|
||||
d->onHold = true;
|
||||
disconnectSlave();
|
||||
d->isConnectedToApp = false;
|
||||
// Do not close connection!
|
||||
connectSlave(d->poolSocket);
|
||||
} break;
|
||||
case CMD_REPARSECONFIGURATION: {
|
||||
d->m_state = d->InsideMethod;
|
||||
reparseConfiguration();
|
||||
d->verifyErrorFinishedNotCalled("reparseConfiguration()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_CONFIG: {
|
||||
stream >> d->configData;
|
||||
d->rebuildConfig();
|
||||
case CMD_HOST: {
|
||||
QString passwd;
|
||||
QString host, user;
|
||||
quint16 port;
|
||||
stream >> host >> port >> user >> passwd;
|
||||
d->m_state = d->InsideMethod;
|
||||
setHost( host, port, user, passwd );
|
||||
d->verifyErrorFinishedNotCalled("setHost()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_CONNECT: {
|
||||
openConnection( );
|
||||
break;
|
||||
}
|
||||
case CMD_DISCONNECT: {
|
||||
closeConnection( );
|
||||
break;
|
||||
}
|
||||
case CMD_SLAVE_STATUS: {
|
||||
d->m_state = d->InsideMethod;
|
||||
slave_status();
|
||||
// TODO verify that the slave has called slaveStatus()?
|
||||
d->verifyErrorFinishedNotCalled("slave_status()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_SLAVE_CONNECT: {
|
||||
d->onHold = false;
|
||||
QString app_socket;
|
||||
QDataStream stream( data );
|
||||
stream >> app_socket;
|
||||
d->appConnection.send( MSG_SLAVE_ACK );
|
||||
disconnectSlave();
|
||||
d->isConnectedToApp = true;
|
||||
connectSlave(app_socket);
|
||||
break;
|
||||
}
|
||||
case CMD_SLAVE_HOLD: {
|
||||
KUrl url;
|
||||
QDataStream stream( data );
|
||||
stream >> url;
|
||||
d->onHoldUrl = url;
|
||||
d->onHold = true;
|
||||
disconnectSlave();
|
||||
d->isConnectedToApp = false;
|
||||
// Do not close connection!
|
||||
connectSlave(d->poolSocket);
|
||||
break;
|
||||
}
|
||||
case CMD_REPARSECONFIGURATION: {
|
||||
d->m_state = d->InsideMethod;
|
||||
reparseConfiguration();
|
||||
d->verifyErrorFinishedNotCalled("reparseConfiguration()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_CONFIG: {
|
||||
stream >> d->configData;
|
||||
d->rebuildConfig();
|
||||
#if 0 //TODO: decide what to do in KDE 4.1
|
||||
KSocks::setConfig(d->configGroup);
|
||||
KSocks::setConfig(d->configGroup);
|
||||
#endif
|
||||
delete d->remotefile;
|
||||
d->remotefile = 0;
|
||||
} break;
|
||||
case CMD_GET: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
get( url );
|
||||
d->verifyState("get()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_OPEN: {
|
||||
stream >> url >> i;
|
||||
QIODevice::OpenMode mode = QFlag(i);
|
||||
d->m_state = d->InsideMethod;
|
||||
open(url, mode); //krazy:exclude=syscalls
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_PUT: {
|
||||
int permissions;
|
||||
qint8 iOverwrite, iResume;
|
||||
stream >> url >> iOverwrite >> iResume >> permissions;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
if ( iResume != 0 ) flags |= Resume;
|
||||
delete d->remotefile;
|
||||
d->remotefile = 0;
|
||||
break;
|
||||
}
|
||||
case CMD_GET: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
get( url );
|
||||
d->verifyState("get()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_OPEN: {
|
||||
stream >> url >> i;
|
||||
QIODevice::OpenMode mode = QFlag(i);
|
||||
d->m_state = d->InsideMethod;
|
||||
open(url, mode); //krazy:exclude=syscalls
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_PUT: {
|
||||
int permissions;
|
||||
qint8 iOverwrite, iResume;
|
||||
stream >> url >> iOverwrite >> iResume >> permissions;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
if ( iResume != 0 ) flags |= Resume;
|
||||
|
||||
// Remember that we need to send canResume(), TransferJob is expecting
|
||||
// it. Well, in theory this shouldn't be done if resume is true.
|
||||
// (the resume bool is currently unused)
|
||||
d->needSendCanResume = true /* !resume */;
|
||||
// Remember that we need to send canResume(), TransferJob is expecting
|
||||
// it. Well, in theory this shouldn't be done if resume is true.
|
||||
// (the resume bool is currently unused)
|
||||
d->needSendCanResume = true /* !resume */;
|
||||
|
||||
d->m_state = d->InsideMethod;
|
||||
put( url, permissions, flags);
|
||||
d->verifyState("put()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_STAT: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
stat( url ); //krazy:exclude=syscalls
|
||||
d->verifyState("stat()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_MIMETYPE: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
mimetype( url );
|
||||
d->verifyState("mimetype()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_LISTDIR: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
listDir( url );
|
||||
d->verifyState("listDir()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_MKDIR: {
|
||||
stream >> url >> i;
|
||||
d->m_state = d->InsideMethod;
|
||||
mkdir( url, i ); //krazy:exclude=syscalls
|
||||
d->verifyState("mkdir()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_RENAME: {
|
||||
qint8 iOverwrite;
|
||||
KUrl url2;
|
||||
stream >> url >> url2 >> iOverwrite;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
d->m_state = d->InsideMethod;
|
||||
rename( url, url2, flags ); //krazy:exclude=syscalls
|
||||
d->verifyState("rename()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_SYMLINK: {
|
||||
qint8 iOverwrite;
|
||||
QString target;
|
||||
stream >> target >> url >> iOverwrite;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
d->m_state = d->InsideMethod;
|
||||
symlink( target, url, flags );
|
||||
d->verifyState("symlink()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_COPY: {
|
||||
int permissions;
|
||||
qint8 iOverwrite;
|
||||
KUrl url2;
|
||||
stream >> url >> url2 >> permissions >> iOverwrite;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
d->m_state = d->InsideMethod;
|
||||
copy( url, url2, permissions, flags );
|
||||
d->verifyState("copy()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_DEL: {
|
||||
qint8 isFile;
|
||||
stream >> url >> isFile;
|
||||
d->m_state = d->InsideMethod;
|
||||
del( url, isFile != 0);
|
||||
d->verifyState("del()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_CHMOD: {
|
||||
stream >> url >> i;
|
||||
d->m_state = d->InsideMethod;
|
||||
chmod( url, i);
|
||||
d->verifyState("chmod()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_CHOWN: {
|
||||
QString owner, group;
|
||||
stream >> url >> owner >> group;
|
||||
d->m_state = d->InsideMethod;
|
||||
chown(url, owner, group);
|
||||
d->verifyState("chown()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_SETMODIFICATIONTIME: {
|
||||
QDateTime dt;
|
||||
stream >> url >> dt;
|
||||
d->m_state = d->InsideMethod;
|
||||
setModificationTime(url, dt);
|
||||
d->verifyState("setModificationTime()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_SPECIAL: {
|
||||
d->m_state = d->InsideMethod;
|
||||
special( data );
|
||||
d->verifyState("special()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_META_DATA: {
|
||||
//kDebug(7019) << "(" << getpid() << ") Incoming meta-data...";
|
||||
stream >> mIncomingMetaData;
|
||||
d->rebuildConfig();
|
||||
} break;
|
||||
case CMD_SUBURL: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
setSubUrl(url);
|
||||
d->verifyErrorFinishedNotCalled("setSubUrl()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
case CMD_NONE: {
|
||||
kWarning(7019) << "Got unexpected CMD_NONE!";
|
||||
} break;
|
||||
case CMD_MULTI_GET: {
|
||||
d->m_state = d->InsideMethod;
|
||||
multiGet( data );
|
||||
d->verifyState("multiGet()");
|
||||
d->m_state = d->Idle;
|
||||
} break;
|
||||
default: {
|
||||
// Some command we don't understand.
|
||||
// Just ignore it, it may come from some future version of KDE.
|
||||
} break;
|
||||
d->m_state = d->InsideMethod;
|
||||
put( url, permissions, flags);
|
||||
d->verifyState("put()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_STAT: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
stat( url ); //krazy:exclude=syscalls
|
||||
d->verifyState("stat()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_MIMETYPE: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
mimetype( url );
|
||||
d->verifyState("mimetype()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_LISTDIR: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
listDir( url );
|
||||
d->verifyState("listDir()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_MKDIR: {
|
||||
stream >> url >> i;
|
||||
d->m_state = d->InsideMethod;
|
||||
mkdir( url, i ); //krazy:exclude=syscalls
|
||||
d->verifyState("mkdir()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_RENAME: {
|
||||
qint8 iOverwrite;
|
||||
KUrl url2;
|
||||
stream >> url >> url2 >> iOverwrite;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
d->m_state = d->InsideMethod;
|
||||
rename( url, url2, flags ); //krazy:exclude=syscalls
|
||||
d->verifyState("rename()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_SYMLINK: {
|
||||
qint8 iOverwrite;
|
||||
QString target;
|
||||
stream >> target >> url >> iOverwrite;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
d->m_state = d->InsideMethod;
|
||||
symlink( target, url, flags );
|
||||
d->verifyState("symlink()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_COPY: {
|
||||
int permissions;
|
||||
qint8 iOverwrite;
|
||||
KUrl url2;
|
||||
stream >> url >> url2 >> permissions >> iOverwrite;
|
||||
JobFlags flags;
|
||||
if ( iOverwrite != 0 ) flags |= Overwrite;
|
||||
d->m_state = d->InsideMethod;
|
||||
copy( url, url2, permissions, flags );
|
||||
d->verifyState("copy()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_DEL: {
|
||||
qint8 isFile;
|
||||
stream >> url >> isFile;
|
||||
d->m_state = d->InsideMethod;
|
||||
del( url, isFile != 0);
|
||||
d->verifyState("del()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_CHMOD: {
|
||||
stream >> url >> i;
|
||||
d->m_state = d->InsideMethod;
|
||||
chmod( url, i);
|
||||
d->verifyState("chmod()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_CHOWN: {
|
||||
QString owner, group;
|
||||
stream >> url >> owner >> group;
|
||||
d->m_state = d->InsideMethod;
|
||||
chown(url, owner, group);
|
||||
d->verifyState("chown()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_SETMODIFICATIONTIME: {
|
||||
QDateTime dt;
|
||||
stream >> url >> dt;
|
||||
d->m_state = d->InsideMethod;
|
||||
setModificationTime(url, dt);
|
||||
d->verifyState("setModificationTime()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_SPECIAL: {
|
||||
d->m_state = d->InsideMethod;
|
||||
special( data );
|
||||
d->verifyState("special()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_META_DATA: {
|
||||
//kDebug(7019) << "(" << getpid() << ") Incoming meta-data...";
|
||||
stream >> mIncomingMetaData;
|
||||
d->rebuildConfig();
|
||||
break;
|
||||
}
|
||||
case CMD_SUBURL: {
|
||||
stream >> url;
|
||||
d->m_state = d->InsideMethod;
|
||||
setSubUrl(url);
|
||||
d->verifyErrorFinishedNotCalled("setSubUrl()");
|
||||
d->m_state = d->Idle;
|
||||
break;
|
||||
}
|
||||
case CMD_NONE: {
|
||||
kWarning(7019) << "Got unexpected CMD_NONE!";
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
// Some command we don't understand.
|
||||
// Just ignore it, it may come from some future version of KDE.
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -562,15 +562,6 @@ public:
|
|||
*/
|
||||
virtual void special( const QByteArray & data );
|
||||
|
||||
/**
|
||||
* Used for multiple get. Currently only used foir HTTP pielining
|
||||
* support.
|
||||
*
|
||||
* @param data packed data; Contains number of URLs to fetch, and for
|
||||
* each URL the URL itself and its associated MetaData.
|
||||
*/
|
||||
virtual void multiGet( const QByteArray & data );
|
||||
|
||||
/**
|
||||
* Called to get the status of the slave. Slave should respond
|
||||
* by calling slaveStatus(...)
|
||||
|
|
Loading…
Add table
Reference in a new issue