diff options
Diffstat (limited to 'src/ftpthread.h')
-rw-r--r-- | src/ftpthread.h | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/src/ftpthread.h b/src/ftpthread.h new file mode 100644 index 0000000..4372e82 --- /dev/null +++ b/src/ftpthread.h @@ -0,0 +1,156 @@ +/*************************************************************************** + * Copyright (C) 2004 by Magnus Kulke * + * mkulke@magnusmachine * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef FTPTHREAD_H +#define FTPTHREAD_H + +#define KB_THREAD_TIMEOUT 1000 + +#include <list> +#include <qthread.h> +#include <qstringlist.h> +#include <qvaluelist.h> +#include <qvaluevector.h> +#include "eventhandler.h" +#include "kbfileinfo.h" + +using namespace std; + +class ftplib; +class QObject; +class KbDirInfo; + +typedef list<KbFileInfo*> filist; +typedef pair<off64_t, bool> xferpair; +typedef pair<filist, filist> dirpair; + +/** +@author Magnus Kulke +*/ +class FtpThread : public QThread +{ +public: + FtpThread(); + ~FtpThread(); + static void CallbackLog(char *log, void *arg, bool out); + static int CallbackXfer(off64_t xfered, void *arg); + void SetEventReceiver(QObject* eventreceiver); + void ClearQueue(); + bool Connect(QString host); + bool Login(QString user, QString pass); + bool Quit(); + bool Pwd(); + bool Chdir(QString path); + bool Cdup(); + bool Dir(bool force = false); + bool Scandir(KbDirInfo* dir); + bool Rm(QString name); + bool Rmdir(QString name); + bool Authtls(); + bool Pasv(bool flag); + bool EncryptData(bool flag, bool force = false); + bool Transfer_Fxp(QString src, QString dst, FtpThread* dstftp, int srctls, int dsttls, off64_t resume = 0, int alt = 0); + bool Mkdir(QString path); + bool Rename(QString src, QString dst); + bool Raw(QString cmd); + bool Transfer_Get(QString src, QString dst, int tls, off64_t resume = 0); + bool Transfer_Put(QString src, QString dst, int tls, off64_t resume = 0); + bool Transfer_Changedir(QString dir, int tls); + bool Transfer_Mkdir(QString dir); + void Event(EventHandler::EventType type, void *data = NULL); + ftplib* Ftp() { return mp_ftp; }; + void FxpReportResult(bool result); + bool FxpDisableTls(); +private: + enum task + { + connect = 0, + negotiateencryption, + login, + quit, + pwd, + chdir, + cdup, + dir, + scandir, + rm, + rmdir, + authtls, + dataencryption, + mkdir, + rename, + raw, + transfer_changedir, + transfer_get, + transfer_mkdir, + transfer_put, + transfer_fxp + }; + void run(); + bool FormatFilelist(const char *filename, + QString current, + filist *filetable, + filist *dirtable + ); + void InitInternals(); + void Connect_thread(); + void Login_thread(); + void Pwd_thread(); + void Quit_thread(); + void Chdir_thread(); + void Cdup_thread(); + void Dir_thread(); + void Scandir_thread(); + void Delete_thread(); + void Rm_thread(); + void Rmdir_thread(); + void Authtls_thread(); + void Dataencryption_thread(); + void Mkdir_thread(); + void Rename_thread(); + void Raw_thread(); + void Transfer_Changedir_thread(); + void Transfer_Get_thread(); + void Transfer_Put_thread(); + void Transfer_Fxp_thread(); + void Transfer_Mkdir_thread(); + bool Scandir_recurse(KbDirInfo *dir, QString path); + bool Delete_recurse(QString name); + bool ConnectionLost(); +private: + QMutex* mp_mutex; + QObject* mp_eventreceiver; + ftplib* mp_ftp; + QString m_pwd; + bool m_dataencrypted; + KbDirInfo* mp_scandir; + filist m_dirlist, m_filelist; + dirpair m_dircontent; + QValueList<task> m_tasklist; + QStringList m_stringlist; + QValueList<int> m_intlist; + QValueList<off64_t> m_ulonglist; + QValueList<FtpThread*> m_ftplist; + QValueVector<dirpair> m_cache_vector; + QStringList m_cache_list; +public: + QString m_linebuffer; +}; + +#endif |