This is FTPClient Program.

Dependencies:   SDFileSystem WIZnetInterface_Ricky mbed-src

Committer:
Ricky_Kwon
Date:
Thu Jul 23 00:57:19 2015 +0000
Revision:
2:3aa502df9b3b
Parent:
0:ae81a181c789
optimization

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ricky_Kwon 0:ae81a181c789 1 #include "mbed.h"
Ricky_Kwon 0:ae81a181c789 2 #include "SDFileSystem.h"
Ricky_Kwon 0:ae81a181c789 3 #include "EthernetInterface.h"
Ricky_Kwon 0:ae81a181c789 4
Ricky_Kwon 0:ae81a181c789 5 /* FTP */
Ricky_Kwon 0:ae81a181c789 6 #define USER "user "
Ricky_Kwon 0:ae81a181c789 7 #define PASS "pass "
Ricky_Kwon 0:ae81a181c789 8 #define PASV "pasv "
Ricky_Kwon 0:ae81a181c789 9 #define PORT "port "
Ricky_Kwon 0:ae81a181c789 10 #define LIST "list "
Ricky_Kwon 0:ae81a181c789 11 #define STOR "stor "
Ricky_Kwon 0:ae81a181c789 12 #define RETR "retr "
Ricky_Kwon 0:ae81a181c789 13 #define END "\r\n"
Ricky_Kwon 0:ae81a181c789 14 #define FTP_SERVER_PORT 21
Ricky_Kwon 0:ae81a181c789 15 #define MAX_SS 256
Ricky_Kwon 0:ae81a181c789 16 bool gMenuStart = false;
Ricky_Kwon 0:ae81a181c789 17 bool gDataSockReady = false;
Ricky_Kwon 0:ae81a181c789 18 bool gDataPutGetStart = false;
Ricky_Kwon 0:ae81a181c789 19 bool FTPServerLogin = false;
Ricky_Kwon 0:ae81a181c789 20 int remote_port;
Ricky_Kwon 0:ae81a181c789 21 char ftpServer_data_ip_addr[4]={0,};
Ricky_Kwon 0:ae81a181c789 22 char ftpServer_data_ip_addr_str[20]={0,};
Ricky_Kwon 0:ae81a181c789 23 static char buf[256];
Ricky_Kwon 0:ae81a181c789 24 enum CommandFirst {
Ricky_Kwon 0:ae81a181c789 25 f_nocmd,
Ricky_Kwon 0:ae81a181c789 26 f_dir,
Ricky_Kwon 0:ae81a181c789 27 f_put,
Ricky_Kwon 0:ae81a181c789 28 f_get,
Ricky_Kwon 0:ae81a181c789 29 };
Ricky_Kwon 0:ae81a181c789 30 enum CommandSecond {
Ricky_Kwon 0:ae81a181c789 31 s_nocmd,
Ricky_Kwon 0:ae81a181c789 32 s_dir,
Ricky_Kwon 0:ae81a181c789 33 s_put,
Ricky_Kwon 0:ae81a181c789 34 s_get,
Ricky_Kwon 0:ae81a181c789 35 };
Ricky_Kwon 0:ae81a181c789 36 enum ftpc_datasock_state{
Ricky_Kwon 0:ae81a181c789 37 DATASOCK_IDLE,
Ricky_Kwon 0:ae81a181c789 38 DATASOCK_READY,
Ricky_Kwon 0:ae81a181c789 39 DATASOCK_START
Ricky_Kwon 0:ae81a181c789 40 };
Ricky_Kwon 0:ae81a181c789 41 struct Command {
Ricky_Kwon 0:ae81a181c789 42 enum CommandFirst First;
Ricky_Kwon 0:ae81a181c789 43 enum CommandSecond Second;
Ricky_Kwon 0:ae81a181c789 44 };
Ricky_Kwon 0:ae81a181c789 45 struct ftpc {
Ricky_Kwon 0:ae81a181c789 46 enum ftpc_datasock_state dsock_state;
Ricky_Kwon 0:ae81a181c789 47 };
Ricky_Kwon 0:ae81a181c789 48 struct ftpc FTPClient;
Ricky_Kwon 0:ae81a181c789 49 struct Command FTPCommand;
Ricky_Kwon 0:ae81a181c789 50
Ricky_Kwon 0:ae81a181c789 51 /* SD Card filesystem */
Ricky_Kwon 0:ae81a181c789 52 SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // WIZwiki-W7500
Ricky_Kwon 0:ae81a181c789 53 FILE *ftpfile;
Ricky_Kwon 0:ae81a181c789 54 char ftpfilename[32];
Ricky_Kwon 0:ae81a181c789 55 /* UART */
Ricky_Kwon 0:ae81a181c789 56 Serial pc(USBTX, USBRX);
Ricky_Kwon 0:ae81a181c789 57 char gMsgBuf[10];
Ricky_Kwon 0:ae81a181c789 58 int User_Keyboard_MSG_Cnt;
Ricky_Kwon 0:ae81a181c789 59
Ricky_Kwon 0:ae81a181c789 60 /* Fuction*/
Ricky_Kwon 0:ae81a181c789 61 char* User_Keyboard_MSG(void);
Ricky_Kwon 0:ae81a181c789 62 int pportc(char * arg);
Ricky_Kwon 0:ae81a181c789 63
Ricky_Kwon 0:ae81a181c789 64
Ricky_Kwon 0:ae81a181c789 65 int main() {
Ricky_Kwon 0:ae81a181c789 66
Ricky_Kwon 0:ae81a181c789 67 char Msg_c;
Ricky_Kwon 0:ae81a181c789 68 int size;
Ricky_Kwon 0:ae81a181c789 69 int remain_datasize;
Ricky_Kwon 0:ae81a181c789 70 int remain_filesize;
Ricky_Kwon 0:ae81a181c789 71 int send_byte;
Ricky_Kwon 0:ae81a181c789 72
Ricky_Kwon 0:ae81a181c789 73
Ricky_Kwon 0:ae81a181c789 74 pc.baud(115200);
Ricky_Kwon 0:ae81a181c789 75
Ricky_Kwon 0:ae81a181c789 76 pc.printf("Hello FTPClient World!\r\n");
Ricky_Kwon 0:ae81a181c789 77
Ricky_Kwon 2:3aa502df9b3b 78 //Module IP, Please set according to your network environment.
Ricky_Kwon 0:ae81a181c789 79 uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x12, 0x34, 0x45};
Ricky_Kwon 0:ae81a181c789 80 const char ip_addr[] = "192.168.0.123";
Ricky_Kwon 0:ae81a181c789 81 const char mask_addr[] = "255.255.255.0";
Ricky_Kwon 0:ae81a181c789 82 const char gateway_addr[] = "192.168.0.1";
Ricky_Kwon 2:3aa502df9b3b 83
Ricky_Kwon 2:3aa502df9b3b 84 //FTPServer IP, Please set according to your network environment.
Ricky_Kwon 0:ae81a181c789 85 const char ftpServer_control_ip_addr[] = "192.168.0.230";
Ricky_Kwon 0:ae81a181c789 86
Ricky_Kwon 0:ae81a181c789 87
Ricky_Kwon 0:ae81a181c789 88 EthernetInterface eth;
Ricky_Kwon 0:ae81a181c789 89 eth.init(mac_addr, ip_addr, mask_addr, gateway_addr); //Use Static
Ricky_Kwon 0:ae81a181c789 90 eth.connect();
Ricky_Kwon 0:ae81a181c789 91
Ricky_Kwon 0:ae81a181c789 92 TCPSocketConnection FTP_CONTROL_SOCK;
Ricky_Kwon 0:ae81a181c789 93 TCPSocketConnection FTP_DATA_SOCK;
Ricky_Kwon 0:ae81a181c789 94
Ricky_Kwon 0:ae81a181c789 95 mkdir("/sd/FTPClient", 0777);
Ricky_Kwon 0:ae81a181c789 96 //while 1
Ricky_Kwon 0:ae81a181c789 97 while(true)
Ricky_Kwon 0:ae81a181c789 98 {
Ricky_Kwon 0:ae81a181c789 99 //while 2
Ricky_Kwon 0:ae81a181c789 100 while(!FTP_CONTROL_SOCK.is_connected()){
Ricky_Kwon 0:ae81a181c789 101 pc.printf("Connecting...FTPServer\r\nIP:%s, PORT:%d\r\n", ftpServer_control_ip_addr, FTP_SERVER_PORT);
Ricky_Kwon 0:ae81a181c789 102 FTP_CONTROL_SOCK.connect(ftpServer_control_ip_addr, FTP_SERVER_PORT);
Ricky_Kwon 0:ae81a181c789 103 FTP_CONTROL_SOCK.set_blocking(false, 15000); // Timeout after (1.5)s
Ricky_Kwon 0:ae81a181c789 104 }//end of while 2
Ricky_Kwon 0:ae81a181c789 105
Ricky_Kwon 0:ae81a181c789 106 //while 3
Ricky_Kwon 0:ae81a181c789 107 while(true)
Ricky_Kwon 0:ae81a181c789 108 {
Ricky_Kwon 0:ae81a181c789 109 /* User Interface */
Ricky_Kwon 0:ae81a181c789 110 //gMenuStart if
Ricky_Kwon 0:ae81a181c789 111 if(gMenuStart){
Ricky_Kwon 0:ae81a181c789 112 gMenuStart = false;
Ricky_Kwon 0:ae81a181c789 113 pc.printf("\r\n----------------------------------------\r\n");
Ricky_Kwon 0:ae81a181c789 114 pc.printf("Press menu key\r\n");
Ricky_Kwon 0:ae81a181c789 115 pc.printf("----------------------------------------\r\n");
Ricky_Kwon 0:ae81a181c789 116 pc.printf("1> View FTPServer Directory\r\n");
Ricky_Kwon 0:ae81a181c789 117 pc.printf("2> View My Directory\r\n");
Ricky_Kwon 0:ae81a181c789 118 pc.printf("3> Put File to Server\r\n");
Ricky_Kwon 0:ae81a181c789 119 pc.printf("4> Get File from Server\r\n");
Ricky_Kwon 0:ae81a181c789 120 pc.printf("----------------------------------------\r\n");
Ricky_Kwon 0:ae81a181c789 121 //while 4
Ricky_Kwon 2:3aa502df9b3b 122 Msg_c = pc.getc();
Ricky_Kwon 2:3aa502df9b3b 123 // Msg_c if
Ricky_Kwon 2:3aa502df9b3b 124 if(Msg_c=='1'){
Ricky_Kwon 2:3aa502df9b3b 125 FTP_CONTROL_SOCK.send(PASV, sizeof(PASV)-1);
Ricky_Kwon 2:3aa502df9b3b 126 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 2:3aa502df9b3b 127 FTPCommand.First = f_dir;
Ricky_Kwon 2:3aa502df9b3b 128 break;
Ricky_Kwon 2:3aa502df9b3b 129 }
Ricky_Kwon 2:3aa502df9b3b 130 else if(Msg_c=='2'){
Ricky_Kwon 2:3aa502df9b3b 131 pc.printf("Open directory on /sd/FTPClient\r\n");
Ricky_Kwon 2:3aa502df9b3b 132 DIR *d = opendir("/sd/FTPClient");
Ricky_Kwon 2:3aa502df9b3b 133 struct dirent *p;
Ricky_Kwon 2:3aa502df9b3b 134 while((p = readdir(d)) != NULL) {
Ricky_Kwon 2:3aa502df9b3b 135 pc.printf("%s\r\n", p->d_name);
Ricky_Kwon 0:ae81a181c789 136 }
Ricky_Kwon 2:3aa502df9b3b 137 closedir(d);
Ricky_Kwon 2:3aa502df9b3b 138 gMenuStart = true;
Ricky_Kwon 2:3aa502df9b3b 139 break;
Ricky_Kwon 2:3aa502df9b3b 140 }
Ricky_Kwon 2:3aa502df9b3b 141 else if(Msg_c=='3'){
Ricky_Kwon 2:3aa502df9b3b 142 FTP_CONTROL_SOCK.send(PASV, sizeof(PASV)-1);
Ricky_Kwon 2:3aa502df9b3b 143 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 2:3aa502df9b3b 144 FTPCommand.First = f_put;
Ricky_Kwon 2:3aa502df9b3b 145 break;
Ricky_Kwon 2:3aa502df9b3b 146 }
Ricky_Kwon 2:3aa502df9b3b 147 else if(Msg_c=='4'){
Ricky_Kwon 2:3aa502df9b3b 148 FTP_CONTROL_SOCK.send(PASV, sizeof(PASV)-1);
Ricky_Kwon 2:3aa502df9b3b 149 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 2:3aa502df9b3b 150 FTPCommand.First = f_get;
Ricky_Kwon 2:3aa502df9b3b 151 break;
Ricky_Kwon 2:3aa502df9b3b 152 }
Ricky_Kwon 2:3aa502df9b3b 153 else{
Ricky_Kwon 2:3aa502df9b3b 154 pc.printf("Retry...\r\n");
Ricky_Kwon 2:3aa502df9b3b 155 gMenuStart = true;
Ricky_Kwon 2:3aa502df9b3b 156 break;
Ricky_Kwon 2:3aa502df9b3b 157 }//end of Msg_c if
Ricky_Kwon 0:ae81a181c789 158 }//end of gMenuStart if
Ricky_Kwon 0:ae81a181c789 159
Ricky_Kwon 0:ae81a181c789 160 //gDataSockReady if
Ricky_Kwon 0:ae81a181c789 161 if(gDataSockReady){
Ricky_Kwon 0:ae81a181c789 162 gDataSockReady = false;
Ricky_Kwon 0:ae81a181c789 163 //FTPCommand.First switch case
Ricky_Kwon 0:ae81a181c789 164 switch(FTPCommand.First){
Ricky_Kwon 0:ae81a181c789 165 case f_dir:
Ricky_Kwon 0:ae81a181c789 166 FTP_CONTROL_SOCK.send(LIST, sizeof(LIST)-1);
Ricky_Kwon 0:ae81a181c789 167 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:ae81a181c789 168 break;
Ricky_Kwon 0:ae81a181c789 169 case f_put:
Ricky_Kwon 0:ae81a181c789 170 pc.printf(">put file name?");
Ricky_Kwon 0:ae81a181c789 171 User_Keyboard_MSG();
Ricky_Kwon 0:ae81a181c789 172 FTP_CONTROL_SOCK.send(STOR, sizeof(STOR)-1);
Ricky_Kwon 0:ae81a181c789 173 FTP_CONTROL_SOCK.send(gMsgBuf, User_Keyboard_MSG_Cnt-1);
Ricky_Kwon 0:ae81a181c789 174 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:ae81a181c789 175 break;
Ricky_Kwon 0:ae81a181c789 176 case f_get:
Ricky_Kwon 0:ae81a181c789 177 pc.printf(">get file name?");
Ricky_Kwon 0:ae81a181c789 178 User_Keyboard_MSG();
Ricky_Kwon 0:ae81a181c789 179 FTP_CONTROL_SOCK.send(RETR, sizeof(RETR)-1);
Ricky_Kwon 0:ae81a181c789 180 FTP_CONTROL_SOCK.send(gMsgBuf, User_Keyboard_MSG_Cnt-1);
Ricky_Kwon 0:ae81a181c789 181 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:ae81a181c789 182 break;
Ricky_Kwon 0:ae81a181c789 183 default:
Ricky_Kwon 0:ae81a181c789 184 pc.printf("Command.First = default\r\n");
Ricky_Kwon 0:ae81a181c789 185 break;
Ricky_Kwon 0:ae81a181c789 186 }//end of FTPCommand.First switch case
Ricky_Kwon 0:ae81a181c789 187 }//end of gDataSockReady if
Ricky_Kwon 2:3aa502df9b3b 188 /* received from FTPServer ControlSock*/
Ricky_Kwon 0:ae81a181c789 189 int n = FTP_CONTROL_SOCK.receive(buf, sizeof(buf));
Ricky_Kwon 0:ae81a181c789 190 if (n <= 0) break;
Ricky_Kwon 0:ae81a181c789 191 buf[n] = '\0';
Ricky_Kwon 0:ae81a181c789 192 pc.printf("Received message from server: '%s' \n", buf);
Ricky_Kwon 0:ae81a181c789 193
Ricky_Kwon 0:ae81a181c789 194 //buf if
Ricky_Kwon 0:ae81a181c789 195 if (!strncmp(buf, "220", 3)){
Ricky_Kwon 0:ae81a181c789 196 pc.printf("\r\nInput your User ID > ");
Ricky_Kwon 0:ae81a181c789 197 User_Keyboard_MSG();
Ricky_Kwon 0:ae81a181c789 198 FTP_CONTROL_SOCK.send(USER, sizeof(USER)-1);
Ricky_Kwon 0:ae81a181c789 199 FTP_CONTROL_SOCK.send(gMsgBuf, User_Keyboard_MSG_Cnt-1);
Ricky_Kwon 0:ae81a181c789 200 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:ae81a181c789 201 }
Ricky_Kwon 0:ae81a181c789 202 else if(!strncmp(buf, "331", 3)){
Ricky_Kwon 0:ae81a181c789 203 pc.printf("\r\nInput your Password > ");
Ricky_Kwon 0:ae81a181c789 204 User_Keyboard_MSG();
Ricky_Kwon 0:ae81a181c789 205 FTP_CONTROL_SOCK.send(PASS, sizeof(PASS)-1);
Ricky_Kwon 0:ae81a181c789 206 FTP_CONTROL_SOCK.send(gMsgBuf, User_Keyboard_MSG_Cnt-1);
Ricky_Kwon 0:ae81a181c789 207 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:ae81a181c789 208 }
Ricky_Kwon 0:ae81a181c789 209 else if(!strncmp(buf, "230", 3)){
Ricky_Kwon 0:ae81a181c789 210 gMenuStart = true;
Ricky_Kwon 0:ae81a181c789 211 }
Ricky_Kwon 0:ae81a181c789 212 else if(!strncmp(buf, "227", 3)){
Ricky_Kwon 0:ae81a181c789 213 if (pportc(buf) == -1){
Ricky_Kwon 0:ae81a181c789 214 pc.printf("Bad port syntax\r\n");
Ricky_Kwon 0:ae81a181c789 215 }
Ricky_Kwon 0:ae81a181c789 216 else{
Ricky_Kwon 0:ae81a181c789 217 pc.printf("Go Open Data Sock...\r\n ");
Ricky_Kwon 0:ae81a181c789 218 FTPClient.dsock_state = DATASOCK_READY;
Ricky_Kwon 0:ae81a181c789 219 }
Ricky_Kwon 0:ae81a181c789 220 }
Ricky_Kwon 0:ae81a181c789 221 else if(!strncmp(buf, "150", 3)){
Ricky_Kwon 0:ae81a181c789 222 switch(FTPCommand.First){
Ricky_Kwon 0:ae81a181c789 223 case f_dir:
Ricky_Kwon 0:ae81a181c789 224 FTPCommand.First = f_nocmd;
Ricky_Kwon 0:ae81a181c789 225 FTPCommand.Second = s_dir;
Ricky_Kwon 0:ae81a181c789 226 gDataPutGetStart = true;
Ricky_Kwon 0:ae81a181c789 227 break;
Ricky_Kwon 0:ae81a181c789 228 case f_get:
Ricky_Kwon 0:ae81a181c789 229 FTPCommand.First = f_nocmd;
Ricky_Kwon 0:ae81a181c789 230 FTPCommand.Second = s_get;
Ricky_Kwon 0:ae81a181c789 231 gDataPutGetStart = true;
Ricky_Kwon 0:ae81a181c789 232 break;
Ricky_Kwon 0:ae81a181c789 233 case f_put:
Ricky_Kwon 0:ae81a181c789 234 FTPCommand.First = f_nocmd;
Ricky_Kwon 0:ae81a181c789 235 FTPCommand.Second = s_put;
Ricky_Kwon 0:ae81a181c789 236 gDataPutGetStart = true;
Ricky_Kwon 0:ae81a181c789 237 break;
Ricky_Kwon 0:ae81a181c789 238 default :
Ricky_Kwon 0:ae81a181c789 239 printf("Command.First = default\r\n");
Ricky_Kwon 0:ae81a181c789 240 break;
Ricky_Kwon 0:ae81a181c789 241 }
Ricky_Kwon 0:ae81a181c789 242 }
Ricky_Kwon 0:ae81a181c789 243 else if(!strncmp(buf, "226", 3)){
Ricky_Kwon 0:ae81a181c789 244 gMenuStart = true;
Ricky_Kwon 0:ae81a181c789 245 }
Ricky_Kwon 0:ae81a181c789 246 else if(!strncmp(buf, "530", 3)){
Ricky_Kwon 0:ae81a181c789 247 FTPServerLogin = true;
Ricky_Kwon 0:ae81a181c789 248 }
Ricky_Kwon 0:ae81a181c789 249 else if(!strncmp(buf, "500", 3)){
Ricky_Kwon 0:ae81a181c789 250 gDataPutGetStart = false;
Ricky_Kwon 0:ae81a181c789 251 FTPCommand.Second = s_nocmd;
Ricky_Kwon 0:ae81a181c789 252 gMenuStart = true;
Ricky_Kwon 0:ae81a181c789 253 FTP_DATA_SOCK.close();
Ricky_Kwon 0:ae81a181c789 254 }//end of buf if
Ricky_Kwon 0:ae81a181c789 255
Ricky_Kwon 0:ae81a181c789 256 if(FTPServerLogin){
Ricky_Kwon 0:ae81a181c789 257 FTPServerLogin = false;
Ricky_Kwon 0:ae81a181c789 258 pc.printf("\r\nID or Password is wrong...Retry\r\n");
Ricky_Kwon 0:ae81a181c789 259 pc.printf("\r\nInput your User ID > ");
Ricky_Kwon 0:ae81a181c789 260 User_Keyboard_MSG();
Ricky_Kwon 0:ae81a181c789 261 FTP_CONTROL_SOCK.send(USER, sizeof(USER)-1);
Ricky_Kwon 0:ae81a181c789 262 FTP_CONTROL_SOCK.send(gMsgBuf, User_Keyboard_MSG_Cnt-1);
Ricky_Kwon 0:ae81a181c789 263 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:ae81a181c789 264 }
Ricky_Kwon 0:ae81a181c789 265
Ricky_Kwon 0:ae81a181c789 266 //DATASOCK_READY if
Ricky_Kwon 0:ae81a181c789 267 if(FTPClient.dsock_state == DATASOCK_READY){
Ricky_Kwon 0:ae81a181c789 268 while(!FTP_DATA_SOCK.is_connected()){
Ricky_Kwon 0:ae81a181c789 269 pc.printf("Connecting...FTPServer Data sock\r\nIP:%s, PORT:%d\r\n", ftpServer_data_ip_addr_str, remote_port);
Ricky_Kwon 0:ae81a181c789 270 FTP_DATA_SOCK.connect(ftpServer_control_ip_addr, remote_port);
Ricky_Kwon 0:ae81a181c789 271 FTP_DATA_SOCK.set_blocking(false, 15000); // Timeout after (1.5)s
Ricky_Kwon 0:ae81a181c789 272 }
Ricky_Kwon 0:ae81a181c789 273 FTPClient.dsock_state = DATASOCK_IDLE;
Ricky_Kwon 0:ae81a181c789 274 gDataSockReady = true;
Ricky_Kwon 0:ae81a181c789 275 }//end of DATASOCK_READY if
Ricky_Kwon 0:ae81a181c789 276
Ricky_Kwon 0:ae81a181c789 277 //gDataPutGetStart if
Ricky_Kwon 0:ae81a181c789 278 if(gDataPutGetStart){
Ricky_Kwon 0:ae81a181c789 279 //FTPCommand.Second switch case
Ricky_Kwon 0:ae81a181c789 280 switch(FTPCommand.Second){
Ricky_Kwon 0:ae81a181c789 281 case s_dir:
Ricky_Kwon 0:ae81a181c789 282 pc.printf("dir waiting...\r\n");
Ricky_Kwon 0:ae81a181c789 283 pc.printf("FTPServer Directory\r\n");
Ricky_Kwon 0:ae81a181c789 284 while(true){
Ricky_Kwon 0:ae81a181c789 285 memset(buf, 0, sizeof(buf));
Ricky_Kwon 0:ae81a181c789 286 size = FTP_DATA_SOCK.receive(buf, sizeof(buf));
Ricky_Kwon 0:ae81a181c789 287 buf[size] = '\0';
Ricky_Kwon 0:ae81a181c789 288 if(size>0){
Ricky_Kwon 0:ae81a181c789 289 pc.printf("%s", buf);
Ricky_Kwon 0:ae81a181c789 290 }
Ricky_Kwon 0:ae81a181c789 291 else{
Ricky_Kwon 0:ae81a181c789 292 break;
Ricky_Kwon 0:ae81a181c789 293 }
Ricky_Kwon 0:ae81a181c789 294 }
Ricky_Kwon 0:ae81a181c789 295 pc.printf("FTPServer Directory\r\n%s\r\n", buf);
Ricky_Kwon 0:ae81a181c789 296 gDataPutGetStart = false;
Ricky_Kwon 0:ae81a181c789 297 FTPCommand.Second = s_nocmd;
Ricky_Kwon 0:ae81a181c789 298 FTP_DATA_SOCK.close();
Ricky_Kwon 0:ae81a181c789 299 break;
Ricky_Kwon 0:ae81a181c789 300 case s_get:
Ricky_Kwon 0:ae81a181c789 301 pc.printf("get waiting...\r\n");
Ricky_Kwon 0:ae81a181c789 302 sprintf(ftpfilename, "/sd/FTPClient/%s", gMsgBuf);
Ricky_Kwon 0:ae81a181c789 303 ftpfile = fopen(ftpfilename, "w");
Ricky_Kwon 0:ae81a181c789 304 while(true){
Ricky_Kwon 0:ae81a181c789 305 memset(buf, 0, sizeof(buf));
Ricky_Kwon 0:ae81a181c789 306 remain_datasize = FTP_DATA_SOCK.receive(buf, sizeof(buf));
Ricky_Kwon 0:ae81a181c789 307 if(remain_datasize>0){
Ricky_Kwon 0:ae81a181c789 308 for (int i = 0; i < (int)remain_datasize; i++) {
Ricky_Kwon 0:ae81a181c789 309 fprintf(ftpfile, "%c", buf[i]);
Ricky_Kwon 0:ae81a181c789 310 }
Ricky_Kwon 0:ae81a181c789 311 pc.printf("#");
Ricky_Kwon 0:ae81a181c789 312 }
Ricky_Kwon 0:ae81a181c789 313 else{
Ricky_Kwon 0:ae81a181c789 314 break;
Ricky_Kwon 0:ae81a181c789 315 }
Ricky_Kwon 0:ae81a181c789 316 }
Ricky_Kwon 0:ae81a181c789 317 fclose(ftpfile);
Ricky_Kwon 0:ae81a181c789 318 gDataPutGetStart = false;
Ricky_Kwon 0:ae81a181c789 319 FTPCommand.Second = s_nocmd;
Ricky_Kwon 0:ae81a181c789 320 FTP_DATA_SOCK.close();
Ricky_Kwon 0:ae81a181c789 321 break;
Ricky_Kwon 0:ae81a181c789 322 case s_put:
Ricky_Kwon 0:ae81a181c789 323 pc.printf("put waiting...\r\n");
Ricky_Kwon 0:ae81a181c789 324 sprintf(ftpfilename, "/sd/FTPClient/%s", gMsgBuf);
Ricky_Kwon 0:ae81a181c789 325 ftpfile = fopen(ftpfilename, "r");
Ricky_Kwon 0:ae81a181c789 326 fseek(ftpfile, 0, SEEK_END); // seek to end of file
Ricky_Kwon 0:ae81a181c789 327 remain_filesize = ftell(ftpfile); // get current file pointer
Ricky_Kwon 0:ae81a181c789 328 fseek(ftpfile, 0, SEEK_SET); // seek back to beginning of file
Ricky_Kwon 0:ae81a181c789 329 do{
Ricky_Kwon 0:ae81a181c789 330 memset(buf, 0, sizeof(buf));
Ricky_Kwon 0:ae81a181c789 331 if(remain_filesize > MAX_SS)
Ricky_Kwon 0:ae81a181c789 332 send_byte = MAX_SS;
Ricky_Kwon 0:ae81a181c789 333 else
Ricky_Kwon 0:ae81a181c789 334 send_byte = remain_filesize;
Ricky_Kwon 0:ae81a181c789 335 fread (buf, 1, send_byte, ftpfile);
Ricky_Kwon 0:ae81a181c789 336 FTP_DATA_SOCK.send(buf, send_byte);
Ricky_Kwon 0:ae81a181c789 337 remain_filesize -= send_byte;
Ricky_Kwon 0:ae81a181c789 338 pc.printf("#");
Ricky_Kwon 0:ae81a181c789 339 }while(remain_filesize!=0);
Ricky_Kwon 0:ae81a181c789 340 fclose(ftpfile);
Ricky_Kwon 0:ae81a181c789 341 gDataPutGetStart = false;
Ricky_Kwon 0:ae81a181c789 342 FTPCommand.Second = s_nocmd;
Ricky_Kwon 0:ae81a181c789 343 FTP_DATA_SOCK.close();
Ricky_Kwon 0:ae81a181c789 344 break;
Ricky_Kwon 0:ae81a181c789 345
Ricky_Kwon 0:ae81a181c789 346 }//end of FTPCommand.Second switch case
Ricky_Kwon 0:ae81a181c789 347 }//end of gDataPutGetStart if
Ricky_Kwon 0:ae81a181c789 348 }//end of while 3
Ricky_Kwon 0:ae81a181c789 349 }//end of while 1
Ricky_Kwon 0:ae81a181c789 350 }
Ricky_Kwon 0:ae81a181c789 351 char* User_Keyboard_MSG(void)
Ricky_Kwon 0:ae81a181c789 352 {
Ricky_Kwon 0:ae81a181c789 353 User_Keyboard_MSG_Cnt = 0;
Ricky_Kwon 0:ae81a181c789 354 memset(gMsgBuf, 0, sizeof(gMsgBuf));
Ricky_Kwon 0:ae81a181c789 355 do{
Ricky_Kwon 0:ae81a181c789 356 gMsgBuf[User_Keyboard_MSG_Cnt] = pc.getc();
Ricky_Kwon 0:ae81a181c789 357 if(gMsgBuf[User_Keyboard_MSG_Cnt]==0x08){
Ricky_Kwon 0:ae81a181c789 358 User_Keyboard_MSG_Cnt--;
Ricky_Kwon 0:ae81a181c789 359 }
Ricky_Kwon 0:ae81a181c789 360 else{
Ricky_Kwon 0:ae81a181c789 361 User_Keyboard_MSG_Cnt++;
Ricky_Kwon 0:ae81a181c789 362 }
Ricky_Kwon 0:ae81a181c789 363 }while(gMsgBuf[User_Keyboard_MSG_Cnt-1]!=0x0d);
Ricky_Kwon 0:ae81a181c789 364 return gMsgBuf;
Ricky_Kwon 0:ae81a181c789 365 }
Ricky_Kwon 0:ae81a181c789 366 int pportc(char * arg)
Ricky_Kwon 0:ae81a181c789 367 {
Ricky_Kwon 0:ae81a181c789 368 int i;
Ricky_Kwon 0:ae81a181c789 369 char* tok=0;
Ricky_Kwon 0:ae81a181c789 370 strtok(arg,"(");
Ricky_Kwon 0:ae81a181c789 371 for (i = 0; i < 4; i++)
Ricky_Kwon 0:ae81a181c789 372 {
Ricky_Kwon 0:ae81a181c789 373 if(i==0) tok = strtok(NULL,",\r\n");
Ricky_Kwon 0:ae81a181c789 374 else tok = strtok(NULL,",");
Ricky_Kwon 0:ae81a181c789 375 ftpServer_data_ip_addr[i] = (uint8_t)atoi(tok);
Ricky_Kwon 0:ae81a181c789 376 if (!tok){
Ricky_Kwon 0:ae81a181c789 377 pc.printf("bad pport : %s\r\n", arg);
Ricky_Kwon 0:ae81a181c789 378 return -1;
Ricky_Kwon 0:ae81a181c789 379 }
Ricky_Kwon 0:ae81a181c789 380 }
Ricky_Kwon 0:ae81a181c789 381 remote_port = 0;
Ricky_Kwon 0:ae81a181c789 382 for (i = 0; i < 2; i++){
Ricky_Kwon 0:ae81a181c789 383 tok = strtok(NULL,",\r\n");
Ricky_Kwon 0:ae81a181c789 384 remote_port <<= 8;
Ricky_Kwon 0:ae81a181c789 385 remote_port += atoi(tok);
Ricky_Kwon 0:ae81a181c789 386 if (!tok){
Ricky_Kwon 0:ae81a181c789 387 pc.printf("bad pport : %s\r\n", arg);
Ricky_Kwon 0:ae81a181c789 388 return -1;
Ricky_Kwon 0:ae81a181c789 389 }
Ricky_Kwon 0:ae81a181c789 390 }
Ricky_Kwon 0:ae81a181c789 391 pc.printf("ip : %d.%d.%d.%d, port : %d\r\n", ftpServer_data_ip_addr[0], ftpServer_data_ip_addr[1], ftpServer_data_ip_addr[2], ftpServer_data_ip_addr[3], remote_port);
Ricky_Kwon 0:ae81a181c789 392 sprintf(ftpServer_data_ip_addr_str, "%d.%d.%d.%d", ftpServer_data_ip_addr[0], ftpServer_data_ip_addr[1], ftpServer_data_ip_addr[2], ftpServer_data_ip_addr[3]);
Ricky_Kwon 0:ae81a181c789 393 return 0;
Ricky_Kwon 0:ae81a181c789 394 }