author | kergoth <kergoth> | 2002-01-25 22:14:26 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2002-01-25 22:14:26 (UTC) |
commit | 15318cad33835e4e2dc620d033e43cd930676cdd (patch) (side-by-side diff) | |
tree | c2fa0399a2c47fda8e2cd0092c73a809d17f68eb /core/launcher/transferserver.h | |
download | opie-15318cad33835e4e2dc620d033e43cd930676cdd.zip opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.gz opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.bz2 |
Initial revision
Diffstat (limited to 'core/launcher/transferserver.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/launcher/transferserver.h | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/core/launcher/transferserver.h b/core/launcher/transferserver.h new file mode 100644 index 0000000..076e460 --- a/dev/null +++ b/core/launcher/transferserver.h @@ -0,0 +1,168 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of 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 <qserversocket.h> +#include <qsocket.h> +#include <qdir.h> +#include <qfile.h> +#include <qbuffer.h> + +class QFileInfo; +class QProcess; +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 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(); } + + void setSocket( int socket ); + +signals: + void completed(); + void failed(); + +private slots: + void connectionClosed(); + void connected(); + void bytesWritten( int bytes ); + void readyRead(); + void writeTargzBlock(); + void targzDone(); + + void gzipTarBlock(); + void tarExtractBlock(); + void gunzipDone(); + void extractTarDone(); + +private: + + unsigned long bytes_written; + Mode mode; + QFile file; + QBuffer buf; + QProcess *createTargzProc; + QProcess *retrieveTargzProc; + QProcess *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 checkUser( const QString& user ); + bool checkPassword( const QString& pw ); + 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; +}; + +bool accessAuthorized(QHostAddress peeraddress); |