123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477 |
- /**
- @file
- ql_ftp_client.h
- @brief
- This file provides the definitions for ftp client, and declares the
- API functions.
- */
- /*============================================================================
- Copyright (c) 2017 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
- Quectel Wireless Solution Proprietary and Confidential.
- =============================================================================*/
- /*===========================================================================
- EDIT HISTORY FOR MODULE
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
- WHEN WHO WHAT, WHERE, WHY
- ---------- ------------ ----------------------------------------------------
- =============================================================================*/
- #ifndef __QL_FTP_CLIENT_H__
- #define __QL_FTP_CLIENT_H__
- #include <time.h>
- #include "ql_api_common.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define MAX_FILE_NAME_SIZE 256
- #define MAX_OWNER_SIZE 64
- #define QL_FTP_CLIENT_FREE(p) if(p){free(p);p=NULL;}
- #define QL_FTP_ERRCODE_BASE (QL_COMPONENT_LWIP_FTP << 16)
- typedef enum
- {
- QL_FTP_ERR_OK = 0, /*Operation successful*/
- QL_FTP_ERR_UNKNOWN = 601 | QL_FTP_ERRCODE_BASE, /*Unknown error*/
- QL_FTP_ERR_WOULDBLOCK = 602 | QL_FTP_ERRCODE_BASE, /*FTP(S) server blocked*/
- QL_FTP_ERR_BUSY = 603 | QL_FTP_ERRCODE_BASE, /*FTP(S) server busy*/
- QL_FTP_ERR_DNS = 604 | QL_FTP_ERRCODE_BASE, /*failed to parse domain name*/
- QL_FTP_ERR_NETWORK = 605 | QL_FTP_ERRCODE_BASE, /*failed to establish socket or the network is deactivated*/
- QL_FTP_ERR_CTRL_CLOSE = 606 | QL_FTP_ERRCODE_BASE, /*the ftp session has been closed by the ftp server*/
- QL_FTP_ERR_DATA_CLOSE = 607 | QL_FTP_ERRCODE_BASE, /*the data connection was closed by the ftp server*/
- QL_FTP_ERR_BEARER_FAIL = 608 | QL_FTP_ERRCODE_BASE, /*Socket closed by peer*/
- QL_FTP_ERR_TIMEOUT = 609 | QL_FTP_ERRCODE_BASE, /*Timeout error*/
- QL_FTP_ERR_INVALID_PARAM = 610 | QL_FTP_ERRCODE_BASE, /*Invalid parameter*/
- QL_FTP_ERR_FILE_NOT_FOUND = 611 | QL_FTP_ERRCODE_BASE, /*Failed to open file*/
- QL_FTP_ERR_FILE_POINT_ERR = 612 | QL_FTP_ERRCODE_BASE, /*File position invalid*/
- QL_FTP_ERR_FS_FILE_ERROR = 613 | QL_FTP_ERRCODE_BASE, /*File error*/
- QL_FTP_ERR_SERVICE_END = 614 | QL_FTP_ERRCODE_BASE, /*Service not available, closing control connection*/
- QL_FTP_ERR_DATA_FAILED = 615 | QL_FTP_ERRCODE_BASE, /*Open data connection failed*/
- QL_FTP_ERR_CLOSE_CONN = 616 | QL_FTP_ERRCODE_BASE, /*Connection closed; transfer aborted*/
- QL_FTP_ERR_FILE_UNOPER = 617 | QL_FTP_ERRCODE_BASE, /*Requested file action not taken*/
- QL_FTP_ERR_REQUEST_ABORT = 618 | QL_FTP_ERRCODE_BASE, /*Requested action aborted: local error in processing*/
- QL_FTP_ERR_OVER_MEMORY = 619 | QL_FTP_ERRCODE_BASE, /*Requested action not taken: insufficient system storage*/
- QL_FTP_ERR_COMMAND_ERROR = 620 | QL_FTP_ERRCODE_BASE, /*Syntax error, command unrecognized*/
- QL_FTP_ERR_PARAM_ERROR = 621 | QL_FTP_ERRCODE_BASE, /*Syntax error in parameters or arguments*/
- QL_FTP_ERR_COMMAND_FAILED = 622 | QL_FTP_ERRCODE_BASE, /*Command not implemented*/
- QL_FTP_ERR_COMMAND_BAD_SEQUENCE = 623 | QL_FTP_ERRCODE_BASE, /*Bad sequence of commands*/
- QL_FTP_ERR_COMMAND_NOT_IMPLENT = 624 | QL_FTP_ERRCODE_BASE, /*Command parameter not implemented*/
- QL_FTP_ERR_UNLOGIN = 625 | QL_FTP_ERRCODE_BASE, /*Not logged in*/
- QL_FTP_ERR_NO_ACCOUNT = 626 | QL_FTP_ERRCODE_BASE, /*Need account for storing files*/
- QL_FTP_ERR_REQUEST_FAILED = 627 | QL_FTP_ERRCODE_BASE, /*Requested action not taken*/
- QL_FTP_ERR_REQUEST_STOP = 628 | QL_FTP_ERRCODE_BASE, /*Requested action aborted: page type unknown*/
- QL_FTP_ERR_FILEREQ_STOP = 629 | QL_FTP_ERRCODE_BASE, /*Requested file action aborted*/
- QL_FTP_ERR_FILENAME_ERROR = 630 | QL_FTP_ERRCODE_BASE, /*Requested file name invalid*/
- QL_FTP_ERR_SSL_AUTH_FAIL = 631 | QL_FTP_ERRCODE_BASE, /*SSL authentication failed*/
- QL_FTP_ERR_INTERFACE_FAILED = 632 | QL_FTP_ERRCODE_BASE, /*Source IP address for transmission cannot use*/
- QL_FTP_ERR_SEND_ERROR = 633 | QL_FTP_ERRCODE_BASE, /*Send data failed*/
- QL_FTP_ERR_RECV_ERROR = 634 | QL_FTP_ERRCODE_BASE, /*Receive data failed*/
- } QL_FTP_CLIENT_ERR_E;
- typedef enum {
- QL_FTP_CLIENT_SIM_CID,//设置SIM卡的CID
- QL_FTP_CLIENT_SSL_CTX,//设置FTP客户端使用的SSL Context
- QL_FTP_CLIENT_SSL_ENABLE,//设置FTP客户端是否使用SSL连接
- QL_FTP_CLIENT_OPT_PDP_CID, //设置ftp client使用的数据通道CID,执行数据拨号操作时使用的CID
- QL_FTP_CLIENT_OPT_SSL_CTX, //设置SSL
- QL_FTP_CLIENT_OPT_START_POS,//设置下载的起始偏移位置
- QL_FTP_CLIENT_SSL_VERIFY_LEVEL,//设置SSL的校验方式
- QL_FTP_CLIENT_SSL_CACERT_PATH,//设置SSL的证书
- QL_FTP_CLIENT_SSL_OWNCERT_PATH,//设置SSL的本地证书
- QL_FTP_CLIENT_SSL_CIPHERSUITE,//设置SSL的加密套件
- QL_FTP_CLIENT_SSL_VERSION,//设置SSL的版本信息
- QL_FTP_CLIENT_SSL_TRANSPORT,//设置SSL的协议类型
- QL_FTP_CLIENT_PORT_MODE,//设置FTP建立数据连接的主被动模式
- QL_FTP_CLIENT_IPV6_EXTEND,//设置IPV6扩展功能是否开启
- //QL_FTP_CLIENT_SSL_PSK,
- }QL_FTP_CLIENT_OPT_E;
- typedef enum {
- QL_FTP_CLIENT_SSL_TYPE_NONE, // 连接FTP服务器
- QL_FTP_CLIENT_SSL_TYPE_IMP, // 隐式加密连接FTPS服务器
- QL_FTP_CLIENT_SSL_TYPE_EXP, // 显式加密连接FTPS服务器
- QL_FTP_CLIENT_SSL_TYPE_SSH, // 连接SFTP服务器
- }QL_FTP_CLIENT_SSL_TYPE_E;
- typedef struct{
- char filename[MAX_FILE_NAME_SIZE];//文件或目录名
- int type;//类型,0:未知;1:目录;2:文件
- int permissions;//权限
- int links;//链接数
- char owner[MAX_OWNER_SIZE];//所属用户
- char group[MAX_OWNER_SIZE];//所属用户组
- struct tm timestamp;//创建时间
- unsigned long size;//文件大小,字节
- }QL_FTP_CLIENT_FILE_INFO_T;
- /*****************************************************************
- * Function: QL_FTP_CLIENT_WRITE_CB
- *
- * Description:
- * 使用回调函数接收从FTP服务器获取的文件数据。
- *
- * Parameters:
- * ptr [in] 获取数据指针。可通过该指针将获得的数据写入用户所指定的存储位置。
- * size [in] 要被写入的每个元素的大小,以字节为单位。
- * nmemb [in] 元素的个数,每个元素的大小为size字节。
- * stream [in] 用户传入的callback function参数指针,可通过该指针指定参数ptr中数据存放的位置。
- * Return:
- * 如果成功,该函数需要返回size*nmemb大小的字节,否则会导致数据读错误,导致ftp异常结束。
- *
- *****************************************************************/
- typedef size_t (*QL_FTP_CLIENT_WRITE_CB_EX)(void *ptr, size_t size, size_t nmemb, void *stream);
- /*****************************************************************
- * Function: QL_FTP_CLIENT_READ_CB
- *
- * Description:
- * 使用回调函数发送数据到FTP服务器。
- *
- * Parameters:
- * ptr [out] 读取数据的指针。用户传入的数据可被该指读取,完成用户数据的记录。
- * size [in] 要被读取的每个元素的大小,以字节为单位。
- * nmemb [in] 元素的个数,每个元素的大小为size字节。
- * stream [in] 用户传入的callback function参数指针,可通过该指针向参数ptr传入数据。
- * Return:
- * 如果成功,该函数需要返回size*nmemb大小的字节,否则会导致数据读错误,导致ftp异常结束。
- *
- *****************************************************************/
- typedef size_t (*QL_FTP_CLIENT_READ_CB_EX)(void *ptr, size_t size, size_t nmemb, void *stream);
- /*****************************************************************
- * Function: ql_ftp_client_new
- *
- * Description:
- * 创建ftp client 句柄。
- *
- * Parameters:
- * 无
- *
- * Return:
- * 不为 NULL, ftp client 句柄。
- * NULL, 创建失败。
- *
- *****************************************************************/
- void *ql_ftp_client_new(void);
- /*****************************************************************
- * Function: ql_ftp_client_release
- *
- * Description:
- * 释放ftp client资源。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- *
- * Return:
- * void。
- *
- *****************************************************************/
- void ql_ftp_client_release(void *client);
- /*****************************************************************
- * Function: ql_ftp_client_setopt
- *
- * Description:
- * 配置ftp client相关属性。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * tag [in] 属性标签,见QL_FTP_CLIENT_OPT_E。
- * ... [in] 属性参数。
- * tag为QL_FTP_CLIENT_OPT_PDP_CID是,此参数为int型,执行数据拨号操作时使用的CID值。
- * tag为QL_FTP_CLIENT_OPT_SSL_CTX是,此参数为指针,SSL 句柄。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_setopt(void *client, QL_FTP_CLIENT_OPT_E tag, ...);
- /*****************************************************************
- * Function: ql_ftp_client_open
- *
- * Description:
- * 连接ftp服务器。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * hostname [in] ftp 服务器地址。
- * username [in] 用户名。
- * password [in] 密码。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_open(void *client,char *hostname,char *username,char *password);
- /*****************************************************************
- * Function: ql_ftp_client_close
- *
- * Description:
- * 断开与ftp服务器的连接。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_close(void *client);
- /*****************************************************************
- * Function: ql_ftp_client_get_ex
- *
- * Description:
- * 从ftp服务器下载文件。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * remotefile [in] 需要获取的ftp服务器上文件的文件名,可以包含相对或绝对路径。
- * localfile [in] 存储到本地的文件名,可以包含相对或绝对路径,如果为NULL,则和ftp服务器上文件同名,本地默认使用的目录为U:/。
- * write_cb [in] 使用回调函数接收从FTP服务器获取的文件数据。
- * user_data [in] 用户数据。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_get_ex(void *client,char *remotefile,char *localfile,QL_FTP_CLIENT_WRITE_CB_EX write_cb,void* user_data);
- /*****************************************************************
- * Function: ql_ftp_client_put_ex
- *
- * Description:
- * 上传本地文件到服务器。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * localfile [in] 需要上传的本地文件名,可以包含相对或绝对路径,本地默认使用的目录为U:/。
- * remotefile [in] 存储到ftp服务器上文件的文件名,可以包含相对或绝对路径,如果为NULL,则和本地文件同名,
- * read_cb [in] 使用回调函数发送数据到FTP服务器,如果设置了此回调函数,localfile参数无效,remotefile参数必须设置。
- * user_data [in] 用户数据。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_put_ex(void *client,char *localfile,char *remotefile,QL_FTP_CLIENT_READ_CB_EX read_cb,void* user_data);
- /*****************************************************************
- * Function: ql_ftp_client_delete
- *
- * Description:
- * 删除ftp服务器上文件。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * remotefile [in] 需要删除的ftp服务器上文件的文件名,可以包含相对或绝对路径,
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_delete(void *client,char *remotefile);
- /*****************************************************************
- * Function: ql_ftp_client_cwd
- *
- * Description:
- * 更改ftp服务器当前使用的目录。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path [in] ftp服务器目录,可以是相对或绝对路径,
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_cwd(void *client, char *path);
- /*****************************************************************
- * Function: ql_ftp_client_lcwd
- *
- * Description:
- * 更改本地当前使用的目录。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path [in] 本地目录,可以是相对或绝对路径,
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_lcwd(void *client, char *path);
- /*****************************************************************
- * Function: ql_ftp_client_pwd
- *
- * Description:
- * 获取ftp服务器当前使用的目录。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path [out] ftp服务器目录,绝对路径。
- * path_len [in] path的最大存储长度。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_pwd(void *client, char *path, int path_len);
- /*****************************************************************
- * Function: ql_ftp_client_lpwd
- *
- * Description:
- * 获取本地当前使用的目录。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path [out] 本地目录,绝对路径。
- * path_len [in] path的最大存储长度。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_lpwd(void *client, char *path, int path_len);
- /*****************************************************************
- * Function: ql_ftp_client_mkdir
- *
- * Description:
- * 在ftp服务器上新建目录。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path [in] 需要新建的ftp服务器目录,可以是相对或绝对路径。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_mkdir(void *client, char *path);
- /*****************************************************************
- * Function: ql_ftp_client_rmdir
- *
- * Description:
- * 删除ftp服务器上的目录。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path [in] 需要删除的ftp服务器目录,可以是相对或绝对路径。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_rmdir(void *client, char *path);
- /*****************************************************************
- * Function: ql_ftp_client_list
- *
- * Description:
- * 获取指定ftp服务器上目录下文件和目录列表。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path_or_file [in] ftp服务器上的目录或文件,可以是相对或绝对路径。
- * match [in] 只列出包含match字符的结果。
- * file_info_list [out] 获取到的文件和目录列表。
- * max_file_num [in] file_info_list可以存储结果的最大个数。
- *
- * Return:
- * 大于0,实际获取到的结果个数。
- * -1,失败。
- *
- *****************************************************************/
- int ql_ftp_client_list(void *client, char *path_or_file,char *match,QL_FTP_CLIENT_FILE_INFO_T *file_info_list, int max_file_num);
- /*****************************************************************
- * Function: ql_ftp_client_get_server_file_size
- *
- * Description:
- * 获取FTP服务器上指定路径下指定文件的大小。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * path_or_file [in] FTP服务器上的目录或文件,可以是相对路径或绝对路径。
- * nSize [out] 用于获取FTP服务器上所要查询指定文件的大小。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_size(void *client, const char *filename, double *nSize);
- /*****************************************************************
- * Function: ql_ftp_client_rename
- *
- * Description:
- * 对ftp服务器上的文件重命名。
- *
- * Parameters:
- * client [in] ftp client 句柄。
- * oldname [in] FTP服务器上要重命名的文件名。
- * newname [in] 重命名后的文件名。
- *
- * Return:
- * 0,成功。
- * 其他,错误码。
- *
- *****************************************************************/
- int ql_ftp_client_rename(void *client, const char *oldname, const char *newname);
- #ifdef __cplusplus
- }
- #endif
- #endif
|