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