37 #include "IPAddress.h"
40 #ifndef FTP_USE_NAMESPACE
41 # define FTP_USE_NAMESPACE true
44 namespace ftp_client {
47 static const int MAXFILE_NAME_LENGTH = 512;
48 static const int COMMAND_PORT = 21;
49 static const int DATA_PORT = 1000;
52 enum FileMode { READ_MODE, WRITE_MODE, WRITE_APPEND_MODE };
53 enum CurrentOperation { READ_OP, WRITE_OP, LS_OP, NOP };
54 enum LogLevel { LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR };
55 enum ObjectType { TypeFile, TypeDirectory, TypeUndefined };
70 static int findNthInStr(
char *str,
char ch,
int n) {
74 for (
unsigned int i = 0; i < strlen(str); i++) {
84 static int readln(Stream &stream,
char *str,
int maxLen) {
86 if (maxLen > stream.available()) {
87 maxLen = stream.available();
89 for (
int j = 0; j < maxLen; j++) {
91 char c = stream.read();
92 if (c == 0 || c ==
'\n') {
97 memset(str + len, 0, maxLen - len);
110 static LogLevel getLogLevel();
111 static void setOutput(Stream &out);
112 static void writeLog(LogLevel level,
const char *module,
113 const char *msg =
nullptr);
116 static LogLevel min_log_level;
117 static Stream *out_ptr;
133 virtual bool open(Client *cmd, Client *dat, IPAddress &address,
int port,
134 int data_port,
const char *username,
const char *password);
136 virtual bool connected();
137 virtual bool passv();
138 virtual bool binary();
139 virtual bool ascii();
140 virtual bool type(
const char *type);
141 virtual bool del(
const char *file);
142 virtual bool mkdir(
const char *dir);
143 virtual bool rmd(
const char *dir);
144 virtual bool abort();
145 virtual Stream *read(
const char *file_name);
146 virtual Stream *write(
const char *file_name,
FileMode mode);
147 virtual Stream *ls(
const char *file_name);
148 virtual void closeData();
149 virtual void setCurrentOperation(CurrentOperation op);
150 virtual CurrentOperation currentOperation() {
return current_operation; }
151 virtual void flush();
152 virtual size_t size(
const char *dir);
153 virtual ObjectType objectType(
const char *file);
156 virtual bool connect(IPAddress adr,
int port, Client *client,
157 bool doCheckResult =
false);
158 virtual bool cmd(
const char *command,
const char *par,
const char *expected,
159 bool wait_for_data =
true);
160 virtual bool cmd(
const char *command_str,
const char *par,
161 const char *expected[],
bool wait_for_data =
true);
162 virtual void checkClosed(Client *stream);
163 virtual bool checkResult(
const char *expected[],
const char *command_for_log,
164 bool wait_for_data =
true);
166 CurrentOperation current_operation =
174 Client *command_ptr =
nullptr;
175 Client *data_ptr =
nullptr;
177 IPAddress remote_address;
179 char result_reply[80];
198 virtual size_t write(uint8_t data);
199 virtual size_t write(
char *data,
int len);
201 virtual int read(
void *buf,
size_t nbyte);
202 virtual int readln(
void *buf,
size_t nbyte);
205 virtual int available();
206 virtual void flush();
207 virtual void close();
208 virtual const char *name();
209 virtual size_t size();
210 virtual void setEOL(
char *eol);
211 virtual bool isDirectory();
214 const char *file_name;
215 const char *eol =
"\n";
218 ObjectType object_type = TypeUndefined;
240 return strcmp(this->buffer, comp.buffer) != 0;
243 return strcmp(this->buffer, comp.buffer) > 0;
246 return strcmp(this->buffer, comp.buffer) < 0;
249 return strcmp(this->buffer, comp.buffer) >= 0;
252 return strcmp(this->buffer, comp.buffer) <= 0;
256 virtual void readLine();
261 const char *directory_name =
"";
262 char buffer[MAXFILE_NAME_LENGTH];
274 FTPClient(Client &command, Client &data,
int port = COMMAND_PORT,
275 int data_port = DATA_PORT);
281 virtual bool begin(IPAddress remote_addr,
const char *user =
"anonymous",
282 const char *password =
nullptr);
290 virtual bool mkdir(
const char *filepath);
292 virtual bool remove(
const char *filepath);
294 virtual bool rmdir(
const char *filepath);
298 virtual bool binary() {
return api.binary();}
300 virtual bool ascii() {
return api.ascii();}
302 virtual bool type(
const char *str) {
return api.type(str);}
305 void init(Client *command, Client *data,
int port = COMMAND_PORT,
306 int data_port = DATA_PORT);
308 Client *command_ptr =
nullptr;
309 Client *data_ptr =
nullptr;
310 IPAddress remote_addr;
311 const char *userid =
nullptr;
312 const char *password =
nullptr;
315 bool cleanup_clients;
320 #if FTP_USE_NAMESPACE
321 using namespace ftp_client;
FileMode
File Mode.
Definition: ArduinoFTPClient.h:52
CStringFunctions We implemented some missing C based string functions for character arrays.
Definition: ArduinoFTPClient.h:68
FTPBasicAPI Implementation of Low Level FTP protocol. In order to simplify the logic we always use Pa...
Definition: ArduinoFTPClient.h:127
FTPBasicAPI()
FTPBasicAPI Implementation of Low Level FTP protocol. In order to simplify the logic we always use Pa...
Definition: ArduinoFTPClient.cpp:61
FTPClient Basic FTP access class which supports directory operatations and the opening of a files.
Definition: ArduinoFTPClient.h:271
virtual bool ascii()
Switch to ascii mode.
Definition: ArduinoFTPClient.h:300
virtual bool type(const char *str)
Binary or ascii with type command.
Definition: ArduinoFTPClient.h:302
virtual bool begin(IPAddress remote_addr, const char *user="anonymous", const char *password=nullptr)
opens the ftp connection
Definition: ArduinoFTPClient.cpp:502
virtual bool end()
Definition: ArduinoFTPClient.cpp:512
virtual bool binary()
Switch to binary mode.
Definition: ArduinoFTPClient.h:298
virtual bool remove(const char *filepath)
Delete the file.
Definition: ArduinoFTPClient.cpp:531
FTPClient(Client &command, Client &data, int port=COMMAND_PORT, int data_port=DATA_PORT)
default construcotr
Definition: ArduinoFTPClient.cpp:479
virtual bool mkdir(const char *filepath)
Definition: ArduinoFTPClient.cpp:525
virtual FTPFileIterator ls(const char *path, FileMode mode=WRITE_MODE)
lists all file names in the specified directory
Definition: ArduinoFTPClient.cpp:543
virtual bool rmdir(const char *filepath)
Removes a directory.
Definition: ArduinoFTPClient.cpp:537
virtual FTPFile & open(const char *filename, FileMode mode=READ_MODE)
get the file
Definition: ArduinoFTPClient.cpp:518
FTPFile A single file which supports read and write operations. This class is implemented as an Ardui...
Definition: ArduinoFTPClient.h:190
FTPFileIterator The file name iterator can be used to list all available files and directories....
Definition: ArduinoFTPClient.h:228
FTPFileIterator(FTPBasicAPI *api, const char *dir, FileMode mode)
FTPFileIterator The file name iterator can be used to list all available files and directories....
Definition: ArduinoFTPClient.cpp:556
FTPLogger To activate logging define the output stream e.g. with FTPLogger.setOutput(Serial); and (op...
Definition: ArduinoFTPClient.h:107
static void setLogLevel(LogLevel level)
FTPLogger To activate logging define the output stream e.g. with FTPLogger.setOutput(Serial); and opt...
Definition: ArduinoFTPClient.cpp:12