Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/RB-1.1/ftpnoop.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 13 - (hide annotations) (download) (as text)
Mon Feb 23 02:22:49 2009 UTC (15 years, 1 month ago) by hirohitohigashi
File MIME type: text/x-csrc
File size: 2980 byte(s)
Creating relase branch for 1.1
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     ftp_noop:
39     - int sck => Socket Descriptor
40     - int verbose => Verbose?
41     . 0 Do not Print
42     . 1 Print
43     - ret => Success?
44     . 0 Success
45     .-1 Error
46     ***/
47    
48    
49 hirohitohigashi 7 int ftp_noop (int sck, int verbose)
50     {
51     char *buf;
52     int n = 0;
53     struct timeval tm; //tv_sec - tv_usec
54     fd_set readfds;
55     int OK = 0;
56 hirohitohigashi 1
57    
58 hirohitohigashi 7 buf = (char *)malloc(1024*sizeof(char));
59 hirohitohigashi 1
60 hirohitohigashi 7 memset(buf, 0x0, 1024);
61 hirohitohigashi 1
62     if (write(sck, "NOOP\n", strlen("NOOP\n")) == -1) {
63    
64 hirohitohigashi 7 if (verbose) {
65     if (errno == EBADF) {
66     fprintf(stderr, "Socket Descriptor Not Valid!\n");
67     free(buf);
68 hirohitohigashi 1
69 hirohitohigashi 7 return -1;
70     } else if (errno == EIO) {
71     fprintf(stderr, "I/O Error!\n");
72     free(buf);
73 hirohitohigashi 1
74 hirohitohigashi 7 return -1;
75     } else if (errno == EINTR) {
76     fprintf(stderr, "Signal Interrupted The write() Function\n");
77     free(buf);
78 hirohitohigashi 1
79 hirohitohigashi 7 return -1;
80     }
81     } else {
82     if (errno == EBADF) {
83     free(buf);
84 hirohitohigashi 1
85 hirohitohigashi 7 return -1;
86     } else if (errno == EIO) {
87     free(buf);
88 hirohitohigashi 1
89 hirohitohigashi 7 return -1;
90     } else if (errno == EINTR) {
91     free(buf);
92 hirohitohigashi 1
93 hirohitohigashi 7 return -1;
94     }
95 hirohitohigashi 1
96 hirohitohigashi 7 }
97 hirohitohigashi 1
98 hirohitohigashi 7 free(buf);
99 hirohitohigashi 1
100 hirohitohigashi 7 return -1;
101 hirohitohigashi 1
102 hirohitohigashi 7 }
103 hirohitohigashi 1
104 hirohitohigashi 7 tm.tv_sec = 3;
105     tm.tv_usec = 0;
106 hirohitohigashi 1
107 hirohitohigashi 7 FD_ZERO(&readfds);
108 hirohitohigashi 1
109 hirohitohigashi 7 FD_SET(sck, &readfds);
110 hirohitohigashi 1
111 hirohitohigashi 7 if (select(sck+1, &readfds, NULL, NULL, &tm) < 0 ) {
112     if (verbose) {
113     perror("select()");
114     }
115     free(buf);
116    
117     return -1;
118     } else {
119    
120     if (FD_ISSET(sck, &readfds)) {
121    
122     if ( (n = recv(sck, buf, 1022, 0)) < 0) {
123 hirohitohigashi 1 if (verbose) {
124 hirohitohigashi 7 perror("recv()");
125 hirohitohigashi 1 }
126     free(buf);
127 hirohitohigashi 7
128 hirohitohigashi 1 return -1;
129 hirohitohigashi 7 }
130 hirohitohigashi 1
131    
132 hirohitohigashi 7 if (verbose)
133     printf("[Server] %s\n", buf);
134 hirohitohigashi 1
135 hirohitohigashi 7 }
136     else {
137     if (verbose)
138     printf("[-] Timeout\n");
139 hirohitohigashi 1
140 hirohitohigashi 7 return -1;
141 hirohitohigashi 1 }
142 hirohitohigashi 7 }
143 hirohitohigashi 1
144 hirohitohigashi 7 buf[n] = '\0';
145 hirohitohigashi 1
146    
147 hirohitohigashi 7 if (strfnbytes(buf, "200", 3) == 0) {
148     OK = 0;
149     } else {
150     OK = 1;
151     }
152 hirohitohigashi 1
153 hirohitohigashi 7 memset(buf, 0x0, 1024);
154 hirohitohigashi 1
155 hirohitohigashi 7 free(buf);
156 hirohitohigashi 1
157    
158 hirohitohigashi 7 if (OK == 0) {
159 hirohitohigashi 1 return 0; //0 returned; operation sucessfull!
160 hirohitohigashi 7 } else {
161 hirohitohigashi 1 return 1;
162 hirohitohigashi 7 }
163 hirohitohigashi 1
164     }

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