Skip to content
This repository was archived by the owner on Jun 9, 2021. It is now read-only.

Commit 1d099f1

Browse files
committed
updated
1 parent 9f7645f commit 1d099f1

File tree

1 file changed

+47
-15
lines changed

1 file changed

+47
-15
lines changed

list_content.h

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include"func.h"
12
/*
23
List the contents of current working directory on server (`ls` and `ls -l` linux commands).
34
*/
@@ -7,6 +8,10 @@ void list_content(char *arg, char *user_input, int sockfd)
78
int no_of_bytes;
89
int port;
910
int newsockfd;
11+
12+
struct timeval tm;/* time structure to set time wait for receive buffer */
13+
tm.tv_sec = 1;
14+
tm.tv_usec = 750000;
1015

1116
char message_from_server[MAXSZ];
1217
char message_to_server[MAXSZ];
@@ -21,22 +26,30 @@ void list_content(char *arg, char *user_input, int sockfd)
2126
while((no_of_bytes = recv(sockfd,message_from_server,MAXSZ,0)) > 0)
2227
{
2328
message_from_server[no_of_bytes] = '\0';
24-
printf("%s\n",message_from_server);
29+
printf("%s",message_from_server);
2530
fflush(stdout);
26-
if(message_from_server[no_of_bytes-2] == '\r' && message_from_server[no_of_bytes-1] == '\n')
31+
if(strstr(message_from_server,"200 ") > 0 || strstr(message_from_server,"501 ") > 0 ||strstr(message_from_server,"500 ") > 0 ||strstr(message_from_server,"504 ") > 0 ||strstr(message_from_server,"421 ") > 0 || strstr(message_from_server,"530 ") > 0)
2732
break;
2833
}
29-
34+
printf("\n");
35+
36+
if(strstr(message_from_server,"501 ") > 0 ||strstr(message_from_server,"500 ") > 0 ||strstr(message_from_server,"504 ") > 0 ||strstr(message_from_server,"421 ") > 0 || strstr(message_from_server,"530 ") > 0)
37+
return;
38+
3039
/* Request server to connect to PASSIVE port for file transfers */
3140
send(sockfd,passive,strlen(passive),0);
3241
while((no_of_bytes = recv(sockfd,message_from_server,MAXSZ,0)) > 0)
3342
{
3443
message_from_server[no_of_bytes] = '\0';
35-
printf("%s\n",message_from_server);
44+
printf("%s",message_from_server);
3645
fflush(stdout);
37-
if(message_from_server[no_of_bytes-2] == '\r' && message_from_server[no_of_bytes-1] == '\n')
46+
if(strstr(message_from_server,"227 ") > 0 || strstr(message_from_server,"501 ") > 0 ||strstr(message_from_server,"500 ") > 0 ||strstr(message_from_server,"502 ") > 0 ||strstr(message_from_server,"421 ") > 0 || strstr(message_from_server,"530 ") > 0)
3847
break;
3948
}
49+
printf("\n");
50+
51+
if(strstr(message_from_server,"501 ") > 0 ||strstr(message_from_server,"500 ") > 0 ||strstr(message_from_server,"502 ") > 0 ||strstr(message_from_server,"421 ") > 0 || strstr(message_from_server,"530 ") > 0)
52+
return;
4053

4154
/* Request acepted. Connect to PASSIVE port */
4255
if(strncmp(message_from_server,"227",3)== 0)
@@ -55,33 +68,52 @@ void list_content(char *arg, char *user_input, int sockfd)
5568

5669
send(sockfd,message_to_server,strlen(message_to_server),0);
5770

58-
no_of_bytes = recv(sockfd,message_from_server,MAXSZ,0);
59-
message_from_server[no_of_bytes] = '\0';
60-
printf("%s\n",message_from_server);
61-
fflush(stdout);
6271

72+
while((no_of_bytes = recv(sockfd,message_from_server,MAXSZ,0)) > 0)
73+
{
74+
message_from_server[no_of_bytes] = '\0';
75+
printf("%s",message_from_server);
76+
fflush(stdout);
77+
78+
if(strstr(message_from_server,"125 ") > 0 ||strstr(message_from_server,"150 ") > 0 || strstr(message_from_server,"501 ") > 0 ||strstr(message_from_server,"500 ") > 0 ||strstr(message_from_server,"502 ") > 0 ||strstr(message_from_server,"421 ") > 0 || strstr(message_from_server,"530 ") > 0)
79+
break;
80+
}
81+
printf("\n");
82+
83+
if(strncmp(message_from_server,"125",3) != 0 && strncmp(message_from_server,"150",3) != 0)
84+
return;
85+
86+
func(newsockfd);
87+
6388
/* Read data on new PASSIVE socket */
6489

6590
while((no_of_bytes = recv(newsockfd,message_from_server,MAXSZ,0)) > 0)
6691
{
6792
message_from_server[no_of_bytes] = '\0';
68-
printf("%s\n",message_from_server);
93+
printf("%s",message_from_server);
6994
fflush(stdout);
70-
if(message_from_server[no_of_bytes-2] == '\r' && message_from_server[no_of_bytes-1] == '\n')
71-
break;
7295

7396
}
74-
97+
printf("\n");
98+
7599
close(newsockfd);/* Close PASSIVE connection */
100+
101+
/* Set time boundation on receive buffer */
102+
if(setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO,(char *)&tm,sizeof(tm)) == -1)
103+
{
104+
perror("Error");
105+
exit(1);
106+
}
76107

77108
while((no_of_bytes = recv(sockfd,message_from_server,MAXSZ,0)) > 0)
78109
{
79110
message_from_server[no_of_bytes] = '\0';
80-
printf("%s\n",message_from_server);
111+
printf("%s",message_from_server);
81112
fflush(stdout);
82-
if(message_from_server[no_of_bytes-2] == '\r' && message_from_server[no_of_bytes-1] == '\n')
113+
if(strstr(message_from_server,"226 ") > 0)
83114
break;
84115
}
116+
printf("\n");
85117
}
86118

87119
}

0 commit comments

Comments
 (0)