/********************************************************************** ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** ** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include #include #include #include #include class QFileInfo; namespace Opie { namespace Core { class OProcess; } } class TransferServer : public QServerSocket { Q_OBJECT public: TransferServer( Q_UINT16 port, QObject *parent = 0, const char* name = 0 ); virtual ~TransferServer(); void newConnection( int socket ); }; class SyncAuthentication : QObject { Q_OBJECT public: static int isAuthorized(QHostAddress peeraddress); static bool checkPassword(const QString& pw); static bool checkUser(const QString& user); static QString serverId(); static QString loginName(); static QString ownerName(); }; class ServerDTP : public QSocket { Q_OBJECT public: ServerDTP( QObject *parent = 0, const char* name = 0 ); ~ServerDTP(); enum Mode{ Idle = 0, SendFile, SendGzipFile, SendBuffer, RetrieveFile, RetrieveGzipFile, RetrieveBuffer }; void sendFile( const QString fn ); void sendFile( const QString fn, const QHostAddress& host, Q_UINT16 port ); void sendGzipFile( const QString &fn, const QStringList &archiveTargets ); void sendGzipFile( const QString &fn, const QStringList &archiveTargets, const QHostAddress& host, Q_UINT16 port ); void sendByteArray( const QByteArray& array ); void sendByteArray( const QByteArray& array, const QHostAddress& host, Q_UINT16 port ); void retrieveFile( const QString fn ); void retrieveFile( const QString fn, const QHostAddress& host, Q_UINT16 port ); void retrieveGzipFile( const QString &fn ); void retrieveGzipFile( const QString &fn, const QHostAddress& host, Q_UINT16 port ); void retrieveByteArray(); void retrieveByteArray( const QHostAddress& host, Q_UINT16 port ); Mode dtpMode() { return mode; } QByteArray buffer() { return buf.buffer(); } QString fileName() const { return file.name(); } void setSocket( int socket ); signals: void completed(); void failed(); private slots: void connectionClosed(); void connected(); void bytesWritten( int bytes ); void readyRead(); void writeTargzBlock(Opie::Core::OProcess *, char *, int); void targzDone(); void gzipTarBlock(Opie::Core::OProcess *, char *, int); void tarExtractBlock(Opie::Core::OProcess *, char *, int); void gunzipDone(); void extractTarDone(); private: unsigned long bytes_written; Mode mode; QFile file; QBuffer buf; Opie::Core::OProcess *createTargzProc; Opie::Core::OProcess *retrieveTargzProc; Opie::Core::OProcess *gzipProc; }; class ServerSocket : public QServerSocket { Q_OBJECT public: ServerSocket( Q_UINT16 port, QObject *parent = 0, const char* name = 0 ) : QServerSocket( port, 1, parent, name ) {} void newConnection( int socket ) { emit newIncomming( socket ); } signals: void newIncomming( int socket ); }; class ServerPI : public QSocket { Q_OBJECT enum State { Connected, Wait_USER, Wait_PASS, Ready, Forbidden }; enum Transfer { SendFile = 0, RetrieveFile = 1, SendByteArray = 2, RetrieveByteArray = 3 }; public: ServerPI( int socket, QObject *parent = 0, const char* name = 0 ); virtual ~ServerPI(); protected slots: void read(); void send( const QString& msg ); void process( const QString& command ); void connectionClosed(); void dtpCompleted(); void dtpFailed(); void dtpError( int ); void newConnection( int socket ); protected: bool checkReadFile( const QString& file ); bool checkWriteFile( const QString& file ); bool parsePort( const QString& pw ); bool backupRestoreGzip( const QString &file, QStringList &targets ); bool backupRestoreGzip( const QString &file ); bool sendList( const QString& arg ); void sendFile( const QString& file ); void retrieveFile( const QString& file ); QString permissionString( QFileInfo *info ); QString fileListing( QFileInfo *info ); QString absFilePath( const QString& file ); void timerEvent( QTimerEvent *e ); private: State state; Q_UINT16 peerport; QHostAddress peeraddress; bool passiv; bool wait[4]; ServerDTP *dtp; ServerSocket *serversocket; QString waitfile; QDir directory; QByteArray waitarray; QString renameFrom; QString lastCommand; int waitsocket; };