1 /**************************************************************************** 2 ** $Id: qt/qftp.h 3.3.8 edited Jan 11 14:46 $ 3 ** 4 ** Definition of QFtp class. 5 ** 6 ** Created : 970521 7 ** 8 ** Copyright (C) 1997-2007 Trolltech ASA. All rights reserved. 9 ** 10 ** This file is part of the network module of the Qt GUI Toolkit. 11 ** 12 ** This file may be distributed under the terms of the Q Public License 13 ** as defined by Trolltech ASA of Norway and appearing in the file 14 ** LICENSE.QPL included in the packaging of this file. 15 ** 16 ** This file may be distributed and/or modified under the terms of the 17 ** GNU General Public License version 2 as published by the Free Software 18 ** Foundation and appearing in the file LICENSE.GPL included in the 19 ** packaging of this file. 20 ** 21 ** Licensees holding valid Qt Enterprise Edition licenses may use this 22 ** file in accordance with the Qt Commercial License Agreement provided 23 ** with the Software. 24 ** 25 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 26 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 27 ** 28 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for 29 ** information about Qt Commercial License Agreements. 30 ** See http://www.trolltech.com/qpl/ for QPL licensing information. 31 ** See http://www.trolltech.com/gpl/ for GPL licensing information. 32 ** 33 ** Contact info@trolltech.com if any conditions of this licensing are 34 ** not clear to you. 35 ** 36 **********************************************************************/ 37 38 #ifndef QFTP_H 39 #define QFTP_H 40 41 #ifndef QT_H 42 #include "qstring.h" // char*->QString conversion 43 #include "qurlinfo.h" 44 #include "qnetworkprotocol.h" 45 #endif // QT_H 46 47 #if !defined( QT_MODULE_NETWORK ) || defined( QT_LICENSE_PROFESSIONAL ) || defined( QT_INTERNAL_NETWORK ) 48 #define QM_EXPORT_FTP 49 #else 50 #define QM_EXPORT_FTP Q_EXPORT 51 #endif 52 53 #ifndef QT_NO_NETWORKPROTOCOL_FTP 54 55 56 class QSocket; 57 class QFtpCommand; 58 59 class QM_EXPORT_FTP QFtp : public QNetworkProtocol 60 { 61 Q_OBJECT 62 63 public: 64 QFtp(); // ### Qt 4.0: get rid of this overload 65 QFtp( QObject *parent, const char *name=0 ); 66 virtual ~QFtp(); 67 68 int supportedOperations() const; 69 70 // non-QNetworkProtocol functions: 71 enum State { 72 Unconnected, 73 HostLookup, 74 Connecting, 75 Connected, 76 LoggedIn, 77 Closing 78 }; 79 enum Error { 80 NoError, 81 UnknownError, 82 HostNotFound, 83 ConnectionRefused, 84 NotConnected 85 }; 86 enum Command { 87 None, 88 ConnectToHost, 89 Login, 90 Close, 91 List, 92 Cd, 93 Get, 94 Put, 95 Remove, 96 Mkdir, 97 Rmdir, 98 Rename, 99 RawCommand 100 }; 101 102 int connectToHost( const QString &host, Q_UINT16 port=21 ); 103 int login( const QString &user=QString::null, const QString &password=QString::null ); 104 int close(); 105 int list( const QString &dir=QString::null ); 106 int cd( const QString &dir ); 107 int get( const QString &file, QIODevice *dev=0 ); 108 int put( const QByteArray &data, const QString &file ); 109 int put( QIODevice *dev, const QString &file ); 110 int remove( const QString &file ); 111 int mkdir( const QString &dir ); 112 int rmdir( const QString &dir ); 113 int rename( const QString &oldname, const QString &newname ); 114 115 int rawCommand( const QString &command ); 116 117 Q_ULONG bytesAvailable() const; 118 Q_LONG readBlock( char *data, Q_ULONG maxlen ); 119 QByteArray readAll(); 120 121 int currentId() const; 122 QIODevice* currentDevice() const; 123 Command currentCommand() const; 124 bool hasPendingCommands() const; 125 void clearPendingCommands(); 126 127 State state() const; 128 129 Error error() const; 130 QString errorString() const; 131 132 public slots: 133 void abort(); 134 135 signals: 136 void stateChanged( int ); 137 void listInfo( const QUrlInfo& ); 138 void readyRead(); 139 void dataTransferProgress( int, int ); 140 void rawCommandReply( int, const QString& ); 141 142 void commandStarted( int ); 143 void commandFinished( int, bool ); 144 void done( bool ); 145 146 protected: 147 void parseDir( const QString &buffer, QUrlInfo &info ); // ### Qt 4.0: delete this? (not public API) 148 void operationListChildren( QNetworkOperation *op ); 149 void operationMkDir( QNetworkOperation *op ); 150 void operationRemove( QNetworkOperation *op ); 151 void operationRename( QNetworkOperation *op ); 152 void operationGet( QNetworkOperation *op ); 153 void operationPut( QNetworkOperation *op ); 154 155 // ### Qt 4.0: delete these 156 // unused variables: 157 QSocket *commandSocket, *dataSocket; 158 bool connectionReady, passiveMode; 159 int getTotalSize, getDoneSize; 160 bool startGetOnFail; 161 int putToWrite, putWritten; 162 bool errorInListChildren; 163 164 private: 165 void init(); 166 int addCommand( QFtpCommand * ); 167 168 bool checkConnection( QNetworkOperation *op ); 169 170 private slots: 171 void startNextCommand(); 172 void piFinished( const QString& ); 173 void piError( int, const QString& ); 174 void piConnectState( int ); 175 void piFtpReply( int, const QString& ); 176 177 private slots: 178 void npListInfo( const QUrlInfo & ); 179 void npDone( bool ); 180 void npStateChanged( int ); 181 void npDataTransferProgress( int, int ); 182 void npReadyRead(); 183 184 protected slots: 185 // ### Qt 4.0: delete these 186 void hostFound(); 187 void connected(); 188 void closed(); 189 void dataHostFound(); 190 void dataConnected(); 191 void dataClosed(); 192 void dataReadyRead(); 193 void dataBytesWritten( int nbytes ); 194 void error( int ); 195 }; 196 197 #endif // QT_NO_NETWORKPROTOCOL_FTP 198 199 #endif // QFTP_H 200