update client
This commit is contained in:
parent
4fb42af1a0
commit
ef60355fea
|
@ -31,7 +31,6 @@ http://license.coscl.org.cn/MulanPSL2
|
||||||
|
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
|
|
||||||
char buf[5000];
|
|
||||||
|
|
||||||
static char tcp_demo_ipaddr[] = {192, 168, 3, 77};
|
static char tcp_demo_ipaddr[] = {192, 168, 3, 77};
|
||||||
static char tcp_demo_netmask[] = {255, 255, 255, 0};
|
static char tcp_demo_netmask[] = {255, 255, 255, 0};
|
||||||
|
@ -40,36 +39,24 @@ static char tcp_demo_gwaddr[] = {192, 168, 3, 1};
|
||||||
//quoted from https://kerndev.blog.csdn.net/article/details/89383888
|
//quoted from https://kerndev.blog.csdn.net/article/details/89383888
|
||||||
int SendCommand(char *cmd,int cmd_fd)
|
int SendCommand(char *cmd,int cmd_fd)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
int ret;
|
int ret;
|
||||||
ret = send(cmd_fd, cmd, (int)strlen(cmd),0);
|
ret = send(cmd_fd, cmd, (int)strlen(cmd),0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int RecvRespond(char * respond,int len,int cmd_fd)
|
int RecvRespond(char * respond,int len,int cmd_fd)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&mutex);
|
read(cmd_fd,respond,50);
|
||||||
int ret;
|
for(int i=0;i<50;i++){
|
||||||
int off;
|
if(respond[i]=='\n'){
|
||||||
len -= -1;
|
respond[i+1]=0;
|
||||||
for (off = 0;off < len;off += ret) {
|
|
||||||
ret = recv(cmd_fd,&respond[off],1,0);
|
|
||||||
if(ret < 0 ){
|
|
||||||
printf("recv respond error\r\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if(respond[off] == '\n'){
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
respond[off + 1] = 0;
|
|
||||||
char *result = malloc(50);
|
char *result = malloc(50);
|
||||||
strcpy(result,respond);
|
strcpy(result,respond);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
return atoi(result);
|
return atoi(result);
|
||||||
}
|
}
|
||||||
int EnterPasv(uint8_t *ipaddr,int *port,int cmd_fd)
|
int EnterPasv(uint8_t *ipaddr,int *port,int cmd_fd)
|
||||||
|
@ -100,10 +87,8 @@ int EnterPasv(uint8_t *ipaddr,int *port,int cmd_fd)
|
||||||
printf("failed to enter pasv mod\n");
|
printf("failed to enter pasv mod\n");
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
}
|
}
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
find=strrchr(recvBuffer,'(');
|
find=strrchr(recvBuffer,'(');
|
||||||
sscanf(find,"(%d,%d,%d,%d,%d,%d)",&ipaddr[0],&ipaddr[1],&ipaddr[2],&ipaddr[3],&tmp1,&tmp2);
|
sscanf(find,"(%d,%d,%d,%d,%d,%d)",&ipaddr[0],&ipaddr[1],&ipaddr[2],&ipaddr[3],&tmp1,&tmp2);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
*port = tmp1 * 256 + tmp2;
|
*port = tmp1 * 256 + tmp2;
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
@ -142,7 +127,9 @@ int Login(uint8_t addr[4],int port,char *username,char *password,int cmd_fd)
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
pthread_mutex_lock(&mutex);
|
||||||
printf("login....\r\n");
|
printf("login....\r\n");
|
||||||
|
pthread_mutex_unlock(&mutex);
|
||||||
|
|
||||||
sprintf(sendBuffer,"USER %s\r\n",username);
|
sprintf(sendBuffer,"USER %s\r\n",username);
|
||||||
ret = SendCommand(sendBuffer,cmd_fd);
|
ret = SendCommand(sendBuffer,cmd_fd);
|
||||||
|
@ -161,9 +148,7 @@ int Login(uint8_t addr[4],int port,char *username,char *password,int cmd_fd)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
sprintf(sendBuffer,"PASS %s\r\n",password);
|
sprintf(sendBuffer,"PASS %s\r\n",password);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
ret = SendCommand(sendBuffer,cmd_fd);
|
ret = SendCommand(sendBuffer,cmd_fd);
|
||||||
if(ret == -1){
|
if(ret == -1){
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
@ -213,9 +198,7 @@ int GetFileSize(char * name,int cmd_fd)
|
||||||
int ret;
|
int ret;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
sprintf(sendBuffer,"SIZE %s\r\n",name);
|
sprintf(sendBuffer,"SIZE %s\r\n",name);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
ret = SendCommand(sendBuffer,cmd_fd);
|
ret = SendCommand(sendBuffer,cmd_fd);
|
||||||
if(ret == -1){
|
if(ret == -1){
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
@ -241,6 +224,7 @@ int GetFileSize(char * name,int cmd_fd)
|
||||||
}
|
}
|
||||||
int Download(char *name,int cmd_fd)
|
int Download(char *name,int cmd_fd)
|
||||||
{
|
{
|
||||||
|
char *buf = malloc(5000*sizeof(char));
|
||||||
char *sendBuffer = malloc(1024*sizeof(char));
|
char *sendBuffer = malloc(1024*sizeof(char));
|
||||||
char *recvBuffer = malloc(1024*sizeof(char));
|
char *recvBuffer = malloc(1024*sizeof(char));
|
||||||
int data_fd = socket(AF_INET, SOCK_STREAM, 0);
|
int data_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
@ -257,6 +241,7 @@ int Download(char *name,int cmd_fd)
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
struct sockaddr_in tcp_sock;
|
struct sockaddr_in tcp_sock;
|
||||||
|
@ -271,6 +256,7 @@ int Download(char *name,int cmd_fd)
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,6 +266,7 @@ int Download(char *name,int cmd_fd)
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ret = RecvRespond(recvBuffer,1024,cmd_fd);
|
ret = RecvRespond(recvBuffer,1024,cmd_fd);
|
||||||
|
@ -287,12 +274,11 @@ int Download(char *name,int cmd_fd)
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
for(it = 0;it < len;it += ret){
|
for(it = 0;it < len;it += ret){
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
ret = recv(data_fd,((char *)buf + it),len,0);
|
ret = recv(data_fd,((char *)buf + it),len,0);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
if(ret<0){
|
if(ret<0){
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("download was interupted\r\n");
|
printf("download was interupted\r\n");
|
||||||
|
@ -300,7 +286,6 @@ int Download(char *name,int cmd_fd)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//buf[len] = 0;
|
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("download %d/%d bytes complete. \r\n",it,len);
|
printf("download %d/%d bytes complete. \r\n",it,len);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
|
@ -309,32 +294,33 @@ int Download(char *name,int cmd_fd)
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("creating file %s ....\r\n",name);
|
printf("creating %s ....\r\n",name);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
FILE * file = fopen(name,"w");
|
FILE * file = fopen(name,"w");
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
fprintf(file,buf);
|
fprintf(file,buf);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("create success!");
|
printf("create %s success!\n",name);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int Upload(char* name,int cmd_fd)
|
int Upload(char* name,int cmd_fd)
|
||||||
{
|
{
|
||||||
char *sendBuffer = malloc(1024*sizeof(char));
|
char *sendBuffer = malloc(1024*sizeof(char));
|
||||||
char *recvBuffer = malloc(1024*sizeof(char));
|
char *recvBuffer = malloc(1024*sizeof(char));
|
||||||
|
char *buf = malloc(5000*sizeof(char));
|
||||||
int data_fd = socket(AF_INET, SOCK_STREAM, 0);
|
int data_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("uploading file %s\r\n", name);
|
printf("uploading %s\r\n", name);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
int ret;
|
int ret;
|
||||||
uint8_t addr[4];
|
uint8_t addr[4];
|
||||||
|
@ -344,6 +330,7 @@ int Upload(char* name,int cmd_fd)
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
struct sockaddr_in tcp_sock;
|
struct sockaddr_in tcp_sock;
|
||||||
|
@ -358,17 +345,17 @@ int Upload(char* name,int cmd_fd)
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
sprintf(sendBuffer, "STOR %s\r\n", name);
|
sprintf(sendBuffer, "STOR %s\r\n", name);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
ret = SendCommand(sendBuffer,cmd_fd);
|
ret = SendCommand(sendBuffer,cmd_fd);
|
||||||
if(ret == -1){
|
if(ret == -1){
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ret = RecvRespond(recvBuffer,1024,cmd_fd);
|
ret = RecvRespond(recvBuffer,1024,cmd_fd);
|
||||||
|
@ -376,6 +363,7 @@ int Upload(char* name,int cmd_fd)
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,42 +374,43 @@ int Upload(char* name,int cmd_fd)
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(file,0,SEEK_END);
|
fseek(file,0,SEEK_END);
|
||||||
int len = ftell(file);
|
int len = ftell(file);
|
||||||
fseek(file,0,SEEK_SET);
|
fseek(file,0,SEEK_SET);
|
||||||
|
|
||||||
pthread_mutex_lock(&mutex);
|
|
||||||
int size = fread(buf, 1, len, file);
|
int size = fread(buf, 1, len, file);
|
||||||
pthread_mutex_unlock(&mutex);
|
|
||||||
|
|
||||||
if (size == -1) {
|
if (size == -1) {
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("failed to read data\n");
|
printf("failed to read data\n");
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
ret = send(data_fd, buf, len,0);
|
ret = send(data_fd, buf, size,0);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
closesocket(data_fd);
|
closesocket(data_fd);
|
||||||
|
|
||||||
ret = RecvRespond(recvBuffer, 1024,cmd_fd);
|
ret = RecvRespond(recvBuffer, 1024,cmd_fd);
|
||||||
|
|
||||||
if (ret != 226) {
|
if (ret != 226) {
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
printf("upload success!\n");
|
printf("upload %s success!\n",name);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
free(sendBuffer);
|
free(sendBuffer);
|
||||||
free(recvBuffer);
|
free(recvBuffer);
|
||||||
|
free(buf);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -512,6 +501,7 @@ PRIV_SHELL_CMD_FUNCTION(UploadTest, Implement ftp, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||||
|
|
||||||
int TestFtp()
|
int TestFtp()
|
||||||
{
|
{
|
||||||
|
pthread_mutex_init(&mutex,NULL);
|
||||||
lwip_config_tcp(0, tcp_demo_ipaddr, tcp_demo_netmask, tcp_demo_gwaddr);
|
lwip_config_tcp(0, tcp_demo_ipaddr, tcp_demo_netmask, tcp_demo_gwaddr);
|
||||||
int cmd_fd = socket(AF_INET, SOCK_STREAM, 0);
|
int cmd_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
uint8_t ip[4] = { 8,140,53,225 };
|
uint8_t ip[4] = { 8,140,53,225 };
|
||||||
|
|
Loading…
Reference in New Issue