# HG changeset patch # User masneyb # Date 1049840897 0 # Node ID b875de05c22de89cc0f90f847d1f686cf65fb1be # Parent 65048c959029a823fb8efe83af2f29ee5808ea64 2003-4-8 Brian Masney * src/text/gftp-text.c lib/misc.c - moved r_gethostbyname() and r_getservbyname() to lib/misc.c. Now uses GMutex functions * lib/config_file.c lib/gftp.h lib/options.h - added config variable type textcombo. default_protocol uses this * lib/config_file.c (gftp_read_config_file) - when reading in the list of supported protocols, add the protocol names to the list associated with default_protocol. Also, don't try to have default_protocol fall back to FTP. The code that uses this will fall back properly * lib/gftp.h (struct gftp_transfer) - renamed node to user_data * lib/misc.c lib/gftp.h - moved parse_attribs() from src/gtk/transfer.c to misc.c. Renamed to gftp_parse_attribs() * lib/protocols.c lib/gftp.h - moved get_status() from src/gtk/transfer.c to protocols.c. Renamed to gftp_get_transfer_status(). Uses GMutex functions diff -r 65048c959029 -r b875de05c22d ChangeLog --- a/ChangeLog Tue Apr 08 01:43:33 2003 +0000 +++ b/ChangeLog Tue Apr 08 22:28:17 2003 +0000 @@ -1,3 +1,46 @@ +2003-4-8 Brian Masney + * src/text/gftp-text.c lib/misc.c - moved r_gethostbyname() and + r_getservbyname() to lib/misc.c. Now uses GMutex functions + + * lib/config_file.c lib/gftp.h lib/options.h - added config + variable type textcombo. default_protocol uses this + + * lib/config_file.c (gftp_read_config_file) - when reading in the + list of supported protocols, add the protocol names to the list + associated with default_protocol. Also, don't try to have + default_protocol fall back to FTP. The code that uses this will fall + back properly + + * lib/gftp.h (struct gftp_transfer) - renamed node to user_data + + * lib/misc.c lib/gftp.h - moved parse_attribs() from + src/gtk/transfer.c to misc.c. Renamed to gftp_parse_attribs() + + * lib/protocols.c lib/gftp.h - moved get_status() from + src/gtk/transfer.c to protocols.c. Renamed to + gftp_get_transfer_status(). Uses GMutex functions + + +2003-4-7 Brian Masney + * src/gtk/bookmarks.c - renamed struct gftp_bookmarks to + gftp_bookmarks_var. In run_bookmark(), use gftp_parse_bookmark() + + * src/gtk/bookmarks.c src/gtk/dnd.c src/gtk/menu-items.c + src/gtk/transfer.c - use g_strdup() instead of g_malloc()/strcpy() + + * src/gtk/dnd.c src/gtk/menu-items.c - don't use depreciated macros + to access the request structure + + * src/gtk/*.c - use new gftp_lookup_global_option() and + gftp_lookup_request_option() functions + + * src/gtk/gftp-gtk.h src/gtk/gftp-gtk.c - moved viewedit_processes and + viewedit_process_done variables from lib/gftp.h and lib/options.h + + * src/gtk/transfer.c - removed gftp_gtk_calc_kbs(). This is now in + lib/protocols.c. Removed Binary/Ascii conversion. This is all done in + lib/rfc959.c + 2003-4-6 Brian Masney * lib/config_file.c src/text/gftp-text.c - changed arguments of gftp_read_config_file() and gftp_read_bookmarks() to take an argument @@ -597,7 +640,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.66 2003/04/08 01:43:31 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.67 2003/04/08 22:28:16 masneyb Exp $ tags * debian/* - updated files from Debian maintainer diff -r 65048c959029 -r b875de05c22d lib/config_file.c --- a/lib/config_file.c Tue Apr 08 01:43:33 2003 +0000 +++ b/lib/config_file.c Tue Apr 08 22:28:17 2003 +0000 @@ -452,6 +452,7 @@ char *tempstr, *temp1str, *curpos, buf[255]; gftp_config_list_vars * tmplistvar; gftp_config_vars * tmpconfigvar; + char **protocol_list; FILE *conffile; int line, i; size_t len; @@ -461,12 +462,24 @@ gftp_register_config_vars (gftp_global_config_vars); + protocol_list = NULL; for (i=0; gftp_protocols[i].register_options != NULL; i++) { + if (gftp_protocols[i].shown) + { + protocol_list = g_realloc (protocol_list, sizeof (char *) * (i + 2)); + protocol_list[i] = gftp_protocols[i].name; + protocol_list[i + 1] = NULL; + } + if (gftp_protocols[i].register_options != NULL) gftp_protocols[i].register_options (); } + if ((tmpconfigvar = g_hash_table_lookup (gftp_global_options_htable, + "default_protocol")) != NULL) + tmpconfigvar->listdata = protocol_list; + gftp_config_list_htable = g_hash_table_new (string_hash_function, string_hash_compare); @@ -560,26 +573,6 @@ } } -/* FIXME - gftp_lookup_global_option ("default_protocol", &tempstr); - if (tempstr == NULL || *tempstr == '\0') - { - tempstr = "FTP"; - gftp_set_global_option ("default_protocol", tempstr); - } - - for (i = 0; gftp_protocols[i].name; i++) - { - if (strcmp (gftp_protocols[i].name, tempstr) == 0) - break; - } - - if (gftp_protocols[i].name == NULL) - { - printf (_("gFTP Error: Default protocol %s is not a valid protocol\n"), tempstr); - exit (1); - } -*/ if ((tempstr = expand_path (LOG_FILE)) == NULL) { printf (_("gFTP Error: Bad log file name %s\n"), LOG_FILE); @@ -962,7 +955,7 @@ clist = cv->listdata; for (i=0; clist[i] != NULL; i++) { - if (strcasecmp (_(clist[i]), str) == 0) + if (strcasecmp (clist[i], str) == 0) { cv->value = GINT_TO_POINTER(i); break; @@ -981,7 +974,7 @@ clist = cv->listdata; if (clist != NULL) - fprintf (fd, "%s", _(clist[GPOINTER_TO_INT(cv->value)])); + fprintf (fd, "%s", clist[GPOINTER_TO_INT(cv->value)]); else fprintf (fd, _("")); @@ -989,7 +982,31 @@ } -/* *Note, the index numbers of this array must match up to the numbers in +static int +gftp_config_file_read_textcombo (char *str, gftp_config_vars * cv, int line) +{ + char **clist; + int i; + + cv->value = NULL; + if (cv->listdata != NULL) + { + clist = cv->listdata; + for (i=0; clist[i] != NULL; i++) + { + if (strcasecmp (clist[i], str) == 0) + { + cv->value = clist[i]; + break; + } + } + } + + return (0); +} + + +/* Note, the index numbers of this array must match up to the numbers in gftp_option_type_enum in gftp.h */ gftp_option_type_var gftp_option_types[] = { {gftp_config_file_read_text, gftp_config_file_write_text, NULL, NULL}, @@ -1004,7 +1021,7 @@ {gftp_config_file_read_text, gftp_config_file_write_text, NULL, NULL}, {NULL, NULL, NULL, NULL}, {gftp_config_file_read_intcombo, gftp_config_file_write_intcombo, NULL, NULL}, - {NULL, NULL, NULL, NULL}, + {gftp_config_file_read_textcombo, gftp_config_file_write_text, NULL, NULL}, {NULL, NULL, NULL, NULL} }; diff -r 65048c959029 -r b875de05c22d lib/gftp.h --- a/lib/gftp.h Tue Apr 08 01:43:33 2003 +0000 +++ b/lib/gftp.h Tue Apr 08 22:28:17 2003 +0000 @@ -352,7 +352,7 @@ GStaticMutex statmutex, structmutex; - void *node; + void *user_data; void *clist; }; @@ -437,7 +437,7 @@ gftp_option_type_textbox = 9, gftp_option_type_subtree = 10, gftp_option_type_intcombo = 11, - gftp_option_type_charcombo = 12, + gftp_option_type_textcombo = 12, gftp_option_type_table = 13 } gftp_option_type_enum; @@ -616,6 +616,8 @@ int column, int asds ); +mode_t gftp_parse_attribs ( char *attribs ); + /* protocols.c */ #define GFTP_FTP_NUM 0 #define GFTP_HTTP_NUM 1 @@ -820,5 +822,8 @@ void gftp_calc_kbs ( gftp_transfer * tdata, ssize_t num_read ); +int gftp_get_transfer_status ( gftp_transfer * tdata, + ssize_t num_read ); + #endif diff -r 65048c959029 -r b875de05c22d lib/misc.c --- a/lib/misc.c Tue Apr 08 01:43:33 2003 +0000 +++ b/lib/misc.c Tue Apr 08 22:28:17 2003 +0000 @@ -933,3 +933,100 @@ return (filelist); } + +mode_t +gftp_parse_attribs (char *attribs) +{ + mode_t mode; + int cur; + + cur = 0; + if (attribs[1] == 'r') + cur += 4; + if (attribs[2] == 'w') + cur += 2; + if (attribs[3] == 'x' || + attribs[3] == 's') + cur += 1; + mode = cur; + + cur = 0; + if (attribs[4] == 'r') + cur += 4; + if (attribs[5] == 'w') + cur += 2; + if (attribs[6] == 'x' || + attribs[6] == 's') + cur += 1; + mode = (mode * 10) + cur; + + cur = 0; + if (attribs[7] == 'r') + cur += 4; + if (attribs[8] == 'w') + cur += 2; + if (attribs[9] == 'x' || + attribs[9] == 's') + cur += 1; + mode = (mode * 10) + cur; + + return (mode); +} + + +#if !defined (HAVE_GETADDRINFO) || !defined (HAVE_GAI_STRERROR) + +struct hostent * +r_gethostbyname (const char *name, struct hostent *result_buf, int *h_errnop) +{ + static GStaticMutex hostfunclock = G_STATIC_MUTEX_INIT; + struct hostent *hent; + + if (g_thread_supported ()) + g_static_mutex_lock (&hostfunclock); + + if ((hent = gethostbyname (name)) == NULL) + { + if (h_errnop) + *h_errnop = h_errno; + } + else + { + *result_buf = *hent; + hent = result_buf; + } + + if (g_thread_supported ()) + g_static_mutex_unlock (&hostfunclock); + + return (hent); +} + +#endif /* !HAVE_GETADDRINFO */ + +struct servent * +r_getservbyname (const char *name, const char *proto, + struct servent *result_buf, int *h_errnop) +{ + static GStaticMutex servfunclock = G_STATIC_MUTEX_INIT; + struct servent *sent; + + if (g_thread_supported ()) + g_static_mutex_lock (&servfunclock); + + if ((sent = getservbyname (name, proto)) == NULL) + { + if (h_errnop) + *h_errnop = h_errno; + } + else + { + *result_buf = *sent; + sent = result_buf; + } + + if (g_thread_supported ()) + g_static_mutex_unlock (&servfunclock); + return (sent); +} + diff -r 65048c959029 -r b875de05c22d lib/options.h --- a/lib/options.h Tue Apr 08 01:43:33 2003 +0000 +++ b/lib/options.h Tue Apr 08 22:28:17 2003 +0000 @@ -98,12 +98,11 @@ gftp_option_type_float, &gftp_maxkbs, NULL, 0, N_("The maximum KB/s a file transfer can get. (Set to 0 to disable)"), GFTP_PORT_ALL, NULL}, -/* FIXME - {"", N_("Default Protocol"), (void *) 0x1, CONFIG_COMBO, "DP", NULL, GFTP_PORT_GTK}, - {"default_protocol", N_("Default Protocol"), &default_protocol, - CONFIG_CHARTEXT, N_("This specifies the default protocol to use"), NULL, 0}, -*/ + {"default_protocol", N_("Default Protocol"), + gftp_option_type_textcombo, "FTP", NULL, 0, + N_("This specifies the default protocol to use"), GFTP_PORT_ALL, NULL}, + {"list_dblclk_action", "", gftp_option_type_int, GINT_TO_POINTER(0), NULL, 0, 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"), 0, NULL}, diff -r 65048c959029 -r b875de05c22d lib/protocols.c --- a/lib/protocols.c Tue Apr 08 01:43:33 2003 +0000 +++ b/lib/protocols.c Tue Apr 08 22:28:17 2003 +0000 @@ -433,7 +433,7 @@ gftp_lookup_request_option (request, "default_protocol", &default_protocol); - if (*default_protocol != '\0') + if (default_protocol != NULL && *default_protocol != '\0') { for (i = 0; gftp_protocols[i].url_prefix; i++) { @@ -489,7 +489,7 @@ gftp_lookup_request_option (request, "default_protocol", &default_protocol); - if (*default_protocol != '\0') + if (default_protocol != NULL && *default_protocol != '\0') { for (i = 0; gftp_protocols[i].url_prefix; i++) { @@ -2179,3 +2179,123 @@ g_static_mutex_unlock (&tdata->statmutex); } + +int +gftp_get_transfer_status (gftp_transfer * tdata, ssize_t num_read) +{ + int ret1, ret2, retries, sleep_time; + gftp_file * tempfle; + struct timeval tv; + + ret1 = ret2 = 0; + gftp_lookup_request_option (tdata->fromreq, "retries", &retries); + gftp_lookup_request_option (tdata->fromreq, "sleep_time", &sleep_time); + + if (g_thread_supported ()) + g_static_mutex_lock (&tdata->structmutex); + + if (tdata->curfle == NULL) + { + if (g_thread_supported ()) + g_static_mutex_unlock (&tdata->structmutex); + + return (GFTP_EFATAL); + } + + tempfle = tdata->curfle->data; + + if (g_thread_supported ()) + g_static_mutex_unlock (&tdata->structmutex); + + gftp_disconnect (tdata->fromreq); + gftp_disconnect (tdata->toreq); + + if (num_read < 0 || tdata->skip_file) + { + if (num_read == GFTP_EFATAL) + return (GFTP_EFATAL); + else if (retries != 0 && + tdata->current_file_retries >= retries) + { + tdata->fromreq->logging_function (gftp_logging_error, + tdata->fromreq->user_data, + _("Error: Remote site %s disconnected. Max retries reached...giving up\n"), + tdata->fromreq->hostname != NULL ? + tdata->fromreq->hostname : tdata->toreq->hostname); + return (GFTP_EFATAL); + } + else + { + tdata->fromreq->logging_function (gftp_logging_error, + tdata->fromreq->user_data, + _("Error: Remote site %s disconnected. Will reconnect in %d seconds\n"), + tdata->fromreq->hostname != NULL ? + tdata->fromreq->hostname : tdata->toreq->hostname, + sleep_time); + } + + while (retries == 0 || + tdata->current_file_retries <= retries) + { + if (!tdata->skip_file) + { + tv.tv_sec = sleep_time; + tv.tv_usec = 0; + select (0, NULL, NULL, NULL, &tv); + } + + if ((ret1 = gftp_connect (tdata->fromreq)) == 0 && + (ret2 = gftp_connect (tdata->toreq)) == 0) + { + if (g_thread_supported ()) + g_static_mutex_lock (&tdata->structmutex); + + tdata->resumed_bytes = tdata->resumed_bytes + tdata->trans_bytes - tdata->curresumed - tdata->curtrans; + tdata->trans_bytes = 0; + if (tdata->skip_file) + { + tdata->total_bytes -= tempfle->size; + tdata->curtrans = 0; + + tdata->curfle = tdata->curfle->next; + tdata->next_file = 1; + tdata->skip_file = 0; + tdata->cancel = 0; + tdata->fromreq->cancel = 0; + tdata->toreq->cancel = 0; + } + else + { + tempfle->transfer_action = GFTP_TRANS_ACTION_RESUME; + tempfle->startsize = tdata->curtrans + tdata->curresumed; + /* We decrement this here because it will be incremented in + the loop again */ + tdata->curresumed = 0; + tdata->current_file_number--; /* Decrement this because it + will be incremented when we + continue in the loop */ + } + + gettimeofday (&tdata->starttime, NULL); + + if (g_thread_supported ()) + g_static_mutex_unlock (&tdata->structmutex); + + return (GFTP_ERETRYABLE); + } + else if (ret1 == GFTP_EFATAL || ret2 == GFTP_EFATAL) + { + gftp_disconnect (tdata->fromreq); + gftp_disconnect (tdata->toreq); + return (GFTP_EFATAL); + } + else + tdata->current_file_retries++; + } + } + else if (tdata->cancel) + return (GFTP_EFATAL); + + return (0); +} + diff -r 65048c959029 -r b875de05c22d src/text/gftp-text.c --- a/src/text/gftp-text.c Tue Apr 08 01:43:33 2003 +0000 +++ b/src/text/gftp-text.c Tue Apr 08 22:28:17 2003 +0000 @@ -1202,46 +1202,3 @@ return (0); } - -#if !defined (HAVE_GETADDRINFO) || !defined (HAVE_GAI_STRERROR) - -struct hostent * -r_gethostbyname (const char *name, struct hostent *result_buf, int *h_errnop) -{ - struct hostent *hent; - - if ((hent = gethostbyname (name)) == NULL) - { - if (h_errnop) - *h_errnop = h_errno; - } - else - { - *result_buf = *hent; - hent = result_buf; - } - return (hent); -} - -#endif /* HAVE_GETADDRINFO */ - - -struct servent * -r_getservbyname (const char *name, const char *proto, - struct servent *result_buf, int *h_errnop) -{ - struct servent *sent; - - if ((sent = getservbyname (name, proto)) == NULL) - { - if (h_errnop) - *h_errnop = h_errno; - } - else - { - *result_buf = *sent; - sent = result_buf; - } - return (sent); -} -