/* Declarations for FTP support.
- Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+This file is part of GNU Wget.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+GNU Wget is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+GNU Wget is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Wget. If not, see <http://www.gnu.org/licenses/>.
+
+Additional permission under GNU GPL version 3 section 7
+
+If you modify this program, or any covered work, by linking or
+combining it with the OpenSSL project's OpenSSL library (or a
+modified version of that library), containing parts covered by the
+terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
+grants you additional permission to convey the resulting work.
+Corresponding Source for a non-source form of such a combination
+shall include the source code for the parts of OpenSSL used as well
+as that of the covered work. */
#ifndef FTP_H
#define FTP_H
-/* Need it for struct rbuf. */
-#include "rbuf.h"
+#include "host.h"
/* System types. */
enum stype
ST_UNIX,
ST_VMS,
ST_WINNT,
+ ST_MACOS,
+ ST_OS400,
ST_OTHER
};
-
-uerr_t ftp_response PARAMS ((struct rbuf *, char **));
-uerr_t ftp_login PARAMS ((struct rbuf *, const char *, const char *));
-uerr_t ftp_port PARAMS ((struct rbuf *));
-uerr_t ftp_pasv PARAMS ((struct rbuf *, unsigned char *));
-uerr_t ftp_type PARAMS ((struct rbuf *, int));
-uerr_t ftp_cwd PARAMS ((struct rbuf *, const char *));
-uerr_t ftp_retr PARAMS ((struct rbuf *, const char *));
-uerr_t ftp_rest PARAMS ((struct rbuf *, long));
-uerr_t ftp_list PARAMS ((struct rbuf *, const char *));
-uerr_t ftp_syst PARAMS ((struct rbuf *, enum stype *));
-uerr_t ftp_pwd PARAMS ((struct rbuf *, char **));
-
-struct urlinfo;
+
+extern char ftp_last_respline[];
+
+uerr_t ftp_response (int, char **);
+uerr_t ftp_login (int, const char *, const char *);
+uerr_t ftp_port (int, int *);
+uerr_t ftp_pasv (int, ip_address *, int *);
+#ifdef ENABLE_IPV6
+uerr_t ftp_lprt (int, int *);
+uerr_t ftp_lpsv (int, ip_address *, int *);
+uerr_t ftp_eprt (int, int *);
+uerr_t ftp_epsv (int, ip_address *, int *);
+#endif
+uerr_t ftp_type (int, int);
+uerr_t ftp_cwd (int, const char *);
+uerr_t ftp_retr (int, const char *);
+uerr_t ftp_rest (int, wgint);
+uerr_t ftp_list (int, const char *, enum stype);
+uerr_t ftp_syst (int, enum stype *);
+uerr_t ftp_pwd (int, char **);
+uerr_t ftp_size (int, const char *, wgint *);
+
+#ifdef ENABLE_OPIE
+const char *skey_response (int, const char *, const char *);
+#endif
+
+struct url;
/* File types. */
enum ftype
/* Globbing (used by ftp_retrieve_glob). */
enum
{
- GLOBALL, GETALL, GETONE
+ GLOB_GLOBALL, GLOB_GETALL, GLOB_GETONE
};
/* Information about one filename in a linked list. */
{
enum ftype type; /* file type */
char *name; /* file name */
- long size; /* file size */
+ wgint size; /* file size */
long tstamp; /* time-stamp */
int perms; /* file permissions */
char *linkto; /* link to which file points */
};
/* Commands for FTP functions. */
-enum command
+enum wget_ftp_command
{
DO_LOGIN = 0x0001, /* Connect and login to the server. */
DO_CWD = 0x0002, /* Change current directory. */
LEAVE_PENDING = 0x0010 /* Do not close the socket. */
};
-enum fstatus
+enum wget_ftp_fstatus
{
NOTHING = 0x0000, /* Nothing done yet. */
ON_YOUR_OWN = 0x0001, /* The ftp_loop_internal sets the
correct. */
};
-typedef struct
-{
- int st; /* connection status */
- int cmd; /* command code */
- struct rbuf rbuf; /* control connection buffer */
- long dltime; /* time of the download */
-} ccon;
+struct fileinfo *ftp_parse_ls (const char *, const enum stype);
+uerr_t ftp_loop (struct url *, char **, int *, struct url *, bool, bool);
+
+uerr_t ftp_index (const char *, struct url *, struct fileinfo *);
-struct fileinfo *ftp_parse_ls PARAMS ((const char *, enum stype));
-uerr_t ftp_loop PARAMS ((struct urlinfo *, int *));
+char ftp_process_type (const char *);
-uerr_t ftp_index (const char *, struct urlinfo *, struct fileinfo *);
#endif /* FTP_H */