Mercurial > gftp.yaz
diff lib/protocols.c @ 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 | fe308e435ed5 |
children | 6df043359b41 |
line wrap: on
line diff
--- 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);