]>
Commit | Line | Data |
---|---|---|
f4ada568 GL |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: ftp.h | |
3 | // Purpose: FTP protocol | |
4 | // Author: Vadim Zeitlin | |
2e907fab VZ |
5 | // Modified by: Mark Johnson, wxWindows@mj10777.de |
6 | // 20000917 : RmDir, GetLastResult, GetList | |
f4ada568 GL |
7 | // Created: 07/07/1997 |
8 | // RCS-ID: $Id$ | |
9 | // Copyright: (c) 1997, 1998 Guilhem Lavaux | |
10 | // Licence: wxWindows license | |
11 | ///////////////////////////////////////////////////////////////////////////// | |
8e907a13 | 12 | |
f4ada568 GL |
13 | #ifndef __WX_FTP_H__ |
14 | #define __WX_FTP_H__ | |
15 | ||
16 | #ifdef __GNUG__ | |
17 | #pragma interface | |
18 | #endif | |
19 | ||
20 | #include "wx/object.h" | |
21 | #include "wx/sckaddr.h" | |
22 | #include "wx/protocol/protocol.h" | |
23 | #include "wx/url.h" | |
24 | ||
8e907a13 VZ |
25 | class WXDLLEXPORT wxFTP : public wxProtocol |
26 | { | |
f4ada568 | 27 | public: |
2e907fab VZ |
28 | enum TransferMode |
29 | { | |
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 | bool SetBinary() { return SetTransferMode(BINARY); } | |
51 | bool SetAscii() { return SetTransferMode(ASCII); } | |
52 | bool SetTransferMode(TransferMode mode); | |
53 | ||
54 | // Generic FTP interface | |
55 | ||
56 | // the error code | |
57 | virtual wxProtocolError GetError() { return m_lastError; } | |
58 | ||
59 | // the last FTP server reply | |
60 | const wxString& GetLastResult() { return m_lastResult; } | |
61 | ||
62 | // send any FTP command (should be full FTP command line but without | |
63 | // trailing "\r\n") and return its return code | |
64 | char SendCommand(const wxString& command); | |
65 | ||
66 | // check that the command returned the given code | |
67 | bool CheckCommand(const wxString& command, char expectedReturn) | |
68 | { | |
69 | return SendCommand(command) == expectedReturn; | |
70 | } | |
71 | ||
72 | // Filesystem commands | |
73 | bool ChDir(const wxString& dir); | |
74 | bool MkDir(const wxString& dir); | |
75 | bool RmDir(const wxString& dir); | |
76 | wxString Pwd(); | |
77 | bool Rename(const wxString& src, const wxString& dst); | |
78 | bool RmFile(const wxString& path); | |
79 | ||
80 | // Download methods | |
81 | bool Abort(); | |
82 | ||
83 | virtual wxInputStream *GetInputStream(const wxString& path); | |
84 | virtual wxOutputStream *GetOutputStream(const wxString& path); | |
85 | ||
86 | // Directory listing | |
87 | ||
88 | // get the list of full filenames, the format is fixed: one file name per | |
89 | // line | |
90 | bool GetFilesList(wxArrayString& files, | |
91 | const wxString& wildcard = wxEmptyString) | |
92 | { | |
93 | return GetList(files, wildcard, FALSE); | |
94 | } | |
95 | ||
96 | // get a directory list in server dependent format - this can be shown | |
97 | // directly to the user | |
98 | bool GetDirList(wxArrayString& files, | |
99 | const wxString& wildcard = wxEmptyString) | |
100 | { | |
101 | return GetList(files, wildcard, TRUE); | |
102 | } | |
103 | ||
104 | // equivalent to either GetFilesList() (default) or GetDirList() | |
105 | bool GetList(wxArrayString& files, | |
106 | const wxString& wildcard = wxEmptyString, | |
107 | bool details = FALSE); | |
108 | ||
109 | #ifdef WXWIN_COMPATIBILITY_2 | |
110 | // deprecated | |
111 | wxList *GetList(const wxString& wildcard, bool details = FALSE); | |
112 | #endif // WXWIN_COMPATIBILITY_2 | |
f4ada568 | 113 | |
2e907fab VZ |
114 | protected: |
115 | // this executes a simple ftp command with the given argument and returns | |
116 | // TRUE if it its return code starts with '2' | |
117 | bool DoSimpleCommand(const wxChar *command, | |
118 | const wxString& arg = wxEmptyString); | |
f4ada568 | 119 | |
2e907fab VZ |
120 | // get the server reply, return the first character of the reply code, |
121 | // '1'..'5' for normal FTP replies, 0 (*not* '0') if an error occured | |
122 | char GetResult(); | |
f4ada568 | 123 | |
2e907fab VZ |
124 | // check that the result is equal to expected value |
125 | bool CheckResult(char ch) { return GetResult() == ch; } | |
f4ada568 | 126 | |
2e907fab | 127 | wxSocketClient *GetPort(); |
8e907a13 | 128 | |
2e907fab VZ |
129 | wxString m_user, |
130 | m_passwd; | |
8e907a13 | 131 | |
2e907fab VZ |
132 | wxString m_lastResult; |
133 | wxProtocolError m_lastError; | |
f4ada568 | 134 | |
2e907fab VZ |
135 | // true if there is an FTP transfer going on |
136 | bool m_streaming; | |
f4ada568 | 137 | |
2e907fab VZ |
138 | // true if the user had set the transfer mode |
139 | bool m_modeSet; | |
f4ada568 | 140 | |
2e907fab VZ |
141 | friend class wxInputFTPStream; |
142 | friend class wxOutputFTPStream; | |
8e907a13 | 143 | |
2e907fab VZ |
144 | DECLARE_DYNAMIC_CLASS(wxFTP) |
145 | DECLARE_PROTOCOL(wxFTP) | |
f4ada568 GL |
146 | }; |
147 | ||
8e907a13 | 148 | #endif // __WX_FTP_H__ |