Update FTPClient

Dependents:   Digital_Photo_Frame_with_FTP_SD_WIZwiki-W7500 FTP_Streaming_Music_Player_WIZwiki-W7500 GIF2015 MP3Decoding_VS1002_WIZwiki-W7500

Fork of FTPClient by Midnight Cow

Committer:
MidnightCow
Date:
Sat Aug 15 08:43:02 2015 +0000
Revision:
4:4bef734cc93e
Parent:
3:4fd8e5cd6307
Child:
5:fe95043a506e
Update FTPClient

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