• Skip to content
  • Skip to link menu
KDE 4.3 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

KIO

KIO::ForwardingSlaveBase

KIO::ForwardingSlaveBase Class Reference

This class should be used as a base for ioslaves acting as a forwarder to other ioslaves. More...

#include <forwardingslavebase.h>

Inheritance diagram for KIO::ForwardingSlaveBase:
QObject KIO::SlaveBase

List of all members.

Public Member Functions

virtual void chmod (const KUrl &url, int permissions)
virtual void copy (const KUrl &src, const KUrl &dest, int permissions, JobFlags flags)
virtual void del (const KUrl &url, bool isfile)
 ForwardingSlaveBase (const QByteArray &protocol, const QByteArray &poolSocket, const QByteArray &appSocket)
virtual void get (const KUrl &url)
virtual void listDir (const KUrl &url)
virtual void mimetype (const KUrl &url)
virtual void mkdir (const KUrl &url, int permissions)
virtual void put (const KUrl &url, int permissions, JobFlags flags)
virtual void rename (const KUrl &src, const KUrl &dest, JobFlags flags)
virtual void setModificationTime (const KUrl &url, const QDateTime &mtime)
virtual void stat (const KUrl &url)
virtual void symlink (const QString &target, const KUrl &dest, JobFlags flags)
virtual ~ForwardingSlaveBase ()

Protected Member Functions

virtual void prepareUDSEntry (KIO::UDSEntry &entry, bool listing=false) const
KUrl processedUrl () const
KUrl requestedUrl () const
virtual bool rewriteUrl (const KUrl &url, KUrl &newURL)=0

Detailed Description

This class should be used as a base for ioslaves acting as a forwarder to other ioslaves.

It has been designed to support only local filesystem like ioslaves.

If the resulting ioslave should be a simple proxy, you only need to implement the ForwardingSlaveBase::rewriteUrl() method.

For more advanced behavior, the classic ioslave methods should be reimplemented, because their default behavior in this class is to forward using the ForwardingSlaveBase::rewriteUrl() method.

A possible code snippet for an advanced stat() behavior would look like this in the child class:

     void ChildProtocol::stat(const KUrl &url)
     {
         bool is_special = false;

         // Process the URL to see if it should have
         // a special treatment

         if ( is_special )
         {
             // Handle the URL ourselves
             KIO::UDSEntry entry;
             // Fill entry with UDSAtom instances
             statEntry(entry);
             finished();
         }
         else
         {
             // Setup the ioslave internal state if
             // required by ChildProtocol::rewriteUrl()
             ForwardingSlaveBase::stat(url);
         }
     }

Of course in this case, you surely need to reimplement listDir() and get() accordingly.

If you want view on directories to be correctly refreshed when something changes on a forwarded URL, you'll need a companion kded module to emit the KDirNotify Files*() D-Bus signals.

This class was initially used for media:/ ioslave. This ioslave code and the MediaDirNotify class of its companion kded module can be a good source of inspiration.

See also:
ForwardingSlaveBase::rewriteUrl()
Author:
Kevin Ottens <ervin@ipsquad.net>

Definition at line 88 of file forwardingslavebase.h.


Constructor & Destructor Documentation

KIO::ForwardingSlaveBase::ForwardingSlaveBase ( const QByteArray &  protocol,
const QByteArray &  poolSocket,
const QByteArray &  appSocket 
)

Definition at line 74 of file forwardingslavebase.cpp.

KIO::ForwardingSlaveBase::~ForwardingSlaveBase (  )  [virtual]

Definition at line 83 of file forwardingslavebase.cpp.


Member Function Documentation

void KIO::ForwardingSlaveBase::chmod ( const KUrl &  url,
int  permissions 
) [virtual]

Change permissions on url The slave emits ERR_DOES_NOT_EXIST or ERR_CANNOT_CHMOD.

Reimplemented from KIO::SlaveBase.

Definition at line 285 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::copy ( const KUrl &  src,
const KUrl &  dest,
int  permissions,
JobFlags  flags 
) [virtual]

Copy src into dest.

If the slave returns an error ERR_UNSUPPORTED_ACTION, the job will ask for get + put instead.

Parameters:
src where to copy the file from (decoded)
dest where to copy the file to (decoded)
permissions may be -1. In this case no special permission mode is set.
flags,: We support Overwrite here

Don't forget to set the modification time of dest to be the modification time of src.

Reimplemented from KIO::SlaveBase.

Definition at line 313 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::del ( const KUrl &  url,
bool  isfile 
) [virtual]

Delete a file or directory.

Parameters:
url file/directory to delete
isfile if true, a file should be deleted. if false, a directory should be deleted.

Reimplemented from KIO::SlaveBase.

Definition at line 330 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::get ( const KUrl &  url  )  [virtual]

get, aka read.

Parameters:
url the full url for this request. Host, port and user of the URL can be assumed to be the same as in the last setHost() call. The slave should first emit mimeType(), and then emit the data using the data() method.

Reimplemented from KIO::SlaveBase.

Definition at line 169 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::listDir ( const KUrl &  url  )  [virtual]

Lists the contents of url.

The slave should emit ERR_CANNOT_ENTER_DIRECTORY if it doesn't exist, if we don't have enough permissions, or if it is a file It should also emit totalFiles as soon as it knows how many files it will list.

Reimplemented from KIO::SlaveBase.

Definition at line 227 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::mimetype ( const KUrl &  url  )  [virtual]

Finds mimetype for one file or directory.

This method should either emit 'mimeType' or it should send a block of data big enough to be able to determine the mimetype.

If the slave doesn't reimplement it, a get will be issued, i.e. the whole file will be downloaded before determining the mimetype on it - this is obviously not a good thing in most cases.

Reimplemented from KIO::SlaveBase.

Definition at line 213 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::mkdir ( const KUrl &  url,
int  permissions 
) [virtual]

Create a directory.

Parameters:
url path to the directory to create
permissions the permissions to set after creating the directory (-1 if no permissions to be set) The slave emits ERR_COULD_NOT_MKDIR if failure.

Reimplemented from KIO::SlaveBase.

Definition at line 241 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::prepareUDSEntry ( KIO::UDSEntry &  entry,
bool  listing = false 
) const [protected, virtual]

Allow to modify a UDSEntry before it's sent to the ioslave enpoint.

This is the default implementation working in most case, but sometimes you could make use of more forwarding black magic (for example dynamically transform any desktop file into a fake directory...)

Parameters:
entry the UDSEntry to post-process
listing indicate if this entry it created during a listDir operation

Definition at line 106 of file forwardingslavebase.cpp.

KUrl KIO::ForwardingSlaveBase::processedUrl (  )  const [protected]

Return the URL being processed by the ioslave Only access it inside prepareUDSEntry().

Definition at line 159 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::put ( const KUrl &  url,
int  permissions,
JobFlags  flags 
) [virtual]

put, i.e.

write data into a file.

Parameters:
url where to write the file
permissions may be -1. In this case no special permission mode is set.
flags,: We support Overwrite here. Hopefully, we're going to support Resume in the future, too. If the file indeed already exists, the slave should NOT apply the permissions change to it. The support for resuming using .part files is done by calling canResume().

IMPORTANT: Use the "modified" metadata in order to set the modification time of the file.

See also:
canResume()

Reimplemented from KIO::SlaveBase.

Definition at line 183 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::rename ( const KUrl &  src,
const KUrl &  dest,
JobFlags  flags 
) [virtual]

Rename oldname into newname.

If the slave returns an error ERR_UNSUPPORTED_ACTION, the job will ask for copy + del instead.

Important: the slave must implement the logic "if the destination already exists, error ERR_DIR_ALREADY_EXIST or ERR_FILE_ALREADY_EXIST". For performance reasons no stat is done in the destination before hand, the slave must do it.

Parameters:
src where to move the file from
dest where to move the file to
flags,: We support Overwrite here

Reimplemented from KIO::SlaveBase.

Definition at line 255 of file forwardingslavebase.cpp.

KUrl KIO::ForwardingSlaveBase::requestedUrl (  )  const [protected]

Return the URL asked to the ioslave Only access it inside prepareUDSEntry().

Definition at line 164 of file forwardingslavebase.cpp.

virtual bool KIO::ForwardingSlaveBase::rewriteUrl ( const KUrl &  url,
KUrl &  newURL 
) [protected, pure virtual]

Rewrite an url to its forwarded counterpart.

It should return true if everything was ok, and false otherwise.

If a problem is detected it's up to this method to trigger error() before returning. Returning false silently cancel the current slave operation.

Parameters:
url The URL as given during the slave call
newURL The new URL to forward the slave call to
Returns:
true if the given url could be correctly rewritten
void KIO::ForwardingSlaveBase::setModificationTime ( const KUrl &  url,
const QDateTime &  mtime 
) [virtual]

Sets the modification time for For instance this is what CopyJob uses to set mtime on dirs at the end of a copy.

It could also be used to set the mtime on any file, in theory. The usual implementation on unix is to call utime(path, &myutimbuf). The slave emits ERR_DOES_NOT_EXIST or ERR_CANNOT_SETTIME

Reimplemented from KIO::SlaveBase.

Definition at line 299 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::stat ( const KUrl &  url  )  [virtual]

Finds all details for one file or directory.

The information returned is the same as what listDir returns, but only for one file or directory. Call statEntry() after creating the appropriate UDSEntry for this url.

You can use the "details" metadata to optimize this method to only do as much work as needed by the application. By default details is 2 (all details wanted, including modification time, size, etc.), details==1 is used when deleting: we don't need all the information if it takes too much time, no need to follow symlinks etc. details==0 is used for very simple probing: we'll only get the answer "it's a file or a directory (or a symlink), or it doesn't exist".

Reimplemented from KIO::SlaveBase.

Definition at line 199 of file forwardingslavebase.cpp.

void KIO::ForwardingSlaveBase::symlink ( const QString &  target,
const KUrl &  dest,
JobFlags  flags 
) [virtual]

Creates a symbolic link named dest, pointing to target, which may be a relative or an absolute path.

Parameters:
target The string that will become the "target" of the link (can be relative)
dest The symlink to create.
flags,: We support Overwrite here

Reimplemented from KIO::SlaveBase.

Definition at line 270 of file forwardingslavebase.cpp.


The documentation for this class was generated from the following files:
  • forwardingslavebase.h
  • forwardingslavebase.cpp

KIO

Skip menu "KIO"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.6.1
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal