Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /tags/REL-1.1/ftpsystem.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6 - (hide annotations) (download) (as text)
Fri Feb 20 02:19:48 2009 UTC (15 years, 1 month ago) by hirohitohigashi
Original Path: trunk/ftpsystem.c
File MIME type: text/x-csrc
File size: 3015 byte(s)
I changed it to work in FreeBSD and MacOSX.

1 hirohitohigashi 1 /*
2    
3     libftp 1.0 (stable): this is an FTP library to simplify the work to a Developer
4     who want to work with FTP servers (RFC 959).
5     Copyright (C) 2007/2008 omnipresent - omnipresent[at]email.it
6    
7     This program is free software: you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation, either version 3 of the License, or
10     (at your option) any later version.
11    
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License
18     along with this program. If not, see <http://www.gnu.org/licenses/>.
19    
20     */
21    
22     #include <stdio.h>
23     #include <string.h>
24     #include <errno.h>
25     #include <stdlib.h>
26     #include <unistd.h>
27     #include <sys/types.h>
28     #include <sys/time.h>
29     #include <sys/socket.h>
30     #include <sys/stat.h>
31     #include <netinet/in.h>
32     #include <netdb.h>
33     #include <fcntl.h>
34    
35     #include "ftp_main.h"
36    
37    
38     /* Global variable used in the ftp_system subroutine */
39    
40     char system_name[1050];
41    
42     /***
43     ftp_system:
44     - int sck => Socket Descriptor
45     - int verbose => Verbose?
46     . 0 Do not Print
47     . 1 Print
48     - ret => Success?
49     . 0 Success
50     .-1 Error
51     ***/
52    
53    
54     int ftp_system (int sck, int verbose) {
55    
56    
57     char *buf;
58     int len = 0;
59     int n = 0;
60     buf = (char *)malloc(1024*sizeof(char));
61    
62     memset(buf, 0x0, 1024);
63    
64    
65     if (write(sck, "SYST\n", strlen("SYST\n")) == -1) {
66    
67     if (verbose) {
68     if (errno == EBADF) {
69     fprintf(stderr, "Socket Descriptor Not Valid!\n");
70     free(buf);
71    
72     return -1;
73     } else if (errno == EIO) {
74     fprintf(stderr, "I/O Error!\n");
75     free(buf);
76    
77     return -1;
78     } else if (errno == EINTR) {
79     fprintf(stderr, "Signal Interrupted The write() Function\n");
80     free(buf);
81    
82     return -1;
83     }
84    
85     } else {
86    
87     if (errno == EBADF) {
88     free(buf);
89    
90     return -1;
91     } else if (errno == EIO) {
92     free(buf);
93    
94     return -1;
95     } else if (errno == EINTR) {
96     free(buf);
97    
98     return -1;
99     }
100    
101     }
102    
103     free(buf);
104    
105     return -1;
106    
107     }
108    
109     struct timeval tm; //tv_sec - tv_usec
110     fd_set readfds;
111     tm.tv_sec = 3;
112     tm.tv_usec = 0;
113    
114     FD_ZERO(&readfds);
115    
116     FD_SET(sck, &readfds);
117    
118     if (select(sck+1, &readfds, NULL, NULL, &tm) < 0 ) {
119     if (verbose) {
120     perror("select()");
121     }
122     free(buf);
123    
124     return -1;
125     } else {
126    
127     if (FD_ISSET(sck, &readfds)) {
128    
129 hirohitohigashi 6 if ( (n = recv(sck, buf, 1022, 0)) < 0) {
130 hirohitohigashi 1 if (verbose) {
131 hirohitohigashi 6 perror("recv()");
132 hirohitohigashi 1 }
133     free(buf);
134    
135     return -1;
136 hirohitohigashi 6 }
137     buf[n] = '\0';
138 hirohitohigashi 1
139 hirohitohigashi 6 if (verbose)
140 hirohitohigashi 1 printf("[Server] %s\n", buf);
141    
142     }
143     else {
144     if (verbose)
145     printf("[-] Timeout\n");
146    
147     return -1;
148     }
149     }
150    
151     len = strlen(buf);
152    
153    
154     memset(system_name, 0x0, 1050);
155    
156     memcpy(&system_name, buf, len);
157     memset(buf, 0x0, 1024);
158    
159     free(buf);
160    
161    
162    
163     return 0; //0 returned; operation sucessfull!
164    
165     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26