You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/tdeio/tdeio/slaveinterface.h

291 lines
8.0 KiB

/* This file is part of the KDE project
Copyright (C) 2000 David Faure <faure@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef __tdeio_slaveinterface_h
#define __tdeio_slaveinterface_h
#include <unistd.h>
#include <sys/types.h>
#include <tqobject.h>
#include <kurl.h>
#include <tdeio/global.h>
#include <tdeio/authinfo.h>
#include <kdatastream.h>
namespace TDEIO {
class Connection;
// better there is one ...
class SlaveInterfacePrivate;
// Definition of enum Command has been moved to global.h
/**
* Identifiers for TDEIO informational messages.
*/
enum Info {
INF_TOTAL_SIZE = 10,
INF_PROCESSED_SIZE = 11,
INF_SPEED,
INF_REDIRECTION = 20,
INF_MIME_TYPE = 21,
INF_ERROR_PAGE = 22,
INF_WARNING = 23,
INF_GETTING_FILE, // Deprecated
INF_NEED_PASSWD = 25,
INF_INFOMESSAGE,
INF_META_DATA,
INF_NETWORK_STATUS,
INF_MESSAGEBOX,
INF_LOCALURL
// add new ones here once a release is done, to avoid breaking binary compatibility
};
/**
* Identifiers for TDEIO data messages.
*/
enum Message {
MSG_DATA = 100,
MSG_DATA_REQ,
MSG_ERROR,
MSG_CONNECTED,
MSG_FINISHED,
MSG_STAT_ENTRY,
MSG_LIST_ENTRIES,
MSG_RENAMED, // unused
MSG_RESUME,
MSG_SLAVE_STATUS,
MSG_SLAVE_ACK,
MSG_NET_REQUEST,
MSG_NET_DROP,
MSG_NEED_SUBURL_DATA,
MSG_CANRESUME,
MSG_AUTH_KEY, // deprecated.
MSG_DEL_AUTH_KEY // deprecated.
// add new ones here once a release is done, to avoid breaking binary compatibility
};
/**
* There are two classes that specifies the protocol between application
* (TDEIO::Job) and tdeioslave. SlaveInterface is the class to use on the application
* end, SlaveBase is the one to use on the slave end.
*
* A call to foo() results in a call to slotFoo() on the other end.
*/
class TDEIO_EXPORT SlaveInterface : public TQObject
{
Q_OBJECT
public:
SlaveInterface( Connection *connection );
virtual ~SlaveInterface();
void setConnection( Connection* connection ) { m_pConnection = connection; }
Connection *connection() const { return m_pConnection; }
void setProgressId( int id ) { m_progressId = id; }
int progressId() const { return m_progressId; }
/** Send our answer to the MSG_RESUME (canResume) request
* (to tell the "put" job whether to resume or not)
*/
void sendResumeAnswer( bool resume );
void setOffset( TDEIO::filesize_t offset );
TDEIO::filesize_t offset() const;
signals:
///////////
// Messages sent by the slave
///////////
void data( const TQByteArray & );
void dataReq( );
void error( int , const TQString & );
void connected();
void finished();
void slaveStatus(pid_t, const TQCString &, const TQString &, bool);
void listEntries( const TDEIO::UDSEntryList& );
void statEntry( const TDEIO::UDSEntry& );
void needSubURLData();
void needProgressId();
void canResume( TDEIO::filesize_t ) ;
///////////
// Info sent by the slave
//////////
void metaData( const TDEIO::MetaData & );
void totalSize( TDEIO::filesize_t ) ;
void processedSize( TDEIO::filesize_t ) ;
void redirection( const KURL& ) ;
void localURL( const KURL&, bool ) ;
void speed( unsigned long ) ;
void errorPage() ;
void mimeType( const TQString & ) ;
void warning( const TQString & ) ;
void infoMessage( const TQString & ) ;
void connectFinished();
/**
* @deprecated. Obsolete as of 3.1. Replaced by kpassword, a kded module.
*/
void authorizationKey( const TQCString&, const TQCString&, bool );
/**
* @deprecated. Obsolete as of 3.1. Replaced by kpassword, a kded module.
*/
void delAuthorization( const TQCString& grpkey );
protected:
/////////////////
// Dispatching
////////////////
virtual bool dispatch();
virtual bool dispatch( int _cmd, const TQByteArray &data );
/**
* Prompt the user for authrization info (login & password).
*
* Use this function to request authorization info from the
* the end user. For example to open an empty password dialog
* using default values:
*
* \code
* TDEIO::AuthInfo authInfo;
* bool result = openPassDlg( authInfo );
* if ( result )
* {
* printf( "Username: %s", result.username.latin1() );
* printf( "Username: %s", result.username.latin1() );
* }
* \endcode
*
* You can also pre-set some values like the username before hand
* if it is known as well as the comment and caption to be displayed:
*
* \code
* authInfo.comment= "Enter username and password to access acmeone";
* authInfo.caption= "Acme Password Dialog";
* authInfo.username= "Wily E. kaiody";
* bool result = openPassDlg( authInfo );
* if ( result )
* {
* printf( "Username: %s", result.username.latin1() );
* printf( "Username: %s", result.username.latin1() );
* }
* \endcode
*
* NOTE: A call to this function can also fail and result
* in a return value of @p false, if the UIServer could not
* be started for whatever reason.
*
* @param info See AuthInfo.
* @return true if user clicks on "OK", false otherwsie.
*/
void openPassDlg( TDEIO::AuthInfo& info );
/**
* @deprecated. Use openPassDlg( AuthInfo& ) instead.
*/
void openPassDlg( const TQString& prompt, const TQString& user,
const TQString& caption, const TQString& comment,
const TQString& label, bool readOnly ) KDE_DEPRECATED;
/**
* @deprecated. Use openPassDlg( AuthInfo& ) instead.
*/
void openPassDlg( const TQString& prompt, const TQString& user, bool readOnly ) KDE_DEPRECATED;
void messageBox( int type, const TQString &text, const TQString &caption,
const TQString &buttonYes, const TQString &buttonNo );
/**
* @since 3.3
*/
void messageBox( int type, const TQString &text, const TQString &caption,
const TQString &buttonYes, const TQString &buttonNo, const TQString &dontAskAgainName );
// I need to identify the slaves
void requestNetwork( const TQString &, const TQString &);
void dropNetwork( const TQString &, const TQString &);
/**
* @internal
* KDE 4.0: Remove
*/
static void sigpipe_handler(int);
protected slots:
void calcSpeed();
protected:
Connection * m_pConnection;
private:
int m_progressId;
protected:
virtual void virtual_hook( int id, void* data );
private:
SlaveInterfacePrivate *d;
};
}
inline TQDataStream &operator >>(TQDataStream &s, TDEIO::UDSAtom &a )
{
TQ_INT32 l;
s >> a.m_uds;
if ( a.m_uds & TDEIO::UDS_LONG ) {
s >> l;
a.m_long = l;
a.m_str = TQString::null;
} else if ( a.m_uds & TDEIO::UDS_STRING ) {
s >> a.m_str;
a.m_long = 0;
} else {} // DIE!
// assert( 0 );
return s;
}
inline TQDataStream &operator <<(TQDataStream &s, const TDEIO::UDSAtom &a )
{
s << a.m_uds;
if ( a.m_uds & TDEIO::UDS_LONG )
s << (TQ_INT32) a.m_long;
else if ( a.m_uds & TDEIO::UDS_STRING )
s << a.m_str;
else {} // DIE!
// assert( 0 );
return s;
}
TDEIO_EXPORT TQDataStream &operator <<(TQDataStream &s, const TDEIO::UDSEntry &e );
TDEIO_EXPORT TQDataStream &operator >>(TQDataStream &s, TDEIO::UDSEntry &e );
#endif