00001
00002
00003 #ifndef __IFTP_H
00004 #define __IFTP_H
00005
00006 #include "INet.h"
00007 #include "GDateTime.h"
00008
00009 #define DefaultFtpCharset "iso-8859-1"
00010
00011 #define IFTP_READ 0x0400
00012 #define IFTP_WRITE 0x0200
00013 #define IFTP_EXECUTE 0x0100
00014 #define IFTP_DIR 0x0800
00015
00016 #define IFTP_GRP_READ 0x0040
00017 #define IFTP_GRP_WRITE 0x0020
00018 #define IFTP_GRP_EXECUTE 0x0010
00019
00020 #define IFTP_GLOB_READ 0x0004
00021 #define IFTP_GLOB_WRITE 0x0002
00022 #define IFTP_GLOB_EXECUTE 0x0001
00023
00024 #define IFTP_ARCHIVE 0x1000
00025 #define IFTP_HIDDEN 0x2000
00026 #define IFTP_SYSTEM 0x4000
00027
00028 #define IFTP_SYM_LINK 0x8000
00029
00030
00031 #define OPT_LogOpen "LogOpen"
00032
00033
00034 #define M_CREATE_FOLDER (M_USER+300)
00035 #define M_RENAME (M_USER+302)
00036 #define M_PERMISSIONS (M_USER+303)
00037 #define M_RUN (M_USER+304)
00038 #define M_OPEN_AS_TEXT (M_USER+305)
00039 #define M_TRANSFER (M_USER+306)
00040 #define M_REFRESH (M_USER+307)
00041 #define M_UP (M_USER+308)
00042
00043
00044 enum FtpOpenStatus
00045 {
00046 FO_ConnectFailed,
00047 FO_LoginFailed,
00048 FO_Error,
00049 FO_Connected
00050 };
00051
00053 class IFtpEntry
00054 {
00055 public:
00056 int Attributes;
00057 int64 Size;
00058 GAutoString Name;
00059 GAutoString Path;
00060 GAutoString User;
00061 GAutoString Group;
00062 GDateTime Date;
00063
00064 IFtpEntry();
00065 IFtpEntry(char *Entry, char *Cs);
00066 IFtpEntry(IFtpEntry *Entry);
00067 virtual ~IFtpEntry();
00068
00069 bool IsDir() { return (Attributes & IFTP_DIR) != 0; }
00070 bool IsHidden() { return TestFlag(Attributes, IFTP_HIDDEN); }
00071 };
00072
00074 class IFileProtocol
00075 {
00076 public:
00077 virtual ~IFileProtocol() {}
00078
00079
00080 virtual char *GetCharset() = 0;
00081 virtual void SetCharset(char *cs) = 0;
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 GSocketI *Handle() = 0;
00094
00095
00096 virtual FtpOpenStatus Open(GSocketI *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(int64 Pos) = 0;
00116 virtual void Abort() = 0;
00117 };
00118
00120 class IFtp : public IFileProtocol
00121 {
00122 protected:
00123 class IFtpPrivate *d;
00124
00126 GAutoPtr<GSocketI> Socket;
00127
00128 int WriteLine(char *Msg = 0);
00129 int ReadLine(char *Msg = 0, bool Debug = false);
00130 bool TransferFile(char *Local, char *Remote, int64 RemoteSize, bool Upload, bool Binary);
00131
00132
00133 char Ip[64];
00134 int Port;
00135 bool PassiveMode;
00136 bool ForceActive;
00137 bool LongList;
00138 bool ShowHidden;
00139 Progress *Meter;
00140 bool Authenticated;
00141
00142
00143
00144
00145
00146
00147 int RestorePos;
00148 bool AbortTransfer;
00149
00150 bool SetupData(bool Binary);
00151 bool ConnectData();
00152 char *ToFtpCs(char *s);
00153 char *FromFtpCs(char *s);
00154
00155 public:
00157 IFtp();
00158 virtual ~IFtp();
00159
00161 char *GetCharset();
00163 void SetCharset(char *cs);
00165 bool IsForceActive() { return ForceActive; }
00167 void IsForceActive(bool i) { ForceActive = i; }
00168 bool IsLongList() { return LongList; }
00169 void IsLongList(bool i) { LongList = i; }
00170 bool IsShowHidden() { return ShowHidden; }
00171 void IsShowHidden(bool i) { ShowHidden = i; }
00172 Progress *GetMeter() { return Meter; }
00173 void SetMeter(Progress *m) { Meter = m; }
00174 bool GetAuthed() { return Authenticated; }
00175
00177 GSocketI *Handle() { return Socket; }
00178
00180 FtpOpenStatus Open(GSocketI *S, char *RemoteHost, int Port, char *User, char *Password);
00182 bool Close();
00184 bool IsOpen();
00185 void Noop();
00186
00188 bool GetDir(char *Dir);
00190 bool SetDir(char *Dir);
00192 bool CreateDir(char *Dir);
00194 bool DeleteDir(char *Dir);
00196 bool ListDir(List<IFtpEntry> *Dir);
00198 bool UpDir();
00199
00201 bool DeleteFile(char *Remote);
00203 bool DownloadFile(char *Local, IFtpEntry *Remote, bool Binary = true);
00205 bool UploadFile(char *Local, char *Remote, bool Binary = true);
00207 bool RenameFile(char *From, char *To);
00209 bool SetPerms(char *File, int Perms);
00211 bool ResumeAt(int64 Pos);
00213 void Abort() { AbortTransfer = true; }
00214 };
00215
00216 #endif