Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk_1/ftpsystem.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6 - (show annotations) (download) (as text)
Fri Feb 20 02:19:48 2009 UTC (15 years 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 /*
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 if ( (n = recv(sck, buf, 1022, 0)) < 0) {
130 if (verbose) {
131 perror("recv()");
132 }
133 free(buf);
134
135 return -1;
136 }
137 buf[n] = '\0';
138
139 if (verbose)
140 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