Mercurial > gftp.yaz
changeset 84:7ef60ce2bdb2
2002-12-29 Brian Masney <masneyb@gftp.org>
* lib/ssh.c lib/config_file.c lib/Makefile.am lib/gftp.h lib/options.h - removed old legacy SSH protocol and option to enable this protocol
* lib/gftp.h - added GFTP_ERETRYABLE and GFTP_EFATAL error codes
* lib/bookmark.c lib/local.c lib/protocols.c lib/rfc959.c lib/rfc2068.c
lib/sshv2.c - return new error codes instead of -1 or -2
* lib/misc.c (gftp_*_sort_function_ds) - changed return values
* src/gtk/transfer.c (connect_thread) - if return value of
gftp_connect() is GFTP_EFATAL, don't attempt to retry the connection
author | masneyb |
---|---|
date | Sun, 29 Dec 2002 15:16:27 +0000 |
parents | 462de7034797 |
children | 1ee3c21c1291 |
files | ChangeLog lib/Makefile.am lib/bookmark.c lib/config_file.c lib/gftp.h lib/local.c lib/misc.c lib/options.h lib/protocols.c lib/rfc2068.c lib/rfc959.c lib/sshv2.c src/gtk/transfer.c |
diffstat | 13 files changed, 673 insertions(+), 585 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Dec 27 14:59:50 2002 +0000 +++ b/ChangeLog Sun Dec 29 15:16:27 2002 +0000 @@ -1,3 +1,17 @@ +2002-12-29 Brian Masney <masneyb@gftp.org> + * lib/ssh.c lib/config_file.c lib/Makefile.am lib/gftp.h lib/options.h - + removed old legacy SSH protocol and option to enable this protocol + + * lib/gftp.h - added GFTP_ERETRYABLE and GFTP_EFATAL error codes + + * lib/bookmark.c lib/local.c lib/protocols.c lib/rfc959.c lib/rfc2068.c + lib/sshv2.c - return new error codes instead of -1 or -2 + + * lib/misc.c (gftp_*_sort_function_ds) - changed return values + + * src/gtk/transfer.c (connect_thread) - if return value of + gftp_connect() is GFTP_EFATAL, don't attempt to retry the connection + 2002-12-11 Brian Masney <masneyb@gftp.org> * configure.in - fix for enable/disable gtkport, textport and gtk20 @@ -395,7 +409,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.49 2002/12/12 01:48:44 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.50 2002/12/29 15:16:26 masneyb Exp $ tags * debian/* - updated files from Debian maintainer
--- a/lib/Makefile.am Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/Makefile.am Sun Dec 29 15:16:27 2002 +0000 @@ -2,6 +2,6 @@ noinst_LIBRARIES = libgftp.a libgftp_a_SOURCES=bookmark.c cache.c config_file.c local.c misc.c protocols.c \ - rfc959.c rfc2068.c ssh.c sshv2.c + rfc959.c rfc2068.c sshv2.c INCLUDES=@GLIB_CFLAGS@ @PTHREAD_CFLAGS@ -I../intl -DSHARE_DIR=\"$(datadir)/gftp\" noinst_HEADERS=gftp.h options.h
--- a/lib/bookmark.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/bookmark.c Sun Dec 29 15:16:27 2002 +0000 @@ -28,8 +28,8 @@ const char * pos; int i; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (url != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (url != NULL, GFTP_EFATAL); if ((pos = strstr (url, "://")) != NULL) pos += 3; @@ -40,14 +40,14 @@ { request->logging_function (gftp_logging_error, request->user_data, _("Error: Could not find bookmark %s\n"), pos); - return (-2); + return (GFTP_EFATAL); } else if (tempentry->hostname == NULL || *tempentry->hostname == '\0' || tempentry->user == NULL || *tempentry->user == '\0') { request->logging_function (gftp_logging_error, request->user_data, _("Bookmarks Error: There are some missing entries in this bookmark. Make sure you have a hostname and username\n")); - return (-2); + return (GFTP_EFATAL); } gftp_set_username (request, tempentry->user);
--- a/lib/config_file.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/config_file.c Sun Dec 29 15:16:27 2002 +0000 @@ -138,8 +138,6 @@ N_("Use the ssh-askpass utility to grab the users password"), NULL, GFTP_PORT_GTK}, {"sshv2_use_sftp_subsys", N_("Use SSH2 SFTP subsys"), &sshv2_use_sftp_subsys, CONFIG_CHECKBOX, N_("Call ssh with the -s sftp flag. This is helpful because you won't have to know the remote path to the remote sftp-server"), NULL, GFTP_PORT_GTK}, - {"enable_old_ssh", N_("Enable old SSH protocol"), &enable_old_ssh, CONFIG_CHECKBOX, - N_("Enable the old SSH protocol. You will need to download the sftp server from http:///www.xbill.org/sftp"), NULL, GFTP_PORT_ALL}, {"list_dblclk_action", "", &listbox_dblclick_action, CONFIG_HIDEINT, N_("This defines what will happen when you double click a file in the file listboxes. 0=View file 1=Edit file 2=Transfer file"), NULL, 0}, @@ -438,14 +436,6 @@ strcpy (default_protocol, "FTP"); } - if (!enable_old_ssh) - { - gftp_protocols[GFTP_SSH_NUM].name = NULL; - gftp_protocols[GFTP_SSH_NUM].init = NULL; - gftp_protocols[GFTP_SSH_NUM].url_prefix = NULL; - gftp_protocols[GFTP_SSH_NUM].shown = 0; - } - if ((tempstr = expand_path (LOG_FILE)) == NULL) { printf (_("gFTP Error: Bad log file name %s\n"), LOG_FILE);
--- a/lib/gftp.h Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/gftp.h Sun Dec 29 15:16:27 2002 +0000 @@ -97,6 +97,10 @@ #include <dmalloc.h> #endif +/* Error types */ +#define GFTP_ERETRYABLE -1 +#define GFTP_EFATAL -2 + /* Some general settings */ #define BASE_CONF_DIR "~/.gftp" #define CONFIG_FILE BASE_CONF_DIR "/gftprc" @@ -487,7 +491,7 @@ log_height, retries, sleep_time, network_timeout, use_http11, listbox_dblclick_action, file_trans_column, local_columns[6], remote_columns[6], resolve_symlinks, firewall_port, http_proxy_port, - overwrite_by_default, append_file_transfers, enable_old_ssh, + overwrite_by_default, append_file_transfers, ssh_need_userpass, ssh_use_askpass, sshv2_use_sftp_subsys, local_sortcol, local_sortasds, remote_sortcol, remote_sortasds; extern guint max_log_window_size; @@ -629,7 +633,6 @@ #define GFTP_LOCAL_NUM 2 #define GFTP_SSHV2_NUM 3 #define GFTP_BOOKMARK_NUM 4 -#define GFTP_SSH_NUM 5 #define GFTP_TYPE_BINARY 1 #define GFTP_TYPE_ASCII 2 #define GFTP_IS_CONNECTED(request) ((request) != NULL && \ @@ -648,8 +651,6 @@ void local_init ( gftp_request * request ); -void ssh_init ( gftp_request * request ); - void sshv2_init ( gftp_request * request ); void bookmark_init ( gftp_request * request );
--- a/lib/local.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/local.c Sun Dec 29 15:16:27 2002 +0000 @@ -56,8 +56,8 @@ { char tempstr[PATH_MAX]; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); if (request->directory) { @@ -110,9 +110,9 @@ off_t size; int flags; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (filename != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (filename != NULL, GFTP_EFATAL); if (fd <= 0) { @@ -126,28 +126,28 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Cannot open local file %s: %s\n"), filename, g_strerror (errno)); - return (-2); + return (GFTP_ERETRYABLE); /* should this be fatal? */ } } else request->datafd = fd; - if ((size = lseek (request->datafd, 0, SEEK_END)) == -1) + if ((size = lseek (request->datafd, 0, SEEK_END)) < 0) { request->logging_function (gftp_logging_error, request->user_data, _("Error: Cannot seek on file %s: %s\n"), filename, g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } - if (lseek (request->datafd, startsize, SEEK_SET) == -1) + if (lseek (request->datafd, startsize, SEEK_SET) < 0) { request->logging_function (gftp_logging_error, request->user_data, _("Error: Cannot seek on file %s: %s\n"), filename, g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } return (size); @@ -160,9 +160,9 @@ { int flags; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (filename != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (filename != NULL, GFTP_EFATAL); if (fd <= 0) { @@ -178,28 +178,28 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Cannot open local file %s: %s\n"), filename, g_strerror (errno)); - return (-2); + return (GFTP_ERETRYABLE); } } else request->datafd = fd; - if (ftruncate (request->datafd, startsize) == -1) + if (ftruncate (request->datafd, startsize) < 0) { request->logging_function (gftp_logging_error, request->user_data, _("Error: Cannot truncate local file %s: %s\n"), filename, g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } - if (lseek (request->datafd, startsize, SEEK_SET) == -1) + if (lseek (request->datafd, startsize, SEEK_SET) < 0) { request->logging_function (gftp_logging_error, request->user_data, _("Error: Cannot seek on file %s: %s\n"), filename, g_strerror (errno)); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } return (0); } @@ -330,9 +330,9 @@ /* the struct passwd and struct group are not thread safe. But, we're ok here because I have threading turned off for the local protocol (see use_threads in local_init above) */ - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (fle != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (fle != NULL, GFTP_EFATAL); lpd = request->protocol_data; memset (fle, 0, sizeof (*fle)); @@ -341,7 +341,7 @@ { closedir (lpd->dir); lpd->dir = NULL; - return (-2); + return (GFTP_ERETRYABLE); } fle->file = g_malloc (strlen (dirp->d_name) + 1); @@ -350,7 +350,7 @@ { closedir (lpd->dir); lpd->dir = NULL; - return (-2); + return (GFTP_ERETRYABLE); } if ((user = g_hash_table_lookup (lpd->userhash, @@ -428,8 +428,8 @@ local_protocol_data *lpd; char *tempstr; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); lpd = request->protocol_data; tempstr = g_strconcat (request->directory, "/", NULL); @@ -440,7 +440,7 @@ _("Could not get local directory listing %s: %s\n"), tempstr, g_strerror (errno)); g_free (tempstr); - return (-1); + return (GFTP_ERETRYABLE); } g_free (tempstr); @@ -453,8 +453,8 @@ { struct stat st; - if (stat (filename, &st) == -1) - return (-1); + if (stat (filename, &st) < 0) + return (GFTP_ERETRYABLE); return (st.st_size); } @@ -464,9 +464,9 @@ { char tempstr[255]; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); if (chdir (directory) == 0) { @@ -480,7 +480,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Could not get current working directory: %s\n"), g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } if (request->directory) g_free (request->directory); @@ -492,16 +492,16 @@ request->logging_function (gftp_logging_error, request->user_data, _("Could not change local directory to %s: %s\n"), directory, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } static int local_rmdir (gftp_request * request, const char *directory) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); if (rmdir (directory) == 0) { @@ -514,7 +514,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Could not remove directory %s: %s\n"), directory, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -522,9 +522,9 @@ static int local_rmfile (gftp_request * request, const char *file) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); if (unlink (file) == 0) { @@ -537,7 +537,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Could not remove file %s: %s\n"), file, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -545,9 +545,9 @@ static int local_mkdir (gftp_request * request, const char *directory) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); if (mkdir (directory, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0) { @@ -561,7 +561,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Could not make directory %s: %s\n"), directory, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -570,10 +570,10 @@ local_rename (gftp_request * request, const char *oldname, const char *newname) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (oldname != NULL, -2); - g_return_val_if_fail (newname != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (oldname != NULL, GFTP_EFATAL); + g_return_val_if_fail (newname != NULL, GFTP_EFATAL); if (rename (oldname, newname) == 0) { @@ -587,7 +587,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Could not rename %s to %s: %s\n"), oldname, newname, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -598,9 +598,9 @@ char buf[10]; int newmode; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); g_snprintf (buf, sizeof (buf), "%d", mode); newmode = strtol (buf, NULL, 8); @@ -617,7 +617,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Error: Could not change mode of %s to %d: %s\n"), file, mode, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -628,12 +628,12 @@ { struct utimbuf time_buf; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_LOCAL_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); time_buf.modtime = time_buf.actime = datetime; - return (utime (file, &time_buf)); + return (utime (file, &time_buf) == 0 ? 0 : GFTP_ERETRYABLE); }
--- a/lib/misc.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/misc.c Sun Dec 29 15:16:27 2002 +0000 @@ -999,11 +999,7 @@ f1 = a; f2 = b; ret = strcmp (f1->file, f2->file); - if (ret < 0) - ret = 1; - else if (ret > 0) - ret = -1; - return (ret); + return (ret * -1); } @@ -1027,11 +1023,7 @@ f1 = a; f2 = b; ret = strcmp (f1->user, f2->user); - if (ret < 0) - ret = 1; - else if (ret > 0) - ret = -1; - return (ret); + return (ret * -1); } @@ -1055,11 +1047,7 @@ f1 = a; f2 = b; ret = strcmp (f1->group, f2->group); - if (ret < 0) - ret = 1; - else if (ret > 0) - ret = -1; - return (ret); + return (ret * -1); } @@ -1083,11 +1071,7 @@ f1 = a; f2 = b; ret = strcmp (f1->attribs, f2->attribs); - if (ret < 0) - ret = 1; - else if (ret > 0) - ret = -1; - return (ret); + return (ret * -1); }
--- a/lib/options.h Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/options.h Sun Dec 29 15:16:27 2002 +0000 @@ -28,7 +28,6 @@ {"Local", local_init, "file", 1}, {"SSH2", sshv2_init, "ssh2", 1}, {"Bookmark", bookmark_init, "bookmark", 0}, - {"SSH", ssh_init, "ssh", 1}, {NULL, NULL, NULL, 0} }; @@ -121,7 +120,6 @@ append_file_transfers = 1, /* Append new file transfers onto existing ones for the same hostname */ - enable_old_ssh = 0, /* Enable older SSH protocol */ ssh_need_userpass = 0, /* Require a user/pass for SSH connections */ ssh_use_askpass = 0, /* Use the ssh-askpass tool to
--- a/lib/protocols.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/protocols.c Sun Dec 29 15:16:27 2002 +0000 @@ -113,10 +113,10 @@ int gftp_connect (gftp_request * request) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->connect == NULL) - return (-2); + return (GFTP_EFATAL); gftp_set_config_options (request); @@ -152,11 +152,11 @@ gftp_get_file (gftp_request * request, const char *filename, int fd, size_t startsize) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); request->cached = 0; if (request->get_file == NULL) - return (-2); + return (GFTP_EFATAL); return (request->get_file (request, filename, fd, startsize)); } @@ -165,11 +165,11 @@ gftp_put_file (gftp_request * request, const char *filename, int fd, size_t startsize, size_t totalsize) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); request->cached = 0; if (request->put_file == NULL) - return (-2); + return (GFTP_EFATAL); return (request->put_file (request, filename, fd, startsize, totalsize)); } @@ -181,31 +181,29 @@ int tofd, size_t tosize) { long size; - - g_return_val_if_fail (fromreq != NULL, -2); - g_return_val_if_fail (fromfile != NULL, -2); - g_return_val_if_fail (toreq != NULL, -2); - g_return_val_if_fail (tofile != NULL, -2); + int ret; - if (strcmp (fromreq->protocol_name, toreq->protocol_name) == 0) - { - if (fromreq->transfer_file == NULL) - return (-2); - return (fromreq->transfer_file (fromreq, fromfile, fromsize, toreq, - tofile, tosize)); - } + g_return_val_if_fail (fromreq != NULL, GFTP_EFATAL); + g_return_val_if_fail (fromfile != NULL, GFTP_EFATAL); + g_return_val_if_fail (toreq != NULL, GFTP_EFATAL); + g_return_val_if_fail (tofile != NULL, GFTP_EFATAL); + + if (strcmp (fromreq->protocol_name, toreq->protocol_name) == 0 && + fromreq->transfer_file != NULL) + return (fromreq->transfer_file (fromreq, fromfile, fromsize, toreq, + tofile, tosize)); fromreq->cached = 0; toreq->cached = 0; if ((size = gftp_get_file (fromreq, fromfile, fromfd, tosize)) < 0) - return (-2); + return (size); - if (gftp_put_file (toreq, tofile, tofd, tosize, size) != 0) + if ((ret = gftp_put_file (toreq, tofile, tofd, tosize, size)) != 0) { if (gftp_abort_transfer (fromreq) != 0) gftp_end_transfer (fromreq); - return (-2); + return (ret); } return (size); @@ -215,8 +213,8 @@ ssize_t gftp_get_next_file_chunk (gftp_request * request, char *buf, size_t size) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (buf != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (buf != NULL, GFTP_EFATAL); if (request->get_next_file_chunk != NULL) return (request->get_next_file_chunk (request, buf, size)); @@ -228,8 +226,8 @@ ssize_t gftp_put_next_file_chunk (gftp_request * request, char *buf, size_t size) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (buf != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (buf != NULL, GFTP_EFATAL); if (request->put_next_file_chunk != NULL) return (request->put_next_file_chunk (request, buf, size)); @@ -246,7 +244,7 @@ { int ret; - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (!request->cached && request->end_transfer != NULL) @@ -274,10 +272,10 @@ int gftp_abort_transfer (gftp_request * request) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->abort_transfer == NULL) - return (-2); + return (GFTP_EFATAL); return (request->abort_transfer (request)); } @@ -288,7 +286,7 @@ { int fd; - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); request->cached = 0; if (request->use_cache && (fd = gftp_find_cache_entry (request)) > 0) @@ -308,7 +306,7 @@ } if (request->list_files == NULL) - return (-2); + return (GFTP_EFATAL); return (request->list_files (request)); } @@ -323,10 +321,10 @@ GError * error; #endif - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->get_next_file == NULL) - return (-2); + return (GFTP_EFATAL); if (request->cached && request->cachefd > 0) fd = request->cachefd; @@ -382,8 +380,8 @@ const char *stpos; int len, i; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (url != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (url != NULL, GFTP_EFATAL); logging_function = request->logging_function; gftp_request_destroy (request, 0); @@ -402,7 +400,7 @@ } if (gftp_protocols[i].url_prefix == NULL) - return (-2); + return (GFTP_EFATAL); *pos = ':'; } else @@ -493,7 +491,7 @@ int gftp_set_data_type (gftp_request * request, int data_type) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->set_data_type == NULL) return (0); @@ -556,8 +554,8 @@ int gftp_set_directory (gftp_request * request, const char *directory) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); if (request->sockfd <= 0 && !request->always_connected) @@ -572,7 +570,7 @@ return (0); } else if (request->chdir == NULL) - return (-2); + return (GFTP_EFATAL); return (request->chdir (request, directory)); } @@ -650,10 +648,10 @@ int gftp_remove_directory (gftp_request * request, const char *directory) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->rmdir == NULL) - return (-2); + return (GFTP_EFATAL); return (request->rmdir (request, directory)); } @@ -661,10 +659,10 @@ int gftp_remove_file (gftp_request * request, const char *file) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->rmfile == NULL) - return (-2); + return (GFTP_EFATAL); return (request->rmfile (request, file)); } @@ -672,10 +670,10 @@ int gftp_make_directory (gftp_request * request, const char *directory) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->mkdir == NULL) - return (-2); + return (GFTP_EFATAL); return (request->mkdir (request, directory)); } @@ -684,10 +682,10 @@ gftp_rename_file (gftp_request * request, const char *oldname, const char *newname) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->rename == NULL) - return (-2); + return (GFTP_EFATAL); return (request->rename (request, oldname, newname)); } @@ -695,10 +693,10 @@ int gftp_chmod (gftp_request * request, const char *file, int mode) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->chmod == NULL) - return (-2); + return (GFTP_EFATAL); return (request->chmod (request, file, mode)); } @@ -706,10 +704,10 @@ int gftp_set_file_time (gftp_request * request, const char *file, time_t datetime) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->set_file_time == NULL) - return (-2); + return (GFTP_EFATAL); return (request->set_file_time (request, file, datetime)); } @@ -717,10 +715,10 @@ char gftp_site_cmd (gftp_request * request, const char *command) { - g_return_val_if_fail (request != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); if (request->site == NULL) - return (-2); + return (GFTP_EFATAL); return (request->site (request, command)); } @@ -810,7 +808,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Cannot look up hostname %s: %s\n"), request->hostname, gai_strerror (errnum)); - return (-1); + return (GFTP_ERETRYABLE); } addr = request->hostp->ai_addr; @@ -833,7 +831,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Cannot look up hostname %s: %s\n"), request->hostname, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } addr = (struct sockaddr *) request->host.h_addr_list[0]; @@ -1100,7 +1098,7 @@ startpos = strchr (startpos, ','); } if ((startpos = strchr (str, 9)) == NULL) - return (-2); + return (GFTP_EFATAL); fle->file = g_malloc (strlen (startpos)); strcpy (fle->file, startpos + 1); fle->user = g_malloc (8); @@ -1119,7 +1117,7 @@ startpos = str; /* Copy file attributes */ if ((startpos = copy_token (&fle->attribs, startpos)) == NULL) - return (-2); + return (GFTP_EFATAL); if (cols >= 9) { @@ -1128,11 +1126,11 @@ /* Copy the user that owns this file */ if ((startpos = copy_token (&fle->user, startpos)) == NULL) - return (-2); + return (GFTP_EFATAL); /* Copy the group that owns this file */ if ((startpos = copy_token (&fle->group, startpos)) == NULL) - return (-2); + return (GFTP_EFATAL); } else { @@ -1141,7 +1139,7 @@ if (cols == 8) { if ((startpos = copy_token (&fle->user, startpos)) == NULL) - return (-2); + return (GFTP_EFATAL); } else { @@ -1174,14 +1172,14 @@ /* Get the minor number */ if ((endpos = strchr (startpos, ' ')) == NULL) - return (-2); + return (GFTP_EFATAL); fle->size |= strtol (startpos, NULL, 10) & 0xFF; } else { /* This is a regular file */ if ((endpos = strchr (startpos, ' ')) == NULL) - return (-2); + return (GFTP_EFATAL); fle->size = strtol (startpos, NULL, 10); } @@ -1191,7 +1189,7 @@ startpos++; if ((fle->datetime = parse_time (&startpos)) == 0) - return (-2); + return (GFTP_EFATAL); /* Skip the blanks till we get to the next entry */ startpos = goto_next_token (startpos); @@ -1223,7 +1221,7 @@ startpos = str; if ((fle->datetime = parse_time (&startpos)) == 0) - return (-2); + return (GFTP_EFATAL); /* No such thing on Windoze.. */ fle->user = g_malloc (8); @@ -1253,7 +1251,7 @@ char *startpos; if (str[12] != ' ') - return (-2); + return (GFTP_EFATAL); str[12] = '\0'; fle->attribs = g_malloc (13); strcpy (fle->attribs, str); @@ -1263,7 +1261,7 @@ startpos++; if ((startpos = copy_token (&fle->user, startpos)) == NULL) - return (-2); + return (GFTP_EFATAL); fle->group = g_malloc (8); strcpy (fle->group, _("unknown")); @@ -1272,7 +1270,7 @@ startpos = goto_next_token (startpos); if ((fle->datetime = parse_time (&startpos)) == 0) - return (-2); + return (GFTP_EFATAL); startpos = goto_next_token (startpos); fle->file = g_malloc (strlen (startpos) + 1); @@ -1287,8 +1285,8 @@ int result, cols; char *str, *pos; - g_return_val_if_fail (lsoutput != NULL, -2); - g_return_val_if_fail (fle != NULL, -2); + g_return_val_if_fail (lsoutput != NULL, GFTP_EFATAL); + g_return_val_if_fail (fle != NULL, GFTP_EFATAL); str = g_malloc (strlen (lsoutput) + 1); strcpy (str, lsoutput); @@ -1339,7 +1337,7 @@ if (cols > 6) result = gftp_parse_ls_unix (str, cols, fle); else - result = -2; + result = GFTP_EFATAL; } g_free (str); @@ -1482,9 +1480,9 @@ GHashTable * dirhash; gftp_file * curfle; - g_return_val_if_fail (transfer != NULL, -1); - g_return_val_if_fail (transfer->fromreq != NULL, -1); - g_return_val_if_fail (transfer->files != NULL, -1); + g_return_val_if_fail (transfer != NULL, GFTP_EFATAL); + g_return_val_if_fail (transfer->fromreq != NULL, GFTP_EFATAL); + g_return_val_if_fail (transfer->files != NULL, GFTP_EFATAL); if (transfer->toreq != NULL) dirhash = gftp_gen_dir_hash (transfer->toreq); @@ -1640,7 +1638,7 @@ int errnum; if ((request->use_proxy = gftp_need_proxy (request, service)) < 0) - return (-1); + return (request->use_proxy); else if (request->use_proxy == 1) request->hostp = NULL; @@ -1668,7 +1666,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Cannot look up hostname %s: %s\n"), connect_host, gai_strerror (errnum)); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -1710,7 +1708,7 @@ freeaddrinfo (request->hostp); request->hostp = NULL; } - return (-1); + return (GFTP_ERETRYABLE); } #else /* !HAVE_GETADDRINFO */ @@ -1719,7 +1717,7 @@ int curhost; if ((request->use_proxy = gftp_need_proxy (request, service)) < 0) - return (-1); + return (request->use_proxy); else if (request->use_proxy == 1) request->hostp = NULL; @@ -1728,7 +1726,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Failed to create a socket: %s\n"), g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } memset (&remote_address, 0, sizeof (remote_address)); @@ -1767,7 +1765,7 @@ _("Cannot look up hostname %s: %s\n"), connect_host, g_strerror (errno)); close (sock); - return (-1); + return (GFTP_ERETRYABLE); } } @@ -1794,7 +1792,7 @@ if (request->host.h_addr_list[curhost] == NULL) { close (sock); - return (-1); + return (GFTP_ERETRYABLE); } port = ntohs (port); #endif /* HAVE_GETADDRINFO */ @@ -1802,10 +1800,10 @@ request->logging_function (gftp_logging_misc, request->user_data, _("Connected to %s:%d\n"), connect_host, port); - if (gftp_set_sockblocking (request, sock, 1) == -1) + if (gftp_set_sockblocking (request, sock, 1) < 0) { close (sock); - return (-1); + return (GFTP_ERETRYABLE); } return (sock); @@ -1916,7 +1914,7 @@ (*rbuf)->curpos = (*rbuf)->buffer; } - retval = -2; + retval = GFTP_ERETRYABLE; do { @@ -1974,7 +1972,7 @@ (*rbuf)->cur_bufsize = ret + copysize; } } - while (retval == -2); + while (retval == GFTP_ERETRYABLE); return (retval); } @@ -2015,7 +2013,7 @@ request->hostname); gftp_disconnect (request); } - return (-1); + return (GFTP_ERETRYABLE); } if ((ret = read (fd, ptr, size)) < 0) @@ -2035,7 +2033,7 @@ g_strerror (errno)); gftp_disconnect (request); } - return (-1); + return (GFTP_ERETRYABLE); } } while (errno == EINTR && !(request != NULL && request->cancel)); @@ -2043,7 +2041,7 @@ if (errno == EINTR && request != NULL && request->cancel) { gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } return (ret); @@ -2085,7 +2083,7 @@ request->hostname); gftp_disconnect (request); } - return (-1); + return (GFTP_ERETRYABLE); } if ((w_ret = write (fd, ptr, size)) < 0) @@ -2105,7 +2103,7 @@ g_strerror (errno)); gftp_disconnect (request); } - return (-1); + return (GFTP_ERETRYABLE); } ptr += w_ret; @@ -2117,7 +2115,7 @@ if (errno == EINTR && request != NULL && request->cancel) { gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } return (ret); @@ -2146,13 +2144,13 @@ { int flags; - if ((flags = fcntl (fd, F_GETFL, 0)) == -1) + if ((flags = fcntl (fd, F_GETFL, 0)) < 0) { request->logging_function (gftp_logging_error, request->user_data, _("Cannot get socket flags: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } if (non_blocking) @@ -2160,13 +2158,13 @@ else flags &= ~O_NONBLOCK; - if (fcntl (fd, F_SETFL, flags) == -1) + if (fcntl (fd, F_SETFL, flags) < 0) { request->logging_function (gftp_logging_error, request->user_data, _("Cannot set socket to non-blocking: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } return (0);
--- a/lib/rfc2068.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/rfc2068.c Sun Dec 29 15:16:27 2002 +0000 @@ -82,14 +82,15 @@ gftp_getline_buffer * rbuf; rfc2068_params * params; char tempstr[255]; + int ret; params = request->protocol_data; params->max_bytes = 0; rbuf = NULL; - if (gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr), - request->sockfd) < 0) - return (-1); + if ((ret = gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr), + request->sockfd)) < 0) + return (ret); if (request->last_ftp_response) g_free (request->last_ftp_response); @@ -103,9 +104,9 @@ while (1) { /* Read rest of proxy header */ - if (gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr), - request->sockfd) < 0) - return (-1); + if ((ret = gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr), + request->sockfd)) < 0) + return (ret); if (*tempstr == '\r' || *tempstr == '\n') break; @@ -130,9 +131,9 @@ char *tempstr, *str; ssize_t ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); - g_return_val_if_fail (command != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (command != NULL, GFTP_EFATAL); tempstr = g_strdup_printf ("%sUser-Agent: %s\nHost: %s\n", command, version, request->hostname); @@ -144,7 +145,7 @@ g_free (tempstr); if (ret < 0) - return (-1); + return (ret); if (request->use_proxy && request->proxy_username != NULL && *request->proxy_username != '\0') @@ -160,7 +161,7 @@ "Proxy-authorization: Basic %s\n", str); g_free (str); if (ret < 0) - return (-2); + return (ret); } if (request->username != NULL && *request->username != '\0') @@ -175,19 +176,20 @@ "Authorization: Basic %s\n", str); g_free (str); if (ret < 0) - return (-2); + return (ret); } if (extrahdr) { request->logging_function (gftp_logging_send, request->user_data, "%s", extrahdr); - if (gftp_write (request, extrahdr, strlen (extrahdr), request->sockfd) < 0) - return (-1); + if ((ret = gftp_write (request, extrahdr, strlen (extrahdr), + request->sockfd)) < 0) + return (ret); } - if (gftp_write (request, "\n", 1, request->sockfd) < 0) - return (-1); + if ((ret = gftp_write (request, "\n", 1, request->sockfd)) < 0) + return (ret); return (rfc2068_read_response (request)); } @@ -198,9 +200,9 @@ { char *service; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); - g_return_val_if_fail (request->hostname != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->hostname != NULL, GFTP_EFATAL); if (request->sockfd > 0) return (0); @@ -208,7 +210,7 @@ service = request->use_proxy && request->proxy_config != NULL && *request->proxy_config != '\0' ? request->proxy_config : "http"; if ((request->sockfd = gftp_connect_server (request, service)) < 0) - return (-1); + return (GFTP_ERETRYABLE); if (request->directory && *request->directory == '\0') { @@ -253,18 +255,18 @@ off_t startsize) { char *tempstr, *extrahdr, *pos, *proto; - int restarted; + int restarted, ret; off_t size; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); - g_return_val_if_fail (filename != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (filename != NULL, GFTP_EFATAL); if (fd > 0) request->sockfd = fd; - if (request->sockfd < 0 && rfc2068_connect (request) != 0) - return (-2); + if (request->sockfd < 0 && (ret = rfc2068_connect (request)) != 0) + return (ret); if (request->proxy_config != NULL && *request->proxy_config != '\0') proto = request->proxy_config; @@ -307,7 +309,7 @@ if (extrahdr) g_free (extrahdr); if (size < 0) - return (-1); + return (size); restarted = 0; if (strlen (request->last_ftp_response) > 9 @@ -318,7 +320,7 @@ { request->logging_function (gftp_logging_error, request->user_data, _("Cannot retrieve file %s\n"), filename); - return (-2); + return (GFTP_ERETRYABLE); } return (restarted ? size + startsize : size); @@ -331,8 +333,8 @@ rfc2068_params * params; size_t len; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); params = request->protocol_data; if (params->max_bytes == params->read_bytes) @@ -343,7 +345,7 @@ size = params->max_bytes - params->read_bytes; if ((len = gftp_read (request, buf, size, request->sockfd)) < 0) - return (-2); + return ((ssize_t) len); return (len); } @@ -354,11 +356,11 @@ { rfc2068_params * params; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); if (request->sockfd < 0) - return (-2); + return (GFTP_EFATAL); if (close (request->sockfd) < 0) request->logging_function (gftp_logging_error, request->user_data, @@ -381,13 +383,14 @@ char *tempstr, *pos, *proto; rfc2068_params *params; off_t ret; + int r; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); params = request->protocol_data; - if (request->sockfd < 0 && rfc2068_connect (request) != 0) - return (-2); + if (request->sockfd < 0 && (r = rfc2068_connect (request)) < 0) + return (r); if (request->proxy_config != NULL && *request->proxy_config != '\0') proto = request->proxy_config; @@ -411,7 +414,7 @@ ret = rfc2068_send_command (request, tempstr, NULL); g_free (tempstr); if (ret < 0) - return (-1); + return ((int) ret); params->read_bytes = 0; if (strlen (request->last_ftp_response) > 9 && @@ -422,7 +425,7 @@ return (0); } - return (-2); + return (GFTP_ERETRYABLE); } @@ -431,13 +434,14 @@ { char *tempstr, *pos, *proto; off_t size; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); - g_return_val_if_fail (filename != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (filename != NULL, GFTP_EFATAL); - if (request->sockfd < 0 && rfc2068_connect (request) != 0) - return (-2); + if (request->sockfd < 0 && (ret = rfc2068_connect (request)) != 0) + return (ret); if (request->proxy_config != NULL && *request->proxy_config != '\0') proto = request->proxy_config; @@ -459,9 +463,6 @@ size = rfc2068_send_command (request, tempstr, NULL); g_free (tempstr); - if (size < 0) - return (-2); - return (size); } @@ -654,10 +655,11 @@ rfc2068_params * params; char tempstr[255]; size_t len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); - g_return_val_if_fail (fle != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (fle != NULL, GFTP_EFATAL); params = request->protocol_data; if (request->last_dir_entry) @@ -669,8 +671,9 @@ rbuf = NULL; while (1) { - if (gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr), fd) < 0) - return (-2); + if ((ret = gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr), + fd)) < 0) + return (ret); tempstr[sizeof (tempstr) - 1] = '\0'; params->read_bytes += strlen (tempstr); @@ -686,7 +689,7 @@ gftp_file_destroy (fle); if (len < 0) - return (-1); + return (len); return (0); } @@ -703,7 +706,7 @@ if (fle->file == NULL) { gftp_file_destroy (fle); - return (-2); + return (GFTP_ERETRYABLE); /* FIXME is this correct? */ } len = strlen (tempstr); @@ -719,9 +722,9 @@ static int rfc2068_chdir (gftp_request * request, const char *directory) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); if (request->directory != directory) {
--- a/lib/rfc959.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/rfc959.c Sun Dec 29 15:16:27 2002 +0000 @@ -34,9 +34,9 @@ rfc959_parms * parms; ssize_t num_read; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); *code = '\0'; if (request->last_ftp_response) @@ -65,7 +65,7 @@ while (strncmp (code, tempstr, 4) != 0); if (num_read < 0) - return (-1); + return ((int) num_read); request->last_ftp_response = g_malloc (strlen (tempstr) + 1); strcpy (request->last_ftp_response, tempstr); @@ -81,10 +81,12 @@ static int rfc959_send_command (gftp_request * request, const char *command) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (command != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + int ret; + + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (command != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if (strncmp (command, "PASS", 4) == 0) { @@ -102,9 +104,9 @@ command); } - if (gftp_write (request, command, strlen (command), - request->sockfd) < 0) - return (-1); + if ((ret = gftp_write (request, command, strlen (command), + request->sockfd)) < 0) + return (ret); return (rfc959_read_response (request)); } @@ -217,14 +219,14 @@ ret = rfc959_send_command (request, "PWD\r\n"); if (ret < 0) - return (-1); + return (ret); else if (ret != '2') { request->logging_function (gftp_logging_error, request->user_data, _("Received invalid response to PWD command: '%s'\n"), request->last_ftp_response); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } if ((pos = strchr (request->last_ftp_response, '"')) == NULL) @@ -233,7 +235,7 @@ _("Received invalid response to PWD command: '%s'\n"), request->last_ftp_response); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } dir = pos + 1; @@ -244,7 +246,7 @@ _("Received invalid response to PWD command: '%s'\n"), request->last_ftp_response); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } *pos = '\0'; @@ -262,10 +264,11 @@ rfc959_chdir (gftp_request * request, const char *directory) { char ret, *tempstr; + int r; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); if (strcmp (directory, "..") == 0) ret = rfc959_send_command (request, "CDUP\r\n"); @@ -277,12 +280,12 @@ } if (ret != '2') - return (-2); + return (GFTP_ERETRYABLE); if (directory != request->directory) { - if (rfc959_getcwd (request) < 0) - return (-1); + if ((r = rfc959_getcwd (request)) < 0) + return (r); } return (0); @@ -295,9 +298,9 @@ char tempchar, *startpos, *endpos, *tempstr; int ret, resp; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->hostname != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->hostname != NULL, GFTP_EFATAL); if (request->sockfd > 0) return (0); @@ -311,13 +314,13 @@ gftp_set_password (request, emailaddr); if ((request->sockfd = gftp_connect_server (request, "ftp")) < 0) - return (-1); + return (request->sockfd); /* Get the banner */ - if (rfc959_read_response (request) != '2') + if ((ret = rfc959_read_response (request)) != '2') { gftp_disconnect (request); - return (-2); + return (ret); } /* Login the proxy server if available */ @@ -333,7 +336,7 @@ if (*endpos != '\0') *(endpos + 1) = '\0'; if ((resp = rfc959_send_command (request, startpos)) < 0) - return (-2); + return (resp); if (*endpos != '\0') *(endpos + 1) = tempchar; else @@ -350,14 +353,14 @@ resp = rfc959_send_command (request, tempstr); g_free (tempstr); if (resp < 0) - return (-2); + return (GFTP_ERETRYABLE); if (resp == '3') { tempstr = g_strconcat ("PASS ", request->password, "\r\n", NULL); resp = rfc959_send_command (request, tempstr); g_free (tempstr); if (resp < 0) - return (-2); + return (GFTP_ERETRYABLE); } if (resp == '3' && request->account) { @@ -365,14 +368,14 @@ resp = rfc959_send_command (request, tempstr); g_free (tempstr); if (resp < 0) - return (-2); + return (GFTP_ERETRYABLE); } } if (resp != '2') { gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } if (request->data_type == GFTP_TYPE_BINARY) @@ -380,25 +383,25 @@ else tempstr = "TYPE A\r\n"; - if (rfc959_send_command (request, tempstr) < 0) - return (-2); + if ((ret = rfc959_send_command (request, tempstr)) < 0) + return (ret); ret = -1; if (request->directory != NULL && *request->directory != '\0') { ret = rfc959_chdir (request, request->directory); if (request->sockfd < 0) - return (-2); + return (ret); } if (ret != 0) { - if (rfc959_getcwd (request) < 0) - return (-1); + if ((ret = rfc959_getcwd (request)) < 0) + return (ret); } if (request->sockfd < 0) - return (-2); + return (GFTP_EFATAL); return (0); } @@ -436,9 +439,9 @@ unsigned char ad[6]; int i; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if ((request->datafd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { @@ -446,7 +449,7 @@ _("Failed to create a socket: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } data_addr_len = sizeof (data_addr); @@ -458,7 +461,7 @@ if ((resp = rfc959_send_command (request, "PASV\r\n")) != '2') { if (request->sockfd < 0) - return (-2); + return (resp); request->transfer_type = gftp_transfer_active; return (rfc959_data_connection_new (request)); @@ -474,7 +477,7 @@ _("Cannot find an IP address in PASV response '%s'\n"), request->last_ftp_response); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } if (sscanf (pos, "%u,%u,%u,%u,%u,%u", &temp[0], &temp[1], &temp[2], @@ -484,7 +487,7 @@ _("Cannot find an IP address in PASV response '%s'\n"), request->last_ftp_response); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } for (i = 0; i < 6; i++) @@ -499,7 +502,7 @@ _("Cannot create a data connection: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } } else @@ -511,7 +514,7 @@ _("Cannot get socket name: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } data_addr.sin_port = 0; @@ -522,7 +525,7 @@ _("Cannot bind a port: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } if (getsockname (request->datafd, (struct sockaddr *) &data_addr, @@ -532,7 +535,7 @@ _("Cannot get socket name: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } if (listen (request->datafd, 1) == -1) @@ -542,7 +545,7 @@ ntohs (data_addr.sin_port), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } pos = (char *) &data_addr.sin_addr; @@ -556,7 +559,7 @@ if (resp != '2') { gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } } @@ -569,17 +572,17 @@ { struct sockaddr_in cli_addr; size_t cli_addr_len; - int infd; + int infd, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->datafd > 0, -2); - g_return_val_if_fail (request->transfer_type == gftp_transfer_active, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); + g_return_val_if_fail (request->transfer_type == gftp_transfer_active, GFTP_EFATAL); cli_addr_len = sizeof (cli_addr); - if (gftp_set_sockblocking (request, request->datafd, 0) == -1) - return (-1); + if ((ret = gftp_set_sockblocking (request, request->datafd, 0)) < 0) + return (ret); if ((infd = accept (request->datafd, (struct sockaddr *) &cli_addr, &cli_addr_len)) == -1) @@ -588,14 +591,14 @@ _("Cannot accept connection from server: %s\n"), g_strerror (errno)); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } close (request->datafd); request->datafd = infd; - if (gftp_set_sockblocking (request, request->datafd, 1) == -1) - return (-1); + if ((ret = gftp_set_sockblocking (request, request->datafd, 1)) < 0) + return (ret); return (0); } @@ -608,10 +611,10 @@ char *command, *tempstr, resp; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (filename != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (filename != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if (fd > 0) request->datafd = fd; @@ -620,8 +623,8 @@ (ret = rfc959_data_connection_new (request)) < 0) return (ret); - if (gftp_set_sockblocking (request, request->datafd, 1) == -1) - return (-1); + if ((ret = gftp_set_sockblocking (request, request->datafd, 1)) < 0) + return (ret); if (startsize > 0) { @@ -637,7 +640,7 @@ { close (request->datafd); request->datafd = -1; - return (-2); + return (GFTP_ERETRYABLE); } } @@ -649,7 +652,7 @@ { close (request->datafd); request->datafd = -1; - return (-2); + return (GFTP_ERETRYABLE); } if (request->transfer_type == gftp_transfer_active && @@ -676,10 +679,10 @@ char *command, *tempstr, resp; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (filename != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (filename != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if (fd > 0) fd = request->datafd; @@ -688,8 +691,8 @@ (ret = rfc959_data_connection_new (request)) < 0) return (ret); - if (gftp_set_sockblocking (request, request->datafd, 1) == -1) - return (-1); + if ((ret = gftp_set_sockblocking (request, request->datafd, 1)) < 0) + return (ret); if (startsize > 0) { @@ -704,7 +707,7 @@ { close (request->datafd); request->datafd = -1; - return (-2); + return (GFTP_ERETRYABLE); } } @@ -715,7 +718,7 @@ { close (request->datafd); request->datafd = -1; - return (-2); + return (GFTP_ERETRYABLE); } if (request->transfer_type == gftp_transfer_active && @@ -732,25 +735,26 @@ const char *tofile, off_t tosize) { char *tempstr, *pos, *endpos; + int ret; - g_return_val_if_fail (fromreq != NULL, -2); - g_return_val_if_fail (fromfile != NULL, -2); - g_return_val_if_fail (toreq != NULL, -2); - g_return_val_if_fail (tofile != NULL, -2); - g_return_val_if_fail (fromreq->sockfd > 0, -2); - g_return_val_if_fail (toreq->sockfd > 0, -2); + g_return_val_if_fail (fromreq != NULL, GFTP_EFATAL); + g_return_val_if_fail (fromfile != NULL, GFTP_EFATAL); + g_return_val_if_fail (toreq != NULL, GFTP_EFATAL); + g_return_val_if_fail (tofile != NULL, GFTP_EFATAL); + g_return_val_if_fail (fromreq->sockfd > 0, GFTP_EFATAL); + g_return_val_if_fail (toreq->sockfd > 0, GFTP_EFATAL); fromreq->transfer_type = gftp_transfer_passive; toreq->transfer_type = gftp_transfer_active; - if (rfc959_send_command (fromreq, "PASV\r\n") != '2') - return (-2); + if ((ret = rfc959_send_command (fromreq, "PASV\r\n")) != '2') + return (ret); pos = fromreq->last_ftp_response + 4; while (!isdigit ((int) *pos) && *pos != '\0') pos++; if (*pos == '\0') - return (-2); + return (GFTP_EFATAL); endpos = pos; while (*endpos != ')' && *endpos != '\0') @@ -759,34 +763,35 @@ *endpos = '\0'; tempstr = g_strconcat ("PORT ", pos, "\r\n", NULL); - if (rfc959_send_command (toreq, tempstr) != '2') + if ((ret = rfc959_send_command (toreq, tempstr)) != '2') { g_free (tempstr); - return (-2); + return (ret); } g_free (tempstr); tempstr = g_strconcat ("RETR ", fromfile, "\r\n", NULL); - if (gftp_write (fromreq, tempstr, strlen (tempstr), - fromreq->sockfd) < 0) + if ((ret = gftp_write (fromreq, tempstr, strlen (tempstr), + fromreq->sockfd)) < 0) { g_free (tempstr); - return (-2); + return (ret); } g_free (tempstr); tempstr = g_strconcat ("STOR ", tofile, "\r\n", NULL); - if (gftp_write (toreq, tempstr, strlen (tempstr), toreq->sockfd) < 0) + if ((ret = gftp_write (toreq, tempstr, strlen (tempstr), toreq->sockfd)) < 0) { g_free (tempstr); - return (-2); + return (ret); } g_free (tempstr); - if (rfc959_read_response (fromreq) < 0) - return (-2); - if (rfc959_read_response (toreq) < 0) - return (-2); + if ((ret = rfc959_read_response (fromreq)) < 0) + return (ret); + + if ((ret = rfc959_read_response (toreq)) < 0) + return (ret); return (0); } @@ -795,16 +800,26 @@ static int rfc959_end_transfer (gftp_request * request) { - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + int ret; + + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if (request->datafd > 0) { close (request->datafd); request->datafd = -1; } - return (rfc959_read_response (request) == '2' ? 0 : -2); + + ret = rfc959_read_response (request); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); } @@ -813,9 +828,9 @@ { int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if (request->datafd > 0) { @@ -825,8 +840,8 @@ /* We need to read two lines of output. The first one is acknowleging the transfer and the second line acknowleges the ABOR command */ - if (rfc959_send_command (request, "ABOR\r\n") < 0) - return (-2); + if ((ret = rfc959_send_command (request, "ABOR\r\n")) < 0) + return (ret); if (request->sockfd > 0) { @@ -844,9 +859,9 @@ char *tempstr, parms[3]; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); if ((ret = rfc959_data_connection_new (request)) < 0) return (ret); @@ -861,7 +876,7 @@ g_free (tempstr); if (ret != '1') - return (-2); + return (GFTP_ERETRYABLE); ret = 0; if (request->transfer_type == gftp_transfer_active) @@ -878,10 +893,10 @@ char tempstr[255]; ssize_t len; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (fle != NULL, -2); - g_return_val_if_fail (fd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (fle != NULL, GFTP_EFATAL); + g_return_val_if_fail (fd > 0, GFTP_EFATAL); if (request->last_dir_entry) { @@ -929,9 +944,10 @@ rfc959_set_data_type (gftp_request * request, int data_type) { char *tempstr; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); if (request->sockfd > 0 && request->data_type != data_type) { @@ -940,8 +956,8 @@ else tempstr = "TYPE A\r\n"; - if (rfc959_send_command (request, tempstr) != '2') - return (-2); + if ((ret = rfc959_send_command (request, tempstr)) != '2') + return (ret); } request->data_type = data_type; return (0); @@ -955,7 +971,7 @@ int ret; g_return_val_if_fail (request != NULL, 0); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); g_return_val_if_fail (filename != NULL, 0); g_return_val_if_fail (request->sockfd > 0, 0); @@ -963,7 +979,7 @@ ret = rfc959_send_command (request, tempstr); g_free (tempstr); if (ret < 0) - return (-2); + return (ret); if (*request->last_ftp_response != '2') return (0); @@ -976,15 +992,21 @@ { char *tempstr, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); tempstr = g_strconcat ("RMD ", directory, "\r\n", NULL); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - return (ret == '2' ? 0 : -2); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); } @@ -993,15 +1015,21 @@ { char *tempstr, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (file != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); tempstr = g_strconcat ("DELE ", file, "\r\n", NULL); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - return (ret == '2' ? 0 : -2); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); } @@ -1010,15 +1038,21 @@ { char *tempstr, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); tempstr = g_strconcat ("MKD ", directory, "\r\n", NULL); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - return (ret == '2' ? 0 : -2); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); } @@ -1028,22 +1062,31 @@ { char *tempstr, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (oldname != NULL, -2); - g_return_val_if_fail (newname != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (oldname != NULL, GFTP_EFATAL); + g_return_val_if_fail (newname != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); tempstr = g_strconcat ("RNFR ", oldname, "\r\n", NULL); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - if (ret != '3') - return (-2); + + if (ret < 0) + return (ret); + else if (ret != '2') + return (GFTP_ERETRYABLE); tempstr = g_strconcat ("RNTO ", newname, "\r\n", NULL); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - return (ret == '2' ? 0 : -2); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); } @@ -1052,16 +1095,22 @@ { char *tempstr, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (file != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); tempstr = g_malloc (strlen (file) + (mode / 10) + 16); sprintf (tempstr, "SITE CHMOD %d %s\r\n", mode, file); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - return (ret == '2' ? 0 : -2); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); } @@ -1070,15 +1119,21 @@ { char *tempstr, ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, -2); - g_return_val_if_fail (command != NULL, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL); + g_return_val_if_fail (command != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); tempstr = g_strconcat ("SITE ", command, "\r\n", NULL); ret = rfc959_send_command (request, tempstr); g_free (tempstr); - return (request->sockfd > 0 ? ret : -2); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); }
--- a/lib/sshv2.c Fri Dec 27 14:59:50 2002 +0000 +++ b/lib/sshv2.c Sun Dec 29 15:16:27 2002 +0000 @@ -281,13 +281,14 @@ { char buf[34000]; gint32 clen; + int ret; if (len > 33995) { request->logging_function (gftp_logging_error, request->user_data, _("Error: Message size %d too big\n"), len); gftp_disconnect (request); - return (-1); + return (GFTP_EFATAL); } clen = htonl (len + 1); @@ -305,10 +306,10 @@ sshv2_log_command (request, gftp_logging_send, type, buf + 5, len); - if (gftp_write (request, buf, len + 5, request->sockfd) < 0) - return (-2); + if ((ret = gftp_write (request, buf, len + 5, request->sockfd)) < 0) + return (ret); - return 0; + return (0); } @@ -327,7 +328,7 @@ while (rem > 0) { if ((numread = gftp_read (request, pos, rem, fd)) < 0) - return (-2); + return ((int) numread); rem -= numread; pos += numread; } @@ -341,7 +342,7 @@ message->length); memset (message, 0, sizeof (*message)); gftp_disconnect (request); - return (-1); + return (GFTP_EFATAL); } message->command = buf[4]; @@ -355,7 +356,7 @@ while (rem > 0) { if ((numread = gftp_read (request, pos, rem, fd)) < 0) - return (-2); + return ((int) numread); rem -= numread; pos += numread; } @@ -401,7 +402,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } memcpy (&ret, message->pos, 4); @@ -414,7 +415,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } return (ret); @@ -457,8 +458,8 @@ size_t len; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); if (request->directory == NULL || *request->directory == '\0') dir = "."; @@ -475,10 +476,11 @@ num = htonl (len); memcpy (tempstr + 4, &num, 4); - if (sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len + 8) < 0) + if ((ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, + len + 8)) < 0) { g_free (tempstr); - return (-2); + return (ret); } g_free (tempstr); @@ -490,10 +492,12 @@ memset (&message, 0, sizeof (message)); ret = sshv2_read_response (request, &message, -1); - if (ret == SSH_FXP_STATUS) + if (ret < 0) + return (ret); + else if (ret == SSH_FXP_STATUS) { sshv2_message_free (&message); - return (-2); + return (GFTP_ERETRYABLE); } else if (ret != SSH_FXP_NAME) { @@ -501,15 +505,15 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, 1) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, 1)) < 0) + return (ret); if ((request->directory = sshv2_buffer_get_string (request, &message)) == NULL) - return (-2); + return (GFTP_EFATAL); sshv2_message_free (&message); return (0); @@ -520,13 +524,13 @@ sshv2_connect (gftp_request * request) { char **args, *tempstr, pts_name[20], *p1, p2, *exepath, port[6]; - int version, fdm, fds, s[2]; + int version, fdm, fds, s[2], ret; sshv2_message message; pid_t child; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (request->hostname != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->hostname != NULL, GFTP_EFATAL); if (request->sockfd > 0) return (0); @@ -564,7 +568,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Cannot create a socket pair: %s\n"), g_strerror (errno)); - return (-2); + return (GFTP_ERETRYABLE); } } else @@ -575,7 +579,7 @@ request->logging_function (gftp_logging_error, request->user_data, _("Cannot open master pty %s: %s\n"), pts_name, g_strerror (errno)); - return (-2); + return (GFTP_ERETRYABLE); } } @@ -593,7 +597,7 @@ { printf ("Cannot open slave pts %s: %s\n", pts_name, g_strerror (errno)); - return (-1); + return (GFTP_ERETRYABLE); } close (fdm); } @@ -608,7 +612,7 @@ ssh_prog_name : "ssh", args); printf (_("Error: Cannot execute ssh: %s\n"), g_strerror (errno)); - return (-1); + exit (1); } else if (child > 0) { @@ -627,7 +631,7 @@ { g_free (args); g_free (exepath); - return (-2); + return (GFTP_EFATAL); } g_free (tempstr); } @@ -637,17 +641,22 @@ request->sockfd = fdm; version = htonl (SSH_MY_VERSION); - if (sshv2_send_command (request, SSH_FXP_INIT, (char *) &version, 4) < 0) - return (-2); + if ((ret = sshv2_send_command (request, SSH_FXP_INIT, (char *) + &version, 4)) < 0) + return (ret); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) != SSH_FXP_VERSION) + if ((ret = sshv2_read_response (request, &message, -1)) != SSH_FXP_VERSION) { request->logging_function (gftp_logging_error, request->user_data, _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + + if (ret < 0) + return (ret); + else + return (GFTP_ERETRYABLE); } sshv2_message_free (&message); @@ -661,7 +670,7 @@ _("Cannot fork another process: %s\n"), g_strerror (errno)); g_free (args); - return (-1); + return (GFTP_ERETRYABLE); } if (sshv2_getcwd (request) < 0) @@ -670,10 +679,10 @@ g_free (request->directory); request->directory = g_strdup ("."); - if (sshv2_getcwd (request) < 0) + if ((ret = sshv2_getcwd (request)) < 0) { gftp_disconnect (request); - return (-2); + return (ret); } } @@ -716,9 +725,10 @@ sshv2_params * params; sshv2_message message; gint32 len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); params = request->protocol_data; if (params->message.buffer != NULL) @@ -732,18 +742,21 @@ len = htonl (params->id++); memcpy (params->handle, &len, 4); - if (sshv2_send_command (request, SSH_FXP_CLOSE, params->handle, - params->handle_len) < 0) - return (-2); + if ((ret = sshv2_send_command (request, SSH_FXP_CLOSE, params->handle, + params->handle_len)) < 0) + return (ret); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) != SSH_FXP_STATUS) + if ((ret = sshv2_read_response (request, &message, -1)) != SSH_FXP_STATUS) { request->logging_function (gftp_logging_error, request->user_data, _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + if (ret < 0) + return (ret); + else + return (GFTP_ERETRYABLE); } sshv2_message_free (&message); params->handle_len = 0; @@ -768,9 +781,9 @@ gint32 len; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); params = request->protocol_data; @@ -785,20 +798,22 @@ len = htonl (strlen (request->directory)); memcpy (tempstr + 4, &len, 4); strcpy (tempstr + 8, request->directory); - if (sshv2_send_command (request, SSH_FXP_OPENDIR, tempstr, - strlen (request->directory) + 8) < 0) + if ((ret = sshv2_send_command (request, SSH_FXP_OPENDIR, tempstr, + strlen (request->directory) + 8)) < 0) { g_free (tempstr); - return (-2); + return (ret); } g_free (tempstr); memset (&message, 0, sizeof (message)); ret = sshv2_read_response (request, &message, -1); - if (ret == SSH_FXP_STATUS) + if (ret < 0) + return (ret); + else if (ret == SSH_FXP_STATUS) { sshv2_message_free (&message); - return (-2); + return (GFTP_ERETRYABLE); } else if (ret != SSH_FXP_HANDLE) { @@ -806,7 +821,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } if (message.length - 4 > SSH_MAX_HANDLE_SIZE) @@ -816,7 +831,7 @@ message.length - 4); sshv2_message_free (&message); gftp_disconnect (request); - return (-1); + return (GFTP_EFATAL); } @@ -837,9 +852,9 @@ sshv2_params *params; char *longname; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (fle != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (fle != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -863,13 +878,14 @@ len = htonl (params->id++); memcpy (params->handle, &len, 4); - if (sshv2_send_command (request, SSH_FXP_READDIR, params->handle, - params->handle_len) < 0) - return (-2); + if ((ret = sshv2_send_command (request, SSH_FXP_READDIR, + params->handle, + params->handle_len)) < 0) + return (ret); } if ((ret = sshv2_read_response (request, ¶ms->message, fd)) < 0) - return (-2); + return (ret); if (!request->cached) { @@ -887,7 +903,7 @@ params->message.pos = params->message.buffer + 4; if ((params->count = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0) - return (-2); + return (params->count); } } @@ -895,20 +911,20 @@ { if ((len = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0 || params->message.pos + len > params->message.end) - return (-2); + return (GFTP_EFATAL); params->message.pos += len; if ((longnamelen = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0 || params->message.pos + longnamelen > params->message.end) - return (-2); + return (GFTP_EFATAL); longname = params->message.pos; params->message.pos += longnamelen; if ((attrs = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0) - return (-2); + return (attrs); if (attrs & SSH_FILEXFER_ATTR_SIZE) { @@ -919,7 +935,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (¶ms->message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } } @@ -932,7 +948,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (¶ms->message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } } @@ -945,7 +961,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (¶ms->message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } } @@ -958,7 +974,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (¶ms->message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } } @@ -966,21 +982,21 @@ { if ((count = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0) - return (-2); + return (GFTP_EFATAL); for (i=0; i<count; i++) { if ((len = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0 || params->message.pos + len + 4 > params->message.end) - return (-2); + return (GFTP_EFATAL); params->message.pos += len + 4; if ((len = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0 || params->message.pos + len + 4 > params->message.end) - return (-2); + return (GFTP_EFATAL); params->message.pos += len + 4; } @@ -994,10 +1010,10 @@ if (longname[longnamelen - 1] == '/') longname[--longnamelen] = '\0'; - if (gftp_parse_ls (longname, fle) != 0) + if ((ret = gftp_parse_ls (longname, fle)) < 0) { gftp_file_destroy (fle); - return (-2); + return (ret); } retsize = strlen (longname); @@ -1014,7 +1030,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (¶ms->message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } return (retsize); @@ -1031,8 +1047,8 @@ size_t len; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); params = request->protocol_data; if (request->directory != directory) @@ -1057,19 +1073,21 @@ num = htonl (len - 8); memcpy (tempstr + 4, &num, 4); - if (sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len) < 0) + if ((ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len)) < 0) { g_free (tempstr); - return (-2); + return (ret); } g_free (tempstr); memset (&message, 0, sizeof (message)); ret = sshv2_read_response (request, &message, -1); - if (ret == SSH_FXP_STATUS) + if (ret < 0) + return (ret); + else if (ret == SSH_FXP_STATUS) { sshv2_message_free (&message); - return (-2); + return (GFTP_ERETRYABLE); } else if (ret != SSH_FXP_NAME) { @@ -1077,15 +1095,15 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + return (GFTP_EFATAL); } message.pos += 4; if (sshv2_buffer_get_int32 (request, &message, 1) != 1) - return (-2); + return (GFTP_EFATAL); if ((dir = sshv2_buffer_get_string (request, &message)) == NULL) - return (-2); + return (GFTP_EFATAL); if (request->directory) g_free (request->directory); @@ -1106,10 +1124,11 @@ char *tempstr; gint32 num; size_t len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (directory != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (directory != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1137,17 +1156,17 @@ if (sshv2_send_command (request, SSH_FXP_RMDIR, tempstr, len) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) < 0) - return (-2); + if ((ret = sshv2_read_response (request, &message, -1)) < 0) + return (ret); message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, SSH_FX_OK) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) + return (ret); sshv2_message_free (&message); @@ -1163,10 +1182,11 @@ char *tempstr; gint32 num; size_t len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1194,17 +1214,17 @@ if (sshv2_send_command (request, SSH_FXP_REMOVE, tempstr, len) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) < 0) - return (-2); + if ((ret = sshv2_read_response (request, &message, -1)) < 0) + return (ret); message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, SSH_FX_OK) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) + return (ret); sshv2_message_free (&message); @@ -1220,10 +1240,11 @@ sshv2_message message; gint32 num; size_t len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1258,17 +1279,17 @@ if (sshv2_send_command (request, SSH_FXP_SETSTAT, tempstr, len) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) < 0) - return (-2); + if ((ret = sshv2_read_response (request, &message, -1)) < 0) + return (ret); message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, SSH_FX_OK) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) + return (ret); sshv2_message_free (&message); @@ -1284,10 +1305,11 @@ char *tempstr; gint32 num; size_t len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (newdir != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (newdir != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1316,17 +1338,17 @@ if (sshv2_send_command (request, SSH_FXP_MKDIR, tempstr, len) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) < 0) - return (-2); + if ((ret = sshv2_read_response (request, &message, -1)) < 0) + return (ret); message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, SSH_FX_OK) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) + return (ret); sshv2_message_free (&message); @@ -1340,13 +1362,14 @@ char *tempstr, *oldstr, *newstr; sshv2_params * params; sshv2_message message; + size_t oldlen, newlen; gint32 num; - size_t oldlen, newlen; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (oldname != NULL, -2); - g_return_val_if_fail (newname != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (oldname != NULL, GFTP_EFATAL); + g_return_val_if_fail (newname != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1387,17 +1410,17 @@ if (sshv2_send_command (request, SSH_FXP_RENAME, tempstr, oldlen + newlen + 12) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) < 0) - return (-2); + if ((ret = sshv2_read_response (request, &message, -1)) < 0) + return (ret); message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, SSH_FX_OK) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) + return (ret); sshv2_message_free (&message); @@ -1413,10 +1436,11 @@ char *tempstr; gint32 num; size_t len; + int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1453,17 +1477,17 @@ if (sshv2_send_command (request, SSH_FXP_SETSTAT, tempstr, len) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) < 0) - return (-2); + if ((ret = sshv2_read_response (request, &message, -1)) < 0) + return (ret); message.pos += 4; - if (sshv2_buffer_get_int32 (request, &message, SSH_FX_OK) < 0) - return (-2); + if ((ret = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) + return (ret); sshv2_message_free (&message); @@ -1482,9 +1506,9 @@ gint64 ret; #endif - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (file != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1512,16 +1536,18 @@ if (sshv2_send_command (request, SSH_FXP_STAT, tempstr, len + 8) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (¶ms->message, 0, sizeof (params->message)); serv_ret = sshv2_read_response (request, ¶ms->message, -1); - if (serv_ret == SSH_FXP_STATUS) + if (serv_ret < 0) + return (serv_ret); + else if (serv_ret == SSH_FXP_STATUS) { sshv2_message_free (¶ms->message); - return (-2); + return (GFTP_ERETRYABLE); } else if (serv_ret != SSH_FXP_ATTRS) { @@ -1529,23 +1555,23 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (¶ms->message); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } if (params->message.length < 5) - return (-2); + return (GFTP_ERETRYABLE); params->message.pos += 4; if ((attrs = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0) - return (-2); + return (GFTP_ERETRYABLE); if (attrs & SSH_FILEXFER_ATTR_SIZE) { if ((highnum = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0) - return (-2); + return (GFTP_ERETRYABLE); if ((lownum = sshv2_buffer_get_int32 (request, ¶ms->message, -1)) < 0) - return (-2); + return (GFTP_ERETRYABLE); sshv2_message_free (¶ms->message); @@ -1575,9 +1601,9 @@ gint32 num; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); /* fd ignored for this protocol */ params = request->protocol_data; @@ -1612,16 +1638,18 @@ if (sshv2_send_command (request, SSH_FXP_OPEN, tempstr, stlen + 16) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); ret = sshv2_read_response (request, &message, -1); - if (ret == SSH_FXP_STATUS) + if (ret < 0) + return (ret); + else if (ret == SSH_FXP_STATUS) { sshv2_message_free (&message); - return (-2); + return (GFTP_ERETRYABLE); } else if (ret != SSH_FXP_HANDLE) { @@ -1629,7 +1657,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } if (message.length - 4 > SSH_MAX_HANDLE_SIZE) @@ -1639,7 +1667,7 @@ message.length - 4); sshv2_message_free (&message); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } @@ -1663,9 +1691,9 @@ gint32 num; int ret; - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); /* fd ignored for this protocol */ params = request->protocol_data; @@ -1703,16 +1731,18 @@ if (sshv2_send_command (request, SSH_FXP_OPEN, tempstr, stlen + 16) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } g_free (tempstr); memset (&message, 0, sizeof (message)); ret = sshv2_read_response (request, &message, -1); - if (ret == SSH_FXP_STATUS) + if (ret < 0) + return (ret); + else if (ret == SSH_FXP_STATUS) { sshv2_message_free (&message); - return (-2); + return (GFTP_ERETRYABLE); } else if (ret != SSH_FXP_HANDLE) { @@ -1720,7 +1750,7 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } if (message.length - 4 > SSH_MAX_HANDLE_SIZE) @@ -1730,7 +1760,7 @@ message.length - 4); sshv2_message_free (&message); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } @@ -1749,6 +1779,7 @@ sshv2_params * params; sshv2_message message; gint32 num; + int ret; #ifdef G_HAVE_GINT64 gint64 offset; @@ -1756,10 +1787,10 @@ gint32 offset; #endif - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); - g_return_val_if_fail (buf != NULL, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); + g_return_val_if_fail (buf != NULL, GFTP_EFATAL); params = request->protocol_data; @@ -1786,21 +1817,24 @@ memcpy (params->read_buffer + params->handle_len + 8, &num, 4); if (sshv2_send_command (request, SSH_FXP_READ, params->read_buffer, params->handle_len + 12) < 0) - return (-2); + return (GFTP_ERETRYABLE); memset (&message, 0, sizeof (message)); - if (sshv2_read_response (request, &message, -1) != SSH_FXP_DATA) + if ((ret = sshv2_read_response (request, &message, -1)) != SSH_FXP_DATA) { + if (ret < 0) + return (ret); + message.pos += 4; if ((num = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) - return (-2); + return (num); sshv2_message_free (&message); if (num != SSH_FX_EOF) { request->logging_function (gftp_logging_error, request->user_data, _("Received wrong response from server, disconnecting\n")); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } return (0); } @@ -1814,7 +1848,7 @@ num); sshv2_message_free (&message); gftp_disconnect (request); - return (-1); + return (GFTP_ERETRYABLE); } @@ -1840,11 +1874,11 @@ gint32 offset; #endif - g_return_val_if_fail (request != NULL, -2); - g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, -2); - g_return_val_if_fail (request->sockfd > 0, -2); - g_return_val_if_fail (buf != NULL, -2); - g_return_val_if_fail (size <= 32500, -2); + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL); + g_return_val_if_fail (request->sockfd > 0, GFTP_EFATAL); + g_return_val_if_fail (buf != NULL, GFTP_EFATAL); + g_return_val_if_fail (size <= 32500, GFTP_EFATAL); params = request->protocol_data; @@ -1870,12 +1904,15 @@ if (sshv2_send_command (request, SSH_FXP_WRITE, tempstr, params->handle_len + size + 12) < 0) { g_free (tempstr); - return (-2); + return (GFTP_ERETRYABLE); } memset (&message, 0, sizeof (message)); params->dont_log_status = 1; ret = sshv2_read_response (request, &message, -1); + if (ret < 0) + return (ret); + params->dont_log_status = 0; if (ret != SSH_FXP_STATUS) { @@ -1883,18 +1920,18 @@ _("Received wrong response from server, disconnecting\n")); sshv2_message_free (&message); gftp_disconnect (request); - return (-2); + return (GFTP_ERETRYABLE); } message.pos += 4; if ((num = sshv2_buffer_get_int32 (request, &message, SSH_FX_OK)) < 0) - return (-2); + return (GFTP_ERETRYABLE); sshv2_message_free (&message); if (num == SSH_FX_EOF) return (0); else if (num != SSH_FX_OK) - return (-1); + return (GFTP_ERETRYABLE); params->offset += size; return (size);
--- a/src/gtk/transfer.c Fri Dec 27 14:59:50 2002 +0000 +++ b/src/gtk/transfer.c Sun Dec 29 15:16:27 2002 +0000 @@ -259,11 +259,19 @@ conn_num++; if (request->network_timeout > 0) alarm (request->network_timeout); - ret = gftp_connect (request) == 0; + ret = gftp_connect (request); alarm (0); - if (ret) - break; + if (ret == GFTP_EFATAL) + { + ret = 0; + break; + } + else if (ret == 0) + { + ret = 1; + break; + } else if (request->retries == 0 || conn_num < request->retries) { request->logging_function (gftp_logging_misc, request->user_data,