From 44a5cb0d24f236ee7781f8079daed81e09c7ba1b Mon Sep 17 00:00:00 2001 From: senorisky Date: Thu, 5 Oct 2023 08:50:51 -0700 Subject: [PATCH] ftpclient --- APP_Framework/Applications/app_test/Makefile | 2 +- .../app_test/test_ftpclient/README.md | 71 ++ .../app_test/test_ftpclient/command.png | Bin 0 -> 31302 bytes .../app_test/test_ftpclient/compile.png | Bin 0 -> 146373 bytes .../app_test/test_ftpclient/test.png | Bin 0 -> 4518 bytes .../app_test/test_ftpclient/test_ftpclient.c | 1033 +++++++++++++++++ .../app_test/test_ftpclient/test_ftpclient.h | 128 ++ 7 files changed, 1233 insertions(+), 1 deletion(-) create mode 100644 APP_Framework/Applications/app_test/test_ftpclient/README.md create mode 100644 APP_Framework/Applications/app_test/test_ftpclient/command.png create mode 100644 APP_Framework/Applications/app_test/test_ftpclient/compile.png create mode 100644 APP_Framework/Applications/app_test/test_ftpclient/test.png create mode 100644 APP_Framework/Applications/app_test/test_ftpclient/test_ftpclient.c create mode 100644 APP_Framework/Applications/app_test/test_ftpclient/test_ftpclient.h diff --git a/APP_Framework/Applications/app_test/Makefile b/APP_Framework/Applications/app_test/Makefile index 6b0c1ea96..7f48ccbaa 100644 --- a/APP_Framework/Applications/app_test/Makefile +++ b/APP_Framework/Applications/app_test/Makefile @@ -134,7 +134,7 @@ ifeq ($(CONFIG_ADD_XIZI_FEATURES),y) endif ifeq ($(CONFIG_USER_TEST_FTPCLIENT),y) - SRC_FILES += + SRC_FILES += test_ftpclient/test_ftpclient.c endif ifeq ($(CONFIG_USER_TEST_LORA_P2P),y) diff --git a/APP_Framework/Applications/app_test/test_ftpclient/README.md b/APP_Framework/Applications/app_test/test_ftpclient/README.md new file mode 100644 index 000000000..0c70725fa --- /dev/null +++ b/APP_Framework/Applications/app_test/test_ftpclient/README.md @@ -0,0 +1,71 @@ +# 基于矽璓已实现的Lwip,在ARM上实现FTP协议的Client功能## + +## 1. 简介 +基于矽璓已实现的Lwip,在ARM上实现FTP协议的Client功能,实现文件的上传与下载。 +即基于XiZi内核移植支持FTP Client库,个人电脑中安装FTP服务端软件,充当FTP Server角色,在其上上传10个4KB文件,执行FTP协议的Client实现下载FTP Server上的10个文件。 + +## 2. 数据结构设计说明 +定义zFTP通信管理数据结构 +``` +typedef struct zftp_client_struct { + char user_name[ZFTP_USER_NAME_LEN]; + char password[ZFTP_PASSWORD_LEN]; + char server_ip[ZFTP_SERVER_IP_LEN]; + char data_port[6]; + char control_port[6]; + int control_socket; /* FTP控制socket */ + int data_socket; /* FTP数据socket */ + down_callback download_write; + up_callback upload_read; + void* user_data; + int errorno; + +}zftp_client; +``` +--------- +ftp登录函数 +``` +zftp_client* zFTP_login(char* user_name, char* password, char* server_ip); +``` +--------- +文件上传与回显 +``` +int zFTP_set_callback(zftp_client* ftp, down_callback dw_write, up_callback up_read, void* user_data); +``` +--------- +得到文件大小 +``` +int zFTP_get_filesize(zftp_client* ftp, char* file_name, rt_uint32_t* file_size); +``` +--------- +改变ftp服务器路径 +``` +int zFTP_change_path(zftp_client* ftp, char* path); +``` +--------- +从服务器下载文件 +``` +int zFTP_download_file(zftp_client* ftp, char* file_name); +``` +--------- +上传文件到ftp服务器 +``` +int zFTP_upload_file(zftp_client* ftp, char* file_name); +``` +--------- +退出登录并且停止服务器 +``` +int zFTP_quit(zftp_client* ftp); +``` +--------- +## 3. 测试程序说明 +测试了文件的上传与下载,FTP的TCP链接未建立成功 + +## 4. 运行结果(##需结合运行测试截图按步骤说明##) +编译,烧录bin文件 +![image](compile.png) +查看shell命令 +![image](command.png) +测试结果 +![image](test.png) + diff --git a/APP_Framework/Applications/app_test/test_ftpclient/command.png b/APP_Framework/Applications/app_test/test_ftpclient/command.png new file mode 100644 index 0000000000000000000000000000000000000000..5791d746be776ca8574e779bd918ff0389167ed3 GIT binary patch literal 31302 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 H*XMr#&gGny literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient/compile.png b/APP_Framework/Applications/app_test/test_ftpclient/compile.png new file mode 100644 index 0000000000000000000000000000000000000000..4905b69da1adef8ff6add926e6e08066ec576565 GIT binary patch literal 146373 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 RvN;o7wBO?4FWm! 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

P>y^t#q4)@7laU3FZNb_oN~4g9EC_{N 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 WiYU9I@}@@*kF3-?$ue={!2ba^d7HTa literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient/test.png b/APP_Framework/Applications/app_test/test_ftpclient/test.png new file mode 100644 index 0000000000000000000000000000000000000000..ba9587e6679292034327df3a483849c6aa9f4055 GIT binary patch literal 4518 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 +// #include +// #include +// #include +#include +#include +#include +#include +#include"test_ftpclient.h" +#include "../lwip/sockets.h" +#include "sys_arch.h" + +#define DBG_ENABLE +#define DBG_SECTION_NAME "ftpclient" +#define DBG_LEVEL DBG_INFO +#define ERROR 1 +#define OK 0 + +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 +#define TCP_PROTOCAL 6 +#define TCP_PORT 21 +/********************************************************************************************************* +*       定义FTP的默认用户名称,服务器地址,端口等 +*********************************************************************************************************/ +#define FTP_SVR_ADDR "192.168.5.18" // "172.16.253.184" +#define FTP_USER_NAME "FTPs" +#define FTP_PASSWORD "123456" + +typedef int32_t rt_uint32_t; +typedef int16_t rt_uint16_t; +typedef int8_t rt_uint8_t; +/********************************************************************************************************* +** Function name: zFTP_wait_server_ack() +** Descriptions: FTP client wait server ack +** input parameters: socket, ack_code, wait_time +** output parameters: None +** Returned value: OK, -ERROR +*********************************************************************************************************/ +static int zFTP_wait_server_ack(int socket, rt_uint32_t* ack_code, rt_uint32_t wait_time) { + fd_set readset; + struct timeval timeout; + char ftp_recv_buf[100] = { 0 }; + int recv_len = 0; + int code = 0; + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + /*wait the ack*/ + + FD_ZERO(&readset); + FD_SET(socket, &readset); + + if (select(socket + 1, &readset, NULL, NULL, &timeout) <= 0) { + printf("select the socket timeout!"); + return -ERROR; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + recv_len = recv(socket, (char*)ftp_recv_buf, sizeof(ftp_recv_buf), 0); + + if (recv_len < 0) { + printf("reading from socket error!"); + return -ERROR; + } + return OK; + + + if (1 == sscanf(ftp_recv_buf, "%d", &code)) { + *ack_code = code; + return OK; + } + else { + return -ERROR; + } + + +} + +/********************************************************************************************************* +** Function name: zFTP_send_cmd_wait_server_ack() +** Descriptions: FTP client send the command and wait the sever ack +** input parameters: socket, cmd, cmd_len, ack_code, wait_time +** output parameters: None +** Returned value: OK, -ERROR +*********************************************************************************************************/ +static int zFTP_send_cmd_wait_server_ack(int socket, char* cmd, rt_uint32_t cmd_len, + rt_uint32_t* ack_code, rt_uint32_t wait_time) { + fd_set readset; + struct timeval timeout; + char ftp_recv_buf[100] = { 0 }; + int len = 0; + int code = 0; + + if ((NULL == cmd) || (NULL == ack_code)) { + return -ERROR; + } + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + FD_ZERO(&readset); + FD_SET(socket, &readset); + + /*发送指令*/ + len = send(socket, (char*)cmd, cmd_len, 0); + + if (len < 0) { + printf("send cmd error!"); + return -ERROR; + } + + /*等待应答*/ + if (select(socket + 1, &readset, NULL, NULL, &timeout) <= 0) { + printf("select the socket timeout!"); + return -1; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + len = recv(socket, (char*)ftp_recv_buf, sizeof(ftp_recv_buf), 0); + + if (len < 0) { + printf("reading from socket error!"); + return -ERROR; + } + + if (1 == sscanf(ftp_recv_buf, "%d", &code)) { + *ack_code = code; + return OK; + } + else { + printf("Rcv data:%s", ftp_recv_buf); + return -ERROR; + } + +} + +/********************************************************************************************************* +** Function name: zFTP_filesize_send_cmd() +** Descriptions: zFTP send the get filesize command +** input parameters: 无 +** output parameters: 无 +** Returned value: 无 +*********************************************************************************************************/ +static int zFTP_filesize_send_cmd(int socket, char* cmd, rt_uint32_t cmd_len, rt_uint32_t* ack_code, + rt_uint32_t* file_size, rt_uint32_t wait_time) { + fd_set readset; + struct timeval timeout; + char ftp_recv_buf[100] = { 0 }; + int len = 0; + int code = 0; + int a = 0; + + if ((NULL == ack_code) || (NULL == file_size) || + (NULL == cmd)) { + return -ERROR; + } + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + FD_ZERO(&readset); + FD_SET(socket, &readset); + + /*发送指令*/ + len = send(socket, cmd, cmd_len, 0); + + if (len < 0) { + printf("send cmd error!"); + return -ERROR; + } + + /*等待应答*/ + if (select(socket + 1, &readset, NULL, NULL, &timeout) <= 0) { + printf("select the socket timeout!"); + return -1; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + len = recv(socket, (char*)ftp_recv_buf, sizeof(ftp_recv_buf), 0); + + if (len < 0) { + printf("reading from socket error!"); + return -ERROR; + } + + /*获取文件大小和应答码*/ + if (2 == sscanf(ftp_recv_buf, "%d %d", &code, &a)) { + *ack_code = code; + *file_size = a; + return OK; + } + else { + printf("Rcv data:%s", ftp_recv_buf); + return -ERROR; + } + + +} + + + +/********************************************************************************************************* +** Function name: ftp_pasv_mode() +** Descriptions: FTP客户端发送命令给服务器进入pasv模式 +** input parameters: 无 +** output parameters: 无 +** Returned value: 无 +*********************************************************************************************************/ +static int zFTP_pasv_mode(int socket, rt_uint32_t* ack_code, rt_uint16_t* server_port, rt_uint32_t wait_time) { + fd_set readset; + struct timeval timeout; + char ftp_recv_buf[80] = { 0 }; + int len = 0; + int code = 0; + int a, b, c, d, e, f = 0; + + if ((NULL == ack_code) || (NULL == server_port)) { + return -ERROR; + } + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + FD_ZERO(&readset); + FD_SET(socket, &readset); + + /*发送指令*/ + len = send(socket, "PASV\r\n", strlen("PASV\r\n"), 0); + + if (len < 0) { + printf("send cmd error!"); + return -ERROR; + } + + /*等待应答*/ + if (select(socket + 1, &readset, NULL, NULL, &timeout) <= 0) { + printf("select the socket timeout!"); + return -1; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + len = recv(socket, (char*)ftp_recv_buf, sizeof(ftp_recv_buf), 0); + + if (len < 0) { + printf("reading from socket error!"); + return -ERROR; + } + + /*跳过非数字字符来取出IP和端口号*/ + if (7 == sscanf(ftp_recv_buf, "%d%*[^(](%d,%d,%d,%d,%d,%d", &code, &a, &b, &c, &d, &e, &f)) { + *ack_code = code; + *server_port = e * 256 + f; + return OK; + } + else { + printf("Rcv data:%s", ftp_recv_buf); + return -ERROR; + } + + +} + + + +/********************************************************************************************************* +** Function name: zFTP_upload_file_data() +** Descriptions: zFTP download the file data +** input parameters: socket, buf, buf_size, wait_time +** output parameters: rd_len +** Returned value: OK, -ERROR +*********************************************************************************************************/ +static int zFTP_upload_file_data(zftp_client* ftp, char* file_name, rt_uint32_t wait_time) { + struct timeval timeout; + fd_set writeset; + int socket = -1; + rt_uint8_t* file_buf = NULL; + rt_uint32_t rd_len = 0, file_pos = 0, total_len = 0; + + + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + + socket = ftp->data_socket; + + file_buf = malloc(ZFTP_FILE_DATA_BUF_SIZE); + if (file_buf == NULL) { + printf("Cannot malloc the file data buf!"); + return -ERROR; + } + + if (ftp->upload_read == NULL) { + return -ERROR; + } + + while (1) { + if (OK != ftp->upload_read(ftp, file_name, file_buf, ZFTP_FILE_DATA_BUF_SIZE, file_pos, &rd_len, &total_len)) { + free(file_buf); + return -ERROR; + } + FD_ZERO(&writeset); + FD_SET(socket, &writeset); + if (select(socket + 1, NULL, &writeset, NULL, &timeout) <= 0) { + free(file_buf); + printf("select data write socket timeout!"); + return -ERROR; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + if (rd_len != send(socket, (char*)file_buf, rd_len, 0)) { + free(file_buf); + printf("reading data socket error!"); + return -ERROR; + } + + file_pos = file_pos + rd_len; + + if (file_pos >= total_len) { + /*upload the file finish!*/ + break; + } + + } + + free(file_buf); + return OK; + +} + + + +/********************************************************************************************************* +** Function name: zFTP_download_file_data() +** Descriptions: zFTP download the file data +** input parameters: socket, buf, buf_size, wait_time +** output parameters: rd_len +** Returned value: OK, -ERROR +*********************************************************************************************************/ +static int zFTP_download_file_data(int socket, rt_uint8_t* buf, rt_uint32_t buf_size, + rt_uint32_t* rd_len, rt_uint32_t wait_time) { + struct timeval timeout; + fd_set readset; + int recv_len = 0; + + FD_ZERO(&readset); + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + + FD_SET(socket, &readset); + if (select(socket + 1, &readset, NULL, NULL, &timeout) <= 0) { + printf("select data socket timeout!"); + *rd_len = 0; + return -ERROR; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + recv_len = recv(socket, (char*)buf, buf_size, 0); + + if (recv_len < 0) { + printf("reading data socket error!"); + return -ERROR; + } + else { + *rd_len = recv_len; + return OK; + } + +} + +/********************************************************************************************************* +** Function name: zFTP_download_send_cmd() +** Descriptions: zFTP send the download file command +** input parameters: 无 +** output parameters: 无 +** Returned value: 无 +*********************************************************************************************************/ +static int zFTP_download_send_cmd(int socket, char* cmd, rt_uint32_t cmd_len, rt_uint32_t* ack_code, + rt_uint32_t* file_size, rt_uint32_t wait_time) { + fd_set readset; + struct timeval timeout; + char ftp_recv_buf[100] = { 0 }; + int len = 0; + int code = 0; + int a = 0; + + if ((NULL == ack_code) || (NULL == file_size) || + (NULL == cmd)) { + return -ERROR; + } + + timeout.tv_sec = wait_time / 1000; + timeout.tv_usec = 0; + + FD_ZERO(&readset); + FD_SET(socket, &readset); + + /*发送指令*/ + len = send(socket, cmd, cmd_len, 0); + + if (len < 0) { + printf("send cmd error!"); + return -ERROR; + } + + /*等待应答*/ + if (select(socket + 1, &readset, NULL, NULL, &timeout) <= 0) { + printf("select the socket timeout!"); + return -1; + } + + // Wait and receive the packet back from the server. If n == -1, it failed. + len = recv(socket, (char*)ftp_recv_buf, sizeof(ftp_recv_buf), 0); + + if (len < 0) { + printf("reading from socket error!"); + return -ERROR; + } + return OK; + /*获取文件大小和应答码*/ + if (2 == sscanf(ftp_recv_buf, "%d%*[^(](%d", &code, &a)) { + *ack_code = code; + *file_size = a; + return OK; + } + else { + printf("Rcv data:%s", ftp_recv_buf); + return -ERROR; + } + + +} + + +/********************************************************************************************************* +** Function name: zFTP_quit() +** Descriptions: ftp logout and realse the zftp_client +** input parameters: ftp +** output parameters: None +** Returned value: OK +*********************************************************************************************************/ +int zFTP_quit(zftp_client* ftp) { + rt_uint32_t ack_code = 0; + char cmd_buf[50] = { 0 }; + + assert(ftp); + + /*退出登陆*/ + strcpy(cmd_buf, "QUIT\r\n"); + if ((OK != zFTP_send_cmd_wait_server_ack(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, ZFTP_CMD_TIMEOUT)) || + (ack_code != 221)) { + printf("Server logout error, ack_code:%d", ack_code); + + } + + closesocket(ftp->control_socket); + ftp->control_socket = -1; + + free(ftp); + + return OK; +} + + +/********************************************************************************************************* +** Function name: zFTP_upload_file() +** Descriptions: upload the file to FTP server +** input parameters: ftp, path, file_name +** output parameters: file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_upload_file(zftp_client* ftp, char* file_name) { + char cmd_buf[50] = { 0 }; + rt_uint32_t ack_code = 0; + int ret = OK, fd = 0; + struct sockaddr_in hints, * addr_list = NULL, * cur = NULL; + rt_uint16_t port = 0; + + assert(ftp); + + + /*Enter the pasv mode */ + if (OK != zFTP_pasv_mode(ftp->control_socket, &ack_code, &port, ZFTP_CMD_TIMEOUT) || (ack_code != 227)) { + printf("Enter pasv mode error, ack_code:%d", ack_code); + ret = -ERROR; + goto __exit; + } + + + /*creat the data socket link */ + memset(&hints, 0, sizeof(hints)); + hints.sin_family = AF_UNSPEC; + hints.sin_port = htons(TCP_PORT); + hints.sin_addr.s_addr = INADDR_ANY; + sprintf(ftp->data_port, "%d", port); + + fd = socket(cur->sin_family, SOCK_STREAM, IPPROTO_TCP); + if (fd < 0) { + return -1; + } + + if (connect(fd, (const struct sockaddr*)&hints, sizeof(hints)) == 0) { + ftp->data_socket = fd; + + } + else { + return -1; + } + + if (ftp->data_socket < 0) { + ret = -ERROR; + goto __exit; + } + + /*send download the file command*/ + sprintf(cmd_buf, "STOR %s\r\n", file_name); + if ((OK != zFTP_send_cmd_wait_server_ack(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, ZFTP_CMD_TIMEOUT)) || + (ack_code != 150)) { + printf("upload file error, ack_code:%d", ack_code); + ret = -ERROR; + goto __exit; + } + + + /* read the file send to FTP server */ + if (OK == zFTP_upload_file_data(ftp, file_name, ZFTP_CMD_TIMEOUT)) { + + } + else { + ret = -ERROR; + goto __exit; + } + + /*close the data socket*/ + if (ftp->data_socket >= 0) { + closesocket(ftp->data_socket); + ftp->data_socket = -1; + } + + + + /*waite the upload file finish */ + if ((OK != zFTP_wait_server_ack(ftp->control_socket, &ack_code, ZFTP_CMD_TIMEOUT)) || (ack_code != 226)) { + printf("Server not ack download complete, ack_code:%d", ack_code); + } + + ret = OK; + +__exit: + if (ftp->data_socket >= 0) { + closesocket(ftp->data_socket); + ftp->data_socket = -1; + } + + return ret; + +} + + + +/********************************************************************************************************* +** Function name: zFTP_download_file() +** Descriptions: download the file from FTP server +** input parameters: ftp, path, file_name +** output parameters: file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_download_file(zftp_client* ftp, char* file_name) { + char cmd_buf[50] = { 0 }; + rt_uint32_t ack_code = 0; + int ret = OK, fd = 0; + struct sockaddr_in hints, * addr_list = NULL, * cur = NULL; + rt_uint32_t rd_len = 0; + rt_uint8_t* file_buf = NULL; + rt_uint32_t file_pos = 0; + rt_uint16_t port = 0; + rt_uint32_t file_size = 0; + + assert(ftp); + + file_buf = malloc(ZFTP_FILE_DATA_BUF_SIZE); + if (file_buf == NULL) { + printf("Cannot malloc the file data buf!"); + return -ERROR; + } + + /*Enter the pasv mode */ + if (OK != zFTP_pasv_mode(ftp->control_socket, &ack_code, &port, ZFTP_CMD_TIMEOUT) || (ack_code != 227)) { + printf("Enter pasv mode error, ack_code:%d", ack_code); + ret = -ERROR; + goto __exit; + } + + + /*creat the data socket link */ + memset(&hints, 0, sizeof(hints)); + hints.sin_family = AF_UNSPEC; + hints.sin_port = htons(TCP_PORT); + hints.sin_addr.s_addr = INADDR_ANY; + sprintf(ftp->data_port, "%d", port); + + fd = socket(cur->sin_family, SOCK_STREAM, IPPROTO_TCP); + if (fd < 0) { + return -1; + } + + if (connect(fd, (const struct sockaddr*)&hints, sizeof(hints)) == 0) { + ftp->data_socket = fd; + } + else { + return -1; + } + + if (ftp->data_socket < 0) { + ret = -ERROR; + goto __exit; + } + + /*send download the file command*/ + sprintf(cmd_buf, "RETR %s\r\n", file_name); + if ((OK != zFTP_download_send_cmd(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, &file_size, ZFTP_CMD_TIMEOUT)) || + (ack_code != 150)) { + printf("Download file error, ack_code:%d", ack_code); + ret = -ERROR; + goto __exit; + } + + /* read the file */ + while (file_size > file_pos) { + if (OK == zFTP_download_file_data(ftp->data_socket, file_buf, ZFTP_FILE_DATA_BUF_SIZE, &rd_len, ZFTP_CMD_TIMEOUT)) { + if ((rd_len) && (ftp->download_write)) { + if (OK != ftp->download_write(ftp, file_name, file_buf, rd_len, file_pos, file_size)) { + ret = -ERROR; + goto __exit; + } + } + + } + else { + ret = -ERROR; + goto __exit; + } + file_pos = file_pos + rd_len; + } + + /*waite the download file finish */ + if ((OK != zFTP_wait_server_ack(ftp->control_socket, &ack_code, ZFTP_CMD_TIMEOUT)) || (ack_code != 226) || (file_pos != file_size)) { + printf("Server not ack download complete, ack_code:%d", ack_code); + ret = ERROR; + } + else { + ret = OK; + } + + +__exit: + if (ftp->data_socket >= 0) { + closesocket(ftp->data_socket); + ftp->data_socket = -1; + } + + if (file_buf) { + free(file_buf); + } + + return ret; + +} + + + +/********************************************************************************************************* +** Function name: zFTP_change_path() +** Descriptions: change the path of FTP server +** input parameters: ftp, path, path +** output parameters: file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_change_path(zftp_client* ftp, char* path) { + char cmd_buf[50] = { 0 }; + rt_uint32_t ack_code = 0; + + assert(ftp); + assert(path); + + /*change path*/ + + sprintf(cmd_buf, "CWD %s\r\n", path); + if ((OK != zFTP_send_cmd_wait_server_ack(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, ZFTP_CMD_TIMEOUT)) || + (ack_code != 250)) { + printf("Switch dir error, ack_code:%d", ack_code); + return -ERROR; + + } + else { + return OK; + } + +} + + + +/********************************************************************************************************* +** Function name: zFTP_get_filesize() +** Descriptions: get the file size from FTP server +** input parameters: ftp, path, file_name +** output parameters: file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_get_filesize(zftp_client* ftp, char* file_name, rt_uint32_t* file_size) { + char cmd_buf[50] = { 0 }; + rt_uint32_t ack_code = 0; + + assert(ftp); + assert(file_name); + + + /*get the file size*/ + sprintf(cmd_buf, "SIZE %s\r\n", file_name); + if ((OK != zFTP_filesize_send_cmd(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, file_size, ZFTP_CMD_TIMEOUT)) || + (ack_code != 213)) { + printf("Get file size error, ack_code:%d", ack_code); + return -ERROR; + + } + else { + return OK; + } + +} + +/********************************************************************************************************* +** Function name: zFTP_set_callback() +** Descriptions: set the file download and upload callback function +** input parameters: ftp, dw_write, up_read, user_data +** output parameters: None +** Returned value: OK +*********************************************************************************************************/ +int zFTP_set_callback(zftp_client* ftp, down_callback dw_write, up_callback up_read, void* user_data) { + assert(ftp); + + ftp->download_write = dw_write; + ftp->upload_read = up_read; + ftp->user_data = user_data; + + return OK; +} + +/********************************************************************************************************* +** Function name: file_read() +** Descriptions: read file from flash +** input parameters: ftp, buf, len, file_pos, total_len +** output parameters: None +** Returned value: RT_OK, ERROR +*********************************************************************************************************/ +int file_read(void* handle, char* file_name, rt_uint8_t* buf, rt_uint32_t len, rt_uint32_t file_pos, rt_uint32_t* read_len, rt_uint32_t* total_len) { + // const struct fal_partition* partition = NULL; + + // *total_len = 600 * 1024; + + // partition = fal_partition_find(FIRMWARE_FLASH_PARTITION); + // if (partition == NULL) { + // printf("Find partition (%s) failed, Cannot save the net para!", FIRMWARE_FLASH_PARTITION); + // return -ERROR; + // } + + // if (file_pos + len <= *total_len) { + // *read_len = len; + // } + // else { + // *read_len = *total_len - file_pos; + // } + + // if (*read_len != fal_partition_read(partition, FIRMWARE_STORE_ADDR + file_pos, buf, *read_len)) { + // printf("write file error, file_pos = %d", file_pos); + // } + + + return OK; + + +} + + + +/********************************************************************************************************* +** Function name: file_write() +** Descriptions: write file into flash +** input parameters: ftp, buf, len, file_pos, total_len +** output parameters: None +** Returned value: RT_OK, ERROR +*********************************************************************************************************/ +int file_write(void* handle, char* file_name, rt_uint8_t* buf, rt_uint32_t len, rt_uint32_t file_pos, rt_uint32_t total_len) { + // int fd = open(FLASH_DEV_DRIVER, O_RDWR); + // if (fd < 0) { + // printf("fs fd open error:%d\n", fd); + // return; + // } + // struct BusBlockWriteParam flash_writer; + + // flash_writer.pos = file_pos; + // flash_writer.size = len; + // flash_writer.buffer = buf; + // // const struct fal_partition* partition = NULL; + // PrivWrite(fd, &flash_writer, NONE); + // struct BusBlockReadParam flash_reader; + // flash_reader.pos = 0x000000L; + // flash_reader.size = 8; + // flash_reader.buffer = read_buff; + + // PrivRead(fd, &flash_reader, NONE); + // printf("Read data is:"); + // for (int i = 0;i < flash_writer.size;i++) { + // printf("%02x ", read_buff[i]); + // read_buff[i]++; + // } + // printf("\n"); + // partition = fal_partition_find(FIRMWARE_FLASH_PARTITION); + // if (partition == NULL) { + // printf("Find partition (%s) failed, Cannot save the net para!", FIRMWARE_FLASH_PARTITION); + // return -ERROR; + // } + + // if (len != fal_partition_write(partition, FIRMWARE_STORE_ADDR + file_pos, buf, len)) { + // printf("write file error, file_pos = %d", file_pos); + // } + + + return OK; + + +} + +/********************************************************************************************************* +** Function name: file_erase() +** Descriptions: write file into flash +** input parameters: file_len +** output parameters: None +** Returned value: RT_OK, ERROR +*********************************************************************************************************/ +int file_erase(rt_uint32_t file_len) { + // const struct fal_partition* partition = NULL; + + // partition = fal_partition_find(FIRMWARE_FLASH_PARTITION); + // if (partition == NULL) { + // printf("Find partition (%s) failed, Cannot save the net para!", FIRMWARE_FLASH_PARTITION); + // return -ERROR; + // } + + // if (file_len != fal_partition_erase(partition, FIRMWARE_STORE_ADDR, file_len)) { + // printf("erase flash error"); + // } + + + return OK; + + +} +/********************************************************************************************************* +** Function name: zFTP_login() +** Descriptions: ftp login server +** input parameters: user_name, password, server_ip +** output parameters: None +** Returned value: zftp_client +*********************************************************************************************************/ +zftp_client* zFTP_login(char* user_name, char* password, char* server_ip) { + zftp_client* ftp = NULL; + int fd = -1; + rt_uint32_t ack_code = 0; + char cmd_buf[50] = { 0 }; + struct sockaddr_in hints, * addr_list = NULL, * cur = NULL; + + + if ((strlen(user_name) > ZFTP_USER_NAME_LEN) || (strlen(password) > ZFTP_PASSWORD_LEN) || + (strlen(server_ip) > ZFTP_SERVER_IP_LEN)) { + return NULL; + } + + /*create a zftp client buf*/ + ftp = malloc(sizeof(zftp_client)); + + if (ftp) { + memset(ftp, 0, sizeof(zftp_client)); + + ftp->data_socket = -1; + ftp->control_socket = -1; + + strncpy(ftp->user_name, user_name, strlen(user_name)); + strncpy(ftp->password, password, strlen(password)); + strncpy(ftp->server_ip, server_ip, strlen(server_ip)); + strncpy(ftp->control_port, ZFTP_SERVER_CONTROL_PORT, strlen(ZFTP_SERVER_CONTROL_PORT)); + + /*creat the control socket link */ + memset(&hints, 0, sizeof(hints)); + hints.sin_family = AF_UNSPEC; + hints.sin_port = TCP_PORT; + hints.sin_addr.s_addr = inet_addr((char*)server_ip); + // /* Do name resolution with both IPv6 and IPv4 */ + // if (getaddrinfo(ftp->server_ip, ftp->control_port, &hints, &addr_list) != OK) { + // goto __exit; + // } + fd = socket(cur->sin_family, SOCK_STREAM, 21); + if (fd < 0) { + printf("socket error\n"); + return NULL; + } + + if (connect(fd, (const struct sockaddr*)&hints, sizeof(hints)) == 0) { + ftp->control_socket = fd; + } + else { + printf("connect error"); + return NULL; + } + + + if (ftp->control_socket >= 0) { + /* wait the login success and welcome*/ + if (OK != zFTP_wait_server_ack(ftp->control_socket, &ack_code, ZFTP_CMD_TIMEOUT) || (ack_code != 220)) { + printf("Server not ack welcome, ack_code:%d", ack_code); + goto __exit; + } + + /*input the user name */ + sprintf(cmd_buf, "USER %s\r\n", ftp->user_name); + if ((OK != zFTP_send_cmd_wait_server_ack(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, ZFTP_CMD_TIMEOUT)) || + (ack_code != 331)) { + printf("Login user error, ack_code:%d", ack_code); + goto __exit; + } + + /*input the password */ + sprintf(cmd_buf, "PASS %s\r\n", ftp->password); + if ((OK != zFTP_send_cmd_wait_server_ack(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, ZFTP_CMD_TIMEOUT)) || + (ack_code != 230)) { + printf("Login password error, ack_code:%d", ack_code); + goto __exit; + } + + /*change bin mode*/ + strcpy(cmd_buf, "TYPE I\r\n"); + if ((OK != zFTP_send_cmd_wait_server_ack(ftp->control_socket, cmd_buf, strlen(cmd_buf), &ack_code, ZFTP_CMD_TIMEOUT)) || + (ack_code != 200)) { + printf("Switch bin mode error, ack_code:%d", ack_code); + goto __exit; + } + + return ftp; + } + } + else { + printf("Cannot malloc the buf for zftp_client!"); + return NULL; + } + +__exit: + if (ftp->control_socket >= 0) { + closesocket(ftp->control_socket); + } + + free(ftp); + ftp = NULL; + + return NULL; + +} +void TestFTPClient(int args, char* argv[]) { + zftp_client* ftp; + rt_uint32_t file_size = 0; + ftp = zFTP_login(FTP_USER_NAME, FTP_PASSWORD, FTP_SVR_ADDR); + if (ftp == NULL) { + printf("zFTP login fail!\n"); + } + else { + printf("zFTP login ss\n"); + printf("the four file will be upload to ftp server\n"); + printf("server ip:"); + printf("total file Memory:"); + + zFTP_set_callback(ftp, file_write, file_read, NULL); + if (strcmp(argv[2], "upload") == 0) { + if (OK == zFTP_upload_file(ftp, argv[1])) { + printf("zFTP upload success!\n"); + } + else { + printf("zFTP upload %s faile!\n", argv[1]); + } + } + else { + if (OK == zFTP_get_filesize(ftp, argv[1], &file_size)) { + printf("zFTP file %s size:%d!\n", argv[1], file_size); + file_erase(file_size); + + if (OK == zFTP_download_file(ftp, argv[1])) { + printf("zFTP download success len: %d!\n", file_size); + } + } + } + zFTP_quit(ftp); + } + return; +} +PRIV_SHELL_CMD_FUNCTION(TestFTPClient, Test socket using ftp client, PRIV_SHELL_CMD_MAIN_ATTR | SHELL_CMD_PARAM_NUM(8)); + diff --git a/APP_Framework/Applications/app_test/test_ftpclient/test_ftpclient.h b/APP_Framework/Applications/app_test/test_ftpclient/test_ftpclient.h new file mode 100644 index 000000000..827241b74 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_ftpclient/test_ftpclient.h @@ -0,0 +1,128 @@ +/** + * @file test_ftpclient.h + * @author Zhao shimin + * @brief ftp + * @version 0.1 + * @date 2023-10-05 + * + * @copyright Copyright (c) 2023 + * from https://github.com/longtengmcu/zFTP/blob/master/inc/zFTP.h + */ + + + /********************************************************************************************************* + *       定义FTP的客户端的存储的缓冲区长�? + *********************************************************************************************************/ +#ifndef ZFTP_USER_NAME_LEN +#define ZFTP_USER_NAME_LEN 20 +#endif + +#ifndef ZFTP_PASSWORD_LEN +#define ZFTP_PASSWORD_LEN 20 +#endif + +#ifndef ZFTP_SERVER_IP_LEN +#define ZFTP_SERVER_IP_LEN 20 +#endif + +#ifndef ZFTP_FILE_DATA_BUF_SIZE +#define ZFTP_FILE_DATA_BUF_SIZE 4096 //单位字节 +#endif + + +#define ZFTP_SERVER_CONTROL_PORT "21" +#define ZFTP_SERVER_DATA_PORT "22" + + /*FTP communicate command timeout, unit:ms */ +#define ZFTP_CMD_TIMEOUT 2000 + +typedef int32_t rt_uint32_t; +typedef int16_t rt_uint16_t; +typedef int8_t rt_uint8_t; +typedef int (*down_callback)(void* handle, char* file_name, rt_uint8_t* buf, rt_uint32_t len, rt_uint32_t file_pos, rt_uint32_t total_len); +typedef int (*up_callback)(void* handle, char* file_name, rt_uint8_t* buf, rt_uint32_t len, rt_uint32_t file_pos, rt_uint32_t* read_len, rt_uint32_t* total_len); + +/********************************************************************************************************* +*       定义zFTP通信管理数据结构 +*********************************************************************************************************/ +typedef struct zftp_client_struct { + char user_name[ZFTP_USER_NAME_LEN]; + char password[ZFTP_PASSWORD_LEN]; + char server_ip[ZFTP_SERVER_IP_LEN]; + char data_port[6]; + char control_port[6]; + int control_socket; /* FTP控制socket */ + int data_socket; /* FTP数据socket */ + down_callback download_write; + up_callback upload_read; + void* user_data; + int errorno; + +}zftp_client; + +/********************************************************************************************************* +** Function name�? zFTP_login() +** Descriptions: ftp login server +** input parameters�? user_name, password, server_ip +** output parameters�? None +** Returned value: zftp_client +*********************************************************************************************************/ +zftp_client* zFTP_login(char* user_name, char* password, char* server_ip); + +/********************************************************************************************************* +** Function name�? zFTP_set_callback() +** Descriptions: set the file download and upload callback function +** input parameters�? ftp, dw_write, up_read, user_data +** output parameters�? None +** Returned value: RT_EOK +*********************************************************************************************************/ +int zFTP_set_callback(zftp_client* ftp, down_callback dw_write, up_callback up_read, void* user_data); + +/********************************************************************************************************* +** Function name�? zFTP_get_filesize() +** Descriptions: get the file size from FTP server +** input parameters�? ftp, path, file_name +** output parameters�? file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_get_filesize(zftp_client* ftp, char* file_name, rt_uint32_t* file_size); + +/********************************************************************************************************* +** Function name�? zFTP_change_path() +** Descriptions: change the path of FTP server +** input parameters�? ftp, path, path +** output parameters�? file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_change_path(zftp_client* ftp, char* path); + +/********************************************************************************************************* +** Function name�? zFTP_download_file() +** Descriptions: download the file from FTP server +** input parameters�? ftp, path, file_name +** output parameters�? file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_download_file(zftp_client* ftp, char* file_name); + +/********************************************************************************************************* +** Function name�? zFTP_upload_file() +** Descriptions: upload the file to FTP server +** input parameters�? ftp, path, file_name +** output parameters�? file_size +** Returned value: zftp_client +*********************************************************************************************************/ +int zFTP_upload_file(zftp_client* ftp, char* file_name); + +/********************************************************************************************************* +** Function name�? zFTP_quit() +** Descriptions: ftp logout and realse the zftp_client +** input parameters�? ftp +** output parameters�? None +** Returned value: RT_EOK +*********************************************************************************************************/ +int zFTP_quit(zftp_client* ftp); + + + +