Add basic change for v1453

Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/mbtk_at/src/mbtk_at_ftp.c b/mbtk/mbtk_at/src/mbtk_at_ftp.c
new file mode 100755
index 0000000..8b38c7d
--- /dev/null
+++ b/mbtk/mbtk_at/src/mbtk_at_ftp.c
@@ -0,0 +1,976 @@
+#include "mbtk_at.h"
+//#include <sys/statfs.h>
+#include <sys/vfs.h>
+#include <errno.h>
+#include <linux/magic.h>
+#include <time.h>
+#include <sys/time.h>
+#include <signal.h>
+#include <pthread.h>
+#include <time.h>
+#include <sys/time.h>
+#include <cutils/properties.h>
+#include "configwrapper.h"
+#include<linux/msg.h>
+
+#include "atcmdsvr_ubus.h"
+
+//mbtk_ftp
+struct my_msg   //消息队列结构体
+{
+	long int my_msg_type;
+    char *ptr;
+}mbtk_at_msg;
+
+void mbtk_at_printf()
+{
+	int msgid;
+	mbtk_at_msg.my_msg_type=3;
+	msgid=msgget(12,0666|IPC_CREAT);
+    MBTK_FUNC(mbtk_at_msgid)(&msgid);
+    //char read_buf[MAXMSG];
+	while(1)
+	{
+	    msgrcv(msgid,&mbtk_at_msg,4,mbtk_at_msg.my_msg_type,0);
+       	if(strncmp(mbtk_at_msg.ptr,"end",3)==0)
+		    break;
+        ATRESP(IND_REQ_HANDLE , ATCI_RESULT_CODE_NULL, 0, mbtk_at_msg.ptr);
+        free(mbtk_at_msg.ptr);
+        mbtk_at_msg.ptr=NULL;
+	}
+	msgctl(msgid,IPC_RMID,0);
+}
+
+utlReturnCode_T MBTK_AT_CFTPPORT_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    static int arg1 = 0;
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            MBTK_FUNC(mbtk_at_get_ftp_info)(0,&arg1, NULL, NULL, NULL, NULL, NULL, NULL);
+            sprintf(resp_buf, "+CFTPPORT: <%d>\r\n", arg1);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            if(!getExtValue(parameter_values_p, 0, &arg1, 1, 65535, 21))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+
+            MBTK_FUNC(mbtk_at_ftp)(0,arg1, NULL, NULL, NULL, NULL, NULL, NULL);
+
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPUN_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            static char name[MBTK_AT_FTP_NAME_LEN_MAX];
+            MBTK_FUNC(mbtk_at_get_ftp_info)(3,NULL, NULL, NULL, name, NULL, NULL, NULL);
+            sprintf(resp_buf, "+CFTPUN: \"<%s>\"\r\n",name);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            const static int name_len_max = MBTK_AT_FTP_NAME_LEN_MAX;
+            static char name[MBTK_AT_FTP_NAME_LEN_MAX];
+            int len = 0;
+            memset(name, 0x0, MBTK_AT_FTP_NAME_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, name, name_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP NAME Fail.");
+                break;
+            }
+
+            MBTK_FUNC(mbtk_at_ftp)(3,NULL, NULL, NULL, name, NULL, NULL, NULL);
+
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPPW_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            static char pass[MBTK_AT_FTP_PASS_LEN_MAX];
+            MBTK_FUNC(mbtk_at_get_ftp_info)(2,NULL, NULL, pass, NULL, NULL, NULL, NULL);
+            sprintf(resp_buf, "+CFTPPW: \"<%s>\"\r\n",pass);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            const static int pass_len_max = MBTK_AT_FTP_PASS_LEN_MAX;
+            static char pass[MBTK_AT_FTP_PASS_LEN_MAX];
+            int len = 0;
+            memset(pass, 0x0, MBTK_AT_FTP_PASS_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, pass, pass_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP PASS Fail.");
+                break;
+            }
+
+            MBTK_FUNC(mbtk_at_ftp)(2,NULL, NULL, pass, NULL, NULL, NULL, NULL);
+
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPTLS_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    static int mode = 0;
+    static int cert = 0;
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            MBTK_FUNC(mbtk_at_get_ftp_info)(4,NULL, NULL, NULL, NULL, &mode, NULL, &cert);
+            sprintf(resp_buf, "+CFTPTLS: <%d>,<%d>\r\n", mode, cert);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            if(!getExtValue(parameter_values_p, 0, &mode, 0, 2, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+
+            if(!getExtValue(parameter_values_p, 1, &cert, 0, 1, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+
+            MBTK_FUNC(mbtk_at_ftp)(4,NULL, NULL, NULL, NULL, mode, NULL, cert);
+
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPSERV_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            static char addr[MBTK_AT_FTP_ADDR_LEN_MAX];
+            MBTK_FUNC(mbtk_at_get_ftp_info)(1,NULL, addr, NULL, NULL, NULL, NULL, NULL);
+            sprintf(resp_buf, "+CFTPSERV: %s", addr);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            const static int addr_len_max = MBTK_AT_FTP_ADDR_LEN_MAX;
+            static char addr[MBTK_AT_FTP_ADDR_LEN_MAX];
+            int len = 0;
+            memset(addr, 0x0, MBTK_AT_FTP_ADDR_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, addr, addr_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP ADDR Fail.");
+                break;
+            }
+
+            MBTK_FUNC(mbtk_at_ftp)(1,NULL, addr, NULL, NULL, NULL, NULL, NULL);
+
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPTYPE_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            int mbtk_ftp_type = -1;
+            static char ftp_type;
+            MBTK_FUNC(mbtk_at_get_ftp_info)(5,NULL, NULL, NULL, NULL, NULL, &mbtk_ftp_type, NULL);
+            if(mbtk_ftp_type == 0)
+                ftp_type='A';
+            else if(mbtk_ftp_type == 1)
+                ftp_type='I';
+            else
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, resp_buf);
+                break;
+            }
+            sprintf(resp_buf, "+CFTPTYPE:\"%c\"",ftp_type);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char ftp_type[2];
+            int addr_len_max = 2;
+            int len = 0;
+            int mbtk_ftp_type = -1;
+            if(!getExtString(parameter_values_p, 0, ftp_type, addr_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP PASS Fail.");
+                break;
+            }
+            //FTP_DATA_TYPE_I = 2 FTP_DATA_TYPE_A = 0
+            if(strstr(ftp_type,"A") != NULL)
+                mbtk_ftp_type = 0;
+            else if(strstr(ftp_type,"I") != NULL)
+                mbtk_ftp_type = 2;
+            else
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP PASS Fail.");
+                break;
+            }
+            MBTK_FUNC(mbtk_at_ftp)(5,NULL, NULL, NULL, NULL, NULL, mbtk_ftp_type, NULL);
+
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPMKD_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,NULL,NULL,NULL,NULL);
+
+            sprintf(resp_buf, "+CFTPLIST: \"%s\"\r\n",remote_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char dir[MBTK_AT_FTP_DIR_LEN_MAX];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            memset(dir, 0x0, MBTK_AT_FTP_DIR_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, dir, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP MKDIR Fail.");
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_mkrmdel)(0,dir);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPRMD_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,NULL,NULL,NULL,NULL);
+
+            sprintf(resp_buf, "+CFTPMKD: \"%s\"\r\n",remote_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char dir[MBTK_AT_FTP_DIR_LEN_MAX];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            memset(dir, 0x0, MBTK_AT_FTP_DIR_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, dir, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP RMDIR Fail.");
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_mkrmdel)(1,dir);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPDEL_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,NULL,NULL,NULL,NULL);
+
+            sprintf(resp_buf, "+CFTPDELE: \"%s\"\r\n",remote_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char dir[MBTK_AT_FTP_DIR_LEN_MAX];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            memset(dir, 0x0, MBTK_AT_FTP_DIR_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, dir, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_mkrmdel)(2,dir);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPPUTFILE_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            int rest_size = -1;
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            static char local_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            memset(local_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,local_path,&rest_size,NULL,NULL);
+
+            sprintf(resp_buf, "+CFTPPUTFILE: \"%s\", \"%s\",<%d>\r\n",remote_size,local_path,rest_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            int rest_size;
+            static char remote_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            static char local_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            memset(remote_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            memset(local_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            if(!getExtString(parameter_values_p, 0, remote_path, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            if(!getExtString(parameter_values_p, 1, local_path, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 2, &rest_size, 0, 2147483647, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_upload)(remote_path,local_path,0,rest_size);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPPUT_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            int rest_size = -1;
+            int put_len = -1;
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,NULL,&rest_size,NULL,&put_len);
+
+            sprintf(resp_buf, "+CFTPPUT: \"%s\",<%d>,<%d>\r\n",remote_size,rest_size,put_len);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char remote_path[MBTK_AT_FTP_DIR_LEN_MAX];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            int rest_size;
+            int put_len;
+            memset(remote_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX);
+            if(!getExtString(parameter_values_p, 0, remote_path, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 1, &rest_size, 0, 2147483647, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 2, &put_len, 1, 1500, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_upload)(remote_path,NULL,put_len,rest_size);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+
+utlReturnCode_T MBTK_AT_CFTPGETFILE_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            int rest_size = -1;
+            int read_size = -1;
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            static char local_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            memset(local_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,local_path,&rest_size,&read_size,NULL);
+
+            sprintf(resp_buf, "+CFTPGETFILE: \"%s\", \"%s\",<%d>, <%d>\r\n",remote_size,local_path,rest_size,read_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char remote_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            static char local_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            int rest_size;
+            int read_size;
+            memset(remote_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            memset(local_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            if(!getExtString(parameter_values_p, 0, remote_path, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            if(!getExtString(parameter_values_p, 1, local_path, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 2, &rest_size, 0, 2147483647, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 3, &read_size, 0, 524288, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_download)(remote_path,local_path,0,rest_size,read_size);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+
+}
+
+utlReturnCode_T MBTK_AT_CFTPGET_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            int rest_size = -1;
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,NULL,&rest_size,NULL,NULL);
+
+            sprintf(resp_buf, "+CFTPGET: \"%s\",<%d>\r\n",remote_size,rest_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char remote_path[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            int rest_size;
+            int read_size;
+            memset(remote_path, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            if(!getExtString(parameter_values_p, 0, remote_path, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP DEL FILE Fail.");
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 1, &rest_size, 0, 2147483647, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            if(!getExtValue(parameter_values_p, 2, &read_size, 0, 524288, 0))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_download)(remote_path,NULL,1,rest_size,read_size);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+
+}
+
+utlReturnCode_T MBTK_AT_CFTPLIST_PROCESS(const utlAtParameterOp_T op,
+                                        const char *command_name_p,
+                                        const utlAtParameterValue_P2c parameter_values_p,
+                                        const size_t num_parameters,
+                                        const char *info_text_p,
+                                        unsigned int *xid_p,
+                                        void *arg_p)
+{
+    UNUSEDPARAM(command_name_p);
+    UNUSEDPARAM(num_parameters);
+    UNUSEDPARAM(info_text_p);
+
+    utlReturnCode_T ret = utlFAILED;
+    TelAtParserID sAtp_index = *(TelAtParserID *)arg_p;
+    unsigned int At_handle = MAKE_AT_HANDLE(sAtp_index);
+    *xid_p = At_handle;
+    char resp_buf[MBTK_AT_RESP_LEN_MAX] = {0};
+
+    LOG("MBTK_AT_MTEST_PROCESS enter with command_op [%s]", op2str(op));
+
+    pthread_t mbtk_at_thread_ID;      //定义线程id
+    pthread_create(&mbtk_at_thread_ID, NULL, &mbtk_at_printf, NULL);
+    pthread_detach(mbtk_at_thread_ID);	//设置线程结束收尸
+
+    switch(op)
+    {
+        case TEL_EXT_GET_CMD :
+        {
+            int rest_size = -1;
+            static char remote_size[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            memset(remote_size, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+
+            MBTK_FUNC(mbtk_at_get_ftp_data_info)(remote_size,NULL,NULL,NULL,NULL);
+
+            sprintf(resp_buf, "+CFTPLIST: \"%s\"\r\n",remote_size);
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, resp_buf);
+            break;
+
+        }
+        case TEL_EXT_SET_CMD :
+        {
+            static char dir[MBTK_AT_FTP_DIR_LEN_MAX+1];
+            int dir_len_max = MBTK_AT_FTP_DIR_LEN_MAX;
+            int len = 0;
+            memset(dir, 0x0, MBTK_AT_FTP_DIR_LEN_MAX+1);
+            if(!getExtString(parameter_values_p, 0, dir, dir_len_max, &len, ""))
+            {
+                ret = ATRESP(At_handle, ATCI_RESULT_CODE_ERROR, 0, NULL);
+                LOG("Get FTP RMDIR Fail.");
+                break;
+            }
+            ret = ATRESP(At_handle, ATCI_RESULT_CODE_OK, 0, NULL);
+            MBTK_FUNC(mbtk_at_ftp_list)(dir);
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+
+    return ret;
+}
+