[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);
+ }
+}
+