Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

IFtp.h

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 // Options
00027 #define OPT_LogOpen         "LogOpen"
00028 
00029 // Messages
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 // Classes
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     // Properties
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     // Data
00093     virtual GSocket *Handle() = 0;
00094     
00095     // Connection
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     // Directory
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     // File
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     // Sockets...
00124     GSocket *Socket;    // commands
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     // Data connections
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     // State
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     // Properties
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     // Data
00165     GSocket *Handle() { return Socket; }
00166     
00167     // Connection
00168     FtpOpenStatus Open(GSocket *S, char *RemoteHost, int Port, char *User, char *Password);
00169     bool Close();
00170     bool IsOpen();
00171     void Noop();
00172 
00173     // Directory
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     // File
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

Generated on Wed Oct 26 14:46:50 2005 for Lgi by  doxygen 1.4.1