+ enum TransferMode
+ {
+ NONE, // not set by user explicitly
+ ASCII,
+ BINARY
+ };
+
+ wxFTP();
+ virtual ~wxFTP();
+
+ // Connecting and disconnecting
+ bool Connect(const wxSockAddress& addr, bool wait = true);
+ bool Connect(const wxString& host);
+
+ // disconnect
+ virtual bool Close();
+
+ // Parameters set up
+
+ // set transfer mode now
+ void SetPassive(bool pasv) { m_bPassive = pasv; }
+ bool SetBinary() { return SetTransferMode(BINARY); }
+ bool SetAscii() { return SetTransferMode(ASCII); }
+ bool SetTransferMode(TransferMode mode);
+
+ // Generic FTP interface
+
+ // FTP doesn't know the MIME type of the last downloaded/uploaded file
+ virtual wxString GetContentType() const { return wxEmptyString; }
+
+ // the last FTP server reply
+ const wxString& GetLastResult() const { return m_lastResult; }
+
+ // send any FTP command (should be full FTP command line but without
+ // trailing "\r\n") and return its return code
+ char SendCommand(const wxString& command);
+
+ // check that the command returned the given code
+ bool CheckCommand(const wxString& command, char expectedReturn)
+ {
+ // SendCommand() does updates m_lastError
+ return SendCommand(command) == expectedReturn;
+ }
+
+ // Filesystem commands
+ bool ChDir(const wxString& dir);
+ bool MkDir(const wxString& dir);
+ bool RmDir(const wxString& dir);
+ wxString Pwd();
+ bool Rename(const wxString& src, const wxString& dst);
+ bool RmFile(const wxString& path);
+
+ // Get the size of a file in the current dir.
+ // this function tries its best to deliver the size in bytes using BINARY
+ // (the SIZE command reports different sizes depending on whether
+ // type is set to ASCII or BINARY)
+ // returns -1 if file is non-existant or size could not be found
+ int GetFileSize(const wxString& fileName);
+
+ // Check to see if a file exists in the current dir
+ bool FileExists(const wxString& fileName);
+
+ // Download methods
+ bool Abort();
+
+ virtual wxInputStream *GetInputStream(const wxString& path);
+ virtual wxOutputStream *GetOutputStream(const wxString& path);
+
+ // Directory listing
+
+ // get the list of full filenames, the format is fixed: one file name per
+ // line
+ bool GetFilesList(wxArrayString& files,
+ const wxString& wildcard = wxEmptyString)
+ {
+ return GetList(files, wildcard, false);
+ }
+
+ // get a directory list in server dependent format - this can be shown
+ // directly to the user
+ bool GetDirList(wxArrayString& files,
+ const wxString& wildcard = wxEmptyString)
+ {
+ return GetList(files, wildcard, true);
+ }
+
+ // equivalent to either GetFilesList() (default) or GetDirList()
+ bool GetList(wxArrayString& files,
+ const wxString& wildcard = wxEmptyString,
+ bool details = false);
+
+protected:
+ // this executes a simple ftp command with the given argument and returns
+ // true if it its return code starts with '2'
+ bool DoSimpleCommand(const wxChar *command,
+ const wxString& arg = wxEmptyString);