Mercurial > gftp.yaz
annotate lib/gftp.h @ 542:fd9ce7797984
2004-8-21 Brian Masney <masneyb@gftp.org>
* lib/gftp.h lib/options.h lib/protocols.c - added
gftp_protocol_default_port() that will return the default port for
the current protocol
* src/gtk/misc-gtk.c (update_window_info) - when updating the toolbar
with the connection status, if the current connection is using the
default port for it's protocol, then leave the port field blank. This
should help users who want to reconnect to the current site using a
different protocol
* src/gtk/gftp-gtk.c (CreateConnectToolbar) - expanded the size of
the Port input box
author | masneyb |
---|---|
date | Sat, 21 Aug 2004 15:49:34 +0000 |
parents | bccfdbfaac00 |
children | 34a3f10d8bae |
rev | line source |
---|---|
1 | 1 /*****************************************************************************/ |
2 /* gftp.h - include file for the whole ftp program */ | |
122 | 3 /* Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org> */ |
1 | 4 /* */ |
5 /* This program is free software; you can redistribute it and/or modify */ | |
6 /* it under the terms of the GNU General Public License as published by */ | |
7 /* the Free Software Foundation; either version 2 of the License, or */ | |
8 /* (at your option) any later version. */ | |
9 /* */ | |
10 /* This program is distributed in the hope that it will be useful, */ | |
11 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ | |
12 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ | |
13 /* GNU General Public License for more details. */ | |
14 /* */ | |
15 /* You should have received a copy of the GNU General Public License */ | |
16 /* along with this program; if not, write to the Free Software */ | |
17 /* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
18 /*****************************************************************************/ | |
19 | |
33 | 20 /* $Id$ */ |
21 | |
1 | 22 #ifndef __GFTP_H |
23 #define __GFTP_H | |
24 | |
25 #ifdef HAVE_CONFIG_H | |
26 #include "config.h" | |
27 #endif | |
28 | |
435 | 29 /* *BSD include 64bit off_t but _LARGEFILE_SOURCE is not defined. */ |
30 #if defined (SIZEOF_OFF_T) && SIZEOF_OFF_T > 4 && !defined (_LARGEFILE_SOURCE) | |
423 | 31 #define _LARGEFILE_SOURCE 1 |
32 #endif | |
33 | |
437 | 34 #if defined (_LARGEFILE_SOURCE) && !defined (_LARGEFILE64_SOURCE) |
35 #define _LARGEFILE64_SOURCE 1 | |
36 #endif | |
37 | |
1 | 38 #include <sys/types.h> |
39 #include <sys/stat.h> | |
40 #include <sys/socket.h> | |
41 #include <sys/time.h> | |
42 #ifndef TIOCGWINSZ | |
43 #include <sys/ioctl.h> | |
44 #endif | |
45 #include <sys/wait.h> | |
46 #include <sys/utsname.h> | |
47 #include <netinet/in.h> | |
48 #include <arpa/inet.h> | |
49 #include <glib.h> | |
50 #include <limits.h> | |
51 #include <netdb.h> | |
52 #include <stdio.h> | |
53 #include <stdarg.h> | |
54 #include <stdlib.h> | |
55 #include <errno.h> | |
56 #include <fcntl.h> | |
57 #include <unistd.h> | |
58 #include <ctype.h> | |
59 #include <time.h> | |
60 #include <utime.h> | |
61 #include <signal.h> | |
62 #include <termios.h> | |
63 #include <pwd.h> | |
64 #include <setjmp.h> | |
65 #include <dirent.h> | |
66 #include <grp.h> | |
67 #include <math.h> | |
68 | |
325 | 69 #ifdef HAVE_STDINT_H |
70 #include <stdint.h> | |
71 #endif | |
72 | |
460 | 73 #ifdef HAVE_INTTYPES_H |
74 #include <inttypes.h> | |
75 #endif | |
76 | |
1 | 77 #ifdef HAVE_STRING_H |
78 #include <string.h> | |
79 #else | |
80 #include <strings.h> | |
81 #endif | |
82 | |
168 | 83 #ifdef USE_SSL |
84 #include <openssl/bio.h> | |
85 #include <openssl/err.h> | |
86 #include <openssl/rand.h> | |
87 #include <openssl/ssl.h> | |
88 #include <openssl/x509v3.h> | |
89 #endif | |
90 | |
1 | 91 #ifdef ENABLE_NLS |
92 #include <libintl.h> | |
93 #include <locale.h> | |
94 #define _(String) gettext (String) | |
95 #else | |
96 #define _(String) String | |
97 #endif | |
98 #define N_(String) String | |
99 | |
100 #ifndef AF_LOCAL | |
101 #define AF_LOCAL AF_UNIX | |
102 #endif | |
103 | |
146 | 104 #ifdef HAVE_GETADDRINFO |
105 #define HAVE_IPV6 | |
516 | 106 #define GFTP_GET_AI_FAMILY(request) ((request) != NULL && (request)->hostp != NULL ? (request)->hostp->ai_family : -1) |
146 | 107 #else |
108 #define GFTP_GET_AI_FAMILY(request) AF_INET | |
109 #endif | |
110 | |
351 | 111 /* Solaris needs this included for major()/minor() */ |
112 #ifdef HAVE_SYS_MKDEV_H | |
113 #include <sys/mkdev.h> | |
114 #endif | |
115 | |
48 | 116 /* We need the major() and minor() macros in the user interface. If they aren't |
117 defined by the system, we'll just define them here. */ | |
118 #ifndef major | |
119 #warning major macro was not defined by the system. Defining one that is probably wrong for your system | |
120 #define major(dev) (((dev) >> 8) & 0xff) | |
121 #endif | |
122 | |
123 #ifndef minor | |
124 #warning minor macro was not defined by the system. Defining one that is probably wrong for your system | |
125 #define minor(dev) ((dev) & 0xff) | |
126 #endif | |
127 | |
201 | 128 #ifdef WITH_DMALLOC |
129 | |
130 #undef g_malloc | |
131 #define g_malloc(size) \ | |
132 _malloc_leap(__FILE__, __LINE__, size) | |
133 | |
134 #undef g_malloc0 | |
135 #define g_malloc0(size) \ | |
136 _calloc_leap(__FILE__, __LINE__, 1, size) | |
137 | |
138 #undef g_realloc | |
139 #define g_realloc(ptr, size) \ | |
140 _realloc_leap(__FILE__, __LINE__, ptr, size) | |
141 | |
142 #undef g_strdup | |
143 #define g_strdup(str) \ | |
144 _strdup_leap(__FILE__, __LINE__, str) | |
145 | |
146 #undef g_free | |
147 #define g_free(ptr) \ | |
148 _free_leap(__FILE__, __LINE__, ptr) | |
149 | |
1 | 150 #include <dmalloc.h> |
201 | 151 |
1 | 152 #endif |
153 | |
338 | 154 #ifdef __GNUC__ |
155 # define GFTP_LOG_FUNCTION_ATTRIBUTES __attribute__((format(printf, 3, 4))) | |
156 #else | |
157 # define GFTP_LOG_FUNCTION_ATTRIBUTES | |
158 #endif | |
159 | |
516 | 160 #if defined (_LARGEFILE_SOURCE) |
532 | 161 #define GFTP_OFF_T_HEX_PRINTF_MOD "%llx" |
162 #define GFTP_OFF_T_INTL_PRINTF_MOD "%'lld" | |
163 #define GFTP_OFF_T_PRINTF_MOD "%lld" | |
164 #define GFTP_OFF_T_11PRINTF_MOD "%11lld" | |
165 #define gftp_parse_file_size(str) strtoll (str, NULL, 10) | |
516 | 166 #else |
532 | 167 #define GFTP_OFF_T_HEX_PRINTF_MOD "%lx" |
168 #define GFTP_OFF_T_INTL_PRINTF_MOD "%'ld" | |
169 #define GFTP_OFF_T_PRINTF_MOD "%ld" | |
170 #define GFTP_OFF_T_11PRINTF_MOD "%11ld" | |
171 #define gftp_parse_file_size(str) strtol (str, NULL, 10) | |
516 | 172 #endif |
173 | |
91 | 174 /* Server types (used by FTP protocol from SYST command) */ |
122 | 175 #define GFTP_DIRTYPE_UNIX 1 |
176 #define GFTP_DIRTYPE_EPLF 2 | |
177 #define GFTP_DIRTYPE_CRAY 3 | |
178 #define GFTP_DIRTYPE_NOVELL 4 | |
179 #define GFTP_DIRTYPE_DOS 5 | |
180 #define GFTP_DIRTYPE_VMS 6 | |
181 #define GFTP_DIRTYPE_OTHER 7 | |
358 | 182 #define GFTP_DIRTYPE_MVS 8 |
91 | 183 |
84 | 184 /* Error types */ |
341 | 185 #define GFTP_ERETRYABLE -1 /* Temporary failure. The GUI |
186 should wait briefly */ | |
187 #define GFTP_EFATAL -2 /* Fatal error */ | |
188 #define GFTP_ERETRYABLE_NO_WAIT -3 /* Temporary failure. The GUI | |
189 should not wait and should | |
190 reconnect */ | |
426 | 191 #define GFTP_ENOTRANS -4 /* Custom error. This is |
192 returned when a FXP transfer | |
193 is requested */ | |
442 | 194 #define GFTP_ETIMEDOUT -5 /* Connected timed out */ |
84 | 195 |
1 | 196 /* Some general settings */ |
197 #define BASE_CONF_DIR "~/.gftp" | |
198 #define CONFIG_FILE BASE_CONF_DIR "/gftprc" | |
199 #define BOOKMARKS_FILE BASE_CONF_DIR "/bookmarks" | |
200 #define LOG_FILE BASE_CONF_DIR "/gftp.log" | |
201 #define MAX_HIST_LEN 10 | |
356 | 202 #define GFTP_URL_USAGE "[[protocol://][user[:pass]@]site[:port][/directory]]" |
1 | 203 |
204 typedef enum gftp_logging_level_tag | |
205 { | |
206 gftp_logging_send, | |
207 gftp_logging_recv, | |
208 gftp_logging_error, | |
354 | 209 gftp_logging_misc, |
210 gftp_logging_misc_nolog /* Log to the screen, but don't log to disk */ | |
1 | 211 } gftp_logging_level; |
212 | |
213 typedef struct gftp_file_tag gftp_file; | |
214 | |
215 #define GFTP_TRANS_ACTION_OVERWRITE 1 | |
216 #define GFTP_TRANS_ACTION_RESUME 2 | |
217 #define GFTP_TRANS_ACTION_SKIP 3 | |
218 | |
16 | 219 #define GFTP_SORT_COL_FILE 1 |
220 #define GFTP_SORT_COL_SIZE 2 | |
221 #define GFTP_SORT_COL_USER 3 | |
222 #define GFTP_SORT_COL_GROUP 4 | |
223 #define GFTP_SORT_COL_DATETIME 5 | |
224 #define GFTP_SORT_COL_ATTRIBS 6 | |
225 | |
499 | 226 #define GFTP_IS_SPECIAL_DEVICE(mode) (S_ISBLK (mode) || S_ISCHR (mode)) |
227 | |
1 | 228 struct gftp_file_tag |
229 { | |
230 char *file, /* Our filename */ | |
184 | 231 *utf8_file, /* UTF-8 encoded filename for display purposes |
232 only. This is only set if file is not in | |
233 UTF-8 */ | |
1 | 234 *user, /* User that owns it */ |
235 *group, /* Group that owns it */ | |
236 *destfile; /* Full pathname to the destination for the | |
237 file transfer */ | |
122 | 238 |
239 int fd; /* Already open fd for this file */ | |
240 /* FIXME - add fd_open function */ | |
241 | |
1 | 242 time_t datetime; /* File date and time */ |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
1
diff
changeset
|
243 off_t size, /* Size of the file */ |
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
1
diff
changeset
|
244 startsize; /* Size to start the transfer at */ |
499 | 245 mode_t st_mode; /* File attributes */ |
246 unsigned int selected : 1, /* Is this file selected? */ | |
1 | 247 was_sel : 1, /* Was this file selected before */ |
248 shown : 1, /* Is this file shown? */ | |
249 done_view : 1, /* View the file when done transfering? */ | |
250 done_edit : 1, /* Edit the file when done transfering? */ | |
251 done_rm : 1, /* Remove the file when done */ | |
252 transfer_done : 1, /* Is current file transfer done? */ | |
253 is_fd : 1; /* Is this a file descriptor? */ | |
254 char transfer_action; /* See the GFTP_TRANS_ACTION_* vars above */ | |
122 | 255 void *user_data; |
1 | 256 }; |
257 | |
258 | |
259 typedef struct gftp_proxy_hosts_tag | |
260 { | |
303 | 261 /* FIXME - add IPV6 stuff here */ |
122 | 262 |
263 gint32 ipv4_network_address, | |
1 | 264 ipv4_netmask; |
265 char *domain; | |
266 } gftp_proxy_hosts; | |
267 | |
136 | 268 |
269 /* Note, these numbers must match up to the index number in config_file.c | |
270 in the declaration of gftp_option_types */ | |
271 typedef enum | |
272 { | |
273 gftp_option_type_text = 0, | |
274 gftp_option_type_textcombo = 1, | |
275 gftp_option_type_textcomboedt = 2, | |
276 gftp_option_type_hidetext = 3, | |
277 gftp_option_type_int = 4, | |
278 gftp_option_type_checkbox = 5, | |
279 gftp_option_type_intcombo = 6, | |
280 gftp_option_type_float = 7, | |
281 gftp_option_type_color = 8, | |
282 gftp_option_type_notebook = 9 | |
283 } gftp_option_type_enum; | |
284 | |
285 | |
286 #define GFTP_PORT_GTK (1 << 1) | |
287 #define GFTP_PORT_TEXT (1 << 2) | |
288 #define GFTP_PORT_ALL (GFTP_PORT_GTK | GFTP_PORT_TEXT) | |
289 | |
290 | |
291 typedef struct gftp_config_list_vars_tag | |
292 { | |
293 char *key; | |
294 void * (*read_func) (char *buf, int line); | |
295 void (*write_func) (FILE *fd, void *data); | |
296 GList * list; | |
297 unsigned int num_items; | |
298 char *header; | |
299 } gftp_config_list_vars; | |
300 | |
301 | |
201 | 302 #define GFTP_CVARS_FLAGS_DYNMEM (1 << 1) |
303 #define GFTP_CVARS_FLAGS_DYNLISTMEM (1 << 2) | |
227 | 304 #define GFTP_CVARS_FLAGS_SHOW_BOOKMARK (1 << 3) |
136 | 305 |
306 typedef struct gftp_config_vars_tag | |
307 { | |
308 char *key, /* variable name */ | |
309 *description; /* How this field will show up in the dialog */ | |
310 int otype; /* Type of option this is */ | |
311 void *value; | |
312 void *listdata; /* For options that have several different | |
313 options, this is a list of all the options. | |
314 Each option_type that uses this will use this | |
315 field differently */ | |
316 int flags; /* See GFTP_CVARS_FLAGS_* above */ | |
317 char *comment; /* Comment to write out to the config file */ | |
318 int ports_shown; /* What ports of gFTP is this option shown in */ | |
319 void *user_data; /* Data that the GUI can store here (Widget in gtk+) */ | |
320 } gftp_config_vars; | |
321 | |
322 | |
323 typedef struct gftp_option_type_tag | |
324 { | |
325 int (*read_function) (char *str, gftp_config_vars * cv, int line); | |
387 | 326 int (*write_function) (gftp_config_vars * cv, char *buf, size_t buflen, |
327 int to_config_file); | |
207 | 328 void (*copy_function) (gftp_config_vars * cv, gftp_config_vars * dest_cv); |
227 | 329 int (*compare_function) (gftp_config_vars * cv1, gftp_config_vars * cv2); |
229 | 330 void *(*ui_print_function) (gftp_config_vars * cv, void *user_data, void *value); |
136 | 331 void (*ui_save_function) (gftp_config_vars * cv, void *user_data); |
139 | 332 void (*ui_cancel_function) (gftp_config_vars * cv, void *user_data); |
136 | 333 void *user_data; |
334 } gftp_option_type_var; | |
335 | |
336 | |
337 #define GFTP_TEXTCOMBOEDT_EDITABLE (1 << 0) | |
338 | |
339 typedef struct gftp_textcomboedt_data_tag | |
340 { | |
341 char *description, | |
342 *text; | |
343 int flags; | |
344 } gftp_textcomboedt_data; | |
345 | |
346 | |
1 | 347 typedef struct gftp_request_tag gftp_request; |
348 | |
186 | 349 typedef void (*gftp_logging_func) ( gftp_logging_level level, |
350 gftp_request * request, | |
351 const char *string, ... ); | |
352 | |
1 | 353 struct gftp_request_tag |
354 { | |
355 int protonum; /* Current number of the protocol this is | |
356 set to */ | |
357 char *hostname, /* Hostname we will connect to */ | |
358 *username, /* Username for host*/ | |
359 *password, /* Password for host */ | |
360 *account, /* Account for host (FTP only) */ | |
361 *directory, /* Current working directory */ | |
362 *url_prefix, /* URL Prefix (ex: ftp) */ | |
363 *last_ftp_response, /* Last response from server */ | |
364 *last_dir_entry; /* Last dir entry from server */ | |
365 size_t last_dir_entry_len; /* Length of last_dir_entry */ | |
366 | |
122 | 367 unsigned int port; /* Port of remote site */ |
1 | 368 |
169 | 369 int datafd, /* Data connection */ |
58 | 370 cachefd; /* For the directory cache */ |
1 | 371 int wakeup_main_thread[2]; /* FD that gets written to by the threads |
372 to wakeup the parent */ | |
122 | 373 |
374 /* One of these are used to lookup the IP address of the host we are | |
375 connecting to */ | |
1 | 376 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR) |
122 | 377 struct addrinfo *hostp; |
1 | 378 #else |
122 | 379 struct hostent host, *hostp; |
1 | 380 #endif |
381 | |
122 | 382 int server_type; /* The type of server we are connected to. |
383 See GFTP_DIRTYPE_* above */ | |
151 | 384 unsigned int free_hostp : 1, /* Should we free the hostp structure |
385 in gftp_destroy_request() */ | |
386 use_proxy : 1, | |
1 | 387 always_connected : 1, |
388 need_hostport : 1, | |
389 need_userpass : 1, | |
390 use_cache : 1, /* Enable or disable the cache */ | |
391 cached : 1, /* Is this directory listing cached? */ | |
41 | 392 cancel : 1, /* If a signal is received, should |
393 we cancel this operation */ | |
1 | 394 stopable : 1; |
395 | |
396 off_t gotbytes; | |
397 | |
398 void *protocol_data; | |
399 | |
400 gftp_logging_func logging_function; | |
401 void *user_data; | |
402 | |
173 | 403 int (*init) ( gftp_request * request ); |
309 | 404 void (*copy_param_options) ( gftp_request * dest_request, |
405 gftp_request * src_request ); | |
168 | 406 ssize_t (*read_function) ( gftp_request * request, |
407 void *ptr, | |
408 size_t size, | |
409 int fd ); | |
410 ssize_t (*write_function) ( gftp_request * request, | |
411 const char *ptr, | |
412 size_t size, | |
413 int fd ); | |
1 | 414 void (*destroy) ( gftp_request * request ); |
415 int (*connect) ( gftp_request * request ); | |
168 | 416 int (*post_connect) ( gftp_request * request ); |
1 | 417 void (*disconnect) ( gftp_request * request ); |
58 | 418 off_t (*get_file) ( gftp_request * request, |
1 | 419 const char *filename, |
58 | 420 int fd, |
1 | 421 off_t startsize ); |
422 int (*put_file) ( gftp_request * request, | |
423 const char *filename, | |
58 | 424 int fd, |
1 | 425 off_t startsize, |
426 off_t totalsize ); | |
427 long (*transfer_file) ( gftp_request * fromreq, | |
428 const char *fromfile, | |
429 off_t fromsize, | |
430 gftp_request * toreq, | |
431 const char *tofile, | |
432 off_t tosize ); | |
58 | 433 ssize_t (*get_next_file_chunk) ( gftp_request * request, |
1 | 434 char *buf, |
435 size_t size ); | |
58 | 436 ssize_t (*put_next_file_chunk) ( gftp_request * request, |
1 | 437 char *buf, |
438 size_t size ); | |
439 int (*end_transfer) ( gftp_request * request ); | |
40 | 440 int (*abort_transfer) ( gftp_request * request ); |
520 | 441 int (*stat_filename) ( gftp_request * request, |
442 const char *filename, | |
443 mode_t * mode ); | |
1 | 444 int (*list_files) ( gftp_request * request ); |
445 int (*get_next_file) ( gftp_request * request, | |
446 gftp_file *fle, | |
58 | 447 int fd ); |
485 | 448 ssize_t (*get_next_dirlist_line) ( gftp_request * request, |
449 int fd, | |
450 char *buf, | |
451 size_t buflen ); | |
1 | 452 off_t (*get_file_size) ( gftp_request * request, |
453 const char *filename ); | |
454 int (*chdir) ( gftp_request * request, | |
455 const char *directory ); | |
456 int (*rmdir) ( gftp_request * request, | |
457 const char *directory ); | |
458 int (*rmfile) ( gftp_request * request, | |
459 const char *filename ); | |
460 int (*mkdir) ( gftp_request * request, | |
461 const char *directory ); | |
462 int (*rename) ( gftp_request * request, | |
463 const char *oldname, | |
464 const char *newname ); | |
465 int (*chmod) ( gftp_request * request, | |
466 const char *filename, | |
499 | 467 mode_t mode ); |
1 | 468 int (*set_file_time) ( gftp_request * request, |
469 const char *filename, | |
470 time_t datettime ); | |
471 int (*site) ( gftp_request * request, | |
478 | 472 int specify_site, |
1 | 473 const char *filename ); |
474 int (*parse_url) ( gftp_request * request, | |
475 const char *url ); | |
177 | 476 int (*set_config_options) ( gftp_request * request ); |
63 | 477 void (*swap_socks) ( gftp_request * dest, |
478 gftp_request * source ); | |
1 | 479 |
136 | 480 gftp_config_vars * local_options_vars; |
481 int num_local_options_vars; | |
482 GHashTable * local_options_hash; | |
168 | 483 #ifdef USE_SSL |
484 SSL * ssl; | |
485 #endif | |
184 | 486 |
487 #if GLIB_MAJOR_VERSION > 1 | |
488 GIConv iconv; | |
489 unsigned int iconv_initialized : 1; | |
490 #endif | |
1 | 491 }; |
492 | |
493 | |
136 | 494 typedef struct gftp_transfer_tag |
1 | 495 { |
496 gftp_request * fromreq, | |
497 * toreq; | |
498 | |
305 | 499 unsigned int cancel : 1, |
1 | 500 ready : 1, |
501 started : 1, | |
502 done : 1, | |
503 show : 1, | |
504 stalled : 1, | |
303 | 505 conn_error_no_timeout : 1, |
1 | 506 next_file : 1, |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
1
diff
changeset
|
507 skip_file : 1; |
1 | 508 |
509 struct timeval starttime, | |
510 lasttime; | |
511 | |
512 double kbs; | |
513 | |
514 GList * files, | |
515 * curfle, | |
516 * updfle; | |
517 | |
19 | 518 long numfiles, |
519 numdirs, | |
520 current_file_number, | |
521 current_file_retries; | |
1 | 522 |
523 off_t curtrans, /* Current transfered bytes for this file */ | |
377 | 524 tot_file_trans, /* Total number of bytes in the file being |
525 transferred */ | |
1 | 526 curresumed, /* Resumed bytes for this file */ |
527 trans_bytes, /* Amount of data transfered for entire | |
528 transfer */ | |
529 total_bytes, /* Grand total bytes for whole transfer */ | |
530 resumed_bytes; /* Grand total of resumed bytes for whole | |
531 transfer */ | |
532 | |
533 void * fromwdata, | |
534 * towdata; | |
535 | |
122 | 536 GStaticMutex statmutex, |
537 structmutex; | |
538 | |
125 | 539 void *user_data; |
1 | 540 void *clist; |
136 | 541 } gftp_transfer; |
1 | 542 |
543 | |
544 typedef struct gftp_log_tag | |
545 { | |
546 char *msg; | |
547 gftp_logging_level type; | |
548 } gftp_log; | |
549 | |
550 | |
551 typedef struct supported_gftp_protocols_tag | |
552 { | |
553 char *name; /* Description of protocol */ | |
173 | 554 int (*init) (gftp_request * request); /* Init function */ |
122 | 555 void (*register_options) (void); /* Protocol options */ |
1 | 556 char *url_prefix; /* URL Prefix */ |
542 | 557 unsigned int default_port; /* Default port */ |
341 | 558 unsigned int shown : 1, /* Whether this protocol is |
122 | 559 shown or not to the user in |
560 the protocol dropdown box */ | |
341 | 561 use_threads : 1; /* Whether or not operations in |
562 this protocol should use | |
563 threads */ | |
1 | 564 } supported_gftp_protocols; |
565 | |
566 | |
122 | 567 typedef struct gftp_bookmarks_tag gftp_bookmarks_var; |
1 | 568 |
569 struct gftp_bookmarks_tag | |
570 { | |
571 char *path; /* Path */ | |
572 char *hostname, /* Our actual internet hostname */ | |
573 *protocol, /* Protocol we will connect through */ | |
574 *remote_dir, /* Initial directory */ | |
575 *local_dir, /* Init local directory */ | |
576 *user, /* Username to log in as */ | |
577 *pass, /* Our password */ | |
578 *acct; /* Account */ | |
579 | |
580 unsigned int port, /* The port we will connect to */ | |
581 isfolder : 1, /* If this is set, then the children field can | |
582 be non-NULL */ | |
583 save_password : 1; /* Save this password */ | |
122 | 584 gftp_bookmarks_var *children, /* The children of this node. */ |
585 *prev, /* The parent of this node */ | |
586 *next; /* The next sibling of this node */ | |
1 | 587 gpointer cnode; |
588 | |
199 | 589 gftp_config_vars * local_options_vars; |
590 int num_local_options_vars; | |
591 GHashTable * local_options_hash; | |
1 | 592 }; |
593 | |
594 | |
595 typedef struct gftp_file_extensions_tag | |
596 { | |
597 char *ext, /* The file extension to register */ | |
598 *filename, /* The xpm file to display */ | |
599 *view_program, /* The program used to view this file */ | |
600 *ascii_binary; /* Is this a ASCII transfer or a BINARY transfer */ | |
516 | 601 unsigned int stlen; /* How long is the file extension. */ |
1 | 602 } gftp_file_extensions; |
603 | |
604 | |
605 typedef struct gftp_color_tag | |
606 { | |
607 gushort red, | |
608 green, | |
609 blue; | |
610 } gftp_color; | |
611 | |
612 | |
58 | 613 typedef struct gftp_getline_buffer_tag |
614 { | |
615 char *buffer, | |
616 *curpos; | |
617 size_t max_bufsize, | |
618 cur_bufsize; | |
179 | 619 unsigned int eof : 1; |
58 | 620 } gftp_getline_buffer; |
621 | |
126 | 622 |
122 | 623 /* Global config options. These are defined in options.h */ |
624 extern GList * gftp_file_transfers, * gftp_file_transfer_logs, | |
625 * gftp_options_list; | |
626 extern GHashTable * gftp_global_options_htable, * gftp_bookmarks_htable, | |
627 * gftp_config_list_htable; | |
628 extern gftp_config_vars gftp_global_config_vars[]; | |
1 | 629 extern supported_gftp_protocols gftp_protocols[]; |
122 | 630 extern gftp_bookmarks_var * gftp_bookmarks; |
631 extern char gftp_version[]; | |
632 extern FILE * gftp_logfd; | |
201 | 633 extern int gftp_configuration_changed; |
122 | 634 |
635 /* This is defined in config_file.c */ | |
636 | |
637 extern gftp_option_type_var gftp_option_types[]; | |
1 | 638 |
639 /* cache.c */ | |
182 | 640 void gftp_generate_cache_description ( gftp_request * request, |
641 char *description, | |
642 size_t len, | |
643 int ignore_directory ); | |
644 | |
58 | 645 int gftp_new_cache_entry ( gftp_request * request ); |
1 | 646 |
58 | 647 int gftp_find_cache_entry ( gftp_request * request ); |
1 | 648 |
649 void gftp_clear_cache_files ( void ); | |
650 | |
47 | 651 void gftp_delete_cache_entry ( gftp_request * request, |
182 | 652 char *descr, |
47 | 653 int ignore_directory ); |
1 | 654 |
655 /* config_file.c */ | |
198 | 656 int gftp_config_parse_args ( char *str, |
657 int numargs, | |
658 int lineno, | |
659 char **first, | |
660 ... ); | |
661 | |
122 | 662 void gftp_add_bookmark ( gftp_bookmarks_var * newentry ); |
663 | |
124 | 664 void gftp_read_config_file ( char *global_data_path ); |
1 | 665 |
122 | 666 void gftp_write_bookmarks_file ( void ); |
1 | 667 |
668 void gftp_write_config_file ( void ); | |
669 | |
122 | 670 GHashTable * build_bookmarks_hash_table ( gftp_bookmarks_var * entry ); |
671 | |
672 void print_bookmarks ( gftp_bookmarks_var * bookmarks ); | |
673 | |
374 | 674 void gftp_lookup_global_option ( const char * key, |
122 | 675 void *value ); |
26 | 676 |
122 | 677 void gftp_lookup_request_option ( gftp_request * request, |
374 | 678 const char * key, |
122 | 679 void *value ); |
1 | 680 |
229 | 681 void gftp_lookup_bookmark_option ( gftp_bookmarks_var * bm, |
374 | 682 const char * key, |
229 | 683 void *value ); |
684 | |
374 | 685 void gftp_set_global_option ( const char * key, |
227 | 686 const void *value ); |
122 | 687 |
688 void gftp_set_request_option ( gftp_request * request, | |
374 | 689 const char * key, |
229 | 690 const void *value ); |
691 | |
692 void gftp_set_bookmark_option ( gftp_bookmarks_var * bm, | |
374 | 693 const char * key, |
229 | 694 const void *value ); |
122 | 695 |
696 void gftp_register_config_vars ( gftp_config_vars *config_vars ); | |
1 | 697 |
201 | 698 void gftp_copy_local_options ( gftp_config_vars ** new_options_vars, |
699 GHashTable ** new_options_hash, | |
429 | 700 int *new_num_local_options_vars, |
201 | 701 gftp_config_vars * orig_options, |
702 int num_local_options_vars ); | |
703 | |
704 void gftp_config_free_options ( gftp_config_vars * options_vars, | |
705 GHashTable * options_hash, | |
706 int num_options_vars ); | |
707 | |
708 void gftp_bookmarks_destroy ( gftp_bookmarks_var * bookmarks ); | |
709 | |
218 | 710 void gftp_free_proxy_hosts ( GList * proxy_hosts ); |
711 | |
712 GList * gftp_copy_proxy_hosts ( GList * proxy_hosts ); | |
713 | |
1 | 714 /* misc.c */ |
14
83090328581e
* More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents:
1
diff
changeset
|
715 char *insert_commas ( off_t number, |
1 | 716 char *dest_str, |
717 size_t dest_len ); | |
718 | |
719 char *alltrim ( char *str ); | |
720 | |
721 char *expand_path ( const char *src ); | |
722 | |
723 void make_nonnull ( char **str ); | |
724 | |
374 | 725 int gftp_match_filespec ( const char *filename, |
726 const char *filespec ); | |
1 | 727 |
728 int gftp_parse_command_line ( int *argc, | |
729 char ***argv ); | |
730 | |
731 void gftp_usage ( void ); | |
732 | |
733 gint string_hash_compare ( gconstpointer path1, | |
734 gconstpointer path2 ); | |
735 | |
736 guint string_hash_function ( gconstpointer key ); | |
737 | |
738 void free_file_list ( GList * filelist ); | |
739 | |
740 void free_fdata ( gftp_file * fle ); | |
741 | |
742 gftp_file * copy_fdata ( gftp_file * fle ); | |
743 | |
744 int compare_request ( gftp_request * request1, | |
745 gftp_request * request2, | |
746 int compare_dirs ); | |
747 | |
129 | 748 gftp_transfer * gftp_tdata_new ( void ); |
749 | |
1 | 750 void free_tdata ( gftp_transfer * tdata ); |
751 | |
368 | 752 gftp_request * gftp_copy_request ( gftp_request * req ); |
1 | 753 |
16 | 754 GList * gftp_sort_filelist ( GList * filelist, |
755 int column, | |
756 int asds ); | |
757 | |
131 | 758 char * gftp_gen_ls_string ( gftp_file * fle, |
759 char *file_prefixstr, | |
760 char *file_suffixstr ); | |
761 | |
168 | 762 char * base64_encode ( char *str ); |
763 | |
199 | 764 void gftp_free_bookmark ( gftp_bookmarks_var * entry ); |
765 | |
201 | 766 void gftp_shutdown ( void ); |
199 | 767 |
207 | 768 GList * get_next_selection ( GList * selection, |
769 GList ** list, | |
770 int *curnum ); | |
771 | |
245 | 772 char * gftp_build_path ( const char *first_element, |
227 | 773 ... ); |
774 | |
290 | 775 void gftp_locale_init ( void ); |
776 | |
330 | 777 char * gftp_scramble_password ( const char *password ); |
778 | |
779 char * gftp_descramble_password ( const char *password ); | |
780 | |
378 | 781 int gftp_get_transfer_action ( gftp_request * request, |
782 gftp_file * fle ); | |
783 | |
483 | 784 char * gftp_get_share_dir ( void ); |
785 | |
402 | 786 /* mkstemps.c */ |
787 int mkstemps ( char *template, | |
788 int suffix_len ); | |
789 | |
1 | 790 /* protocols.c */ |
791 #define GFTP_FTP_NUM 0 | |
389 | 792 #define GFTP_FTPS_NUM 1 |
793 #define GFTP_HTTP_NUM 2 | |
794 #define GFTP_HTTPS_NUM 3 | |
795 #define GFTP_LOCAL_NUM 4 | |
796 #define GFTP_SSHV2_NUM 5 | |
797 #define GFTP_BOOKMARK_NUM 6 | |
122 | 798 |
1 | 799 #define GFTP_IS_CONNECTED(request) ((request) != NULL && \ |
169 | 800 ((request)->datafd > 0 || \ |
58 | 801 (request)->cached || \ |
802 (request)->always_connected)) | |
1 | 803 |
804 | |
173 | 805 int rfc959_init ( gftp_request * request ); |
1 | 806 |
122 | 807 void rfc959_register_module ( void ); |
808 | |
1 | 809 int rfc959_get_next_file ( gftp_request * request, |
810 gftp_file *fle, | |
58 | 811 int fd ); |
1 | 812 |
451 | 813 int rfc959_connect ( gftp_request * request ); |
814 | |
389 | 815 int ftps_init ( gftp_request * request ); |
816 | |
817 void ftps_register_module ( void ); | |
818 | |
173 | 819 int rfc2068_init ( gftp_request * request ); |
1 | 820 |
122 | 821 void rfc2068_register_module ( void ); |
822 | |
173 | 823 int https_init ( gftp_request * request ); |
168 | 824 |
825 void https_register_module ( void ); | |
826 | |
173 | 827 int local_init ( gftp_request * request ); |
1 | 828 |
122 | 829 void local_register_module ( void ); |
830 | |
173 | 831 int sshv2_init ( gftp_request * request ); |
1 | 832 |
122 | 833 void sshv2_register_module ( void ); |
834 | |
174 | 835 void ssl_register_module ( void ); |
836 | |
173 | 837 int bookmark_init ( gftp_request * request ); |
1 | 838 |
122 | 839 void bookmark_register_module ( void ); |
840 | |
1 | 841 gftp_request *gftp_request_new ( void ); |
842 | |
67 | 843 void gftp_request_destroy ( gftp_request * request, |
844 int free_request ); | |
1 | 845 |
309 | 846 void gftp_copy_param_options ( gftp_request * dest_request, |
847 gftp_request * src_request ); | |
848 | |
1 | 849 void gftp_file_destroy ( gftp_file *file ); |
850 | |
851 int gftp_connect ( gftp_request * request ); | |
852 | |
853 void gftp_disconnect ( gftp_request * request ); | |
854 | |
58 | 855 off_t gftp_get_file ( gftp_request * request, |
1 | 856 const char *filename, |
58 | 857 int fd, |
244 | 858 off_t startsize ); |
1 | 859 |
860 int gftp_put_file ( gftp_request * request, | |
861 const char *filename, | |
58 | 862 int fd, |
244 | 863 off_t startsize, |
864 off_t totalsize ); | |
1 | 865 |
261 | 866 off_t gftp_transfer_file ( gftp_request *fromreq, |
1 | 867 const char *fromfile, |
58 | 868 int fromfd, |
244 | 869 off_t fromsize, |
1 | 870 gftp_request *toreq, |
871 const char *tofile, | |
58 | 872 int tofd, |
244 | 873 off_t tosize ); |
1 | 874 |
58 | 875 ssize_t gftp_get_next_file_chunk ( gftp_request * request, |
1 | 876 char *buf, |
877 size_t size ); | |
878 | |
58 | 879 ssize_t gftp_put_next_file_chunk ( gftp_request * request, |
1 | 880 char *buf, |
881 size_t size ); | |
882 | |
883 int gftp_list_files ( gftp_request * request ); | |
884 | |
186 | 885 char * gftp_string_to_utf8 ( gftp_request * request, |
291 | 886 const char *str ); |
887 | |
888 char * gftp_string_from_utf8 ( gftp_request * request, | |
889 const char *str ); | |
186 | 890 |
87 | 891 int gftp_parse_bookmark ( gftp_request * request, |
243 | 892 gftp_request * local_request, |
275 | 893 const char * bookmark, |
894 int *refresh_local ); | |
87 | 895 |
1 | 896 int gftp_parse_url ( gftp_request * request, |
897 const char *url ); | |
898 | |
899 int gftp_get_next_file ( gftp_request * request, | |
377 | 900 const char *filespec, |
1 | 901 gftp_file *fle ); |
902 | |
903 int gftp_end_transfer ( gftp_request * request ); | |
904 | |
40 | 905 int gftp_abort_transfer ( gftp_request * request ); |
906 | |
520 | 907 int gftp_stat_filename ( gftp_request * request, |
908 const char *filename, | |
909 mode_t * mode ); | |
500 | 910 |
1 | 911 void gftp_set_hostname ( gftp_request * request, |
912 const char *hostname ); | |
913 | |
914 void gftp_set_username ( gftp_request * request, | |
915 const char *username ); | |
916 | |
917 void gftp_set_password ( gftp_request * request, | |
918 const char *password ); | |
919 | |
920 void gftp_set_account ( gftp_request * request, | |
921 const char *account ); | |
922 | |
923 int gftp_set_directory ( gftp_request * request, | |
924 const char *directory ); | |
925 | |
926 void gftp_set_port ( gftp_request * request, | |
927 unsigned int port ); | |
928 | |
929 int gftp_remove_directory ( gftp_request * request, | |
930 const char *directory ); | |
931 | |
932 int gftp_remove_file ( gftp_request * request, | |
933 const char *file ); | |
934 | |
935 int gftp_make_directory ( gftp_request * request, | |
936 const char *directory ); | |
937 | |
938 int gftp_rename_file ( gftp_request * request, | |
939 const char *oldname, | |
940 const char *newname ); | |
941 | |
942 int gftp_chmod ( gftp_request * request, | |
943 const char *file, | |
499 | 944 mode_t mode ); |
1 | 945 |
946 int gftp_set_file_time ( gftp_request * request, | |
947 const char *file, | |
948 time_t datetime ); | |
949 | |
950 char gftp_site_cmd ( gftp_request * request, | |
478 | 951 int specify_site, |
1 | 952 const char *command ); |
953 | |
58 | 954 off_t gftp_get_file_size ( gftp_request * request, |
1 | 955 const char *filename ); |
956 | |
957 void gftp_calc_kbs ( gftp_transfer * tdata, | |
958 ssize_t num_read ); | |
959 | |
102 | 960 time_t parse_time ( char *str, |
961 char **endpos ); | |
962 | |
91 | 963 int gftp_parse_ls ( gftp_request * request, |
964 const char *lsoutput, | |
485 | 965 gftp_file *fle, |
966 int fd ); | |
1 | 967 |
968 int gftp_get_all_subdirs ( gftp_transfer * transfer, | |
969 void (*update_func) | |
970 ( gftp_transfer * transfer )); | |
971 | |
972 int gftp_connect_server ( gftp_request * request, | |
122 | 973 char *service, |
974 char *proxy_hostname, | |
516 | 975 unsigned int proxy_port ); |
1 | 976 |
122 | 977 #if !defined (HAVE_GETADDRINFO) || !defined (HAVE_GAI_STRERROR) |
1 | 978 |
979 struct hostent *r_gethostbyname ( const char *name, | |
980 struct hostent *result_buf, | |
981 int *h_errnop ); | |
982 | |
56 | 983 #endif |
984 | |
1 | 985 struct servent *r_getservbyname ( const char *name, |
986 const char *proto, | |
987 struct servent *result_buf, | |
988 int *h_errnop ); | |
122 | 989 |
177 | 990 int gftp_set_config_options ( gftp_request * request ); |
1 | 991 |
992 void print_file_list ( GList * list ); | |
993 | |
201 | 994 void gftp_free_getline_buffer ( gftp_getline_buffer ** rbuf ); |
168 | 995 |
58 | 996 ssize_t gftp_get_line ( gftp_request * request, |
997 gftp_getline_buffer ** rbuf, | |
41 | 998 char * str, |
999 size_t len, | |
58 | 1000 int fd ); |
1001 | |
168 | 1002 ssize_t gftp_fd_read ( gftp_request * request, |
58 | 1003 void *ptr, |
1004 size_t size, | |
1005 int fd ); | |
41 | 1006 |
168 | 1007 ssize_t gftp_fd_write ( gftp_request * request, |
58 | 1008 const char *ptr, |
41 | 1009 size_t size, |
58 | 1010 int fd ); |
1011 | |
1012 ssize_t gftp_writefmt ( gftp_request * request, | |
1013 int fd, | |
1014 const char *fmt, | |
1015 ... ); | |
1016 | |
168 | 1017 int gftp_fd_set_sockblocking ( gftp_request * request, |
58 | 1018 int fd, |
1019 int non_blocking ); | |
41 | 1020 |
63 | 1021 void gftp_swap_socks ( gftp_request * dest, |
1022 gftp_request * source ); | |
1023 | |
122 | 1024 void gftp_calc_kbs ( gftp_transfer * tdata, |
1025 ssize_t num_read ); | |
1026 | |
125 | 1027 int gftp_get_transfer_status ( gftp_transfer * tdata, |
1028 ssize_t num_read ); | |
1029 | |
182 | 1030 int gftp_fd_open ( gftp_request * request, |
1031 const char *pathname, | |
1032 int flags, | |
1033 mode_t perms ); | |
1034 | |
422 | 1035 void gftp_setup_startup_directory ( gftp_request * request ); |
1036 | |
542 | 1037 unsigned int gftp_protocol_default_port ( gftp_request * request ); |
1038 | |
146 | 1039 /* pty.c */ |
210 | 1040 char * gftp_get_pty_impl ( void ); |
179 | 1041 |
458 | 1042 pid_t gftp_exec ( gftp_request * request, |
1043 int *fdm, | |
1044 int *ptymfd, | |
210 | 1045 char **args ); |
146 | 1046 |
499 | 1047 char *gftp_convert_attributes_from_mode_t ( mode_t mode ); |
1048 | |
1049 mode_t gftp_convert_attributes_to_mode_t ( char *attribs ); | |
1050 | |
1051 | |
168 | 1052 #ifdef USE_SSL |
1053 /* sslcommon.c */ | |
1054 int gftp_ssl_startup ( gftp_request * request ); | |
1055 | |
1056 int gftp_ssl_session_setup ( gftp_request * request ); | |
1057 | |
1058 void gftp_ssl_free ( gftp_request * request ); | |
1059 | |
1060 ssize_t gftp_ssl_read ( gftp_request * request, | |
1061 void *ptr, | |
1062 size_t size, | |
1063 int fd ); | |
1064 | |
1065 ssize_t gftp_ssl_write ( gftp_request * request, | |
1066 const char *ptr, | |
1067 size_t size, | |
1068 int fd ); | |
1069 #endif /* USE_SSL */ | |
1070 | |
460 | 1071 /* UI dependent functions that must be implemented */ |
1072 int gftpui_protocol_ask_yes_no ( gftp_request * request, | |
1073 char *title, | |
1074 char *question ); | |
1075 | |
484 | 1076 char *gftpui_protocol_ask_user_input ( gftp_request * request, |
1077 char *title, | |
1078 char *question, | |
1079 int shown ); | |
1080 | |
469 | 1081 void gftpui_protocol_update_timeout ( gftp_request * request ); |
1082 | |
1 | 1083 #endif |
1084 |