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.
kasablanca/src/ftpthread.h

157 lines
4.5 KiB

/***************************************************************************
* 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 <tqthread.h>
#include <tqstringlist.h>
#include <tqvaluelist.h>
#include <tqvaluevector.h>
#include "eventhandler.h"
#include "kbfileinfo.h"
using namespace std;
class ftplib;
class TQObject;
class KbDirInfo;
typedef list<KbFileInfo*> filist;
typedef pair<off64_t, bool> xferpair;
typedef pair<filist, filist> dirpair;
/**
@author Magnus Kulke
*/
class FtpThread : public TQThread
{
public:
FtpThread();
~FtpThread();
static void CallbackLog(char *log, void *arg, bool out);
static int CallbackXfer(off64_t xfered, void *arg);
void SetEventReceiver(TQObject* eventreceiver);
void ClearQueue();
bool Connect(TQString host);
bool Login(TQString user, TQString pass);
bool Quit();
bool Pwd();
bool Chdir(TQString path);
bool Cdup();
bool Dir(bool force = false);
bool Scandir(KbDirInfo* dir);
bool Rm(TQString name);
bool Rmdir(TQString name);
bool Authtls();
bool Pasv(bool flag);
bool EncryptData(bool flag, bool force = false);
bool Transfer_Fxp(TQString src, TQString dst, FtpThread* dstftp, int srctls, int dsttls, off64_t resume = 0, int alt = 0);
bool Mkdir(TQString path);
bool Rename(TQString src, TQString dst);
bool Raw(TQString cmd);
bool Transfer_Get(TQString src, TQString dst, int tls, off64_t resume = 0);
bool Transfer_Put(TQString src, TQString dst, int tls, off64_t resume = 0);
bool Transfer_Changedir(TQString dir, int tls);
bool Transfer_Mkdir(TQString 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,
TQString 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, TQString path);
bool Delete_recurse(TQString name);
bool ConnectionLost();
private:
TQMutex* mp_mutex;
TQObject* mp_eventreceiver;
ftplib* mp_ftp;
TQString m_pwd;
bool m_dataencrypted;
KbDirInfo* mp_scandir;
filist m_dirlist, m_filelist;
dirpair m_dircontent;
TQValueList<task> m_tasklist;
TQStringList m_stringlist;
TQValueList<int> m_intlist;
TQValueList<off64_t> m_ulonglist;
TQValueList<FtpThread*> m_ftplist;
TQValueVector<dirpair> m_cache_vector;
TQStringList m_cache_list;
public:
TQString m_linebuffer;
};
#endif