[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c b/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c
new file mode 100644
index 0000000..87220ee
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c
@@ -0,0 +1,939 @@
+#include "ftp/lynq_ftp.h"
+
+int lynq_ftp_login(lynq_ftp_socker_info *FTP)
+{
+	struct sockaddr_in serv_addr;
+	char recvdate;
+	char sendline[MAXSIZE] = "", recvline[MAXSIZE] = "";
+	struct hostent *host = NULL;
+
+	char name[MAXSIZE] = "", password[MAXSIZE] = "";
+	LYDBGLOG("[%s-%d] ftp,enter the hostname = %s\n", __FUNCTION__, __LINE__, FTP->sevname);
+	
+	host = gethostbyname(FTP->sevname);
+	
+	if(host == NULL)
+	{
+		error = 35;
+		LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+		login_yes = 0;
+	}
+	else
+	{
+		FTP->control_sockfd = socket(AF_INET, SOCK_STREAM, 0);
+		if(FTP->control_sockfd < 0)
+		{
+			error = 50;
+			LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+			LYDBGLOG("[%s-%d]\n", __FUNCTION__, __LINE__);
+			login_yes = 0;
+		}
+
+		bzero(&serv_addr, sizeof(serv_addr));
+
+		memset(&serv_addr, 0, sizeof(struct sockaddr_in));
+		memcpy(&serv_addr.sin_addr.s_addr, host->h_addr, host->h_length);
+		serv_addr.sin_family = AF_INET;
+		serv_addr.sin_port = htons(FTP->portnum);
+
+		if((connect(FTP->control_sockfd, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr))) < 0)
+		{
+			error = 33;
+			LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+			login_yes = 0;
+		}
+
+
+		recvdate = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+		if(recvdate == -1)
+		{
+			error = 33;
+			LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+			login_yes = 0;
+		}
+		else if(strncmp(recvline, "220", 3) == 0)
+		{
+			LYDBGLOG("ftp,connect success\n");
+			login_yes = 1;
+		}
+		else 
+		{
+			error = 33;
+			LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+			login_yes = 0;    
+		}
+		if(login_yes == 1)
+		{
+			int sendbytes, recvbytes;
+
+			zeromery(name, 1024);
+			zeromery(password, 1024);
+			zeromery(recvline, 1024);
+			zeromery(sendline, 1024);
+			strcat(sendline, "USER ");
+			strcat(sendline, FTP->username);
+			strcat(sendline, "\r\n");
+			//printf("[%s %d] --->%s\n",__FUNCTION__ , __LINE__,sendline);
+			sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+			if(sendbytes == -1)
+			{
+				error = 38;
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+				login_yes = 0;
+				//return FTP_USER_ERROR;
+			}
+			recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+			if(strncmp(recvline, "331", 3) == 0)
+			{
+				LYDBGLOG("[%s %d] ftp,331 please specify the password.\n", __FUNCTION__ , __LINE__);
+			}
+			else
+			{
+				error = 38;
+				LYDBGLOG("[%s-%d] ftp,recv date is error.%d\n", __FUNCTION__ , __LINE__, error);
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+				login_yes = 0;
+			}
+			zeromery(sendline, 1024);
+			zeromery(recvline, 1024);
+			//printf("ftp-> ");
+			strcat(sendline, "PASS ");
+			strcat(sendline, FTP->pw);
+			strcat(sendline, "\r\n");
+			//printf("[%s %d]--->%s\n",__FUNCTION__, __LINE__, sendline);
+			sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+			if(sendbytes == -1)
+			{
+				error = 39;
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+				login_yes = 0;
+			}
+			recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+			if(strncmp(recvline, "230", 3) == 0)
+			{
+				LYVERBLOG("+[ftp][login][session%d]: ok!!\n", FTP->session);
+				login_yes = 1;
+			}
+			else 
+			{
+				error = 39;
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+				login_yes = 0;
+			}
+
+#if 1
+			//support rest
+			char str[255];
+			sprintf(str, "%d", FTP->rest);
+			zeromery(sendline, 1024);
+			zeromery(recvline, 1024);
+			strcat(sendline, "REST ");
+			strcat(sendline, str);
+			strcat(sendline, "\r\n");
+			//printf("[%s-%d]--->%s\n", __FUNCTION__,  __LINE__,  sendline);
+			sendbytes = send(FTP->control_sockfd,sendline,strlen(sendline),0);
+			if(sendbytes == -1)
+			{
+				error = 41;
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+				login_yes = 0;
+			}
+			recvbytes = recv(FTP->control_sockfd, recvline,sizeof(recvline),0);
+			if(recvbytes == -1)
+			{
+				error = 41;
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);    
+				login_yes = 0;    
+			}
+			if(strncmp(recvline, "350",3) == 0)
+			{
+				LYDBGLOG("[%s-%d] support rest\n", __FUNCTION__, __LINE__);
+				login_yes = 1;
+			}
+			else
+			{
+				error = 41;
+				LYDBGLOG("[%s-%d] ftp,not support rest%d\n", __FUNCTION__, __LINE__, error);
+				LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+				login_yes = 0;    
+			}   
+#endif  
+		}
+
+	}
+	return login_yes;
+}
+
+void zeromery(char *a,int len)
+{
+	int i;
+	len = sizeof(a);
+	for(i = 0; i < len; i++)
+	{
+		a[i] = 0;
+	}
+}
+
+void lynq_ftp_pwd(int control_sockfd)
+{
+	int recvbytes,sendbytes;
+	char sendline[1024], recvline[1024];
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	strcat(sendline, "PWD");
+	strcat(sendline, "\r\n");
+	sendbytes = send(FTP->control_sockfd,sendline,strlen(sendline),0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] ftp,pwd,send is error\n", __FUNCTION__, __LINE__);
+		error = 52;
+		LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline,sizeof(recvline),0);
+	if(strncmp(recvline, "257",3) == 0)
+	{
+		LYDBGLOG("[%s-%d] ftp,current directory is:%s\n", __FUNCTION__, __LINE__, recvline);
+	}
+	else
+	{
+		error = 51;
+		LYDBGLOG("[%s-%d] ftp,pwd,recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][login][session%d]: error num = %d\n", FTP->session, error);
+	}
+}
+
+//rest
+void lynq_ftp_rest(int control_sockfd)
+{
+
+	int recvbytes,sendbytes;
+	char sendline[1024], recvline[1024];
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	strcat(sendline, "REST ");
+	strcat(sendline, "500");
+	strcat(sendline, "\r\n");
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		error = 52;
+		LYDBGLOG("[%s-%d] ftp,stru send is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][reset][session%d]: error num = %d\n", FTP->session, error);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	if(recvbytes < 0)
+	{
+		error = 51;
+		LYVERBLOG("+[ftp][reset][session%d]: error num = %d\n", FTP->session, error);
+	}
+	if(strncmp(recvline, "350",3) == 0)
+	{
+		LYDBGLOG("[%s-%d] ftp,%s\n", __FUNCTION__, __LINE__, recvline);
+	}
+}
+
+int strtosrv(char *str)
+{
+
+	int addr[6];
+	//printf("%s\n",str);
+	sscanf(str, "%*[^(](%d,%d,%d,%d,%d,%d)", &addr[0], &addr[1], &addr[2], &addr[3], &addr[4], &addr[5]);
+
+	LYDBGLOG("[%s-%d] ftp,%d,%d,%d,%d\n", __FUNCTION__, __LINE__, addr[0],addr[1],addr[2],addr[3]);
+	bzero(hoster, strlen(hoster));
+	sprintf(hoster, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
+
+	LYDBGLOG("[%s-%d] ftp,hoster = %s", __FUNCTION__, __LINE__, hoster);
+	int port = addr[4]*256 + addr[5];
+	LYDBGLOG("[%s-%d] ftp,port = %d\n", __FUNCTION__, __LINE__, port);
+	return port;
+}
+
+
+int lynq_ftp_download(lynq_ftp_socker_info* FTP)
+{
+	char catbuf[1024];
+	int data_sock;
+	int recvbytes, sendbytes;
+	char sendline[1024] = "", recvline[1024] = "";
+	char getfilepath[FTP_MAX_ASCII_LEN+5] = "/tmp/";
+
+#if 1
+	//type
+
+	zeromery(recvline, 1024);
+	zeromery(sendline, 1024);
+	strcat(sendline, "TYPE ");
+	strcat(sendline, FTP->file_type);
+	strcat(sendline, "\r\n");
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline),0);
+	if(sendbytes < 0)
+	{
+		error = 52;//FTP_SEND_ERROR
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+		return FTP_SEND_ERROR;
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	LYDBGLOG("[%s-%d] ftp,recvline = %s\n",__FUNCTION__, __LINE__, recvline);
+	if(strncmp(recvline, "200", 3) == 0)
+	{
+		LYDBGLOG("[%s-%d] ftp,binary transmisson\n",__FUNCTION__, __LINE__);
+	}
+	else
+	{
+		error = 46; //FTP_DOWNLOAD_ERROR
+		LYDBGLOG("[%s-%d] ftp,download error\n",__FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+		return FTP_DOWNLOAD_ERROR;
+	}
+#endif
+
+	zeromery(recvline, 1024);
+	zeromery(sendline, 1024);
+	strcat(sendline, FTP->is_pasv_mode);
+	strcat(sendline, " \r\n");
+	
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		error  = 52; //FTP_SEND_ERROR
+		LYDBGLOG("[%s-%d] type send is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+		return FTP_SEND_ERROR;
+	}
+	
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	if(strncmp(recvline, "227", 3) == 0)
+	{
+		LYDBGLOG("[%s-%d] ftp,binary transmisson\n", __FUNCTION__, __LINE__);
+	}
+	else
+	{
+		error = 43;//FTP_ACTIVE_ERROR
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+		LYDBGLOG("[%s-%d] type recv is error!\n", __FUNCTION__, __LINE__);
+		return FTP_ACTIVE_ERROR;
+	}
+
+	LYDBGLOG("-------- [%s-%d] recvline = %s\n", __FUNCTION__, __LINE__, recvline);
+	int port1 = strtosrv(recvline);
+	data_sock = cliopen(hoster, port1);
+
+	LYDBGLOG("[%s-%d] ftp,data_sock = %d\n", __FUNCTION__, __LINE__, data_sock);
+	LYDBGLOG("[%s-%d] FTP->getfilename = %s\n", __FUNCTION__, __LINE__, FTP->getfilename);
+	LYDBGLOG("[%s-%d] FTP->getfilename_path = %s\n", __FUNCTION__, __LINE__, FTP->getfilename_path);
+
+	//send the command retr;
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	strcat(sendline, "RETR ");
+	strcat(sendline, FTP->getfilename_path);
+	strcat(sendline, "/");
+	strcat(sendline, FTP->getfilename);
+	strcat(sendline, "\r\n");
+	//printf("%s\n", sendline);
+
+	LYDBGLOG("[%s-%d] ftp,%ld\n", __FUNCTION__, __LINE__, write(FTP->control_sockfd,sendline,strlen(sendline)));
+	LYDBGLOG("[%s-%d] getfilename= %s FTP->control_sockfd = %d\n", __FUNCTION__, __LINE__, FTP->getfilename, FTP->control_sockfd);
+#if 1
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	if(recvbytes < 0)
+	{
+		error  = 52;//FTP_SEND_ERROR
+		LYDBGLOG("[%s-%d] retr recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+
+		return FTP_SEND_ERROR;
+	}
+	LYDBGLOG("[%s-%d] recvline = %s\n", __FUNCTION__, __LINE__, recvline);
+	if(strncmp(recvline, "400", 3) > 0)
+	{
+		error = 51;//FTP_RCV_ERROR
+		
+		LYDBGLOG("[%s-%d] return is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+		return FTP_RCV_ERROR;
+	}
+
+	strcat(getfilepath, FTP->getfilename);
+	lynq_ftp_get(data_sock, getfilepath, FTP->session);
+
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	strcpy(FTP->respond, recvline);
+
+	LYDBGLOG("[%s-%d] FTP->respond = %s\n", __FUNCTION__, __LINE__, FTP->respond);
+
+	if(strncmp(FTP->respond, "550", 3) == 0)
+	{
+		error = 46; //FTP_DOWNLOAD_ERROR
+		LYDBGLOG("[%s-%d] download is error %d \n", __FUNCTION__, __LINE__, error);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+
+		return FTP_DOWNLOAD_ERROR;
+	}
+
+	if(strncmp(FTP->respond, "421",3) == 0)
+	{
+		error = 34;//FTP_TIMEROUT
+		LYDBGLOG("[%s-%d] download is error %d \n", __FUNCTION__, __LINE__, error);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", FTP->session, error);
+
+		return FTP_TIMEROUT;
+	}
+
+	if((strncmp(FTP->respond, "226", 3) == 0) || (strncmp(FTP->respond, "125",3) == 0))
+	{
+		LYVERBLOG("+[ftp][get][session%d]: ok!!\n", FTP->session);
+	}
+#endif
+	return 0;
+
+}
+
+int lynq_ftp_put(int sck, char *pUploadFileName_s)
+{
+	int handle = open(pUploadFileName_s, O_RDWR);
+	int nread;
+	if(handle == -1)
+		return -1;
+	
+	while(1)
+	{
+		if((nread = read(handle, rbuf1, 1024)) < 0)
+		{
+			error = 54;//FTP_READ_ERROR
+			LYDBGLOG("[%s-%d] read error!", __FUNCTION__, __LINE__);
+			LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, error);
+		}
+		else if(nread == 0)
+			break;
+		LYDBGLOG("[%s-%d] rbuf1 = %s \n", __FUNCTION__, __LINE__, rbuf1);
+
+		if(write(sck, rbuf1, nread) != nread){
+			error = 54;
+			LYDBGLOG("[%s-%d] send error!", __FUNCTION__, __LINE__);
+			LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, error);
+		}
+		memset(rbuf1,0,1024);
+	}
+	if(close(sck) < 0)
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, FTP_CLOSE_ERROR);
+
+	return 0;
+}
+
+
+int lynq_ftp_up(lynq_ftp_socker_info* FTP)
+{
+	char catbuf[1024];
+	int data_sock;
+	int recvbytes,sendbytes;
+	char sendline[1024], recvline[1024];
+	int put_ret = -1;
+
+	if((access(FTP->putfilename, F_OK)) == -1)   
+	{	
+		//FTP_SOCK_ERROR
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, FTP_SOCK_ERROR);
+		LYDBGLOG("[%s-%d] %s file does not exist\n", __FUNCTION__, __LINE__, FTP->putfilename);
+		return FTP_SOCK_ERROR;
+	}	
+	
+#if 1
+	zeromery(recvline, 1024);
+	zeromery(sendline, 1024);
+	strcat(sendline, "TYPE ");
+	strcat(sendline, FTP->file_type);
+	strcat(sendline, "\r\n");
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] ftp type send is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, FTP_SEND_ERROR);
+		return FTP_SEND_ERROR;
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline,sizeof(recvline),0);
+	if(strncmp(recvline, "200",3) == 0)
+	{
+		LYDBGLOG("[%s-%d] initalize\n", __FUNCTION__, __LINE__);
+	}
+	else
+	{
+		LYDBGLOG("[%s-%d] type recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, FTP_RCV_ERROR);
+		return FTP_RCV_ERROR;
+	}
+#endif
+
+	//PASV   
+	zeromery(recvline, 1024);
+	zeromery(sendline, 1024);
+	strcat(sendline, FTP->is_pasv_mode);
+	strcat(sendline, " \r\n");
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] type send is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, FTP_SEND_ERROR);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline,sizeof(recvline), 0);
+	if(strncmp(recvline, "227", 3) == 0)
+	{
+		LYDBGLOG("[%s-%d] binary transmisson\n", __FUNCTION__, __LINE__);
+	}
+	else
+	{
+		error = 43;//FTP_ACTIVE_ERROR
+		LYDBGLOG("[%s-%d] type recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, error);
+		return FTP_ACTIVE_ERROR;
+	}
+
+	//init datelink  server port information
+	int port1 = strtosrv(recvline);
+	LYDBGLOG("[%s-%d] ftp,hoster =%s,port1 = %d\n", __FUNCTION__, __LINE__, hoster,port1);
+	data_sock = cliopen(hoster, port1);
+
+	LYDBGLOG("[%s-%d] ftp,data_sock = %d\n", __FUNCTION__, __LINE__, data_sock);
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	strcat(sendline, FTP->put_opt);
+	strcat(sendline, " ");
+	strcat(sendline, FTP->putfilename_path);
+	strcat(sendline, "/");
+	strcat(sendline, FTP->putfilename);
+	strcat(sendline, "\r\n");
+
+	LYDBGLOG("[%s-%d] ftp,%s\n", __FUNCTION__, __LINE__, sendline);
+	LYDBGLOG("%ld\n", write(FTP->control_sockfd, sendline, strlen(sendline)));
+	LYDBGLOG("[%s-%d] ftp,filename = %s\n", __FUNCTION__, __LINE__, FTP->putfilename);
+	
+
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	LYDBGLOG("RETR RECVLINE = %s\n", recvline);
+	if(recvbytes < 0)
+	{
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, FTP_RCV_ERROR);
+		LYDBGLOG("[%s-%d] retr recv is error!\n", __FUNCTION__, __LINE__);
+		return FTP_RCV_ERROR;
+	}
+	if(strncmp(recvline, "400", 3) > 0)
+	{
+		error = 400;
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, error);
+	}
+
+	lynq_ftp_put(data_sock, FTP->putfilename);
+	
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	strcpy(FTP->respond, recvline);
+
+	if(strncmp(FTP->respond, "226",3) == 0)
+	{
+		LYDBGLOG("[%s-%d] FTP->respond = %s\n", __FUNCTION__, __LINE__, FTP->respond);
+		LYVERBLOG("+[ftp][up][session%d]: ok!!\n", FTP->session);
+	}
+	else
+	{
+		error = 45;//FTP_UPLOAD_ERROR
+		LYVERBLOG("+[ftp][up][session%d]: error num = %d\n", FTP->session, error);
+		return FTP_UPLOAD_ERROR;
+	}
+	return 0;
+
+}
+
+
+int lynq_ftp_ls(lynq_ftp_socker_info* FTP)
+{
+	char catbuf[1024];
+	int data_sock;
+	int recvbytes, sendbytes;
+	char sendline[1024], recvline[1024];  
+
+	
+	//PASV   
+	zeromery(recvline, 1024);
+	zeromery(sendline, 1024);
+	strcat(sendline, FTP->is_pasv_mode);
+	strcat(sendline, " \r\n");
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] type send is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", FTP->session, FTP_SEND_ERROR);
+		return FTP_SEND_ERROR;
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline,sizeof(recvline), 0);
+	if(strncmp(recvline, "227",3) == 0)
+	{
+		LYDBGLOG("[%s-%d] binary transmit\n", __FUNCTION__, __LINE__);
+	}
+	else
+	{
+		error = 43;
+		LYDBGLOG("[%s-%d] type recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", FTP->session, error);
+		return error;
+	}
+
+	//init datelink  server port information
+	int port1 = strtosrv(recvline);
+	LYDBGLOG("[%s-%d] ftp,hoster =%s,port1 = %d\n", __FUNCTION__, __LINE__, hoster,port1);
+	data_sock = cliopen(hoster, port1);
+
+	//printf("data_sock = %d\n",data_sock);
+
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	strcat(sendline, "LIST -al ");
+	strcat(sendline, FTP->dir);
+	strcat(sendline, "\r\n");
+
+	LYDBGLOG("%ld\n", write(FTP->control_sockfd, sendline, strlen(sendline)));
+
+	LYDBGLOG("[%s-%d] ftp,%s\n", __FUNCTION__, __LINE__,sendline);
+
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	//printf("RETR RECVLINE = %s\n",recvline);
+	LYDBGLOG("[%s-%d] recvline = %s\n", __FUNCTION__, __LINE__, recvline);
+
+	if(recvbytes < 0)
+	{
+		LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", FTP->session, FTP_SEND_ERROR);
+	}
+	if(strncmp(recvline, "400", 3)>0)
+	{
+		error = 400;
+		LYDBGLOG("[%s-%d] type recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", FTP->session, error);
+		return error;
+	}
+
+	ftp_list(data_sock, FTP->session); 
+
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	LYDBGLOG("[%s-%d] recvline = %s\n", __FUNCTION__, __LINE__, recvline);
+
+	strcpy(FTP->respond, recvline);
+
+	if((strncmp(FTP->respond, "226", 3) == 0) || (strncmp(FTP->respond, "150",3) == 0) || strncmp(FTP->respond, "125", 3) == 0)
+	{	
+		if(strstr(FTP->respond, ". 0 bytes")){//rita add @2021.07.19 for ls
+			LYDBGLOG("[%s-%d] FTP->respond = %s\n", __FUNCTION__, __LINE__, FTP->respond);
+			LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", FTP->session, FTP_LS_ERROR);
+			return FTP_LS_ERROR;
+		}
+		else
+			LYVERBLOG("+[ftp][ls][session%d]: ok!!\n", FTP->session);
+	}
+	else{
+		error = 44;
+		LYDBGLOG("[%s-%d] ls error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", FTP->session, error);
+		return error;
+	}
+
+	return 0;
+}
+
+
+void lynq_ftp_get(int sck, char *pDownloadFileName, int session)
+{
+	int handle = open(pDownloadFileName, O_WRONLY | O_CREAT | O_TRUNC, S_IREAD| S_IWRITE);
+	int nread;
+	
+	while(1)
+	{
+		//printf("%d\n",sck);
+		//printf("%d\n",handle);
+		if((nread = recv(sck, rbuf1, 1024, 0)) < 0)
+		{
+			error = 51;
+			//LYDBGLOG("[%s-%d] ftp,rbuf1 = %s\n", __FUNCTION__, __LINE__, rbuf1);
+			LYDBGLOG("[%s-%d] receive error\n", __FUNCTION__, __LINE__);
+			LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", session, error);
+			return;
+		}
+		else if(nread == 0)
+		{
+			LYDBGLOG("[%s-%d] over\n", __FUNCTION__, __LINE__);
+			break;
+		}
+		if(write(handle, rbuf1, nread) != nread)
+		{
+			LYDBGLOG("[%s-%d] receive error from server!\n", __FUNCTION__, __LINE__);
+			LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", session, FTP_WRITE_ERROR);
+		}
+		
+		//LYDBGLOG("[%s-%d] rbuf1 = %s \n", __FUNCTION__, __LINE__, rbuf1);
+		
+		memset(rbuf1,0,1024);
+	}
+	if(close(sck) < 0){
+		LYDBGLOG("[%s-%d] close error\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][get][session%d]: error num = %d\n", session, FTP_CLOSE_ERROR);
+	}
+}
+
+
+
+int cliopen(char *hoster, int port)
+{
+
+	int control_sockfd;
+
+	struct sockaddr_in serv_addr;
+	struct hostent *host = NULL;
+
+	//get hostent argument
+	char name[MAXSIZE];
+	//printf("please enter the hostname\n");
+	//printf("ftp-> ");
+
+	strcpy(name, hoster);
+	host = gethostbyname(name);
+	if(host == NULL)
+	{
+		LYDBGLOG("[%s-%d] ftp,get host by name is error!\n", __FUNCTION__, __LINE__);
+		login_yes = 0;
+	}
+	else
+	{
+		//creact socket
+		control_sockfd = socket(AF_INET, SOCK_STREAM, 0);
+		if(control_sockfd < 0)
+		{
+			//printf("socket is error\n");
+			LYDBGLOG("[%s-%d] ftp,socket is error\n", __FUNCTION__, __LINE__);
+			login_yes = 0;
+		}
+
+		//set sockaddr_in
+		bzero(&serv_addr, sizeof(serv_addr));
+
+		memset(&serv_addr, 0, sizeof(struct sockaddr_in));
+		memcpy(&serv_addr.sin_addr.s_addr, host->h_addr, host->h_length);
+		serv_addr.sin_family = AF_INET;
+		serv_addr.sin_port = htons(port);
+
+		//printf("line port = %d\n",port);
+		if((connect(control_sockfd, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr))) < 0)
+		{
+			//printf("connect is error\n");
+			LYDBGLOG("[%s-%d] ftp,connect is error\n", __FUNCTION__, __LINE__);
+			login_yes = 0;
+		} 
+	}
+	return control_sockfd;
+}
+
+void ftp_list(int sockfd, int session)
+{
+	int nread;
+
+	for(;;)
+	{
+		if((nread = recv(sockfd, rbuf1, 1024, 0)) < 0)
+		{
+			LYDBGLOG("[%s-%d] recv error\n", __FUNCTION__, __LINE__);
+		}
+		else if(nread == 0)
+		{
+			LYDBGLOG("[%s-%d] disconnect \n", __FUNCTION__, __LINE__);
+			break;
+		}
+		LYVERBLOG("+[ftp][ls][session%d]: data = %s\n", session, rbuf1);
+		LYVERBLOG("+[ftp][ls][session%d]: ok!! \n", session);
+		memset(rbuf1, 0, 1024);
+	}
+	if(close(sockfd) < 0){
+		LYDBGLOG("[%s-%d] close error\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][ls][session%d]: error num = %d\n", session, FTP_CLOSE_ERROR);
+	}
+}
+
+void lynq_ftp_cd(lynq_ftp_socker_info* FTP)
+{
+	char catbuf[1024];
+	char sendline[1024];
+	char recvline[1024];
+	
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	int recvbytes, sendbytes;
+	int issuccess;
+
+	if(strcmp(FTP->del_mkr_filename, "..") == 0)
+	{
+		sprintf(sendline, "CDUP %s\n", FTP->del_mkr_filename);
+	}
+	else
+	{
+		sprintf(sendline, "CWD %s\n", FTP->del_mkr_filename);
+	}
+	strcat(sendline, "\r\n");
+
+	LYDBGLOG("[%s-%d] %s\n", __FUNCTION__, __LINE__, sendline);
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("cd send is error!");
+		exit(1);
+	}
+
+
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	if(strncmp(recvline, "257", 3) == 0)
+	{
+		issuccess = 1;
+	}
+	else
+	{
+		error = 44;
+		issuccess = 0;
+	}
+}
+
+void lynq_ftp_creat_mkd(lynq_ftp_socker_info* FTP)
+{
+	char catbuf[1024];
+	char sendline[1024];
+	char recvline[1024];
+	
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	int recvbytes, sendbytes;
+	int issuccess;
+	strcat(sendline, "MKD ");
+	strcat(sendline, FTP->del_mkr_filename);
+	strcat(sendline, "\r\n");
+	LYDBGLOG("[%s-%d] %s\n", __FUNCTION__, __LINE__, sendline);
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] mkd send is error!", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][mkdir][session%d]: error num = %s\n", FTP->session, FTP_SEND_ERROR);
+		exit(1);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	if(strncmp(recvline, "257", 3) == 0)
+	{
+		issuccess = 1;
+		LYVERBLOG("+[ftp][mkdir][session%d]: ok!!\n", FTP->session);
+	}
+	else
+	{
+		error = 44;
+		LYVERBLOG("+[ftp][mkdir][session%d]: error num = %d\n", FTP->session, error);
+		issuccess = 0;
+	}
+}
+
+
+void lynq_ftp_delete_mkd(lynq_ftp_socker_info* FTP)
+{
+	char sendline[1024];
+	char recvline[1024];
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	int recvbytes, sendbytes;
+	int issuccess;
+	char catbuf[1024];
+	
+	strcat(sendline, "RMD ");
+	strcat(sendline, FTP->del_mkr_filename);
+	strcat(sendline, "\r\n");
+	LYDBGLOG("[%s-%d] %s\n", __FUNCTION__, __LINE__,sendline);
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] rmd send is error!", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][rmd][session%d]: error num = %s\n", FTP->session, FTP_SEND_ERROR);
+		exit(1);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	if(strncmp(recvline, "250", 3) == 0)
+	{
+		issuccess = 1;
+		LYVERBLOG("+[ftp][rmd][session%d]: ok!!\n", FTP->session);
+	}
+	else
+	{
+		error = 44;
+		issuccess = 0;
+		LYVERBLOG("+[ftp][rmd][session%d]: error num = %s\n", FTP->session, error);
+	}
+}
+
+void lynq_ftp_quit(lynq_ftp_socker_info* FTP)
+{
+
+	int recvbytes, sendbytes;
+	char sendline[1024], recvline[1024];
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+
+	
+	strcat(sendline, "bye ");
+	strcat(sendline, "\n");
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] stru send is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][quit][session%d]: error num = %s\n", FTP->session, FTP_SEND_ERROR);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+
+	LYDBGLOG("[%s-%d] quit = %s\n", __FUNCTION__, __LINE__, recvline);
+	if(recvbytes < 0)
+	{
+		LYDBGLOG("[%s-%d] stru recv is error!\n", __FUNCTION__, __LINE__);
+		LYVERBLOG("+[ftp][quit][session%d]: error num = %s\n", FTP->session, FTP_RCV_ERROR);
+	}
+	if(strncmp(recvline, "221", 3) == 0)
+	{
+		LYVERBLOG("+[ftp][quit][session%d]: ok!!\n", FTP->session);
+	}
+}
+
+void lynq_ftp_deletefile_mkd(lynq_ftp_socker_info* FTP)
+{
+	char sendline[1024];
+	char recvline[1024];
+	
+	zeromery(sendline, 1024);
+	zeromery(recvline, 1024);
+	int recvbytes, sendbytes;
+	int issuccess;
+	char catbuf[1024];
+	strcat(sendline, "DELE ");
+	strcat(sendline, FTP->del_mkr_filename);
+	strcat(sendline, "\r\n");
+	LYDBGLOG("[%s-%d] %s\n", __FUNCTION__, __LINE__,sendline);
+	sendbytes = send(FTP->control_sockfd, sendline, strlen(sendline), 0);
+	if(sendbytes < 0)
+	{
+		LYVERBLOG("+[ftp][delfile][session%d]: error num = %d\n", FTP->session, FTP_SEND_ERROR);
+		exit(1);
+	}
+	recvbytes = recv(FTP->control_sockfd, recvline, sizeof(recvline), 0);
+	if(strncmp(recvline, "250", 3) == 0)
+	{
+		issuccess = 1;
+		LYVERBLOG("+[ftp][delfile][session%d]: ok!!\n", FTP->session);
+	}
+	else
+	{
+		error = 44;
+		issuccess = 0;
+		LYVERBLOG("+[ftp][delfile][session%d]: error num = %d\n", FTP->session, error);
+	}
+}
+