Porting kio-slaves to GnomeVFS modules

nf nf2 at scheinwelt.at
Sun Dec 26 18:22:00 GMT 2004


On Thu, 2004-12-23 at 02:50, Thiago Macieira wrote:
> nf wrote:
> >One way of doing that would be to write a C++ wrapper on top of the
> >Gnome-VFS-module API which acts like the KIO::SlaveBase class.
> 
> As I understand it, Gnome-VFS is basically a table of function pointers. 
> KIO::SlaveBase is just that, though more complex.
> 
> You'll need to reimplement the SlaveBase class in order to receive input 
> from the Gnome-VFS master. However, bear in mind that you must respect 
> the usual C++ Binary Compatibility guidelines when doing so.

I think we can't use them "as is". So binary compatibility won't be
possible. The main reason is that io-slaves are designed to run async
only. Therefore they provide single methods for "get", "put" or
"readDir" and push back data with callbacks.

GVFS modules on the other hand have a synchronous API, similar to
traditional IO functions (Async usage is optional - AFAIK they run as
threads inside the GnomeVFS daemon in that case).

That means you have to split the "put" and "get" methods of io-slaves to
separate "open", "read/write" and "close" methods. Same thing for
reading directories. But a nice wrapper to be able to write modules in
C++ could still make porting easier.

Perhaps it should be written in "glibmm" C++, just like the C++ GnomeVFS
client API, which already exists: 
 
http://www.gtkmm.org/gnomemm2/reference/html/namespaceGnome_1_1Vfs.html

> 
> >2) Dependencies to KConfig of certain slaves to store configuration
> >data. (smb for instance).
> 
> See #5.
> 
> >3) Dependencies to Password storage via DCOP. But that's easier to
> > solve, because SlaveBase has a well defined API for that purpose.
> 
> And ioslaves should be prepared to the case where no storage is available.
> 
> >5) Metadata
> 
> Metadata and slave configuration are merged into one inside KIOSlaves. You 
> have two kinds of informations, both provided by the I/O master (i.e., 
> ioslaves do not read config files!):
> 
> - explicit metadata
> information that was explicitly set as metadata by the calling application
> - implicit configuration
> information read from config file <slavename>rc, composed of a merging of 
> hostnames and domain names. For instance, UA identifications are stored 
> in kio_httprc in such a way.
> 
> In any event, that information is sent by the calling application to the 
> ioslave.
> 
> >6) "Q"-code inside io-slaves:
> >
> >Because QT is split into QTCore and QTGui in Qt4 a dependency
> >of those modules to QtCore shouldn't be a problem. The GPL license also,
> >because the ported slaves link to Qt and Gnome-VFS, and not the other
> > way round...
> >
> >Alternatively KWIG could be used to mimic the "Q" stuff...
> 
> The KIOSlaves were designed to be run as out-of-process processes. 
> Therefore, they do not link to the application code and GPL restrictions 
> don't apply (IANAL).
> 
> That said, we may have to revisit that discussion later as SELinux becomes 
> more important and rules restricting specific applications should apply 
> to their network accesses as well, not to ioslaves (or, worse, 
> "kdeinit").
> 

Thanks for your comments!

> 
> Have you thought about the suggestion people made of unifying the backend 
> files first (bookmarks, etc.)

I'm not trying to discourage anyone from doing that. But personally i
think the "Let's standardize backend file-formats first" approach takes
too long, is too "protective" from attitude, and will be hindering
innovation in the future. You will need a common VFS codebase anyway. So
why not start "early" with exploring how to get there.

Regards,

Norbert






More information about the kde-core-devel mailing list