Update FTPClient
Fork of FTPClient by
FTPClient.cpp@5:f748d78bba4e, 2015-08-26 (annotated)
- 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?
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: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 |