Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/RB-1.1/ftpget.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by hirohitohigashi, Wed Feb 18 08:06:53 2009 UTC revision 7 by hirohitohigashi, Fri Feb 20 12:10:40 2009 UTC
# Line 53  Line 53 
53    
54  time_t res_get;  time_t res_get;
55    
56  int ftp_get (int sck, char *FileName, int verbose) {  int ftp_get (int sck, char *FileName, int verbose)
57    {
58          char *buffer;      char *buffer;
59          int n = 0;      int n = 0;
60                int flags;
61          int flags;      time_t start, end;
62          time_t start, end;      int sock;
63        int con_err = 0;
64          buffer = (char *)malloc(4092*sizeof(char));      FILE *fd;
65                  if (buffer == NULL) {      char buff[4096];
66                  printf("Unable to alloc 4092 bytes to buffer (ftp_get)\n");      int n_bytes;
67                  return -1;      int n_recv=0;
68                  }  
69    
70        extern int data_port;
71        extern struct sockaddr_in ftp_connection;
72    
73    
74        buffer = (char *)malloc(4092*sizeof(char));
75        if (buffer == NULL) {
76            printf("Unable to alloc 4092 bytes to buffer (ftp_get)\n");
77            return -1;
78        }
79    
80          memset(buffer, 0x0, 4092);      memset(buffer, 0x0, 4092);
81    
         extern int data_port;  
82    
83          if (data_port == 0) {      if (data_port == 0) {
84    
85          free(buffer);          free(buffer);
86                    
87          return WRONG_DATA_P;          return WRONG_DATA_P;
88    
89          }      }
90    
91          if (strlen(FileName) > 1024) {      if (strlen(FileName) > 1024) {
92    
93          return USR_TOO_LONG;          return USR_TOO_LONG;
94    
95          }      }
96    
97          sprintf(buffer, "RETR %s\n", FileName);      sprintf(buffer, "RETR %s\n", FileName);
98    
99          if (write(sck, buffer, strlen(buffer)) == -1) {      if (write(sck, buffer, strlen(buffer)) == -1) {
100    
101                  if (verbose) {          if (verbose) {
102                  if (errno == EBADF) {              if (errno == EBADF) {
103                  fprintf(stderr, "Socket Descriptor Not Valid!\n");                  fprintf(stderr, "Socket Descriptor Not Valid!\n");
104                  free(buffer);                  free(buffer);
105                                    
106                  return -1;                  return -1;
107    
108                  } else if (errno == EIO) {              } else if (errno == EIO) {
109    
110                  fprintf(stderr, "I/O Error!\n");                  fprintf(stderr, "I/O Error!\n");
111                  free(buffer);                  free(buffer);
112                                    
113                  return -1;                  return -1;
114    
115                  } else if (errno == EINTR) {              } else if (errno == EINTR) {
116    
117                  fprintf(stderr, "Signal Interrupted The write() Function\n");                  fprintf(stderr, "Signal Interrupted The write() Function\n");
118                  free(buffer);                  free(buffer);
119                                    
120                  return -1;                  return -1;
121                  }              }
122    
123                  } else {          } else {
124    
125                  if (errno == EBADF) {              if (errno == EBADF) {
126                  free(buffer);                  free(buffer);
127                                    
128                  return -1;                  return -1;
129    
130                  } else if (errno == EIO) {              } else if (errno == EIO) {
131                  free(buffer);                  free(buffer);
132                                    
133                  return -1;                  return -1;
134    
135                  } else if (errno == EINTR) {              } else if (errno == EINTR) {
136                  free(buffer);                  free(buffer);
137                                    
138                  return -1;                  return -1;
139                  }              }
140    
141                  }          }
142    
143                  free(buffer);          free(buffer);
144                                    
145                  return -1;          return -1;
146    
147                  }      }
148    
149          memset(buffer, 0x0, 4092);      memset(buffer, 0x0, 4092);
150    
151          sleep(1);      sleep(1);
152          n = recv(sck, buffer, 4092, MSG_DONTWAIT);      n = recv(sck, buffer, 4092, MSG_DONTWAIT);
153    
154          if (strlen(buffer) != 0) {      if (strlen(buffer) != 0) {
155    
156          if (ftp_file_handler (buffer, 0) != 0) {          if (ftp_file_handler (buffer, 0) != 0) {
157          free(buffer);              free(buffer);
158                    
159          return 1;              return 1;
160          }          }
161    
162          }      }
163    
         int sock;  
164    
165          sock = socket(AF_INET, SOCK_STREAM, 0);      sock = socket(AF_INET, SOCK_STREAM, 0);
166          if (sock == -1) {      if (sock == -1) {
167          free(buffer);          free(buffer);
168          if (verbose) {          if (verbose) {
169          perror("Socket");              perror("Socket");
170          }          }
171          return -1;          return -1;
172          }      }
173    
         extern struct sockaddr_in ftp_connection;  
174    
175          ftp_connection.sin_port = htons(data_port);      ftp_connection.sin_port = htons(data_port);
176    
177          if ( (flags=fcntl(sock, F_GETFL,0)) < 0) {      if ( (flags=fcntl(sock, F_GETFL,0)) < 0) {
178          printf("--[ fcntl get flags error.\n");          printf("--[ fcntl get flags error.\n");
179          exit(1);          exit(1);
180          }      }
181    
182          flags |= O_NONBLOCK;      flags |= O_NONBLOCK;
183    
184          if ( fcntl (sock, F_SETFL, flags < 0 ) ) {      if ( fcntl (sock, F_SETFL, flags < 0 ) ) {
185                  printf("--[ Non Blocking Socket Error.\n");          printf("--[ Non Blocking Socket Error.\n");
186                  exit(1);          exit(1);
187          }      }
188    
         int con_err = 0;  
189    
190      if ( (con_err = connect(sock, (struct sockaddr *)&ftp_connection, sizeof(struct sockaddr)) ) != 0)  {      if ( (con_err = connect(sock, (struct sockaddr *)&ftp_connection, sizeof(struct sockaddr)) ) != 0)  {
191                  if (con_err == ECONNREFUSED) {          if (con_err == ECONNREFUSED) {
192                  free(buffer);              free(buffer);
193    
194                  return -1;                            return -1;          
195                  }          }
196    
197                  data_port = 0;          data_port = 0;
198                  if (verbose) {          if (verbose) {
199                  perror("connect");              perror("connect");
200                  }          }
201    
202                  free(buffer);          free(buffer);
203    
204                  return -1;          return -1;
205      }      }
206    
207    
208          FILE *fd;      buff[4095] = '\0';
         char buff[4096];  
         buff[4095] = '\0';  
   
         int n_bytes;  
         int n_recv=0;  
209    
210          fd = fopen(FileName, "wb");      fd = fopen(FileName, "wb");
211                                    
212                  if (fd == NULL) {      if (fd == NULL) {
213                  if (verbose) {          if (verbose) {
214                  printf("--[ Error: Unable to open '%s' in ftp_get function\n", FileName);              printf("--[ Error: Unable to open '%s' in ftp_get function\n", FileName);
215                  }          }
216    
217                  free(buffer);          free(buffer);
218                                    
219                  return -1;          return -1;
220                  }      }
221    
222          time(&start);      time(&start);
223    
224          while (1) {      while (1) {
225    
226                  usleep(150);          usleep(150);
227                  n_recv = recv(sock, buff, 4094, 0);          n_recv = recv(sock, buff, 4094, 0);
228                  n_bytes = fwrite(buff, sizeof(char), n_recv, fd);          n_bytes = fwrite(buff, sizeof(char), n_recv, fd);
229                                    
230                  if (n_recv == 0) {          if (n_recv == 0) {
231                          break;              break;
232                  }          }
233    
234                  n_recv = 0;          n_recv = 0;
235    
236                  memset(buff, 0x0, n_bytes);          memset(buff, 0x0, n_bytes);
237                                    
238                  }      }
239    
240                    
241          fclose(fd);      fclose(fd);
242          close(sock);      close(sock);
243    
244                    
245    
246          memset(buffer, 0x0, 4092);      memset(buffer, 0x0, 4092);
247    
248          while (1) {      while (1) {
249    
250          sleep(1);          sleep(1);
251          n = recv(sck, buffer, 4092, MSG_DONTWAIT);          n = recv(sck, buffer, 4092, MSG_DONTWAIT);
252          if (n == 0)          if (n == 0)
253                  break;              break;
254    
255          if (n < 0) {          if (n < 0) {
256    
257                  if ( (errno == ESPIPE) || (errno == EAGAIN) ) {              if ( (errno == ESPIPE) || (errno == EAGAIN) ) {
258                  break;                  break;
259                  }              }
260    
261          if (verbose) {              if (verbose) {
262                  printf("--[ Error: Error in ftp_get() while getting the file\n");                  printf("--[ Error: Error in ftp_get() while getting the file\n");
263          }              }
264          free(buffer);              free(buffer);
265                    
266    
267          return -1;              return -1;
268                                    
269          }          }
270    
271                  buffer[n] = '\0';          buffer[n] = '\0';
272    
273                                    
274          n = 0;          n = 0;
275          memset(buffer, 0x0, 4092);          memset(buffer, 0x0, 4092);
276    
277          }      }
278    
279          memset(buffer, 0x0, 4092);      memset(buffer, 0x0, 4092);
280    
281          time(&end);      time(&end);
282    
283          res_get = (int)(end - start);      res_get = (int)(end - start);
284                    
285          free(buffer);      free(buffer);
   
286    
         return 0;  
287    
288        return 0;
289  }  }

Legend:
Removed from v.1  
changed lines
  Added in v.7

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