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