Jan Kamidra / ftp-client

Files at this revision

API Documentation at this revision

Comitter:
JohnnyK
Date:
Mon Jun 28 10:18:49 2021 +0000
Parent:
3:c96c0b0c92df
Commit message:
Constructor change - allow to change size of internal buffer from constructor.

Changed in this revision

FTPClient.cpp Show annotated file Show diff for this revision Revisions of this file
FTPClient.h Show annotated file Show diff for this revision Revisions of this file
diff -r c96c0b0c92df -r cca1b8c0e5c1 FTPClient.cpp
--- a/FTPClient.cpp	Thu Jun 24 08:45:46 2021 +0000
+++ b/FTPClient.cpp	Mon Jun 28 10:18:49 2021 +0000
@@ -17,16 +17,14 @@
 #include "mbed.h"
 #include "FTPClient.h"
 
-#define FTP_BUF_SIZE     (1460)
-
 #define FTP_DEBUG 1
 
-FTPClient::FTPClient(NetworkInterface *net, const char* root) {
+FTPClient::FTPClient(NetworkInterface *net, const char* root, size_t ftp_buf_size):_ftp_buf_size(ftp_buf_size) {
     _ctr_open = false;
     _login = false;
     strcpy(_root, root);
     p_network = net;
-    p_ftp_buf = new char[FTP_BUF_SIZE];
+    p_ftp_buf = new char[_ftp_buf_size];
 }
 
 FTPClient::~FTPClient() {
@@ -45,7 +43,7 @@
     }
     _ctr_open = true;
 
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -57,7 +55,7 @@
     _login = false;
     sprintf(p_ftp_buf, "user %s\r\n", user);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -68,7 +66,7 @@
 
     sprintf(p_ftp_buf, "pass %s\r\n", pass);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -79,7 +77,7 @@
 
     sprintf(p_ftp_buf, "type I\r\n");
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -96,7 +94,7 @@
 
     sprintf(p_ftp_buf, "quit \r\n");
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -128,7 +126,7 @@
     FTPClientDataSock.set_timeout(500);
     sprintf(p_ftp_buf, "retr %s\r\n", file_name);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -140,7 +138,7 @@
     sprintf(p_ftp_buf, "%s/%s", _root, file_name);
     fp = fopen(p_ftp_buf, "w");
     while (1) {
-        size = FTPClientDataSock.recv(p_ftp_buf, FTP_BUF_SIZE);
+        size = FTPClientDataSock.recv(p_ftp_buf, _ftp_buf_size);
         if (size > 0) {
             fwrite(p_ftp_buf, size, sizeof(char), fp);
         } else {
@@ -150,7 +148,7 @@
     fclose(fp);
     FTPClientDataSock.close();
 
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -179,7 +177,7 @@
     FTPClientDataSock.set_timeout(osWaitForever);
     sprintf(p_ftp_buf, "stor %s\r\n", file_name);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -195,8 +193,8 @@
     fseek(fp, 0, SEEK_SET);
 
     while (remain_size > 0) {
-        if (remain_size > FTP_BUF_SIZE) {
-            send_size = FTP_BUF_SIZE;
+        if (remain_size > _ftp_buf_size) {
+            send_size = _ftp_buf_size;
         } else {
             send_size = remain_size;
         }
@@ -207,7 +205,7 @@
     fclose(fp); 
     FTPClientDataSock.close();
 
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -226,7 +224,7 @@
 
     sprintf(p_ftp_buf, "dele %s\r\n", file_name);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -246,7 +244,7 @@
 
     sprintf(p_ftp_buf, "xmkd %s\r\n", dir_name);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -266,7 +264,7 @@
 
     sprintf(p_ftp_buf, "cwd %s\r\n", dir_name);
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -302,7 +300,7 @@
     FTPClientDataSock.set_timeout(500);
     sprintf(p_ftp_buf, "list\r\n");
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -312,7 +310,7 @@
     }
 
     while (remain_size > 0) {
-        size = FTPClientDataSock.recv(p_ftp_buf, FTP_BUF_SIZE);
+        size = FTPClientDataSock.recv(p_ftp_buf, _ftp_buf_size);
         if (size > 0) {
             if (size > remain_size) {
                 size = remain_size;
@@ -327,7 +325,7 @@
     list_buf[idx] = '\0';
     FTPClientDataSock.close();
 
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -362,7 +360,7 @@
     FTPClientDataSock.set_timeout(500);
     sprintf(p_ftp_buf, "nlst\r\n");
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -372,7 +370,7 @@
     }
 
     while (remain_size > 0) {
-        size = FTPClientDataSock.recv(p_ftp_buf, FTP_BUF_SIZE);
+        size = FTPClientDataSock.recv(p_ftp_buf, _ftp_buf_size);
         if (size > 0) {
             if (size > remain_size) {
                 size = remain_size;
@@ -387,7 +385,7 @@
     list_buf[idx] = '\0';
     FTPClientDataSock.close();
 
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -407,7 +405,7 @@
 
     sprintf(p_ftp_buf, "pasv\r\n");
     FTPClientControlSock.send(p_ftp_buf, strlen(p_ftp_buf));
-    if (FTPClientControlSock.recv(p_ftp_buf, FTP_BUF_SIZE) <= 0) {
+    if (FTPClientControlSock.recv(p_ftp_buf, _ftp_buf_size) <= 0) {
         debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
         return false;
     }
@@ -448,5 +446,4 @@
     }
     debug_if(FTP_DEBUG,"ERROR: %s(%d)\r\n", __FILE__, __LINE__);
     return false;
-}
-
+}
\ No newline at end of file
diff -r c96c0b0c92df -r cca1b8c0e5c1 FTPClient.h
--- a/FTPClient.h	Thu Jun 24 08:45:46 2021 +0000
+++ b/FTPClient.h	Mon Jun 28 10:18:49 2021 +0000
@@ -24,10 +24,11 @@
 public:
     /** Constructor
      *
-     * @param net     FTP server port
-     * @param root    User name
+     * @param net           FTP server port
+     * @param root          User name
+     * @param ftp_buf_size  Internal buffer size, default is 500
      */
-    FTPClient(NetworkInterface *net, const char* root);
+    FTPClient(NetworkInterface *net, const char* root, size_t ftp_buf_size = 500);
     ~FTPClient();
 
     /** Opens address.
@@ -106,6 +107,7 @@
     char ftp_data_ip_addr[20];
     char * p_ftp_buf;
     char _root[20];
+    size_t _ftp_buf_size;
 
     bool open_data_sock();
 };