Nuke #pragma implementation/interface's
[wxWidgets.git] / include / wx / protocol / ftp.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: ftp.h
3 // Purpose: FTP protocol
4 // Author: Vadim Zeitlin
5 // Modified by: Mark Johnson, wxWindows@mj10777.de
6 // 20000917 : RmDir, GetLastResult, GetList
7 // Created: 07/07/1997
8 // RCS-ID: $Id$
9 // Copyright: (c) 1997, 1998 Guilhem Lavaux
10 // Licence: wxWindows licence
11 /////////////////////////////////////////////////////////////////////////////
12
13 #ifndef __WX_FTP_H__
14 #define __WX_FTP_H__
15
16 #include "wx/defs.h"
17
18 #if wxUSE_PROTOCOL_FTP
19
20 #include "wx/sckaddr.h"
21 #include "wx/protocol/protocol.h"
22 #include "wx/url.h"
23
24 class WXDLLIMPEXP_NET wxFTP : public wxProtocol
25 {
26 public:
27 enum TransferMode
28 {
29 NONE, // not set by user explicitly
30 ASCII,
31 BINARY
32 };
33
34 wxFTP();
35 virtual ~wxFTP();
36
37 // Connecting and disconnecting
38 void SetUser(const wxString& user) { m_user = user; }
39 void SetPassword(const wxString& passwd) { m_passwd = passwd; }
40
41 bool Connect(wxSockAddress& addr, bool wait = true);
42 bool Connect(const wxString& host);
43
44 // disconnect
45 virtual bool Close();
46
47 // Parameters set up
48
49 // set transfer mode now
50 void SetPassive(bool pasv) { m_bPassive = pasv; };
51 void SetDefaultTimeout(wxUint32 Value);
52 bool SetBinary() { return SetTransferMode(BINARY); }
53 bool SetAscii() { return SetTransferMode(ASCII); }
54 bool SetTransferMode(TransferMode mode);
55
56 // Generic FTP interface
57
58 // the error code
59 virtual wxProtocolError GetError() { return m_lastError; }
60
61 // the last FTP server reply
62 const wxString& GetLastResult() { return m_lastResult; }
63
64 // send any FTP command (should be full FTP command line but without
65 // trailing "\r\n") and return its return code
66 char SendCommand(const wxString& command);
67
68 // check that the command returned the given code
69 bool CheckCommand(const wxString& command, char expectedReturn)
70 {
71 return SendCommand(command) == expectedReturn;
72 }
73
74 // Filesystem commands
75 bool ChDir(const wxString& dir);
76 bool MkDir(const wxString& dir);
77 bool RmDir(const wxString& dir);
78 wxString Pwd();
79 bool Rename(const wxString& src, const wxString& dst);
80 bool RmFile(const wxString& path);
81
82 // Get the size of a file in the current dir.
83 // this function tries its best to deliver the size in bytes using BINARY
84 // (the SIZE command reports different sizes depending on whether
85 // type is set to ASCII or BINARY)
86 // returns -1 if file is non-existant or size could not be found
87 int GetFileSize(const wxString& fileName);
88
89 // Check to see if a file exists in the current dir
90 bool FileExists(const wxString& fileName);
91
92 // Download methods
93 bool Abort();
94
95 virtual wxInputStream *GetInputStream(const wxString& path);
96 virtual wxOutputStream *GetOutputStream(const wxString& path);
97
98 // Directory listing
99
100 // get the list of full filenames, the format is fixed: one file name per
101 // line
102 bool GetFilesList(wxArrayString& files,
103 const wxString& wildcard = wxEmptyString)
104 {
105 return GetList(files, wildcard, false);
106 }
107
108 // get a directory list in server dependent format - this can be shown
109 // directly to the user
110 bool GetDirList(wxArrayString& files,
111 const wxString& wildcard = wxEmptyString)
112 {
113 return GetList(files, wildcard, true);
114 }
115
116 // equivalent to either GetFilesList() (default) or GetDirList()
117 bool GetList(wxArrayString& files,
118 const wxString& wildcard = wxEmptyString,
119 bool details = false);
120
121 protected:
122 // this executes a simple ftp command with the given argument and returns
123 // true if it its return code starts with '2'
124 bool DoSimpleCommand(const wxChar *command,
125 const wxString& arg = wxEmptyString);
126
127 // get the server reply, return the first character of the reply code,
128 // '1'..'5' for normal FTP replies, 0 (*not* '0') if an error occurred
129 char GetResult();
130
131 // check that the result is equal to expected value
132 bool CheckResult(char ch) { return GetResult() == ch; }
133
134 // return the socket to be used, Passive/Active versions are used only by
135 // GetPort()
136 wxSocketBase *GetPort();
137 wxSocketBase *GetPassivePort();
138 wxSocketBase *GetActivePort();
139
140 // helper for GetPort()
141 wxString GetPortCmdArgument(wxIPV4address Local, wxIPV4address New);
142
143 // accept connection from server in active mode, returns the same socket as
144 // passed in in passive mode
145 wxSocketBase *AcceptIfActive(wxSocketBase *sock);
146
147
148 wxString m_user,
149 m_passwd;
150
151 wxString m_lastResult;
152 wxProtocolError m_lastError;
153
154 // true if there is an FTP transfer going on
155 bool m_streaming;
156
157 // although this should be set to ASCII by default according to STD9,
158 // we will use BINARY transfer mode by default for backwards compatibility
159 TransferMode m_currentTransfermode;
160
161 friend class wxInputFTPStream;
162 friend class wxOutputFTPStream;
163
164 bool m_bPassive;
165 wxUint32 m_uiDefaultTimeout;
166
167 // following is true when a read or write times out, we then assume
168 // the connection is dead and abort. we avoid additional delays this way
169 bool m_bEncounteredError;
170
171
172 DECLARE_DYNAMIC_CLASS_NO_COPY(wxFTP)
173 DECLARE_PROTOCOL(wxFTP)
174 };
175
176 // the trace mask used by assorted wxLogTrace() in ftp code, do
177 // wxLog::AddTraceMask(FTP_TRACE_MASK) to see them in output
178 #define FTP_TRACE_MASK _T("ftp")
179
180 #endif // wxUSE_PROTOCOL_FTP
181
182 #endif // __WX_FTP_H__