00001 #ifndef __IFTP_H
00002 #define __IFTP_H
00003
00004 #include "INet.h"
00005 #include "GDateTime.h"
00006
00007 #define IFTP_READ 0x0400
00008 #define IFTP_WRITE 0x0200
00009 #define IFTP_EXECUTE 0x0100
00010 #define IFTP_DIR 0x0800
00011
00012 #define IFTP_GRP_READ 0x0040
00013 #define IFTP_GRP_WRITE 0x0020
00014 #define IFTP_GRP_EXECUTE 0x0010
00015
00016 #define IFTP_GLOB_READ 0x0004
00017 #define IFTP_GLOB_WRITE 0x0002
00018 #define IFTP_GLOB_EXECUTE 0x0001
00019
00020 #define IFTP_ARCHIVE 0x1000
00021 #define IFTP_HIDDEN 0x2000
00022 #define IFTP_SYSTEM 0x4000
00023
00024 #define IFTP_SYM_LINK 0x8000
00025
00026
00027 #define OPT_LogOpen "LogOpen"
00028
00029
00030 #define M_CREATE_FOLDER (M_USER+300)
00031 #define M_DELETE (M_USER+301)
00032 #define M_RENAME (M_USER+302)
00033 #define M_PERMISSIONS (M_USER+303)
00034 #define M_RUN (M_USER+304)
00035 #define M_OPEN_AS_TEXT (M_USER+305)
00036 #define M_TRANSFER (M_USER+306)
00037 #define M_REFRESH (M_USER+307)
00038 #define M_UP (M_USER+308)
00039
00040
00041 enum FtpOpenStatus
00042 {
00043 FO_ConnectFailed,
00044 FO_LoginFailed,
00045 FO_Error,
00046 FO_Connected
00047 };
00048
00049 class IFtpDataPipe
00050 {
00051 public:
00052 virtual int WritePipe(GStream *c, char *Data, int Len, int Flags) = 0;
00053 virtual int ReadPipe(GStream *c, char *Data, int Len, int Flags) = 0;
00054 };
00055
00056 class IFtpEntry
00057 {
00058 public:
00059 int Attributes;
00060 int64 Size;
00061 char *Name;
00062 char *Path;
00063 char *User;
00064 char *Group;
00065 GDateTime Date;
00066
00067 IFtpEntry();
00068 IFtpEntry(char *Entry);
00069 IFtpEntry(IFtpEntry *Entry);
00070 virtual ~IFtpEntry();
00071
00072 bool IsDir() { return (Attributes & IFTP_DIR) != 0; }
00073 bool IsHidden() { return TestFlag(Attributes, IFTP_HIDDEN); }
00074 };
00075
00076 class IFileProtocol
00077 {
00078 public:
00079 virtual ~IFileProtocol() {}
00080
00081
00082 virtual bool IsForceActive() = 0;
00083 virtual void IsForceActive(bool i) = 0;
00084 virtual bool IsLongList() = 0;
00085 virtual void IsLongList(bool i) = 0;
00086 virtual bool IsShowHidden() = 0;
00087 virtual void IsShowHidden(bool i) = 0;
00088 virtual Progress *GetMeter() = 0;
00089 virtual void SetMeter(Progress *m) = 0;
00090 virtual bool GetAuthed() = 0;
00091
00092
00093 virtual GSocket *Handle() = 0;
00094
00095
00096 virtual FtpOpenStatus Open(GSocket *S, char *RemoteHost, int Port, char *User, char *Password) = 0;
00097 virtual bool Close() = 0;
00098 virtual bool IsOpen() = 0;
00099 virtual void Noop() = 0;
00100
00101
00102 virtual bool GetDir(char *Dir) = 0;
00103 virtual bool SetDir(char *Dir) = 0;
00104 virtual bool CreateDir(char *Dir) = 0;
00105 virtual bool DeleteDir(char *Dir) = 0;
00106 virtual bool ListDir(List<IFtpEntry> *Dir) = 0;
00107 virtual bool UpDir() = 0;
00108
00109
00110 virtual bool DeleteFile(char *Remote) = 0;
00111 virtual bool DownloadFile(char *Local, IFtpEntry *Remote, bool Binary = true) = 0;
00112 virtual bool UploadFile(char *Local, char *Remote, bool Binary = true) = 0;
00113 virtual bool RenameFile(char *From, char *To) = 0;
00114 virtual bool SetPerms(char *File, int Perms) = 0;
00115 virtual bool ResumeAt(int Pos) = 0;
00116 virtual void Abort() = 0;
00117 };
00118
00119 class IFtp : public IFileProtocol
00120 {
00121 class IFtpPrivate *d;
00122
00123
00124 GSocket *Socket;
00125
00126 int WriteLine(char *Msg = 0);
00127 int ReadLine(char *Msg = 0, bool Debug = false);
00128 bool TransferFile(char *Local, char *Remote, int64 RemoteSize, bool Upload, bool Binary);
00129
00130
00131 char Ip[64];
00132 int Port;
00133 bool PassiveMode;
00134 bool ForceActive;
00135 bool LongList;
00136 bool ShowHidden;
00137 IFtpDataPipe *Pipe;
00138 Progress *Meter;
00139 bool Authenticated;
00140
00141
00142 int RestorePos;
00143 bool AbortTransfer;
00144
00145 bool SetupData(bool Binary);
00146 bool ConnectData();
00147
00148 public:
00149
00150 IFtp(IFtpDataPipe *OptionalPipe = 0);
00151 virtual ~IFtp();
00152
00153
00154 bool IsForceActive() { return ForceActive; }
00155 void IsForceActive(bool i) { ForceActive = i; }
00156 bool IsLongList() { return LongList; }
00157 void IsLongList(bool i) { LongList = i; }
00158 bool IsShowHidden() { return ShowHidden; }
00159 void IsShowHidden(bool i) { ShowHidden = i; }
00160 Progress *GetMeter() { return Meter; }
00161 void SetMeter(Progress *m) { Meter = m; }
00162 bool GetAuthed() { return Authenticated; }
00163
00164
00165 GSocket *Handle() { return Socket; }
00166
00167
00168 FtpOpenStatus Open(GSocket *S, char *RemoteHost, int Port, char *User, char *Password);
00169 bool Close();
00170 bool IsOpen();
00171 void Noop();
00172
00173
00174 bool GetDir(char *Dir);
00175 bool SetDir(char *Dir);
00176 bool CreateDir(char *Dir);
00177 bool DeleteDir(char *Dir);
00178 bool ListDir(List<IFtpEntry> *Dir);
00179 bool UpDir();
00180
00181
00182 bool DeleteFile(char *Remote);
00183 bool DownloadFile(char *Local, IFtpEntry *Remote, bool Binary = true);
00184 bool UploadFile(char *Local, char *Remote, bool Binary = true);
00185 bool RenameFile(char *From, char *To);
00186 bool SetPerms(char *File, int Perms);
00187 bool ResumeAt(int Pos);
00188 void Abort() { AbortTransfer = true; }
00189 };
00190
00191 #endif