Update FTPClient

Fork of FTPClient by Ricky Kwon

Committer:
MidnightCow
Date:
Wed Aug 26 13:42:01 2015 +0000
Revision:
5:f748d78bba4e
Parent:
4:4bef734cc93e
Enhanced Program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ricky_Kwon 0:61da21bfd120 1 #include "mbed.h"
Ricky_Kwon 0:61da21bfd120 2 #include "EthernetInterface.h"
Ricky_Kwon 0:61da21bfd120 3 #include "FTPClient.h"
MidnightCow 4:4bef734cc93e 4
Ricky_Kwon 0:61da21bfd120 5 //#define DEBUG
MidnightCow 4:4bef734cc93e 6
MidnightCow 4:4bef734cc93e 7 FTPClient::FTPClient(PinName mosi, PinName miso, PinName sclk, PinName ssel, const char* root) {
MidnightCow 4:4bef734cc93e 8 _SDFileSystem = new SDFileSystem(mosi, miso, sclk, ssel, root);
Ricky_Kwon 0:61da21bfd120 9 blogin = false;
MidnightCow 4:4bef734cc93e 10 strcpy(this->root,root);
Ricky_Kwon 0:61da21bfd120 11 }
MidnightCow 4:4bef734cc93e 12
MidnightCow 4:4bef734cc93e 13 FTPClient::FTPClient(const char* root)
MidnightCow 4:4bef734cc93e 14 {
MidnightCow 4:4bef734cc93e 15 _SDFileSystem = NULL;
MidnightCow 4:4bef734cc93e 16 blogin = false;
MidnightCow 4:4bef734cc93e 17 strcpy(this->root,root);
MidnightCow 4:4bef734cc93e 18 }
MidnightCow 4:4bef734cc93e 19
MidnightCow 4:4bef734cc93e 20 FTPClient::~FTPClient()
MidnightCow 4:4bef734cc93e 21 {
MidnightCow 4:4bef734cc93e 22 if(_SDFileSystem == NULL) delete _SDFileSystem;
MidnightCow 4:4bef734cc93e 23 }
MidnightCow 4:4bef734cc93e 24
Ricky_Kwon 0:61da21bfd120 25 bool FTPClient::open(char* ip, int port, char* id, char* pass){
Ricky_Kwon 0:61da21bfd120 26
MidnightCow 4:4bef734cc93e 27 int size;
MidnightCow 4:4bef734cc93e 28 blogin = false;
MidnightCow 5:f748d78bba4e 29
MidnightCow 5:f748d78bba4e 30 if (FTPClientControlSock.connect(ip, port) < 0) {
Ricky_Kwon 0:61da21bfd120 31 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 32 printf("Unable to connect to (%s) on port (%d)\r\n", ip, port);
Ricky_Kwon 0:61da21bfd120 33 #endif
Ricky_Kwon 0:61da21bfd120 34 wait(1);
MidnightCow 5:f748d78bba4e 35 return false;
Ricky_Kwon 0:61da21bfd120 36 }
Ricky_Kwon 0:61da21bfd120 37
Ricky_Kwon 0:61da21bfd120 38 while(!blogin){
MidnightCow 4:4bef734cc93e 39 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 40 if(size > 0){
Ricky_Kwon 0:61da21bfd120 41 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 42 printf("Received message from server: %s\r\n", ftpbuf);
Ricky_Kwon 0:61da21bfd120 43 #endif
MidnightCow 4:4bef734cc93e 44 if (!strncmp(ftpbuf, "220", 3)){
MidnightCow 4:4bef734cc93e 45 printf("%s\r\n", ftpbuf);
MidnightCow 4:4bef734cc93e 46 sprintf(ftpbuf, "user %s\r\n", id);
MidnightCow 4:4bef734cc93e 47 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 48 }
MidnightCow 4:4bef734cc93e 49 else if (!strncmp(ftpbuf, "331", 3)){
MidnightCow 4:4bef734cc93e 50 sprintf(ftpbuf, "pass %s\r\n", pass);
MidnightCow 4:4bef734cc93e 51 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 52 }
MidnightCow 4:4bef734cc93e 53 else if (!strncmp(ftpbuf, "230", 3)){
Ricky_Kwon 0:61da21bfd120 54 blogin = true;
Ricky_Kwon 0:61da21bfd120 55 }
Ricky_Kwon 0:61da21bfd120 56 else{
MidnightCow 4:4bef734cc93e 57 break;
Ricky_Kwon 0:61da21bfd120 58 }
Ricky_Kwon 0:61da21bfd120 59 }
Ricky_Kwon 0:61da21bfd120 60 }
MidnightCow 4:4bef734cc93e 61 return blogin;
Ricky_Kwon 0:61da21bfd120 62 }
Ricky_Kwon 0:61da21bfd120 63
MidnightCow 4:4bef734cc93e 64 bool FTPClient::getfile(char* filename){
MidnightCow 4:4bef734cc93e 65 FILE* fp;
MidnightCow 4:4bef734cc93e 66 int size;
MidnightCow 4:4bef734cc93e 67
Ricky_Kwon 0:61da21bfd120 68 if(blogin){
MidnightCow 4:4bef734cc93e 69 printf("%08X\r\n",ftpbuf);
MidnightCow 4:4bef734cc93e 70 sprintf(ftpbuf, "pasv\r\n");
MidnightCow 4:4bef734cc93e 71 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 72
MidnightCow 4:4bef734cc93e 73 while(1){
MidnightCow 4:4bef734cc93e 74 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 75 if(size > 0){
Ricky_Kwon 0:61da21bfd120 76 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 77 printf("Received message from server: %s\r\n", ftpbuf);
Ricky_Kwon 0:61da21bfd120 78 #endif
MidnightCow 4:4bef734cc93e 79 if (!strncmp(ftpbuf, "150", 3)){
MidnightCow 4:4bef734cc93e 80 sprintf(ftpbuf,"%s/%s\0",root,filename);
Ricky_Kwon 0:61da21bfd120 81 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 82 printf("myfilename : %s\r\n", ftpbuf);
Ricky_Kwon 0:61da21bfd120 83 #endif
MidnightCow 4:4bef734cc93e 84 fp = fopen(ftpbuf, "w");
MidnightCow 4:4bef734cc93e 85 while(1){
MidnightCow 4:4bef734cc93e 86 size = FTPClientDataSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 87 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 88 printf("remain_datasize : %d\r\n", size);
Ricky_Kwon 0:61da21bfd120 89 #endif
MidnightCow 4:4bef734cc93e 90 if(size>0){
MidnightCow 4:4bef734cc93e 91 fwrite(ftpbuf,size,sizeof(char),fp);
Ricky_Kwon 0:61da21bfd120 92 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 93 printf("#");
Ricky_Kwon 0:61da21bfd120 94 #endif
Ricky_Kwon 0:61da21bfd120 95 }
MidnightCow 4:4bef734cc93e 96 if(size < 0 || size < MAX_SS)
MidnightCow 4:4bef734cc93e 97 {
Ricky_Kwon 0:61da21bfd120 98 fclose(fp);
MidnightCow 4:4bef734cc93e 99 FTPClientDataSock.close();
Ricky_Kwon 0:61da21bfd120 100 break;
Ricky_Kwon 0:61da21bfd120 101 }
Ricky_Kwon 0:61da21bfd120 102 }
Ricky_Kwon 0:61da21bfd120 103 }
MidnightCow 4:4bef734cc93e 104 else if (!strncmp(ftpbuf, "227", 3)){
MidnightCow 4:4bef734cc93e 105 pportc(ftpbuf);
Ricky_Kwon 0:61da21bfd120 106
Ricky_Kwon 0:61da21bfd120 107 #if 1
MidnightCow 4:4bef734cc93e 108 while (FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port) < 0) {
Ricky_Kwon 0:61da21bfd120 109 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 110 printf("Unable to connect to (%s) on port (%d)\r\n", ftpServer_data_ip_addr_str, remote_port);
Ricky_Kwon 0:61da21bfd120 111 #endif
Ricky_Kwon 0:61da21bfd120 112 wait(1);
Ricky_Kwon 0:61da21bfd120 113 }
Ricky_Kwon 0:61da21bfd120 114 #endif
Ricky_Kwon 0:61da21bfd120 115
Ricky_Kwon 0:61da21bfd120 116 #if 0
Ricky_Kwon 0:61da21bfd120 117 do{
MidnightCow 4:4bef734cc93e 118 FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port);
MidnightCow 4:4bef734cc93e 119 }while(!FTPClientDataSock.is_connected());
Ricky_Kwon 0:61da21bfd120 120 #endif
MidnightCow 4:4bef734cc93e 121 sprintf(ftpbuf, "retr %s\r\n", filename);
MidnightCow 4:4bef734cc93e 122 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 123 }
MidnightCow 4:4bef734cc93e 124 else if(!strncmp(ftpbuf,"226",3)) break;
Ricky_Kwon 0:61da21bfd120 125 }
Ricky_Kwon 0:61da21bfd120 126 }
MidnightCow 4:4bef734cc93e 127 return true;
Ricky_Kwon 0:61da21bfd120 128 }
MidnightCow 4:4bef734cc93e 129 return false;
Ricky_Kwon 0:61da21bfd120 130 }
MidnightCow 4:4bef734cc93e 131
MidnightCow 4:4bef734cc93e 132 bool FTPClient::putfile(char* filename){
MidnightCow 4:4bef734cc93e 133 FILE* fp;
MidnightCow 4:4bef734cc93e 134 int size;
MidnightCow 4:4bef734cc93e 135 long int remain_filesize;
MidnightCow 4:4bef734cc93e 136 long int send_byte;
Ricky_Kwon 0:61da21bfd120 137
Ricky_Kwon 0:61da21bfd120 138 if(blogin){
Ricky_Kwon 0:61da21bfd120 139
MidnightCow 4:4bef734cc93e 140 sprintf(ftpbuf, "pasv\r\n");
MidnightCow 4:4bef734cc93e 141 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 142
MidnightCow 4:4bef734cc93e 143 while(1){
MidnightCow 4:4bef734cc93e 144 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 145 if(size > 0){
Ricky_Kwon 0:61da21bfd120 146 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 147 printf("Received message from server: %s\r\n", ftpbuf);
Ricky_Kwon 0:61da21bfd120 148 #endif
MidnightCow 4:4bef734cc93e 149 if (!strncmp(ftpbuf, "150", 3)){
MidnightCow 4:4bef734cc93e 150 sprintf(ftpbuf,"%s/%s",root,filename);
MidnightCow 4:4bef734cc93e 151 fp = fopen(ftpbuf, "r");
Ricky_Kwon 0:61da21bfd120 152 fseek(fp, 0, SEEK_END); // seek to end of file
Ricky_Kwon 0:61da21bfd120 153 remain_filesize = ftell(fp); // get current file pointer
Ricky_Kwon 0:61da21bfd120 154 fseek(fp, 0, SEEK_SET); // seek back to beginning of file
Ricky_Kwon 0:61da21bfd120 155 do{
Ricky_Kwon 0:61da21bfd120 156 if(remain_filesize > MAX_SS)
Ricky_Kwon 0:61da21bfd120 157 send_byte = MAX_SS;
Ricky_Kwon 0:61da21bfd120 158 else
Ricky_Kwon 0:61da21bfd120 159 send_byte = remain_filesize;
MidnightCow 4:4bef734cc93e 160 fread (ftpbuf, 1, send_byte, fp);
MidnightCow 4:4bef734cc93e 161 FTPClientDataSock.send(ftpbuf, send_byte);
Ricky_Kwon 0:61da21bfd120 162 remain_filesize -= send_byte;
Ricky_Kwon 0:61da21bfd120 163 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 164 printf("#");
Ricky_Kwon 0:61da21bfd120 165 #endif
Ricky_Kwon 0:61da21bfd120 166 }while(remain_filesize!=0);
Ricky_Kwon 0:61da21bfd120 167 fclose(fp);
MidnightCow 4:4bef734cc93e 168 FTPClientDataSock.close();
Ricky_Kwon 0:61da21bfd120 169 break;
Ricky_Kwon 0:61da21bfd120 170 }
MidnightCow 4:4bef734cc93e 171 else if (!strncmp(ftpbuf, "227", 3)){
MidnightCow 4:4bef734cc93e 172 pportc(ftpbuf);
Ricky_Kwon 0:61da21bfd120 173 #if 0
Ricky_Kwon 0:61da21bfd120 174 do{
MidnightCow 4:4bef734cc93e 175 FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port);
MidnightCow 4:4bef734cc93e 176 }while(!FTPClientDataSock.is_connected());
Ricky_Kwon 0:61da21bfd120 177 #endif
Ricky_Kwon 0:61da21bfd120 178
Ricky_Kwon 0:61da21bfd120 179 #if 1
MidnightCow 4:4bef734cc93e 180 while (FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port) < 0) {
Ricky_Kwon 0:61da21bfd120 181 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 182 printf("Unable to connect to (%s) on port (%d)\r\n", ftpServer_data_ip_addr_str, remote_port);
Ricky_Kwon 0:61da21bfd120 183 #endif
Ricky_Kwon 0:61da21bfd120 184 wait(1);
Ricky_Kwon 0:61da21bfd120 185 }
Ricky_Kwon 0:61da21bfd120 186 #endif
MidnightCow 4:4bef734cc93e 187 sprintf(ftpbuf, "stor %s\r\n", filename);
MidnightCow 4:4bef734cc93e 188 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 189 }
MidnightCow 4:4bef734cc93e 190 else if(!strncmp(ftpbuf,"226",3)) break;
Ricky_Kwon 0:61da21bfd120 191 }
Ricky_Kwon 0:61da21bfd120 192 }
MidnightCow 4:4bef734cc93e 193 return true;
Ricky_Kwon 0:61da21bfd120 194 }
MidnightCow 4:4bef734cc93e 195 return false;
Ricky_Kwon 0:61da21bfd120 196 }
MidnightCow 4:4bef734cc93e 197
MidnightCow 4:4bef734cc93e 198 bool FTPClient::dir(char* liststr){
MidnightCow 4:4bef734cc93e 199 int size;
Ricky_Kwon 0:61da21bfd120 200 if(blogin){
Ricky_Kwon 0:61da21bfd120 201
MidnightCow 4:4bef734cc93e 202 sprintf(ftpbuf, "pasv\r\n");
MidnightCow 4:4bef734cc93e 203 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 204
MidnightCow 4:4bef734cc93e 205 while(1){
MidnightCow 4:4bef734cc93e 206 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 207 if(size > 0){
Ricky_Kwon 0:61da21bfd120 208 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 209 printf("Received message from server: %s\r\n", ftpbuf);
Ricky_Kwon 0:61da21bfd120 210 #endif
MidnightCow 4:4bef734cc93e 211 if (!strncmp(ftpbuf, "150", 3)){
MidnightCow 4:4bef734cc93e 212 while(1){
MidnightCow 4:4bef734cc93e 213 size = FTPClientDataSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 214 if(size>0){
MidnightCow 4:4bef734cc93e 215 ftpbuf[size] = '\0';
MidnightCow 4:4bef734cc93e 216 strcpy(liststr,ftpbuf);
MidnightCow 4:4bef734cc93e 217 printf("%s", ftpbuf);
Ricky_Kwon 0:61da21bfd120 218 }
Ricky_Kwon 0:61da21bfd120 219 else{
MidnightCow 4:4bef734cc93e 220 FTPClientDataSock.close();
Ricky_Kwon 0:61da21bfd120 221 break;
Ricky_Kwon 0:61da21bfd120 222 }
MidnightCow 4:4bef734cc93e 223 }
Ricky_Kwon 0:61da21bfd120 224 }
MidnightCow 4:4bef734cc93e 225 else if (!strncmp(ftpbuf, "227", 3)){
MidnightCow 4:4bef734cc93e 226 pportc(ftpbuf);
Ricky_Kwon 0:61da21bfd120 227 #if 0
Ricky_Kwon 0:61da21bfd120 228 do{
MidnightCow 4:4bef734cc93e 229 FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port);
MidnightCow 4:4bef734cc93e 230 }while(!FTPClientDataSock.is_connected());
Ricky_Kwon 0:61da21bfd120 231 #endif
Ricky_Kwon 0:61da21bfd120 232 #if 1
MidnightCow 4:4bef734cc93e 233 while (FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port) < 0) {
Ricky_Kwon 0:61da21bfd120 234 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 235 printf("Unable to connect to (%s) on port (%d)\r\n", ftpServer_data_ip_addr_str, remote_port);
Ricky_Kwon 0:61da21bfd120 236 #endif
Ricky_Kwon 0:61da21bfd120 237 wait(1);
Ricky_Kwon 0:61da21bfd120 238 }
Ricky_Kwon 0:61da21bfd120 239 #endif
MidnightCow 4:4bef734cc93e 240 sprintf(ftpbuf, "list\r\n");
MidnightCow 4:4bef734cc93e 241 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 242 }
MidnightCow 4:4bef734cc93e 243 else if(!strncmp(ftpbuf, "226",3)) break;
Ricky_Kwon 0:61da21bfd120 244 }
Ricky_Kwon 0:61da21bfd120 245 }
MidnightCow 4:4bef734cc93e 246 return true;
Ricky_Kwon 0:61da21bfd120 247 }
MidnightCow 4:4bef734cc93e 248 *liststr = 0;
MidnightCow 4:4bef734cc93e 249 return false;
Ricky_Kwon 0:61da21bfd120 250 }
Ricky_Kwon 0:61da21bfd120 251
MidnightCow 4:4bef734cc93e 252 bool FTPClient::ls(char* liststr){
Ricky_Kwon 0:61da21bfd120 253
MidnightCow 4:4bef734cc93e 254 int size ;
Ricky_Kwon 0:61da21bfd120 255 if(blogin){
Ricky_Kwon 0:61da21bfd120 256
MidnightCow 4:4bef734cc93e 257 sprintf(ftpbuf, "pasv\r\n");
MidnightCow 4:4bef734cc93e 258 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 259
MidnightCow 4:4bef734cc93e 260 while(1){
MidnightCow 4:4bef734cc93e 261 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 262 if(size > 0){
Ricky_Kwon 0:61da21bfd120 263 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 264 printf("Received message from server: %s\r\n", ftpbuf);
Ricky_Kwon 0:61da21bfd120 265 #endif
MidnightCow 4:4bef734cc93e 266 if (!strncmp(ftpbuf, "150", 3)){
MidnightCow 4:4bef734cc93e 267 while(1){
MidnightCow 4:4bef734cc93e 268 size = FTPClientDataSock.receive(ftpbuf, sizeof(ftpbuf));
Ricky_Kwon 0:61da21bfd120 269 if(size>0){
MidnightCow 4:4bef734cc93e 270 ftpbuf[size] = '\0';
MidnightCow 4:4bef734cc93e 271 strcpy(liststr,ftpbuf);
MidnightCow 4:4bef734cc93e 272 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 273 printf("%s", ftpbuf);
MidnightCow 4:4bef734cc93e 274 #endif
Ricky_Kwon 0:61da21bfd120 275 }
Ricky_Kwon 0:61da21bfd120 276 else{
MidnightCow 4:4bef734cc93e 277 FTPClientDataSock.close();
Ricky_Kwon 0:61da21bfd120 278 break;
Ricky_Kwon 0:61da21bfd120 279 }
Ricky_Kwon 0:61da21bfd120 280 }
Ricky_Kwon 0:61da21bfd120 281 }
MidnightCow 4:4bef734cc93e 282 else if (!strncmp(ftpbuf, "227", 3)){
MidnightCow 4:4bef734cc93e 283 pportc(ftpbuf);
Ricky_Kwon 0:61da21bfd120 284 #if 0
Ricky_Kwon 0:61da21bfd120 285 do{
MidnightCow 4:4bef734cc93e 286 FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port);
MidnightCow 4:4bef734cc93e 287 }while(!FTPClientDataSock.is_connected());
Ricky_Kwon 0:61da21bfd120 288 #endif
Ricky_Kwon 0:61da21bfd120 289 #if 1
MidnightCow 4:4bef734cc93e 290 while (FTPClientDataSock.connect(ftpServer_data_ip_addr_str, remote_port) < 0) {
Ricky_Kwon 0:61da21bfd120 291 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 292 printf("Unable to connect to (%s) on port (%d)\r\n", ftpServer_data_ip_addr_str, remote_port);
Ricky_Kwon 0:61da21bfd120 293 #endif
Ricky_Kwon 0:61da21bfd120 294 wait(1);
Ricky_Kwon 0:61da21bfd120 295 }
Ricky_Kwon 0:61da21bfd120 296 #endif
MidnightCow 4:4bef734cc93e 297 sprintf(ftpbuf, "nlst\r\n");
MidnightCow 4:4bef734cc93e 298 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 299 }
MidnightCow 4:4bef734cc93e 300 else if(!strncmp(ftpbuf,"226",3)) break;
Ricky_Kwon 0:61da21bfd120 301 }
Ricky_Kwon 0:61da21bfd120 302 }
MidnightCow 4:4bef734cc93e 303 return true;
Ricky_Kwon 0:61da21bfd120 304 }
MidnightCow 4:4bef734cc93e 305 *liststr = 0;
MidnightCow 4:4bef734cc93e 306 return false;
Ricky_Kwon 0:61da21bfd120 307 }
Ricky_Kwon 0:61da21bfd120 308
Ricky_Kwon 0:61da21bfd120 309 bool FTPClient::fdelete(char* filename){
MidnightCow 4:4bef734cc93e 310 int size;
Ricky_Kwon 0:61da21bfd120 311 if(blogin){
Ricky_Kwon 0:61da21bfd120 312
MidnightCow 4:4bef734cc93e 313 sprintf(ftpbuf, "dele %s\r\n", filename);
MidnightCow 4:4bef734cc93e 314 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 315
MidnightCow 4:4bef734cc93e 316 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
MidnightCow 4:4bef734cc93e 317 if(size > 0){
MidnightCow 4:4bef734cc93e 318 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 319 printf("Received message from server: %s\r\n", ftpbuf);
MidnightCow 4:4bef734cc93e 320 #endif
MidnightCow 4:4bef734cc93e 321 if (!strncmp(ftpbuf, "250", 3)) return true;
Ricky_Kwon 0:61da21bfd120 322 }
Ricky_Kwon 0:61da21bfd120 323 }
MidnightCow 4:4bef734cc93e 324 return false;
Ricky_Kwon 0:61da21bfd120 325 }
MidnightCow 4:4bef734cc93e 326
Ricky_Kwon 0:61da21bfd120 327 bool FTPClient::mkdir(char* dirname){
Ricky_Kwon 0:61da21bfd120 328
MidnightCow 4:4bef734cc93e 329 int size;
MidnightCow 4:4bef734cc93e 330 if(blogin){
MidnightCow 4:4bef734cc93e 331
MidnightCow 4:4bef734cc93e 332 sprintf(ftpbuf, "xmkd %s\r\n", dirname);
MidnightCow 4:4bef734cc93e 333 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
MidnightCow 4:4bef734cc93e 334
MidnightCow 4:4bef734cc93e 335 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
MidnightCow 4:4bef734cc93e 336 if(size > 0){
MidnightCow 4:4bef734cc93e 337 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 338 printf("Received message from server: %s\r\n", ftpbuf);
MidnightCow 4:4bef734cc93e 339 #endif
MidnightCow 4:4bef734cc93e 340 if (!strncmp(ftpbuf, "257", 3)) return true;
MidnightCow 4:4bef734cc93e 341 }
MidnightCow 4:4bef734cc93e 342 }
MidnightCow 4:4bef734cc93e 343 return false;
MidnightCow 4:4bef734cc93e 344 }
MidnightCow 4:4bef734cc93e 345
MidnightCow 4:4bef734cc93e 346 bool FTPClient::cd(char* dirname){
MidnightCow 4:4bef734cc93e 347 int size;
MidnightCow 4:4bef734cc93e 348
Ricky_Kwon 0:61da21bfd120 349 if(blogin){
Ricky_Kwon 0:61da21bfd120 350
MidnightCow 4:4bef734cc93e 351 sprintf(ftpbuf, "cwd %s\r\n", dirname);
MidnightCow 4:4bef734cc93e 352 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 353
MidnightCow 4:4bef734cc93e 354 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
MidnightCow 4:4bef734cc93e 355 if(size > 0){
MidnightCow 4:4bef734cc93e 356 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 357 printf("Received message from server: %s\r\n", ftpbuf);
MidnightCow 4:4bef734cc93e 358 #endif
MidnightCow 4:4bef734cc93e 359 if (!strncmp(ftpbuf, "250", 3)) return true;
Ricky_Kwon 0:61da21bfd120 360 }
Ricky_Kwon 0:61da21bfd120 361 }
MidnightCow 4:4bef734cc93e 362 return false;
Ricky_Kwon 0:61da21bfd120 363 }
MidnightCow 4:4bef734cc93e 364
MidnightCow 4:4bef734cc93e 365 bool FTPClient::quit(){
MidnightCow 4:4bef734cc93e 366 int size;
Ricky_Kwon 0:61da21bfd120 367 if(blogin){
Ricky_Kwon 0:61da21bfd120 368
MidnightCow 4:4bef734cc93e 369 sprintf(ftpbuf, "quit \r\n");
MidnightCow 4:4bef734cc93e 370 FTPClientControlSock.send(ftpbuf, strlen(ftpbuf));
Ricky_Kwon 0:61da21bfd120 371
MidnightCow 4:4bef734cc93e 372 size = FTPClientControlSock.receive(ftpbuf, sizeof(ftpbuf));
MidnightCow 4:4bef734cc93e 373 if(size > 0){
MidnightCow 4:4bef734cc93e 374 #ifdef DEBUG
MidnightCow 4:4bef734cc93e 375 printf("Received message from server: %s\r\n", ftpbuf);
MidnightCow 4:4bef734cc93e 376 #endif
MidnightCow 4:4bef734cc93e 377 if (!strncmp(ftpbuf, "250", 3)){
MidnightCow 4:4bef734cc93e 378 printf("%s\r\n", ftpbuf);
MidnightCow 4:4bef734cc93e 379 FTPClientControlSock.close();
MidnightCow 4:4bef734cc93e 380 blogin = false;
MidnightCow 4:4bef734cc93e 381 return true;
MidnightCow 4:4bef734cc93e 382 }
MidnightCow 4:4bef734cc93e 383 }
Ricky_Kwon 0:61da21bfd120 384 }
MidnightCow 4:4bef734cc93e 385 blogin = false;
MidnightCow 4:4bef734cc93e 386 return false;
Ricky_Kwon 0:61da21bfd120 387 }
MidnightCow 4:4bef734cc93e 388
Ricky_Kwon 0:61da21bfd120 389 int FTPClient::pportc(char * arg)
Ricky_Kwon 0:61da21bfd120 390 {
MidnightCow 4:4bef734cc93e 391 uint8_t ip[4];
Ricky_Kwon 0:61da21bfd120 392 char* tok=0;
MidnightCow 4:4bef734cc93e 393 char* lasts = 0;
MidnightCow 4:4bef734cc93e 394 int i;
MidnightCow 4:4bef734cc93e 395
MidnightCow 4:4bef734cc93e 396 tok = strchr(arg, '(') + 1 ;
Ricky_Kwon 0:61da21bfd120 397 for (i = 0; i < 4; i++)
Ricky_Kwon 0:61da21bfd120 398 {
MidnightCow 4:4bef734cc93e 399 tok = strtok_r(tok,",", &lasts);
MidnightCow 4:4bef734cc93e 400 ip[i] = (uint8_t)atoi(tok);
MidnightCow 4:4bef734cc93e 401 tok = lasts;
Ricky_Kwon 0:61da21bfd120 402 if (!tok){
Ricky_Kwon 0:61da21bfd120 403 #ifndef DEBUG
Ricky_Kwon 0:61da21bfd120 404 printf("bad pport : %s\r\n", arg);
Ricky_Kwon 0:61da21bfd120 405 #endif
Ricky_Kwon 0:61da21bfd120 406 return -1;
Ricky_Kwon 0:61da21bfd120 407 }
Ricky_Kwon 0:61da21bfd120 408 }
Ricky_Kwon 0:61da21bfd120 409 remote_port = 0;
Ricky_Kwon 0:61da21bfd120 410 for (i = 0; i < 2; i++){
MidnightCow 4:4bef734cc93e 411 tok = strtok_r(tok,",)",&lasts);
Ricky_Kwon 0:61da21bfd120 412 remote_port <<= 8;
Ricky_Kwon 0:61da21bfd120 413 remote_port += atoi(tok);
MidnightCow 4:4bef734cc93e 414 tok = lasts;
Ricky_Kwon 0:61da21bfd120 415 if (!tok){
Ricky_Kwon 0:61da21bfd120 416 #ifdef DEBUG
Ricky_Kwon 0:61da21bfd120 417 printf("bad pport : %s\r\n", arg);
Ricky_Kwon 0:61da21bfd120 418 #endif
Ricky_Kwon 0:61da21bfd120 419 return -1;
Ricky_Kwon 0:61da21bfd120 420 }
Ricky_Kwon 0:61da21bfd120 421 }
MidnightCow 4:4bef734cc93e 422 sprintf(ftpServer_data_ip_addr_str, "%d.%d.%d.%d", ip[0],ip[1],ip[2],ip[3]);
MidnightCow 4:4bef734cc93e 423 return 0;
Ricky_Kwon 0:61da21bfd120 424 }
Ricky_Kwon 0:61da21bfd120 425
Ricky_Kwon 0:61da21bfd120 426
Ricky_Kwon 0:61da21bfd120 427
Ricky_Kwon 0:61da21bfd120 428